From 5042472cf5a1dc67cba7e152e329d7a9b0fc64cc Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Wed, 9 Nov 2016 12:07:02 +0300 Subject: [PATCH] javac ast indices: do not store duplicated references --- .../ast/JavacReferenceCollectorListener.java | 19 ++++++++++++++++--- .../jps/javac/ast/api/JavacRefSymbol.java | 15 --------------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacReferenceCollectorListener.java b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacReferenceCollectorListener.java index 8dda9b8170c3..eb8f1739356b 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacReferenceCollectorListener.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacReferenceCollectorListener.java @@ -15,7 +15,6 @@ */ package org.jetbrains.jps.javac.ast; -import com.intellij.util.ArrayUtil; import com.intellij.util.ReflectionUtil; import com.sun.source.tree.Tree; import com.sun.source.util.JavacTask; @@ -27,6 +26,7 @@ import com.sun.tools.javac.util.ClientCodeException; import com.sun.tools.javac.util.Name; import gnu.trove.THashMap; import gnu.trove.THashSet; +import gnu.trove.TObjectHashingStrategy; import org.jetbrains.jps.javac.ast.api.JavacFileReferencesRegistrar; import org.jetbrains.jps.javac.ast.api.JavacRefSymbol; @@ -35,7 +35,10 @@ import javax.lang.model.element.TypeElement; import javax.tools.*; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; final class JavacReferenceCollectorListener implements TaskListener { private final JavacFileReferencesRegistrar[] myFullASTListeners; @@ -220,7 +223,17 @@ final class JavacReferenceCollectorListener implements TaskListener { } private static Set createReferenceHolder() { - return new THashSet(); + return new THashSet(new TObjectHashingStrategy() { + @Override + public int computeHashCode(JavacRefSymbol ref) { + return ref.getSymbol().hashCode(); + } + + @Override + public boolean equals(JavacRefSymbol r1, JavacRefSymbol r2) { + return r1.getSymbol() == r2.getSymbol(); + } + }); } private static List createDefinitionHolder() { diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/api/JavacRefSymbol.java b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/api/JavacRefSymbol.java index 331aecbf2b29..68a0e5125c00 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/api/JavacRefSymbol.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/api/JavacRefSymbol.java @@ -35,19 +35,4 @@ public class JavacRefSymbol { public Tree.Kind getPlaceKind() { return myPlaceKind; } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - JavacRefSymbol symbol = (JavacRefSymbol)o; - - return mySymbol == symbol.mySymbol && myPlaceKind == symbol.myPlaceKind; - } - - @Override - public int hashCode() { - return 31 * mySymbol.hashCode() + myPlaceKind.hashCode(); - } }