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