diff --git a/.idea/modules.xml b/.idea/modules.xml
index 73a3546daa9b..1f2298ba989d 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -87,10 +87,10 @@
-
-
+
+
diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/DependencyContext.java b/jps/model/src/org/jetbrains/ether/dependencyView/DependencyContext.java
index 384aee5bc72b..dfd3736fc358 100644
--- a/jps/model/src/org/jetbrains/ether/dependencyView/DependencyContext.java
+++ b/jps/model/src/org/jetbrains/ether/dependencyView/DependencyContext.java
@@ -88,7 +88,7 @@ class DependencyContext {
}
}
- private S(final int i) {
+ /*private*/ S(final int i) {
index = i;
}
diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/Maplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/Maplet.java
index 526ce9b3d33c..dfcfac21be89 100644
--- a/jps/model/src/org/jetbrains/ether/dependencyView/Maplet.java
+++ b/jps/model/src/org/jetbrains/ether/dependencyView/Maplet.java
@@ -34,5 +34,5 @@ interface Maplet {
void remove(final Object key);
void close();
Collection keyCollection();
- Set> entrySet();
+ Collection> entrySet();
}
diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java
index 6a10f0d36bef..5d2b45d9ee4e 100644
--- a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java
+++ b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java
@@ -27,6 +27,8 @@ public class Mappings {
private final static String mySourceToUsagesName = "sourceToUsages.tab";
private final static String myClassToSourceName = "classToSource.tab";
+ private final boolean myIsTansient;
+
private final File myRootDir;
private DependencyContext myContext;
private MultiMaplet myClassToSubclasses;
@@ -59,9 +61,15 @@ public class Mappings {
}
};
- private Mappings(final DependencyContext context) {
- myRootDir = null;
- myContext = context;
+ private Mappings(final Mappings base) throws IOException {
+ myIsTansient = true;
+
+ myRootDir = new File(FileUtil.toSystemIndependentName(base.myRootDir.getAbsolutePath()) + File.separatorChar + "delta");
+ myContext = base.myContext;
+
+ myRootDir.mkdirs();
+
+ //createImplementation(myRootDir, myIsTansient);
myClassToSubclasses = new TransientMultiMaplet(ourStringSetConstructor);
mySourceFileToClasses = new TransientMultiMaplet(ourClassSetConstructor);
@@ -72,12 +80,15 @@ public class Mappings {
}
public Mappings(final File rootDir) throws IOException {
+ myIsTansient = false;
myRootDir = rootDir;
- createPersistentImplementation(rootDir);
+ createImplementation(rootDir, myIsTansient);
}
- private void createPersistentImplementation(File rootDir) throws IOException {
- myContext = new DependencyContext(rootDir);
+ private void createImplementation(final File rootDir, final boolean isTransient) throws IOException {
+ if (! isTransient) {
+ myContext = new DependencyContext(rootDir);
+ }
myClassToSubclasses =
new PersistentMultiMaplet(DependencyContext.getTableFile(rootDir, myClassToSubclassesName),
@@ -110,7 +121,12 @@ public class Mappings {
}
public Mappings createDelta() {
- return new Mappings(myContext);
+ try {
+ return new Mappings(this);
+ }
+ catch (IOException e) {
+ throw new RuntimeException(e);
+ }
}
public void clearMemoryCaches() {
@@ -149,7 +165,7 @@ public class Mappings {
if (myRootDir != null) {
close();
FileUtil.delete(myRootDir);
- createPersistentImplementation(myRootDir);
+ createImplementation(myRootDir, false);
}
}
@@ -555,7 +571,8 @@ public class Mappings {
dependents.addAll(deps);
}
- affectedUsages.add(rootUsage instanceof UsageRepr.MetaMethodUsage ? method.createMetaUsage(myContext, p) : method.createUsage(myContext, p));
+ affectedUsages
+ .add(rootUsage instanceof UsageRepr.MetaMethodUsage ? method.createMetaUsage(myContext, p) : method.createUsage(myContext, p));
}
}
@@ -811,22 +828,6 @@ public class Mappings {
else {
final Collection propagated = u.propagateMethodAccess(m.name, it.name);
u.affectMethodUsages(m, propagated, m.createMetaUsage(myContext, it.name), affectedUsages, dependants);
-
- /*
- final UsageRepr.Usage usage = it.createUsage();
-
- affectedUsages.add(usage);
-
- if ((m.access & Opcodes.ACC_PUBLIC) > 0) {
-
- }
- else if (isPackageLocal(m.access)) {
- usageConstraints.put(usage, u.new PackageConstraint(it.getPackageName()));
- }
- else if ((m.access & Opcodes.ACC_PROTECTED) > 0) {
- usageConstraints.put(usage, u.new InheritanceConstraint(it.name));
- }
- */
}
}
@@ -838,7 +839,9 @@ public class Mappings {
final Collection lessSpecific = it.findMethods(u.lessSpecific(m));
for (MethodRepr mm : lessSpecific) {
- u.affectMethodUsages(mm, propagated, mm.createUsage(myContext, it.name), affectedUsages, dependants);
+ if (!mm.equals(m)) {
+ u.affectMethodUsages(mm, propagated, mm.createUsage(myContext, it.name), affectedUsages, dependants);
+ }
}
for (Pair p : affectedMethods) {
@@ -1295,6 +1298,10 @@ public class Mappings {
}
}
+ //final Set cl = (Set) delta.mySourceFileToClasses.get(new DependencyContext.S(352));
+
+ //System.out.println("There: " + (cl == null ? "wow..." : cl.size()));
+
myClassToSubclasses.putAll(delta.myClassToSubclasses);
mySourceFileToClasses.putAll(delta.mySourceFileToClasses);
mySourceFileToUsages.putAll(delta.mySourceFileToUsages);
@@ -1398,15 +1405,22 @@ public class Mappings {
}
public void close() {
- if (myRootDir != null) {
- // only close if you own the context
- myContext.close();
- }
myClassToSubclasses.close();
myClassToClassDependency.close();
mySourceFileToClasses.close();
mySourceFileToAnnotationUsages.close();
mySourceFileToUsages.close();
myClassToSourceFile.close();
+
+ if (!myIsTansient) {
+ // only close if you own the context
+ //final Set classes = (Set)mySourceFileToClasses.get(new DependencyContext.S(352));
+ //System.out.println("Here: " + (classes == null ? "wow..." : classes.size()));
+
+ myContext.close();
+ }
+ else {
+ FileUtil.delete(myRootDir);
+ }
}
}
diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/MethodRepr.java b/jps/model/src/org/jetbrains/ether/dependencyView/MethodRepr.java
index 917656431ee5..2aa6d5b33d7f 100644
--- a/jps/model/src/org/jetbrains/ether/dependencyView/MethodRepr.java
+++ b/jps/model/src/org/jetbrains/ether/dependencyView/MethodRepr.java
@@ -154,16 +154,6 @@ class MethodRepr extends ProtoMember {
};
}
- /*
- static Predicate equal(final MethodRepr me){
- return new Predicate() {
- @Override
- public boolean satisfy(MethodRepr that) {
- return me.equals(that);
- }
- };
- }
- */
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/MultiMaplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/MultiMaplet.java
index 30d9f44ec130..52353edf0be7 100644
--- a/jps/model/src/org/jetbrains/ether/dependencyView/MultiMaplet.java
+++ b/jps/model/src/org/jetbrains/ether/dependencyView/MultiMaplet.java
@@ -37,5 +37,5 @@ interface MultiMaplet {
void removeAll(final K key, final Collection value);
void close();
Collection keyCollection();
- Set>> entrySet();
+ Collection>> entrySet();
}
diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMaplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMaplet.java
index 08a72c11d913..f3b50bdddf7a 100644
--- a/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMaplet.java
+++ b/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMaplet.java
@@ -22,8 +22,8 @@ import com.intellij.util.io.PersistentHashMap;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
+import java.util.LinkedList;
import java.util.Map;
-import java.util.Set;
/**
* Created by IntelliJ IDEA.
@@ -33,11 +33,11 @@ import java.util.Set;
* To change this template use File | Settings | File Templates.
*/
public class PersistentMaplet implements Maplet {
- private final PersistentHashMap map;
+ private final PersistentHashMap myMap;
public PersistentMaplet(final File file, final KeyDescriptor k, final DataExternalizer v) {
try {
- map = new PersistentHashMap(file, k, v);
+ myMap = new PersistentHashMap(file, k, v);
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -47,7 +47,7 @@ public class PersistentMaplet implements Maplet {
@Override
public boolean containsKey(final Object key) {
try {
- return map.containsMapping((K)key);
+ return myMap.containsMapping((K)key);
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -57,7 +57,7 @@ public class PersistentMaplet implements Maplet {
@Override
public V get(final Object key) {
try {
- return map.get((K)key);
+ return myMap.get((K)key);
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -67,7 +67,7 @@ public class PersistentMaplet implements Maplet {
@Override
public void put(final K key, final V value) {
try {
- map.put(key, value);
+ myMap.put(key, value);
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -78,7 +78,7 @@ public class PersistentMaplet implements Maplet {
public void putAll(final Maplet m) {
try {
for (Map.Entry e : m.entrySet()) {
- map.put(e.getKey(), e.getValue());
+ myMap.put(e.getKey(), e.getValue());
}
}
catch (IOException e) {
@@ -89,7 +89,7 @@ public class PersistentMaplet implements Maplet {
@Override
public void remove(final Object key) {
try {
- map.remove((K)key);
+ myMap.remove((K)key);
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -99,7 +99,7 @@ public class PersistentMaplet implements Maplet {
@Override
public void close() {
try {
- map.close();
+ myMap.close();
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -109,7 +109,7 @@ public class PersistentMaplet implements Maplet {
@Override
public Collection keyCollection() {
try {
- return map.getAllKeysWithExistingMapping();
+ return myMap.getAllKeysWithExistingMapping();
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -117,8 +117,37 @@ public class PersistentMaplet implements Maplet {
}
@Override
- public Set> entrySet() {
- assert (false);
- return null;
+ public Collection> entrySet() {
+ final Collection> result = new LinkedList>();
+
+ try {
+ for (final K key : myMap.getAllKeysWithExistingMapping()) {
+ final V value = myMap.get(key);
+
+ final Map.Entry entry = new Map.Entry() {
+ @Override
+ public K getKey() {
+ return key;
+ }
+
+ @Override
+ public V getValue() {
+ return value;
+ }
+
+ @Override
+ public V setValue(V value) {
+ return null;
+ }
+ };
+
+ result.add(entry);
+ }
+
+ return result;
+ }
+ catch (IOException e) {
+ throw new RuntimeException(e);
+ }
}
}
diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMultiMaplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMultiMaplet.java
index 4c850f9450ca..292143cd5ad3 100644
--- a/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMultiMaplet.java
+++ b/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMultiMaplet.java
@@ -22,8 +22,8 @@ import com.intellij.util.io.PersistentHashMap;
import java.io.*;
import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedList;
import java.util.Map;
-import java.util.Set;
/**
* Created by IntelliJ IDEA.
@@ -41,9 +41,8 @@ class PersistentMultiMaplet implements MultiMaplet {
final DataExternalizer valueExternalizer,
final TransientMultiMaplet.CollectionConstructor collectionFactory) throws IOException {
myValueExternalizer = valueExternalizer;
- myMap = new PersistentHashMap>(
- file, keyExternalizer, new CollectionDataExternalizer(valueExternalizer, collectionFactory)
- );
+ myMap = new PersistentHashMap>(file, keyExternalizer,
+ new CollectionDataExternalizer(valueExternalizer, collectionFactory));
}
@@ -142,22 +141,16 @@ class PersistentMultiMaplet implements MultiMaplet {
@Override
public void putAll(MultiMaplet m) {
- try {
- for (Map.Entry> entry : m.entrySet()) {
- myMap.put(entry.getKey(), entry.getValue());
- }
- }
- catch (IOException e) {
- throw new RuntimeException(e);
+ for (Map.Entry> entry : m.entrySet()) {
+ put(entry.getKey(), entry.getValue());
}
}
-
public Collection keyCollection() {
try {
return myMap.getAllKeysWithExistingMapping();
}
- catch (IOException e){
+ catch (IOException e) {
throw new RuntimeException(e);
}
}
@@ -173,16 +166,46 @@ class PersistentMultiMaplet implements MultiMaplet {
}
@Override
- public Set>> entrySet() {
- assert(false);
- return null;
+ public Collection>> entrySet() {
+ final Collection>> result = new LinkedList>>();
+
+ try {
+ for (final K key : myMap.getAllKeysWithExistingMapping()) {
+ final Collection value = myMap.get(key);
+
+ final Map.Entry> entry = new Map.Entry>() {
+ @Override
+ public K getKey() {
+ return key;
+ }
+
+ @Override
+ public Collection getValue() {
+ return value;
+ }
+
+ @Override
+ public Collection setValue(Collection value) {
+ return null;
+ }
+ };
+
+ result.add(entry);
+ }
+
+ return result;
+ }
+ catch (IOException e) {
+ throw new RuntimeException(e);
+ }
}
private static class CollectionDataExternalizer implements DataExternalizer> {
private final DataExternalizer myElementExternalizer;
private final TransientMultiMaplet.CollectionConstructor myCollectionFactory;
- public CollectionDataExternalizer(DataExternalizer elementExternalizer, TransientMultiMaplet.CollectionConstructor collectionFactory) {
+ public CollectionDataExternalizer(DataExternalizer elementExternalizer,
+ TransientMultiMaplet.CollectionConstructor collectionFactory) {
myElementExternalizer = elementExternalizer;
myCollectionFactory = collectionFactory;
}
diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/TransientMaplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/TransientMaplet.java
index 25502118d0fc..bab32504f40b 100644
--- a/jps/model/src/org/jetbrains/ether/dependencyView/TransientMaplet.java
+++ b/jps/model/src/org/jetbrains/ether/dependencyView/TransientMaplet.java
@@ -69,7 +69,7 @@ public class TransientMaplet implements Maplet{
}
@Override
- public Set> entrySet() {
+ public Collection> entrySet() {
return map.entrySet();
}
}
diff --git a/jps/src/org/jetbrains/ether/ProjectWrapper.java b/jps/src/org/jetbrains/ether/ProjectWrapper.java
index d229f0254385..12aa503c5ea3 100644
--- a/jps/src/org/jetbrains/ether/ProjectWrapper.java
+++ b/jps/src/org/jetbrains/ether/ProjectWrapper.java
@@ -1169,6 +1169,7 @@ public class ProjectWrapper {
}
dependencyMapping.integrate(delta, files, removed);
+ delta.close();
if (!incremental) {
affectedFiles.addAll(sources);
@@ -1186,6 +1187,7 @@ public class ProjectWrapper {
return iterativeCompile(chunk, sources, null, null, flags);
}
else {
+ delta.close();
return BuildStatus.FAILURE;
}
}
@@ -1262,6 +1264,8 @@ public class ProjectWrapper {
}
catch (Exception e) {
e.printStackTrace();
+ delta.close();
+
return BuildStatus.FAILURE;
}
@@ -1280,6 +1284,7 @@ public class ProjectWrapper {
}
dependencyMapping.integrate(delta, files, removedSources);
+ delta.close();
for (Module m : chunkModules) {
Reporter.reportBuildSuccess(m, flags.tests());
diff --git a/jps/testData/incremental/generics/changeToCovariantMethodInBase3/.idea/misc.xml b/jps/testData/incremental/generics/changeToCovariantMethodInBase3/.idea/misc.xml
index f22d96b8c6a5..f756a685860b 100644
--- a/jps/testData/incremental/generics/changeToCovariantMethodInBase3/.idea/misc.xml
+++ b/jps/testData/incremental/generics/changeToCovariantMethodInBase3/.idea/misc.xml
@@ -1,5 +1,8 @@
+
+
+
@@ -21,6 +24,9 @@
+
+ http://www.w3.org/1999/xhtml
+
diff --git a/jps/testData/incremental/generics/changeToCovariantMethodInBase3/.idea/workspace.xml b/jps/testData/incremental/generics/changeToCovariantMethodInBase3/.idea/workspace.xml
index 9aa9e4b7a9e5..e4fbf68dece0 100644
--- a/jps/testData/incremental/generics/changeToCovariantMethodInBase3/.idea/workspace.xml
+++ b/jps/testData/incremental/generics/changeToCovariantMethodInBase3/.idea/workspace.xml
@@ -13,7 +13,6 @@
-
@@ -57,9 +56,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -86,8 +156,8 @@
-
+
@@ -96,6 +166,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -104,9 +202,13 @@
+
+
+
+
@@ -206,39 +308,64 @@
+ $USER_HOME$/.subversion_IDEA
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $USER_HOME$/.subversion_IDEA
false
+
1317044130792
1317044130792
-
-
+
+
-
-
+
+
-
-
+
+
+
+
-
+
-
-
+
-
+
+
+
+
+
@@ -263,6 +390,12 @@
+
+
+
+
+
+
@@ -281,5 +414,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+