mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
IDEA-78031 diamonds with new qualifiers
This commit is contained in:
@@ -169,9 +169,32 @@ public class PsiDiamondTypeImpl extends PsiDiamondType {
|
||||
final Project project = newExpression.getProject();
|
||||
final JavaPsiFacade facade = JavaPsiFacade.getInstance(project);
|
||||
final PsiResolveHelper resolveHelper = facade.getResolveHelper();
|
||||
final PsiExpression newExpressionQualifier = newExpression.getQualifier();
|
||||
final PsiElement qualifierElement = classReference.getQualifier();
|
||||
final String qualifier = qualifierElement != null ? qualifierElement.getText() : "";
|
||||
return resolveHelper.resolveReferencedClass(StringUtil.getQualifiedName(qualifier, text), newExpression);
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return resolveHelper.resolveReferencedClass(qualifiedName, newExpression);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user