diff --git a/modello-core/src/main/java/org/codehaus/modello/plugin/AbstractModelloGenerator.java b/modello-core/src/main/java/org/codehaus/modello/plugin/AbstractModelloGenerator.java index ae9898964..e1c88e712 100644 --- a/modello-core/src/main/java/org/codehaus/modello/plugin/AbstractModelloGenerator.java +++ b/modello-core/src/main/java/org/codehaus/modello/plugin/AbstractModelloGenerator.java @@ -23,6 +23,8 @@ */ import java.io.File; +import java.io.FilterWriter; +import java.io.IOException; import java.io.Writer; import java.nio.charset.Charset; import java.nio.file.Path; @@ -41,6 +43,7 @@ import org.codehaus.modello.model.Version; import org.codehaus.plexus.PlexusConstants; import org.codehaus.plexus.PlexusContainer; +import org.codehaus.plexus.util.io.CachingWriter; import org.sonatype.plexus.build.incremental.BuildContext; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.context.Context; @@ -291,15 +294,31 @@ protected BuildContext getBuildContext() return buildContext; } - protected Writer newWriter( Path path ) + protected Writer newWriter( Path path ) throws IOException { Charset charset = getEncoding() != null ? Charset.forName( getEncoding() ) : Charset.defaultCharset(); return newWriter( path, charset ); } - protected Writer newWriter( Path path, Charset charset ) + protected Writer newWriter( Path path, Charset charset ) throws IOException { - return new CachingWriter( getBuildContext(), path, charset ); + CachingWriter cachingWriter = new CachingWriter( path, charset ); + return new FilterWriter( cachingWriter ) + { + @Override + public void close() throws IOException + { + super.close(); + if ( cachingWriter.isModified() ) + { + getBuildContext().refresh( path.toFile() ); + } + else + { + getLogger().debug( "The contents of the file " + path + " matches, skipping writing file." ); + } + } + }; } } diff --git a/modello-core/src/main/java/org/codehaus/modello/plugin/CachingWriter.java b/modello-core/src/main/java/org/codehaus/modello/plugin/CachingWriter.java deleted file mode 100644 index 9b973e20e..000000000 --- a/modello-core/src/main/java/org/codehaus/modello/plugin/CachingWriter.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.codehaus.modello.plugin; - -import java.io.IOException; -import java.io.StringWriter; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Objects; - -import org.sonatype.plexus.build.incremental.BuildContext; - -public class CachingWriter extends StringWriter -{ - private final BuildContext buildContext; - private final Path path; - private final Charset charset; - - public CachingWriter( BuildContext buildContext, Path path, Charset charset ) - { - this.buildContext = buildContext; - this.path = Objects.requireNonNull( path ); - this.charset = Objects.requireNonNull( charset ); - } - - @Override - public void close() throws IOException - { - String str = getBuffer().toString(); - if ( Files.exists( path ) ) - { - String old = readString( path, charset ); - if ( str.equals( old ) ) - { - return; - } - } - writeString( path, str, charset ); - if ( buildContext != null ) - { - buildContext.refresh( path.toFile() ); - } - } - - private static String readString( Path path, Charset charset ) throws IOException - { - byte[] ba = Files.readAllBytes( path ); - return new String( ba, charset ); - } - - private static void writeString( Path path, String str, Charset charset ) throws IOException - { - byte[] ba = str.getBytes( charset ); - Files.write( path, ba ); - } -} diff --git a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/AbstractJavaModelloGenerator.java b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/AbstractJavaModelloGenerator.java index c325fc7d4..41a06b672 100644 --- a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/AbstractJavaModelloGenerator.java +++ b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/AbstractJavaModelloGenerator.java @@ -48,7 +48,6 @@ import org.codehaus.modello.model.ModelInterface; import org.codehaus.modello.model.ModelType; import org.codehaus.modello.plugin.AbstractModelloGenerator; -import org.codehaus.modello.plugin.CachingWriter; import org.codehaus.modello.plugin.java.javasource.JClass; import org.codehaus.modello.plugin.java.javasource.JComment; import org.codehaus.modello.plugin.java.javasource.JInterface; diff --git a/pom.xml b/pom.xml index fcba6369c..ad0b3708d 100644 --- a/pom.xml +++ b/pom.xml @@ -327,7 +327,7 @@ org.codehaus.plexus plexus-utils - 3.4.1 + 3.4.2 org.codehaus.plexus