[ 
https://issues.apache.org/jira/browse/MCOMPILER-333?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17729703#comment-17729703
 ] 

ASF GitHub Bot commented on MCOMPILER-333:
------------------------------------------

elharo commented on code in PR #23:
URL: 
https://github.com/apache/maven-shared-incremental/pull/23#discussion_r1219477223


##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelper.java:
##########
@@ -61,17 +69,28 @@
     private MavenProject mavenProject;
 
     /**
-     * Used for detecting changes between the Mojo execution.
+     * Used for detecting changes in the output directory between the Mojo 
execution.

Review Comment:
   something's off with "between the Mojo execution". possibly should be 
"between Mojo executions" or perhaps something else is meant?



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelper.java:
##########
@@ -323,25 +335,23 @@ public String[] beforeRebuildExecution( 
IncrementalBuildHelperRequest incrementa
     public void afterRebuildExecution( IncrementalBuildHelperRequest 
incrementalBuildHelperRequest )
         throws MojoExecutionException
     {
-        DirectoryScanner diffScanner = getDirectoryScanner();
-        // now scan the same directory again and create a diff
-        diffScanner.scan();
-        DirectoryScanResult scanResult = diffScanner.diffIncludedFiles( 
filesBeforeAction );
-
         File mojoConfigBase = getMojoStatusDirectory();
-        File mojoConfigFile = new File( mojoConfigBase, 
CREATED_FILES_LST_FILENAME );
 
-        try
-        {
-            FileUtils.fileWriteArray( mojoConfigFile, 
scanResult.getFilesAdded() );
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "Error while storing the mojo 
status", e );
-        }
+        writeChangedFiles(
+                getDirectoryScanner(),

Review Comment:
   no need to call a getter method in the same class, just use the 
directoryScanner field directly



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelper.java:
##########
@@ -358,6 +368,79 @@ public void afterRebuildExecution( 
IncrementalBuildHelperRequest incrementalBuil
 
     }
 
+    private void writeChangedFiles(
+            DirectoryScanner directoryScanner,
+            String[] filesBeforeAction,
+            File mojoConfigBase,
+            String createdFilesListFileName ) throws MojoExecutionException
+    {
+        if ( directoryScanner.getBasedir() == null )
+        {
+            return;
+        }
+
+        DirectoryScanResult outputDirectoryScanResult = scanDirectoryDiff(
+                directoryScanner, filesBeforeAction );
+
+        try
+        {
+            writeChangedFiles( outputDirectoryScanResult, mojoConfigBase, 
createdFilesListFileName );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Error while storing the mojo 
status", e );
+        }
+    }
+
+    private static void writeChangedFiles(
+            DirectoryScanResult outputDirectoryScanResult,
+            File mojoConfigBase,
+            String createdFilesListFileName )
+            throws IOException
+    {
+        File createdFiles = new File( mojoConfigBase, createdFilesListFileName 
);
+        String[] filesAdded = outputDirectoryScanResult.getFilesAdded();
+        String filesAddedAsString = Stream.of( filesAdded ).collect( 
Collectors.joining( "\n" ) );
+
+        Files.write(
+                createdFiles.toPath(),
+                filesAddedAsString.getBytes( StandardCharsets.UTF_8 ),
+                StandardOpenOption.CREATE );
+    }
+
+    private static DirectoryScanResult scanDirectoryDiff(
+            DirectoryScanner directoryScanner,
+            String[] filesBeforeAction )
+    {
+        // now scan the same directory again and create a diff
+        directoryScanner.scan();
+        DirectoryScanResult outputScanResult =
+                directoryScanner.diffIncludedFiles( filesBeforeAction );
+        return outputScanResult;
+    }
+
+    private static List<String> deleteFiles( File fileNameIndex, File parent ) 
throws IOException
+    {
+        List<String> oldFiles = Files.readAllLines( fileNameIndex.toPath() );
+        for ( String oldFileName : oldFiles )
+        {
+            File oldFile = new File( parent, oldFileName );
+            oldFile.delete();

Review Comment:
   what if this method returns false? i.e. delete failed. Do we care?



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelperRequest.java:
##########
@@ -73,4 +75,20 @@ public IncrementalBuildHelperRequest outputDirectory( File 
outputDirectory )
         this.outputDirectory = outputDirectory;
         return this;
     }
+
+    public File getGeneratedSourcesDirectory()
+    {
+        return generatedSourcesDirectory;
+    }
+
+    public void setGeneratedSourcesDirectory( File generatedSourcesDirectory )

Review Comment:
   needs Javadoc



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelper.java:
##########
@@ -61,17 +69,28 @@
     private MavenProject mavenProject;
 
     /**
-     * Used for detecting changes between the Mojo execution.
+     * Used for detecting changes in the output directory between the Mojo 
execution.
      * @see #getDirectoryScanner();
      */
