show error for enums without constants but with abstract methods

This commit is contained in:
Anna Kozlova
2015-02-10 17:55:58 +01:00
parent 3318c68aad
commit 18e6a082d9
4 changed files with 23 additions and 0 deletions
@@ -1190,6 +1190,23 @@ public class GenericsHighlightUtil {
return null;
}
public static HighlightInfo checkEnumWithoutConstantsCantHaveAbstractMethods(final PsiClass aClass) {
if (!aClass.isEnum()) return null;
for (PsiField field : aClass.getFields()) {
if (field instanceof PsiEnumConstant) {
return null;
}
}
for (PsiMethod method : aClass.getMethods()) {
if (method.hasModifierProperty(PsiModifier.ABSTRACT)) {
final String description = "Enum declaration without enum constants cannot have abstract methods";
final TextRange textRange = HighlightNamesUtil.getClassDeclarationTextRange(aClass);
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(textRange).descriptionAndTooltip(description).create();
}
}
return null;
}
public static HighlightInfo checkSelectStaticClassFromParameterizedType(final PsiElement resolved, final PsiJavaCodeReferenceElement ref) {
if (resolved instanceof PsiClass && ((PsiClass)resolved).hasModifierProperty(PsiModifier.STATIC)) {
final PsiElement qualifier = ref.getQualifier();
@@ -384,6 +384,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.areSupersAccessible(aClass));
if (!myHolder.hasErrorResults()) myHolder.add(HighlightClassUtil.checkDuplicateTopLevelClass(aClass));
if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkEnumMustNotBeLocal(aClass));
if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkEnumWithoutConstantsCantHaveAbstractMethods(aClass));
if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkImplicitThisReferenceBeforeSuper(aClass, myJavaSdkVersion));
if (!myHolder.hasErrorResults()) myHolder.add(HighlightClassUtil.checkClassAndPackageConflict(aClass));
if (!myHolder.hasErrorResults()) myHolder.add(HighlightClassUtil.checkPublicClassInRightFile(aClass));
@@ -0,0 +1,4 @@
<error descr="Enum declaration without enum constants cannot have abstract methods">enum MyEnumTest</error> {
;
public abstract void m();
}
@@ -68,6 +68,7 @@ public class LightAdvHighlightingJdk6Test extends LightDaemonAnalyzerTestCase {
public void testUnsupportedFeatures7() { doTest(false, false); }
public void testEnumInitializers() { doTest(false, false); }
public void testEnumSynthetics() { doTest(false, false); }
public void testEnumWithoutConstants() { doTest(false, false); }
public void testIDEA79251() { doTest(false, false); }
public void testIDEA65473() { doTest(false, false); }
public void testIDEA61415() { doTest(false, false); }