mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Groovy 'a in Clazz': replace check for resole to class with heuristic
This commit is contained in:
+25
-1
@@ -16,6 +16,7 @@
|
||||
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.util.ArrayUtil;
|
||||
import gnu.trove.TIntHashSet;
|
||||
@@ -170,10 +171,33 @@ public class ControlFlowBuilderUtil {
|
||||
GrExpression left = binary.getLeftOperand();
|
||||
GrExpression right = binary.getRightOperand();
|
||||
if (left instanceof GrReferenceExpression && ((GrReferenceExpression)left).getQualifier() == null &&
|
||||
right instanceof GrReferenceExpression && ((GrReferenceExpression)right).resolve() instanceof PsiClass) {
|
||||
right instanceof GrReferenceExpression && isClassHeuristic((GrReferenceExpression)right)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean isClassHeuristic(GrReferenceExpression ref) {
|
||||
if (findClassByText(ref)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
GrExpression qualifier = ref.getQualifier();
|
||||
while (qualifier != null) {
|
||||
if (!(qualifier instanceof GrReferenceExpression)) return false;
|
||||
qualifier = ((GrReferenceExpression)qualifier).getQualifier();
|
||||
}
|
||||
|
||||
final String name = ref.getName();
|
||||
if (name == null || Character.isLowerCase(name.charAt(0))) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static boolean findClassByText(GrReferenceExpression ref) {
|
||||
final String text = ref.getText();
|
||||
final PsiClass aClass = JavaPsiFacade.getInstance(ref.getProject()).findClass(text, ref.getResolveScope());
|
||||
return aClass != null;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -57,9 +57,11 @@ public class InstanceOfInstruction extends InstructionImpl implements MixinTypeI
|
||||
GrExpression left = ((GrBinaryExpression)element).getLeftOperand();
|
||||
GrExpression right = ((GrBinaryExpression)element).getRightOperand();
|
||||
GroovyResolveResult result = ((GrReferenceExpression)right).advancedResolve();
|
||||
PsiClass resolved = (PsiClass)result.getElement();
|
||||
PsiClassType type = JavaPsiFacade.getElementFactory(element.getProject()).createType(resolved, result.getSubstitutor());
|
||||
return new Pair<GrExpression, PsiType>(left, type);
|
||||
final PsiElement resolved = result.getElement();
|
||||
if (resolved instanceof PsiClass) {
|
||||
PsiClassType type = JavaPsiFacade.getElementFactory(element.getProject()).createType((PsiClass)resolved, result.getSubstitutor());
|
||||
return new Pair<GrExpression, PsiType>(left, type);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user