diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/IncArtifactBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/IncArtifactBuilder.java index 5b09bd6dcfd8..013207ef70e8 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/IncArtifactBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/IncArtifactBuilder.java @@ -58,7 +58,7 @@ public class IncArtifactBuilder extends TargetBuilder holder, - @NotNull BuildOutputConsumer outputConsumer, @NotNull CompileContext context) throws ProjectBuildException { + @NotNull BuildOutputConsumer outputConsumer, @NotNull final CompileContext context) throws ProjectBuildException { JpsArtifact artifact = target.getArtifact(); String outputFilePath = artifact.getOutputFilePath(); if (StringUtil.isEmpty(outputFilePath)) { @@ -92,20 +92,11 @@ public class IncArtifactBuilder extends TargetBuilder outputPaths = srcOutMapping.getOutputs(sourcePath); if (outputPaths != null) { - for (String outputPath : outputPaths) { - filesToDelete.putValue(outputPath, sourcePath); - final List sources = outSrcMapping.getState(outputPath); - if (sources != null) { - for (ArtifactOutputToSourceMapping.SourcePathAndRootIndex source : sources) { - addFileToProcess(filesToProcess, source.getRootIndex(), source.getPath(), deletedFiles); - } - } - } + collectSourcesCorrespondingToOutputs(outputPaths, sourcePath, deletedFiles, outSrcMapping, filesToProcess, filesToDelete); } } final Set changedOutputPaths = new THashSet(FileUtil.PATH_HASHING_STRATEGY); - //noinspection SynchronizationOnLocalVariableOrMethodParameter holder.processDirtyFiles(new FileProcessor() { @Override public boolean apply(ArtifactBuildTarget target, File file, ArtifactRootDescriptor root) throws IOException { @@ -115,15 +106,7 @@ public class IncArtifactBuilder extends TargetBuilder outputPaths = srcOutMapping.getOutputs(sourcePath); if (outputPaths != null) { changedOutputPaths.addAll(outputPaths); - for (String outputPath : outputPaths) { - filesToDelete.putValue(outputPath, sourcePath); - final List sources = outSrcMapping.getState(outputPath); - if (sources != null) { - for (ArtifactOutputToSourceMapping.SourcePathAndRootIndex source : sources) { - addFileToProcess(filesToProcess, source.getRootIndex(), source.getPath(), deletedFiles); - } - } - } + collectSourcesCorrespondingToOutputs(outputPaths, sourcePath, deletedFiles, outSrcMapping, filesToProcess, filesToDelete); } return true; } @@ -181,6 +164,23 @@ public class IncArtifactBuilder extends TargetBuilder outputPaths, + String sourcePath, + Collection deletedFiles, + ArtifactOutputToSourceMapping outSrcMapping, + TIntObjectHashMap> filesToProcess, + MultiMap filesToDelete) throws IOException { + for (String outputPath : outputPaths) { + filesToDelete.putValue(outputPath, sourcePath); + final List sources = outSrcMapping.getState(outputPath); + if (sources != null) { + for (ArtifactOutputToSourceMapping.SourcePathAndRootIndex source : sources) { + addFileToProcess(filesToProcess, source.getRootIndex(), source.getPath(), deletedFiles); + } + } + } + } + private static void runArtifactTasks(CompileContext context, JpsArtifact artifact, ArtifactBuildTaskProvider.ArtifactBuildPhase phase) throws ProjectBuildException { for (ArtifactBuildTaskProvider provider : JpsServiceManager.getInstance().getExtensions(ArtifactBuildTaskProvider.class)) {