mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
diamonds: retrieve qualifier type
This commit is contained in:
@@ -174,24 +174,9 @@ public class PsiDiamondTypeImpl extends PsiDiamondType {
|
||||
final String qualifier = qualifierElement != null ? qualifierElement.getText() : "";
|
||||
final String qualifiedName = StringUtil.getQualifiedName(qualifier, text);
|
||||
if (newExpressionQualifier != null) {
|
||||
final String newExpressionQualifierText = newExpressionQualifier.getText();
|
||||
if (newExpressionQualifier instanceof PsiReferenceExpression) {
|
||||
final PsiVariable variable = resolveHelper.resolveReferencedVariable(newExpressionQualifierText, newExpression);
|
||||
if (variable != null) {
|
||||
final PsiClass aClass = PsiUtil.resolveClassInType(variable.getType());
|
||||
if (aClass != null) {
|
||||
return aClass.findInnerClassByName(qualifiedName, false);
|
||||
}
|
||||
}
|
||||
} else if (newExpressionQualifier instanceof PsiCallExpression) {
|
||||
final JavaResolveResult resolveResult = ((PsiCallExpression)newExpressionQualifier).resolveMethodGenerics();
|
||||
final PsiElement method = resolveResult.getElement();
|
||||
if (method instanceof PsiMethod) {
|
||||
final PsiClass aClass = PsiUtil.resolveClassInType(resolveResult.getSubstitutor().substitute(((PsiMethod)method).getReturnType()));
|
||||
if (aClass != null) {
|
||||
return aClass.findInnerClassByName(qualifiedName, false);
|
||||
}
|
||||
}
|
||||
final PsiClass aClass = PsiUtil.resolveClassInClassTypeOnly(newExpressionQualifier.getType());
|
||||
if (aClass != null) {
|
||||
return aClass.findInnerClassByName(qualifiedName, false);
|
||||
}
|
||||
}
|
||||
return resolveHelper.resolveReferencedClass(qualifiedName, newExpression);
|
||||
|
||||
+6
@@ -187,6 +187,10 @@ class Outer {
|
||||
}
|
||||
class Outer1 {}
|
||||
|
||||
class Outer2<K> {
|
||||
class Inner2<T> {}
|
||||
}
|
||||
|
||||
class Another {
|
||||
public static void main(String[] args) {
|
||||
Outer o = new Outer();
|
||||
@@ -197,6 +201,8 @@ class Another {
|
||||
Outer.Inner<String> i3 = m2().new <error descr="Cannot resolve symbol 'Inner'">Inner</error><>();
|
||||
|
||||
System.out.println(i);
|
||||
|
||||
<error descr="Incompatible types. Found: 'Outer2.Inner2<java.lang.String>', required: 'Outer2.Inner2<java.lang.String>'">Outer2<Integer>.Inner2<String> i5 = new Outer2<>().new Inner2<>();</error>
|
||||
}
|
||||
|
||||
static Outer m() {return null;}
|
||||
|
||||
Reference in New Issue
Block a user