mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
add error on qualified anonymous class creation when base type interface is (IDEA-57305)
This commit is contained in:
+21
-10
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -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 {
|
||||
|
||||
+13
@@ -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() {};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user