From 12c0da3a0685aae96c0072166241a250d3d290ee Mon Sep 17 00:00:00 2001 From: Dmitry Boulytchev Date: Thu, 19 Jan 2012 05:21:33 +0400 Subject: [PATCH] Implemented transient/persistent delta control (jps/incremental). --- .../incremental/storage/BuildDataManager.java | 2 +- .../ether/dependencyView/Mappings.java | 87 +++++++++++-------- .../org/jetbrains/ether/ProjectWrapper.java | 4 +- 3 files changed, 52 insertions(+), 41 deletions(-) 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 1c1dac113df8..6d907aa0a0a9 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 @@ -42,7 +42,7 @@ public class BuildDataManager { final File mappingsRoot = getMappingsRoot(); myMappings = createStorage(mappingsRoot, new StorageFactory() { public Mappings create(File dataFile) throws Exception { - return new Mappings(mappingsRoot); + return new Mappings(mappingsRoot, false); } }); } diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java index f331cd4083b1..6fccc628e271 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java @@ -27,7 +27,8 @@ public class Mappings { private final static String SOURCE_TO_USAGES = "sourceToUsages.tab"; private final static String CLASS_TO_SOURCE = "classToSource.tab"; - private final boolean myIsTansient; + private final boolean myIsDelta; + private final boolean myDeltaIsTransient; private final File myRootDir; private DependencyContext myContext; @@ -69,56 +70,66 @@ public class Mappings { }; private Mappings(final Mappings base) throws IOException { - myIsTansient = true; - + myIsDelta = true; + myDeltaIsTransient = base.myDeltaIsTransient; myRootDir = new File(FileUtil.toSystemIndependentName(base.myRootDir.getAbsolutePath()) + File.separatorChar + "delta"); myContext = base.myContext; - myRootDir.mkdirs(); - - createImplementation(myRootDir, true); + createImplementation(); } - public Mappings(final File rootDir) throws IOException { - myIsTansient = false; + public Mappings(final File rootDir, final boolean transientDelta) throws IOException { + myIsDelta = false; + myDeltaIsTransient = transientDelta; myRootDir = rootDir; - createImplementation(rootDir, myIsTansient); + myContext = new DependencyContext(rootDir); + createImplementation(); } - private void createImplementation(final File rootDir, final boolean isTransient) throws IOException { - if (!isTransient) { - myContext = new DependencyContext(rootDir); + private void createImplementation() throws IOException { + if (!myIsDelta) { + myContext = new DependencyContext(myRootDir); } - myClassToSubclasses = - new PersistentMultiMaplet(DependencyContext.getTableFile(rootDir, CLASS_TO_SUBCLASSES), - DependencyContext.descriptorS, DependencyContext.descriptorS, - ourStringSetConstructor); + if (myIsDelta && myDeltaIsTransient) { + myClassToSubclasses = new TransientMultiMaplet(ourStringSetConstructor); + myClassToClassDependency = new TransientMultiMaplet(ourStringSetConstructor); + mySourceFileToClasses = new TransientMultiMaplet(ourClassSetConstructor); + mySourceFileToAnnotationUsages = new TransientMultiMaplet(ourUsageSetConstructor); + mySourceFileToUsages = new TransientMultiMaplet(ourUsageClusterSetConstructor); + myClassToSourceFile = new TransientMaplet(); + } + else { + myClassToSubclasses = + new PersistentMultiMaplet(DependencyContext.getTableFile(myRootDir, CLASS_TO_SUBCLASSES), + DependencyContext.descriptorS, DependencyContext.descriptorS, + ourStringSetConstructor); - myClassToClassDependency = - new PersistentMultiMaplet(DependencyContext.getTableFile(rootDir, CLASS_TO_CLASS), - DependencyContext.descriptorS, DependencyContext.descriptorS, - ourStringSetConstructor); + myClassToClassDependency = + new PersistentMultiMaplet(DependencyContext.getTableFile(myRootDir, CLASS_TO_CLASS), + DependencyContext.descriptorS, DependencyContext.descriptorS, + ourStringSetConstructor); - mySourceFileToClasses = - new PersistentMultiMaplet(DependencyContext.getTableFile(rootDir, SOURCE_TO_CLASS), - DependencyContext.descriptorS, ClassRepr.externalizer(myContext), - ourClassSetConstructor); + mySourceFileToClasses = + new PersistentMultiMaplet(DependencyContext.getTableFile(myRootDir, SOURCE_TO_CLASS), + DependencyContext.descriptorS, ClassRepr.externalizer(myContext), + ourClassSetConstructor); - mySourceFileToAnnotationUsages = - new PersistentMultiMaplet(DependencyContext.getTableFile(rootDir, SOURCE_TO_ANNOTATIONS), - DependencyContext.descriptorS, UsageRepr.externalizer(myContext), - ourUsageSetConstructor); + mySourceFileToAnnotationUsages = + new PersistentMultiMaplet(DependencyContext.getTableFile(myRootDir, SOURCE_TO_ANNOTATIONS), + DependencyContext.descriptorS, UsageRepr.externalizer(myContext), + ourUsageSetConstructor); - mySourceFileToUsages = - new PersistentMultiMaplet(DependencyContext.getTableFile(rootDir, SOURCE_TO_USAGES), - DependencyContext.descriptorS, - UsageRepr.Cluster.clusterExternalizer(myContext), - ourUsageClusterSetConstructor); + mySourceFileToUsages = + new PersistentMultiMaplet(DependencyContext.getTableFile(myRootDir, SOURCE_TO_USAGES), + DependencyContext.descriptorS, + UsageRepr.Cluster.clusterExternalizer(myContext), + ourUsageClusterSetConstructor); - myClassToSourceFile = - new PersistentMaplet(DependencyContext.getTableFile(rootDir, CLASS_TO_SOURCE), - DependencyContext.descriptorS, DependencyContext.descriptorS); + myClassToSourceFile = + new PersistentMaplet(DependencyContext.getTableFile(myRootDir, CLASS_TO_SOURCE), + DependencyContext.descriptorS, DependencyContext.descriptorS); + } } public Mappings createDelta() { @@ -166,7 +177,7 @@ public class Mappings { if (myRootDir != null) { close(); FileUtil.delete(myRootDir); - createImplementation(myRootDir, myIsTansient); + createImplementation(); } } @@ -1418,7 +1429,7 @@ public class Mappings { mySourceFileToUsages.close(); myClassToSourceFile.close(); - if (!myIsTansient) { + if (!myIsDelta) { // only close if you own the context myContext.close(); diff --git a/jps/src/org/jetbrains/ether/ProjectWrapper.java b/jps/src/org/jetbrains/ether/ProjectWrapper.java index 92ff04363b14..01811ee5a439 100644 --- a/jps/src/org/jetbrains/ether/ProjectWrapper.java +++ b/jps/src/org/jetbrains/ether/ProjectWrapper.java @@ -852,7 +852,7 @@ public class ProjectWrapper { myHomeDir + File.separator + myJPSDir + File.separator + myRoot.replace(File.separatorChar, myFileSeparatorReplacement); try { - dependencyMapping = new Mappings(getMapDir()); + dependencyMapping = new Mappings(getMapDir(), true); } catch (IOException e) { throw new RuntimeException(e); @@ -913,7 +913,7 @@ public class ProjectWrapper { RW.readMany(r, RW.myStringReader, affectedFiles); try { - dependencyMapping = new Mappings(getMapDir()); + dependencyMapping = new Mappings(getMapDir(), true); } catch (IOException e) { throw new RuntimeException(e);