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 dbd7ed4b73ee..d500daa21dc0 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java @@ -190,6 +190,7 @@ public class CompileContext extends UserDataHolderBase implements MessageHandler } void onChunkBuildComplete(@NotNull ModuleChunk chunk) throws IOException { + myDataManager.closeSourceToOutputStorages(chunk, isCompilingTests()); myDataManager.flush(true); myFsState.clearContextRoundData(); myFsState.clearContextChunk(); diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/resources/ResourcesBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/resources/ResourcesBuilder.java index e964a0284036..06e142335840 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/resources/ResourcesBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/resources/ResourcesBuilder.java @@ -38,8 +38,6 @@ public class ResourcesBuilder extends ModuleLevelBuilder { } try { final ResourcePatterns finalPatterns = patterns; - // todo: process all files in case of rebuild or wholeModuleDirty - // todo: otherwise avoid traverwing the whole module and use dirty file list taken from params context.processFilesToRecompile(chunk, new FileProcessor() { public boolean apply(final Module module, final File file, final String sourceRoot) throws IOException { if (finalPatterns.isResourceFile(file, sourceRoot)) { diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java index 2d8c0516570f..98dd999f2609 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java @@ -4,12 +4,15 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.Nullable; import org.jetbrains.ether.dependencyView.Mappings; +import org.jetbrains.jps.Module; +import org.jetbrains.jps.ModuleChunk; import org.jetbrains.jps.incremental.Paths; import org.jetbrains.jps.incremental.artifacts.ArtifactsBuildData; import java.io.File; import java.io.IOException; import java.util.HashMap; +import java.util.Locale; import java.util.Map; /** @@ -72,7 +75,7 @@ public class BuildDataManager { try { synchronized (mySourceToOutputLock) { try { - closeOutputToSourceStorages(); + closeSourceToOutputStorages(); } finally { FileUtil.delete(getSourceToOutputsRoot()); @@ -126,7 +129,7 @@ public class BuildDataManager { finally { try { synchronized (mySourceToOutputLock) { - closeOutputToSourceStorages(); + closeSourceToOutputStorages(); } } finally { @@ -154,12 +157,25 @@ public class BuildDataManager { } } - private void closeOutputToSourceStorages() throws IOException { + public void closeSourceToOutputStorages(ModuleChunk chunk, boolean testSources) throws IOException { + final Map storageMap = testSources? myTestSourceToOutputs : myProductionSourceToOutputs; + synchronized (mySourceToOutputLock) { + for (Module module : chunk.getModules()) { + final String moduleName = module.getName().toLowerCase(Locale.US); + final SourceToOutputMapping mapping = storageMap.remove(moduleName); + if (mapping != null) { + mapping.close(); + } + } + } + } + + private void closeSourceToOutputStorages() throws IOException { IOException ex = null; try { for (Map.Entry entry : myProductionSourceToOutputs.entrySet()) { try { - closeStorage(entry.getValue()); + entry.getValue().close(); } catch (IOException e) { if (e != null) { @@ -169,7 +185,7 @@ public class BuildDataManager { } for (Map.Entry entry : myTestSourceToOutputs.entrySet()) { try { - closeStorage(entry.getValue()); + entry.getValue().close(); } catch (IOException e) { if (e != null) {