mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
api
This commit is contained in:
+10
-22
@@ -418,7 +418,8 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl<GrExpressi
|
||||
if (getParent() instanceof GrReferenceExpression) {
|
||||
result = facade.getElementFactory().createType((PsiClass) resolved);
|
||||
} else {
|
||||
result = createJavaLangClassType(facade, facade.getElementFactory().createType((PsiClass)resolved));
|
||||
result = TypesUtil
|
||||
.createJavaLangClassType(facade.getElementFactory().createType((PsiClass)resolved), getProject(), getResolveScope());
|
||||
}
|
||||
} else if (resolved instanceof GrVariable) {
|
||||
result = ((GrVariable) resolved).getDeclaredType();
|
||||
@@ -438,10 +439,11 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl<GrExpressi
|
||||
"getClass".equals(method.getName())) {
|
||||
final GrExpression qualifier = getQualifier();
|
||||
if (PsiUtil.seemsToBeQualifiedClassName(qualifier)) {
|
||||
result = createJavaLangClassType(facade, facade.getElementFactory().createTypeFromText(qualifier.getText(), this));
|
||||
result = TypesUtil.createJavaLangClassType(facade.getElementFactory().createTypeFromText(qualifier.getText(), this),
|
||||
getProject(), getResolveScope());
|
||||
}
|
||||
else {
|
||||
result = getTypeForObjectGetClass(facade, method);
|
||||
result = getTypeForObjectGetClass(method);
|
||||
}
|
||||
} else {
|
||||
result = PsiUtil.getSmartReturnType(method);
|
||||
@@ -466,9 +468,10 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl<GrExpressi
|
||||
if ("class".equals(getReferenceName())) {
|
||||
if (PsiUtil.seemsToBeQualifiedClassName(qualifier)) {
|
||||
assert qualifier != null;
|
||||
result = createJavaLangClassType(facade, facade.getElementFactory().createTypeFromText(qualifier.getText(), this));
|
||||
result = TypesUtil.createJavaLangClassType(facade.getElementFactory().createTypeFromText(qualifier.getText(), this), getProject(),
|
||||
getResolveScope());
|
||||
} else {
|
||||
result = createJavaLangClassType(facade, getQualifierType());
|
||||
result = TypesUtil.createJavaLangClassType(getQualifierType(), getProject(), getResolveScope());
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -502,21 +505,6 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl<GrExpressi
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private PsiType createJavaLangClassType(JavaPsiFacade facade, @Nullable PsiType type) {
|
||||
PsiType result = null;
|
||||
PsiClass javaLangClass = facade.findClass(CommonClassNames.JAVA_LANG_CLASS, getResolveScope());
|
||||
if (javaLangClass != null) {
|
||||
PsiSubstitutor substitutor = PsiSubstitutor.EMPTY;
|
||||
final PsiTypeParameter[] typeParameters = javaLangClass.getTypeParameters();
|
||||
if (typeParameters.length == 1) {
|
||||
substitutor = substitutor.put(typeParameters[0], type);
|
||||
}
|
||||
result = facade.getElementFactory().createType(javaLangClass, substitutor);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private PsiType getQualifierType() {
|
||||
final GrExpression qualifier = getQualifierExpression();
|
||||
@@ -536,14 +524,14 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl<GrExpressi
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private PsiType getTypeForObjectGetClass(JavaPsiFacade facade, PsiMethod method) {
|
||||
private PsiType getTypeForObjectGetClass(PsiMethod method) {
|
||||
PsiType type = PsiUtil.getSmartReturnType(method);
|
||||
if (type instanceof PsiClassType) {
|
||||
PsiClass clazz = ((PsiClassType)type).resolve();
|
||||
if (clazz != null && CommonClassNames.JAVA_LANG_CLASS.equals(clazz.getQualifiedName())) {
|
||||
PsiTypeParameter[] typeParameters = clazz.getTypeParameters();
|
||||
if (typeParameters.length == 1) {
|
||||
return createJavaLangClassType(facade, getQualifierType());
|
||||
return TypesUtil.createJavaLangClassType(getQualifierType(), getProject(), getResolveScope());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+20
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiSubstitutorImpl;
|
||||
@@ -146,6 +147,7 @@ public class TypesUtil {
|
||||
ourOperationsToOperatorNames.put(mSTAR, "multiply");
|
||||
ourOperationsToOperatorNames.put(mDEC, "previous");
|
||||
ourOperationsToOperatorNames.put(mINC, "next");
|
||||
ourOperationsToOperatorNames.put(kAS, "asType");
|
||||
}
|
||||
|
||||
private static final TObjectIntHashMap<String> TYPE_TO_RANK = new TObjectIntHashMap<String>();
|
||||
@@ -491,4 +493,22 @@ public class TypesUtil {
|
||||
public static PsiClassType createTypeByFQClassName(@NotNull String fqName, @NotNull PsiElement context) {
|
||||
return GroovyPsiManager.getInstance(context.getProject()).createTypeByFQClassName(fqName, context.getResolveScope());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiType createJavaLangClassType(@Nullable PsiType type,
|
||||
Project project,
|
||||
GlobalSearchScope resolveScope) {
|
||||
final JavaPsiFacade facade = JavaPsiFacade.getInstance(project);
|
||||
PsiType result = null;
|
||||
PsiClass javaLangClass = facade.findClass(JAVA_LANG_CLASS, resolveScope);
|
||||
if (javaLangClass != null) {
|
||||
PsiSubstitutor substitutor = PsiSubstitutor.EMPTY;
|
||||
final PsiTypeParameter[] typeParameters = javaLangClass.getTypeParameters();
|
||||
if (typeParameters.length == 1) {
|
||||
substitutor = substitutor.put(typeParameters[0], type);
|
||||
}
|
||||
result = facade.getElementFactory().createType(javaLangClass, substitutor);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user