-    private DirectoryScanner directoryScanner;
+    private DirectoryScanner directoryScanner = new DirectoryScanner();
+
+    /**
+     * Used for detecting changes in the generated sources directory between 
the Mojo execution.

Review Comment:
   ditto
   
   



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelper.java:
##########
@@ -358,6 +368,79 @@ public void afterRebuildExecution( 
IncrementalBuildHelperRequest incrementalBuil
 
     }
 
+    private void writeChangedFiles(
+            DirectoryScanner directoryScanner,

Review Comment:
   
   
   This is a field in the same class so no need to pass it as an argument
   



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelper.java:
##########
@@ -358,6 +368,79 @@ public void afterRebuildExecution( 
IncrementalBuildHelperRequest incrementalBuil
 
     }
 
+    private void writeChangedFiles(
+            DirectoryScanner directoryScanner,
+            String[] filesBeforeAction,
+            File mojoConfigBase,
+            String createdFilesListFileName ) throws MojoExecutionException

Review Comment:
   This is a constant in the same class so no need to pass it as an argument



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelper.java:
##########
@@ -358,6 +368,79 @@ public void afterRebuildExecution( 
IncrementalBuildHelperRequest incrementalBuil
 
     }
 
+    private void writeChangedFiles(
+            DirectoryScanner directoryScanner,
+            String[] filesBeforeAction,
+            File mojoConfigBase,
+            String createdFilesListFileName ) throws MojoExecutionException
+    {
+        if ( directoryScanner.getBasedir() == null )
+        {
+            return;
+        }
+
+        DirectoryScanResult outputDirectoryScanResult = scanDirectoryDiff(
+                directoryScanner, filesBeforeAction );
+
+        try
+        {
+            writeChangedFiles( outputDirectoryScanResult, mojoConfigBase, 
createdFilesListFileName );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Error while storing the mojo 
status", e );
+        }
+    }
+
+    private static void writeChangedFiles(
+            DirectoryScanResult outputDirectoryScanResult,
+            File mojoConfigBase,
+            String createdFilesListFileName )
+            throws IOException
+    {
+        File createdFiles = new File( mojoConfigBase, createdFilesListFileName 
);
+        String[] filesAdded = outputDirectoryScanResult.getFilesAdded();
+        String filesAddedAsString = Stream.of( filesAdded ).collect( 
Collectors.joining( "\n" ) );
+
+        Files.write(
+                createdFiles.toPath(),
+                filesAddedAsString.getBytes( StandardCharsets.UTF_8 ),
+                StandardOpenOption.CREATE );
+    }
+
+    private static DirectoryScanResult scanDirectoryDiff(
+            DirectoryScanner directoryScanner,

Review Comment:
   make non-static and use the directoryScanner field



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelper.java:
##########
@@ -358,6 +368,79 @@ public void afterRebuildExecution( 
IncrementalBuildHelperRequest incrementalBuil
 
     }
 
+    private void writeChangedFiles(
+            DirectoryScanner directoryScanner,
+            String[] filesBeforeAction,
+            File mojoConfigBase,
+            String createdFilesListFileName ) throws MojoExecutionException
+    {
+        if ( directoryScanner.getBasedir() == null )
+        {
+            return;
+        }
+
+        DirectoryScanResult outputDirectoryScanResult = scanDirectoryDiff(
+                directoryScanner, filesBeforeAction );
+
+        try
+        {
+            writeChangedFiles( outputDirectoryScanResult, mojoConfigBase, 
createdFilesListFileName );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Error while storing the mojo 
status", e );
+        }
+    }
+
+    private static void writeChangedFiles(
+            DirectoryScanResult outputDirectoryScanResult,
+            File mojoConfigBase,
+            String createdFilesListFileName )
+            throws IOException
+    {
+        File createdFiles = new File( mojoConfigBase, createdFilesListFileName 
);
+        String[] filesAdded = outputDirectoryScanResult.getFilesAdded();
+        String filesAddedAsString = Stream.of( filesAdded ).collect( 
Collectors.joining( "\n" ) );

Review Comment:
   Just use String.join or StringJoiner here



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelper.java:
##########
@@ -358,6 +368,79 @@ public void afterRebuildExecution( 
IncrementalBuildHelperRequest incrementalBuil
 
     }
 
+    private void writeChangedFiles(
+            DirectoryScanner directoryScanner,
+            String[] filesBeforeAction,
+            File mojoConfigBase,
+            String createdFilesListFileName ) throws MojoExecutionException
+    {
+        if ( directoryScanner.getBasedir() == null )
+        {
+            return;
+        }
+
+        DirectoryScanResult outputDirectoryScanResult = scanDirectoryDiff(
+                directoryScanner, filesBeforeAction );
+
+        try
+        {
+            writeChangedFiles( outputDirectoryScanResult, mojoConfigBase, 
createdFilesListFileName );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Error while storing the mojo 
status", e );
+        }
+    }
+
+    private static void writeChangedFiles(
+            DirectoryScanResult outputDirectoryScanResult,
+            File mojoConfigBase,
+            String createdFilesListFileName )
+            throws IOException
+    {
+        File createdFiles = new File( mojoConfigBase, createdFilesListFileName 
);
+        String[] filesAdded = outputDirectoryScanResult.getFilesAdded();
+        String filesAddedAsString = Stream.of( filesAdded ).collect( 
Collectors.joining( "\n" ) );
+
+        Files.write(
+                createdFiles.toPath(),
+                filesAddedAsString.getBytes( StandardCharsets.UTF_8 ),
+                StandardOpenOption.CREATE );
+    }
+
+    private static DirectoryScanResult scanDirectoryDiff(
+            DirectoryScanner directoryScanner,
+            String[] filesBeforeAction )
+    {
+        // now scan the same directory again and create a diff
+        directoryScanner.scan();
+        DirectoryScanResult outputScanResult =
+                directoryScanner.diffIncludedFiles( filesBeforeAction );
+        return outputScanResult;
+    }
+
+    private static List<String> deleteFiles( File fileNameIndex, File parent ) 
throws IOException
+    {
+        List<String> oldFiles = Files.readAllLines( fileNameIndex.toPath() );
+        for ( String oldFileName : oldFiles )
+        {
+            File oldFile = new File( parent, oldFileName );
+            oldFile.delete();
+        }
+        return oldFiles;
+    }
+
+    private String[] scanDirectory( DirectoryScanner directoryScanner, File 
directory )

Review Comment:
   make non-static and use the directoryScanner field



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelper.java:
##########
@@ -358,6 +368,79 @@ public void afterRebuildExecution( 
IncrementalBuildHelperRequest incrementalBuil
 
     }
 
+    private void writeChangedFiles(
+            DirectoryScanner directoryScanner,
+            String[] filesBeforeAction,
+            File mojoConfigBase,
+            String createdFilesListFileName ) throws MojoExecutionException
+    {
+        if ( directoryScanner.getBasedir() == null )
+        {
+            return;
+        }
+
+        DirectoryScanResult outputDirectoryScanResult = scanDirectoryDiff(
+                directoryScanner, filesBeforeAction );
+
+        try
+        {
+            writeChangedFiles( outputDirectoryScanResult, mojoConfigBase, 
createdFilesListFileName );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Error while storing the mojo 
status", e );
+        }
+    }
+
+    private static void writeChangedFiles(
+            DirectoryScanResult outputDirectoryScanResult,
+            File mojoConfigBase,
+            String createdFilesListFileName )

Review Comment:
   
   
   This is a constant in the same class so no need to pass it as an argument
   



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelperRequest.java:
##########
@@ -73,4 +75,20 @@ public IncrementalBuildHelperRequest outputDirectory( File 
outputDirectory )
         this.outputDirectory = outputDirectory;
         return this;
     }
+
+    public File getGeneratedSourcesDirectory()
+    {
+        return generatedSourcesDirectory;
+    }
+
+    public void setGeneratedSourcesDirectory( File generatedSourcesDirectory )
+    {
+        this.generatedSourcesDirectory = generatedSourcesDirectory;

Review Comment:
   Is it worth checking here that the file exists and is a directory? Throw an 
IllegalArgumentException if not.



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelperRequest.java:
##########
@@ -73,4 +75,20 @@ public IncrementalBuildHelperRequest outputDirectory( File 
outputDirectory )
         this.outputDirectory = outputDirectory;
         return this;
     }
+
+    public File getGeneratedSourcesDirectory()
+    {
+        return generatedSourcesDirectory;
+    }
+
+    public void setGeneratedSourcesDirectory( File generatedSourcesDirectory )
+    {
+        this.generatedSourcesDirectory = generatedSourcesDirectory;
+    }
+
+    public IncrementalBuildHelperRequest generatedSourcesDirectory( File 
generatedSourcesDirectory )
+    {
+        this.generatedSourcesDirectory = generatedSourcesDirectory;

Review Comment:
   Is it worth checking here that the file exists and is a directory?



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelperRequest.java:
##########
@@ -73,4 +75,20 @@ public IncrementalBuildHelperRequest outputDirectory( File 
outputDirectory )
         this.outputDirectory = outputDirectory;
         return this;
     }
+
+    public File getGeneratedSourcesDirectory()

Review Comment:
   needs Javadoc that clearly explains what this directory is. 



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelper.java:
##########
@@ -61,17 +69,28 @@
     private MavenProject mavenProject;
 
     /**
-     * Used for detecting changes between the Mojo execution.
+     * Used for detecting changes in the output directory between the Mojo 
execution.
      * @see #getDirectoryScanner();
      */
