From ea76cc57ba5046e70665cdfb39ed1d406cbbf267 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 15 Dec 2017 16:13:44 +0700 Subject: [PATCH] ExpressionTypeMemoryState: better hashcode; GuessManagerImpl: place -> onlyForPlace Review ID: IDEA-CR-27869 --- .../guess/impl/ExpressionTypeMemoryState.java | 9 +++++++++ .../codeInsight/guess/impl/GuessManagerImpl.java | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/guess/impl/ExpressionTypeMemoryState.java b/java/java-analysis-impl/src/com/intellij/codeInsight/guess/impl/ExpressionTypeMemoryState.java index a187dd75533c..8412e0095120 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/guess/impl/ExpressionTypeMemoryState.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/guess/impl/ExpressionTypeMemoryState.java @@ -22,6 +22,8 @@ import com.intellij.codeInspection.dataFlow.value.DfaValue; import com.intellij.codeInspection.dataFlow.value.DfaValueFactory; import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.PsiExpression; +import com.intellij.psi.PsiMethodCallExpression; +import com.intellij.psi.PsiReferenceExpression; import com.intellij.psi.PsiType; import com.intellij.util.containers.MultiMap; import gnu.trove.TObjectHashingStrategy; @@ -29,6 +31,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Collection; import java.util.Map; +import java.util.Objects; /** * @author peter @@ -38,6 +41,12 @@ public class ExpressionTypeMemoryState extends DfaMemoryStateImpl { public static final TObjectHashingStrategy EXPRESSION_HASHING_STRATEGY = new TObjectHashingStrategy() { @Override public int computeHashCode(PsiExpression object) { + if (object instanceof PsiReferenceExpression) { + return Objects.hashCode(((PsiReferenceExpression)object).getReferenceName()) * 31 + 1; + } + else if (object instanceof PsiMethodCallExpression) { + return Objects.hashCode(((PsiMethodCallExpression)object).getMethodExpression().getReferenceName()) * 31 + 2; + } return object.getNode().getElementType().hashCode(); } diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/guess/impl/GuessManagerImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/guess/impl/GuessManagerImpl.java index 1350792530ce..90a63cb380f0 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/guess/impl/GuessManagerImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/guess/impl/GuessManagerImpl.java @@ -136,7 +136,7 @@ public class GuessManagerImpl extends GuessManager { } @Nullable - private static MultiMap buildDataflowTypeMap(PsiExpression forPlace, boolean place) { + private static MultiMap buildDataflowTypeMap(PsiExpression forPlace, boolean onlyForPlace) { PsiElement scope = DfaPsiUtil.getTopmostBlockInSameClass(forPlace); if (scope == null) { PsiFile file = forPlace.getContainingFile(); @@ -155,7 +155,7 @@ public class GuessManagerImpl extends GuessManager { } }; - final ExpressionTypeInstructionVisitor visitor = new ExpressionTypeInstructionVisitor(forPlace, place); + final ExpressionTypeInstructionVisitor visitor = new ExpressionTypeInstructionVisitor(forPlace, onlyForPlace); if (runner.analyzeMethodWithInlining(scope, visitor) == RunnerResult.OK) { return visitor.getResult(); }