IDEA-105064 Is it possible to have even smarter code completion in case of Logger.getLogger(Class)?

This commit is contained in:
peter
2013-10-16 16:43:16 +02:00
parent ce10d38c4d
commit ec2d2d3d74
4 changed files with 30 additions and 1 deletions

View File

@@ -1122,6 +1122,8 @@ public class ExpectedTypesProvider {
});
if (type != null) return type;
}
final PsiElementFactory factory = JavaPsiFacade.getElementFactory(containingClass.getProject());
if ("equals".equals(name)) {
final PsiType type = checkMethod(method, CommonClassNames.JAVA_LANG_OBJECT, new NullableFunction<PsiClass, PsiType>() {
@Override
@@ -1135,7 +1137,7 @@ public class ExpectedTypesProvider {
}
final PsiClass aClass = PsiTreeUtil.getContextOfType(parent, PsiClass.class, true);
if (aClass != null) {
return JavaPsiFacade.getInstance(aClass.getProject()).getElementFactory().createType(aClass);
return factory.createType(aClass);
}
}
return null;
@@ -1156,6 +1158,16 @@ public class ExpectedTypesProvider {
}
}
}
if ("Logger".equals(containingClass.getName()) || "Log".equals(containingClass.getName())) {
if (parameterType instanceof PsiClassType &&
parameterType.equalsToText(CommonClassNames.JAVA_LANG_CLASS)) {
PsiClass placeClass = PsiTreeUtil.getContextOfType(argument, PsiClass.class);
PsiClass classClass = ((PsiClassType)parameterType).resolve();
if (placeClass != null && classClass != null) {
return factory.createType(classClass, factory.createType(placeClass));
}
}
}
return parameterType;
}

View File

@@ -39,6 +39,12 @@ public class ClassLiteralGetter {
}
PsiType classParameter = PsiUtil.substituteTypeParameter(expectedType, CommonClassNames.JAVA_LANG_CLASS, 0, false);
if (classParameter == null) {
PsiType defaultType = parameters.getDefaultType();
if (InheritanceUtil.isInheritor(defaultType, CommonClassNames.JAVA_LANG_CLASS)) {
classParameter = PsiUtil.substituteTypeParameter(defaultType, CommonClassNames.JAVA_LANG_CLASS, 0, false);
}
}
boolean addInheritors = false;
PsiElement position = parameters.getPosition();