From d261422680c7868d5d556c7eee653fcd5f4fdcc2 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Mon, 19 Jan 2015 15:02:19 +0100 Subject: [PATCH] deleting classpath index files for changed output roots --- .../jps/incremental/IncProjectBuilder.java | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java index 2f82e8df8b21..f8f576dec0fa 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java @@ -16,10 +16,7 @@ package org.jetbrains.jps.incremental; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.util.LowMemoryWatcher; -import com.intellij.openapi.util.SystemInfo; -import com.intellij.openapi.util.UserDataHolder; -import com.intellij.openapi.util.UserDataHolderBase; +import com.intellij.openapi.util.*; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.SmartList; @@ -84,7 +81,7 @@ import java.util.concurrent.atomic.AtomicReference; public class IncProjectBuilder { private static final Logger LOG = Logger.getInstance("#org.jetbrains.jps.incremental.IncProjectBuilder"); - private static final String CLASSPATH_INDEX_FINE_NAME = "classpath.index"; + private static final String CLASSPATH_INDEX_FILE_NAME = "classpath.index"; private static final boolean GENERATE_CLASSPATH_INDEX = Boolean.parseBoolean(System.getProperty(GlobalOptions.GENERATE_CLASSPATH_INDEX_OPTION, "false")); private static final boolean SYNC_DELETE = Boolean.parseBoolean(System.getProperty("jps.sync.delete", SystemInfo.isWindows ? "true" : "false")); private static final GlobalContextKey>> TARGET_WITH_CLEARED_OUTPUT = GlobalContextKey.create("_targets_with_cleared_output_"); @@ -334,7 +331,25 @@ public class IncProjectBuilder { BuildRunner.PARALLEL_BUILD_ENABLED); context.addBuildListener(new ChainedTargetsBuildListener(context)); + + //Deletes class loader classpath index files for changed output roots + context.addBuildListener(new BuildListener() { + @Override + public void filesGenerated(Collection> paths) { + final Set outputs = new THashSet(FileUtil.FILE_HASHING_STRATEGY); + for (Pair pair : paths) { + outputs.add(new File(pair.getFirst())); + } + for (File root : outputs) { + //noinspection ResultOfMethodCallIgnored + new File(root, CLASSPATH_INDEX_FILE_NAME).delete(); + } + } + @Override + public void filesDeleted(Collection paths) { + } + }); for (TargetBuilder builder : myBuilderRegistry.getTargetBuilders()) { builder.buildStarted(context); } @@ -965,7 +980,7 @@ public class IncProjectBuilder { File outputDir = ((ModuleBuildTarget)target).getOutputDir(); if (outputDir != null && outputDirs.add(outputDir)) { try { - BufferedWriter writer = new BufferedWriter(new FileWriter(new File(outputDir, CLASSPATH_INDEX_FINE_NAME))); + BufferedWriter writer = new BufferedWriter(new FileWriter(new File(outputDir, CLASSPATH_INDEX_FILE_NAME))); try { writeIndex(writer, outputDir, ""); }