From ff2b75972f2ab2ea2c9a9dbeb39d65e35cd9875d Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Fri, 21 Oct 2016 17:37:37 +0300 Subject: [PATCH] javac ast indices: improve index update performance --- .../BackwardReferenceIndexWriter.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) 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 3e6ca58caacc..d2bb308b8301 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/BackwardReferenceIndexWriter.java +++ b/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/BackwardReferenceIndexWriter.java @@ -34,10 +34,7 @@ import org.jetbrains.jps.model.java.compiler.JavaCompilers; import java.io.File; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Set; +import java.util.*; import static com.sun.tools.javac.code.Flags.PRIVATE; @@ -213,7 +210,23 @@ public class BackwardReferenceIndexWriter { private void updateHierarchyIndicesIncrementally(final CompilerBackwardReferenceIndex.LightDefinition classId, LightRef.JavaLightClassRef[] superIds) { final Collection rawOldSupers = myIndex.getHierarchyMap().get(classId); - Set oldSuperClasses = rawOldSupers == null ? null : new THashSet(rawOldSupers); + Set oldSuperClasses; + if (rawOldSupers == null) { + oldSuperClasses = null; + } + else { + if (superIds.length == rawOldSupers.size()) { + boolean needUpdate = false; + for (LightRef.JavaLightClassRef id : superIds) { + if (!rawOldSupers.contains(id)) { + needUpdate = true; + break; + } + } + if (!needUpdate) return; + } + oldSuperClasses = new THashSet(rawOldSupers); + } for (LightRef.JavaLightClassRef superId: superIds) { if (oldSuperClasses == null || !oldSuperClasses.remove(superId)) { myIndex.getBackwardHierarchyMap().put(superId, classId);