From 3d65fe5f8c1f3bc134b69d46bb980ff173f8ee53 Mon Sep 17 00:00:00 2001 From: Max Medvedev Date: Mon, 1 Oct 2012 20:34:45 +0300 Subject: [PATCH] more smart heuristics for class checj in 'x in Y' --- .../controlFlow/ControlFlowBuilderUtil.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/ControlFlowBuilderUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/ControlFlowBuilderUtil.java index 53387241b81e..571231854e5d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/ControlFlowBuilderUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/ControlFlowBuilderUtil.java @@ -16,15 +16,18 @@ package org.jetbrains.plugins.groovy.lang.psi.controlFlow; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiFile; +import com.intellij.psi.search.PsiShortNamesCache; import com.intellij.util.ArrayUtil; import gnu.trove.TIntHashSet; import gnu.trove.TObjectIntHashMap; import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes; +import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrBinaryExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; +import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.imports.GrImportStatement; import java.util.ArrayList; import java.util.List; @@ -182,7 +185,18 @@ public class ControlFlowBuilderUtil { final String text = ref.getText(); final int i = text.indexOf('<'); String className = i == -1 ? text : text.substring(0, i); - final PsiClass aClass = JavaPsiFacade.getInstance(ref.getProject()).findClass(className, ref.getResolveScope()); - return aClass != null; + + PsiClass[] names = PsiShortNamesCache.getInstance(ref.getProject()).getClassesByName(className, ref.getResolveScope()); + if (names.length > 0) return true; + + PsiFile file = ref.getContainingFile(); + if (file instanceof GroovyFile) { + GrImportStatement[] imports = ((GroovyFile)file).getImportStatements(); + for (GrImportStatement anImport : imports) { + if (className.equals(anImport.getImportedName())) return true; + } + } + + return false; } }