diff --git a/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/BackwardReferenceIndexWriter.java b/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/BackwardReferenceIndexWriter.java index 564e2ee17ba1..bba1c105a7ec 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/BackwardReferenceIndexWriter.java +++ b/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/BackwardReferenceIndexWriter.java @@ -263,7 +263,7 @@ public class BackwardReferenceIndexWriter { if (oldSuperClasses != null && !oldSuperClasses.isEmpty()) { myIndex.getHierarchyMap().removeAll(classId, oldSuperClasses); for (LightRef anOldClass : oldSuperClasses) { - myIndex.getBackwardHierarchyMap().put(anOldClass, classId); + myIndex.getBackwardHierarchyMap().removeFrom(anOldClass, classId); } } } diff --git a/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate/afterSecondMakeIndex.txt b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate/afterSecondMakeIndex.txt index b0aa10f4597b..c5da730e5778 100644 --- a/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate/afterSecondMakeIndex.txt +++ b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate/afterSecondMakeIndex.txt @@ -1,5 +1,4 @@ Backward Hierarchy: -Foo -> FooImpl java.lang.Object -> Bar FooImpl Backward References: diff --git a/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/Bar.java b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/Bar.java new file mode 100644 index 000000000000..37b4129a65a5 --- /dev/null +++ b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/Bar.java @@ -0,0 +1,9 @@ +import java.util.Collections; + +abstract class Foo { + + void m() { + Collections.emptySet(); + } + +} \ No newline at end of file diff --git a/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/Foo.java b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/Foo.java new file mode 100644 index 000000000000..574d3e31f294 --- /dev/null +++ b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/Foo.java @@ -0,0 +1,10 @@ +import java.util.Collections; +import java.util.List; + +abstract class Foo implements List { + + void m() { + Collections.emptyList(); + } + +} \ No newline at end of file diff --git a/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/Foo_2.java b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/Foo_2.java new file mode 100644 index 000000000000..37b4129a65a5 --- /dev/null +++ b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/Foo_2.java @@ -0,0 +1,9 @@ +import java.util.Collections; + +abstract class Foo { + + void m() { + Collections.emptySet(); + } + +} \ No newline at end of file diff --git a/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/after1MakeIndex.txt b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/after1MakeIndex.txt new file mode 100644 index 000000000000..88bcc80abf04 --- /dev/null +++ b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/after1MakeIndex.txt @@ -0,0 +1,13 @@ +Backward Hierarchy: +java.lang.Object -> Foo + +Backward References: +Foo in Foo +Foo.(0) in Foo +Foo.m(0) in Foo +java.lang.Object.(0) in Foo +java.util.Collections in Foo +java.util.Collections.emptySet(0) in Foo + +Class Definitions: +Foo in Foo \ No newline at end of file diff --git a/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/after2MakeIndex.txt b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/after2MakeIndex.txt new file mode 100644 index 000000000000..89204bcd0cc3 --- /dev/null +++ b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/after2MakeIndex.txt @@ -0,0 +1,13 @@ +Backward Hierarchy: +java.lang.Object -> Foo + +Backward References: +Foo in Bar +Foo.(0) in Bar +Foo.m(0) in Bar +java.lang.Object.(0) in Bar +java.util.Collections in Bar +java.util.Collections.emptySet(0) in Bar + +Class Definitions: +Foo in Bar \ No newline at end of file diff --git a/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/initialIndex.txt b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/initialIndex.txt new file mode 100644 index 000000000000..f33fab5189e8 --- /dev/null +++ b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate2/initialIndex.txt @@ -0,0 +1,15 @@ +Backward Hierarchy: +java.lang.Object -> Foo +java.util.List -> Foo + +Backward References: +Foo in Foo +Foo.(0) in Foo +Foo.m(0) in Foo +java.lang.Object.(0) in Foo +java.util.Collections in Foo +java.util.Collections.emptyList(0) in Foo +java.util.List in Foo + +Class Definitions: +Foo in Foo \ No newline at end of file diff --git a/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate3/Bar.java b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate3/Bar.java new file mode 100644 index 000000000000..b8ec8acd55c0 --- /dev/null +++ b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate3/Bar.java @@ -0,0 +1,9 @@ +import java.util.Collections; + +class Bar { + + void m() { + Collections.emptySet(); + } + +} \ No newline at end of file diff --git a/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate3/Foo.java b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate3/Foo.java new file mode 100644 index 000000000000..8e97f294cb51 --- /dev/null +++ b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate3/Foo.java @@ -0,0 +1,17 @@ +import java.util.Collections; + +class Foo { + + void m() { + Collections.emptyList(); + } + +} + +class Bar { + + void m() { + Collections.emptySet(); + } + +} \ No newline at end of file diff --git a/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate3/Foo_2.java b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate3/Foo_2.java new file mode 100644 index 000000000000..44aa2d59a7aa --- /dev/null +++ b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate3/Foo_2.java @@ -0,0 +1,9 @@ +import java.util.Collections; + +class Foo { + + void m() { + Collections.emptyList(); + } + +} \ No newline at end of file diff --git a/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate3/after1MakeIndex.txt b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate3/after1MakeIndex.txt new file mode 100644 index 000000000000..9cdfb274efb7 --- /dev/null +++ b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate3/after1MakeIndex.txt @@ -0,0 +1,18 @@ +Backward Hierarchy: +java.lang.Object -> Bar Foo + +Backward References: +Bar in Bar +Bar.(0) in Bar +Bar.m(0) in Bar +Foo in Foo +Foo.(0) in Foo +Foo.m(0) in Foo +java.lang.Object.(0) in Bar Foo +java.util.Collections in Bar Foo +java.util.Collections.emptyList(0) in Foo +java.util.Collections.emptySet(0) in Bar + +Class Definitions: +Bar in Bar +Foo in Foo \ No newline at end of file diff --git a/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate3/initialIndex.txt b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate3/initialIndex.txt new file mode 100644 index 000000000000..4379394b3c66 --- /dev/null +++ b/jps/jps-builders/testData/referencesIndex/incrementalIndexUpdate3/initialIndex.txt @@ -0,0 +1,18 @@ +Backward Hierarchy: +java.lang.Object -> Bar Foo + +Backward References: +Bar in Foo +Bar.(0) in Foo +Bar.m(0) in Foo +Foo in Foo +Foo.(0) in Foo +Foo.m(0) in Foo +java.lang.Object.(0) in Foo +java.util.Collections in Foo +java.util.Collections.emptyList(0) in Foo +java.util.Collections.emptySet(0) in Foo + +Class Definitions: +Bar in Foo +Foo in Foo \ No newline at end of file diff --git a/jps/jps-builders/testSrc/org/jetbrains/references/ReferenceIndexTest.kt b/jps/jps-builders/testSrc/org/jetbrains/references/ReferenceIndexTest.kt index ad92bd979c2f..13d667071be9 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/references/ReferenceIndexTest.kt +++ b/jps/jps-builders/testSrc/org/jetbrains/references/ReferenceIndexTest.kt @@ -33,6 +33,25 @@ class ReferenceIndexTest : ReferenceIndexTestBase() { assertIndexEquals("afterSecondMakeIndex.txt") } + fun testIncrementalIndexUpdate2() { + assertIndexOnRebuild("Foo.java") + changeFileContent("Foo.java", "Foo_2.java") + buildAllModules() + assertIndexEquals("after1MakeIndex.txt") + deleteFile("m/Foo.java") + addFile("Bar.java") + buildAllModules() + assertIndexEquals("after2MakeIndex.txt") + } + + fun testIncrementalIndexUpdate3() { + assertIndexOnRebuild("Foo.java") + changeFileContent("Foo.java", "Foo_2.java") + addFile("Bar.java") + buildAllModules() + assertIndexEquals("after1MakeIndex.txt") + } + fun testFileCaseOnlyRename() { assertIndexOnRebuild("Bar.java") renameFile("Bar.java", "bar.java")