-    private DirectoryScanner directoryScanner;
+    private DirectoryScanner directoryScanner = new DirectoryScanner();

Review Comment:
   This class is deprecated. Consider using use java.nio.file.DirectoryStream 
or java.nio.Files.walkFileTree() and related classes instead. Those should 
definitely be safer in a multi-threaded environment.



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelper.java:
##########
@@ -358,6 +368,79 @@ public void afterRebuildExecution( 
IncrementalBuildHelperRequest incrementalBuil
 
     }
 
+    private void writeChangedFiles(
+            DirectoryScanner directoryScanner,
+            String[] filesBeforeAction,
+            File mojoConfigBase,
+            String createdFilesListFileName ) throws MojoExecutionException
+    {
+        if ( directoryScanner.getBasedir() == null )
+        {
+            return;
+        }
+
+        DirectoryScanResult outputDirectoryScanResult = scanDirectoryDiff(
+                directoryScanner, filesBeforeAction );
+
+        try
+        {
+            writeChangedFiles( outputDirectoryScanResult, mojoConfigBase, 
createdFilesListFileName );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Error while storing the mojo 
status", e );
+        }
+    }
+
+    private static void writeChangedFiles(
+            DirectoryScanResult outputDirectoryScanResult,
+            File mojoConfigBase,
+            String createdFilesListFileName )
+            throws IOException
+    {
+        File createdFiles = new File( mojoConfigBase, createdFilesListFileName 
);
+        String[] filesAdded = outputDirectoryScanResult.getFilesAdded();
+        String filesAddedAsString = Stream.of( filesAdded ).collect( 
Collectors.joining( "\n" ) );
+
+        Files.write(
+                createdFiles.toPath(),
+                filesAddedAsString.getBytes( StandardCharsets.UTF_8 ),
+                StandardOpenOption.CREATE );
+    }
+
+    private static DirectoryScanResult scanDirectoryDiff(
+            DirectoryScanner directoryScanner,
+            String[] filesBeforeAction )
+    {
+        // now scan the same directory again and create a diff
+        directoryScanner.scan();
+        DirectoryScanResult outputScanResult =
+                directoryScanner.diffIncludedFiles( filesBeforeAction );
+        return outputScanResult;
+    }
+
+    private static List<String> deleteFiles( File fileNameIndex, File parent ) 
throws IOException
+    {
+        List<String> oldFiles = Files.readAllLines( fileNameIndex.toPath() );
+        for ( String oldFileName : oldFiles )
+        {
+            File oldFile = new File( parent, oldFileName );
+            oldFile.delete();
+        }
+        return oldFiles;
+    }
+
+    private String[] scanDirectory( DirectoryScanner directoryScanner, File 
directory )
+    {
+        directoryScanner.setBasedir( directory );

Review Comment:
   This is a little worrisome. I didn't realize directoryScanner was mutable. 
This might suggest not using a directoryScanner field at all and just creating 
one when we need it.



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelperRequest.java:
##########
@@ -73,4 +75,20 @@ public IncrementalBuildHelperRequest outputDirectory( File 
outputDirectory )
         this.outputDirectory = outputDirectory;
         return this;
     }
