add error on qualified anonymous class creation when base type interface is (IDEA-57305)

This commit is contained in:
Anna Kozlova
2012-05-24 19:11:25 +04:00
parent 8a08072e3b
commit a21cde8072
3 changed files with 35 additions and 11 deletions
@@ -640,7 +640,8 @@ public class HighlightClassUtil {
}
public static HighlightInfo checkQualifiedNewOfStaticClass(PsiNewExpression expression) {
@Nullable
public static HighlightInfo checkQualifiedNew(PsiNewExpression expression) {
PsiExpression qualifier = expression.getQualifier();
if (qualifier == null) return null;
PsiType type = expression.getType();
@@ -652,18 +653,28 @@ public class HighlightClassUtil {
return info;
}
PsiClass aClass = PsiUtil.resolveClassInType(type);
if (aClass != null && aClass.hasModifierProperty(PsiModifier.STATIC)) {
HighlightInfo info = HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR,
expression,
JavaErrorMessages.message("qualified.new.of.static.class"));
if (!aClass.isEnum()) {
IntentionAction fix = QUICK_FIX_FACTORY.createModifierListFix(aClass, PsiModifier.STATIC, false, false);
QuickFixAction.registerQuickFixAction(info, fix);
HighlightInfo info = null;
if (aClass != null) {
if (aClass.hasModifierProperty(PsiModifier.STATIC)) {
info = HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR,
expression,
JavaErrorMessages.message("qualified.new.of.static.class"));
if (!aClass.isEnum()) {
IntentionAction fix = QUICK_FIX_FACTORY.createModifierListFix(aClass, PsiModifier.STATIC, false, false);
QuickFixAction.registerQuickFixAction(info, fix);
}
} else if (aClass instanceof PsiAnonymousClass) {
final PsiClass baseClass = PsiUtil.resolveClassInType(((PsiAnonymousClass)aClass).getBaseClassType());
if (baseClass != null && baseClass.isInterface()) {
info = HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR,
expression,
"Anonymous class implements interface; cannot have qualifier for new");
}
}
QuickFixAction.registerQuickFixAction(info, new RemoveNewQualifierFix(expression, aClass));
return info;
}
return null;
return info;
}
@@ -698,7 +698,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
@Override public void visitNewExpression(PsiNewExpression expression) {
myHolder.add(HighlightUtil.checkUnhandledExceptions(expression, null));
if (!myHolder.hasErrorResults()) myHolder.add(HighlightClassUtil.checkAnonymousInheritFinal(expression));
if (!myHolder.hasErrorResults()) myHolder.add(HighlightClassUtil.checkQualifiedNewOfStaticClass(expression));
if (!myHolder.hasErrorResults()) myHolder.add(HighlightClassUtil.checkQualifiedNew(expression));
if (!myHolder.hasErrorResults()) myHolder.add(HighlightClassUtil.checkCreateInnerClassFromStaticContext(expression));
if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkTypeParameterInstantiation(expression));
try {
@@ -17,3 +17,16 @@ class b extends A {
static class c {}
}
class WithAnonym {
interface I {
}
class Inner{}
}
class WithAnonymInheritor extends WithAnonym {
{
<error descr="Anonymous class implements interface; cannot have qualifier for new">this.new I() {}</error>;
this.new Inner() {};
}
}