From 1f5a95be08f59d7ab57fdb22480a8c0b47e10ff3 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 25 May 2016 09:23:46 +0200 Subject: [PATCH] groovy: avoid incompleteCode resolve when possible, try to reuse cached results instead --- .../codeInspection/local/GroovyPostHighlightingPass.java | 9 +++++++-- .../expressions/GrReferenceExpressionImpl.java | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyPostHighlightingPass.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyPostHighlightingPass.java index b0f3b32c8699..d132d6216476 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyPostHighlightingPass.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyPostHighlightingPass.java @@ -54,6 +54,7 @@ import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField; import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAccessorMethod; @@ -115,8 +116,12 @@ public class GroovyPostHighlightingPass extends TextEditorHighlightingPass { myFile.accept(new PsiRecursiveElementWalkingVisitor() { @Override public void visitElement(PsiElement element) { - if (element instanceof GrReferenceElement) { - for (GroovyResolveResult result : ((GrReferenceElement)element).multiResolve(true)) { + if (element instanceof GrReferenceExpression && !((GrReferenceElement)element).isQualified()) { + GroovyResolveResult[] results = ((GrReferenceExpression)element).multiResolve(false); + if (results.length == 0) { + results = ((GrReferenceExpression)element).multiResolve(true); + } + for (GroovyResolveResult result : results) { PsiElement resolved = result.getElement(); if (resolved instanceof GrParameter && resolved.getContainingFile() == myFile) { usedParams.put((GrParameter)resolved, Boolean.TRUE); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java index 479ad9c0342b..74bc7bd82a0e 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java @@ -459,7 +459,7 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl