From b6a99ddaeba418d2983467c4f68e34e29bc8d4ed Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 26 Jan 2018 16:12:05 +0700 Subject: [PATCH] GuessManagerImpl: do not run DFA if assignment right-hands have the same type as left-hands Fixes IDEA-185290 Too long time takes filling of Ctrl+Space list. (fast code insertion) --- .../intellij/codeInsight/guess/impl/GuessManagerImpl.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 e128b417c726..daf3c74db933 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 @@ -174,13 +174,16 @@ public class GuessManagerImpl extends GuessManager { } } if (place == null) return false; + PsiType type = place.getType(); + if (type == null) return false; final int start = place.getTextRange().getStartOffset(); class Visitor extends JavaRecursiveElementWalkingVisitor { public boolean hasInteresting; @Override public void visitAssignmentExpression(PsiAssignmentExpression expression) { - if (ExpressionTypeMemoryState.EXPRESSION_HASHING_STRATEGY.equals(expression.getLExpression(), place)) { + if (ExpressionTypeMemoryState.EXPRESSION_HASHING_STRATEGY.equals(expression.getLExpression(), place) && + expression.getRExpression() != null && !type.equals(expression.getRExpression().getType())) { hasInteresting = true; stopWalking(); } @@ -189,7 +192,8 @@ public class GuessManagerImpl extends GuessManager { @Override public void visitLocalVariable(PsiLocalVariable variable) { - if (variable.getInitializer() != null && ExpressionUtils.isReferenceTo(place, variable)) { + if (variable.getInitializer() != null && ExpressionUtils.isReferenceTo(place, variable) && + !type.equals(variable.getInitializer().getType())) { hasInteresting = true; stopWalking(); }