mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Groovy: infer type for '<className>.class' if className is not resolved
This commit is contained in:
+22
-2
@@ -48,6 +48,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.*;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrLiteral;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrMethodCallExpression;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAccessorMethod;
|
||||
@@ -432,7 +433,12 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl implements
|
||||
PsiClass containingClass = method.getContainingClass();
|
||||
if (containingClass != null && CommonClassNames.JAVA_LANG_OBJECT.equals(containingClass.getQualifiedName()) &&
|
||||
"getClass".equals(method.getName())) {
|
||||
result = getTypeForObjectGetClass(facade, method);
|
||||
if (seemsToBeQualifiedClassName(getQualifierExpression())) {
|
||||
result = createJavaLangClassType(facade, facade.getElementFactory().createTypeFromText(getQualifier().getText(), this));
|
||||
}
|
||||
else {
|
||||
result = getTypeForObjectGetClass(facade, method);
|
||||
}
|
||||
} else {
|
||||
result = PsiUtil.getSmartReturnType(method);
|
||||
}
|
||||
@@ -454,7 +460,12 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl implements
|
||||
else if (resolved == null) {
|
||||
GrExpression qualifier = getQualifierExpression();
|
||||
if ("class".equals(getReferenceName())) {
|
||||
result = createJavaLangClassType(JavaPsiFacade.getInstance(getProject()), getQualifierType());
|
||||
if (seemsToBeQualifiedClassName(qualifier)) {
|
||||
assert qualifier != null;
|
||||
result = createJavaLangClassType(facade, facade.getElementFactory().createTypeFromText(qualifier.getText(), this));
|
||||
} else {
|
||||
result = createJavaLangClassType(facade, getQualifierType());
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (qualifier != null) {
|
||||
@@ -487,6 +498,15 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl implements
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean seemsToBeQualifiedClassName(@Nullable GrExpression qualifier) {
|
||||
if (qualifier == null) return false;
|
||||
while (qualifier instanceof GrReferenceExpression) {
|
||||
if (((GrReferenceExpression)qualifier).getReferenceNameElement() instanceof GrLiteral) return false;
|
||||
qualifier = ((GrReferenceExpression)qualifier).getQualifierExpression();
|
||||
}
|
||||
return qualifier == null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private PsiType createJavaLangClassType(JavaPsiFacade facade, @Nullable PsiType type) {
|
||||
PsiType result = null;
|
||||
|
||||
Reference in New Issue
Block a user