From d8d89dcd394fb1f726800386d1bc9951a2a1929f Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Thu, 3 May 2012 19:05:51 +0200 Subject: [PATCH] clean source-to-outputs cache on chunk successfull compilation --- .../jetbrains/jps/incremental/CompileContext.java | 12 ++++++++++++ .../jetbrains/jps/incremental/IncProjectBuilder.java | 6 +++++- .../src/org/jetbrains/jps/incremental/Utils.java | 5 ++--- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java index d9f318dcd6a0..0aab018bb789 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java @@ -258,6 +258,18 @@ public class CompileContext extends UserDataHolderBase implements MessageHandler } } } + + // clean mapping only after everything else is processed + final Map> map = Utils.CHUNK_PER_MODULE_REMOVED_SOURCES_KEY.get(this); + if (map != null) { + for (Map.Entry> entry : map.entrySet()) { + final SourceToOutputMapping mapping = getDataManager().getSourceToOutputMap(entry.getKey(), isCompilingTests()); + for (String path : entry.getValue()) { + mapping.remove(path); + } + } + } + if (marked) { processMessage(UptoDateFilesSavedEvent.INSTANCE); } 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 68907e23c8cd..2aa8f32d244c 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java @@ -429,6 +429,7 @@ public class IncProjectBuilder { } finally { Utils.CHUNK_REMOVED_SOURCES_KEY.set(context, null); + Utils.CHUNK_PER_MODULE_REMOVED_SOURCES_KEY.set(context, null); if (doneSomething && GENERATE_CLASSPATH_INDEX) { final boolean forTests = context.isCompilingTests(); final Future future = SharedThreadPool.INSTANCE.submit(new Runnable() { @@ -485,6 +486,7 @@ public class IncProjectBuilder { try { // cleanup outputs final Set allChunkRemovedSources = new HashSet(); + final Map> perModuleRemovedSources = new HashMap>(); for (Module module : chunk.getModules()) { final Collection deletedPaths = myProjectDescriptor.fsState.getDeletedPaths(module.getName(), context.isCompilingTests()); @@ -492,6 +494,7 @@ public class IncProjectBuilder { continue; } allChunkRemovedSources.addAll(deletedPaths); + perModuleRemovedSources.put(module.getName(), deletedPaths); final SourceToOutputMapping sourceToOutputStorage = context.getDataManager().getSourceToOutputMap(module.getName(), context.isCompilingTests()); @@ -521,8 +524,8 @@ public class IncProjectBuilder { for (String output : outputs) { new File(output).delete(); } - sourceToOutputStorage.remove(deletedSource); } + //sourceToOutputStorage.remove(deletedSource); // check if deleted source was associated with a form final SourceToFormMapping sourceToFormMap = context.getDataManager().getSourceToFormMap(); @@ -542,6 +545,7 @@ public class IncProjectBuilder { allChunkRemovedSources.addAll(currentData); } Utils.CHUNK_REMOVED_SOURCES_KEY.set(context, allChunkRemovedSources); + Utils.CHUNK_PER_MODULE_REMOVED_SOURCES_KEY.set(context, perModuleRemovedSources); for (Module module : chunk.getModules()) { myProjectDescriptor.fsState.clearDeletedPaths(module.getName(), context.isCompilingTests()); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/Utils.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/Utils.java index 3e56b3cf7a5a..3557ffbf9688 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/Utils.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/Utils.java @@ -8,9 +8,7 @@ import org.jetbrains.jps.Project; import java.io.File; import java.net.URI; import java.net.URISyntaxException; -import java.util.HashSet; -import java.util.Locale; -import java.util.Set; +import java.util.*; /** * @author Eugene Zhuravlev @@ -18,6 +16,7 @@ import java.util.Set; */ public class Utils { public static final Key> CHUNK_REMOVED_SOURCES_KEY = Key.create("_chunk_removed_sources_"); + public static final Key>> CHUNK_PER_MODULE_REMOVED_SOURCES_KEY = Key.create("_chunk_per_maodule_removed_sources_"); private static volatile File ourSystemRoot = new File(System.getProperty("user.home", ".jps-server")); private Utils() {