IDEA-78031 diamonds with new qualifiers

This commit is contained in:
anna
2011-12-19 12:37:02 +01:00
parent fed5eaf300
commit 09c0ca15d8
2 changed files with 47 additions and 1 deletions
@@ -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;
}