+
+    public File getGeneratedSourcesDirectory()
+    {
+        return generatedSourcesDirectory;
+    }
+
+    public void setGeneratedSourcesDirectory( File generatedSourcesDirectory )
+    {
+        this.generatedSourcesDirectory = generatedSourcesDirectory;
+    }
+
+    public IncrementalBuildHelperRequest generatedSourcesDirectory( File 
generatedSourcesDirectory )

Review Comment:
   needs Javadoc that clearly explains what this directory is. 



##########
src/main/java/org/apache/maven/shared/incremental/IncrementalBuildHelper.java:
##########
@@ -66,12 +71,24 @@
      */
     private DirectoryScanner directoryScanner;
 
+    /**
+     * Used for detecting changes between the Mojo execution.
+     * @see #getGeneratedSourcesDirectoryScanner() ;
+     */
+    private DirectoryScanner generatedSourcesDirectoryScanner;
+
     /**
      * Once the {@link 
#beforeRebuildExecution(org.apache.maven.shared.incremental.IncrementalBuildHelperRequest)}
 got
      * called, this will contain the list of files in the build directory.
      */
     private String[] filesBeforeAction = new String[0];
 
+    /**
+     * Once the {@link 
#beforeRebuildExecution(org.apache.maven.shared.incremental.IncrementalBuildHelperRequest)}
 got

Review Comment:
   ping





> Incremental compilation causes "mvn clean compile compile" to fail
> ------------------------------------------------------------------
>
>                 Key: MCOMPILER-333
>                 URL: https://issues.apache.org/jira/browse/MCOMPILER-333
>             Project: Maven Compiler Plugin
>          Issue Type: Bug
>    Affects Versions: 3.7.0
>            Reporter: Anthony Vanelverdinghe
>            Priority: Major
>
> With <useIncrementalCompilation>true</useIncrementalCompilation>, my build 
> fails if I do "mvn clean compile compile". From theĀ 
> [comment|https://issues.apache.org/jira/browse/MCOMPILER-205?focusedCommentId=16390065&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-16390065]
>  in MCOMPILER-205, I understand that incremental compilation deletes the 
> "classes" directory. But it seems that it doesn't delete the 
> "generated-sources" directory.
> When I do "mvn clean compile" and "mvn compile", the second build fails. 
> However, if I delete the "generated-sources" directory between the 2 builds, 
> they both succeed.
> So I guess the bug here is that incremental compilation doesn't delete the 
> "generated-sources" directory.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to