diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalAnnotator.java b/java/java-analysis-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalAnnotator.java index bfde1edf65cd..6bacd4e023dd 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalAnnotator.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalAnnotator.java @@ -51,11 +51,7 @@ class CanBeFinalAnnotator extends RefGraphAnnotatorEx { ((RefClassImpl)refClass).setFlag(false, CAN_BE_FINAL_MASK); return; } - if (refClass.isAbstract() || refClass.isAnonymous() || refClass.isInterface()) { - ((RefClassImpl)refClass).setFlag(false, CAN_BE_FINAL_MASK); - return; - } - if (!refClass.isSelfInheritor(psiClass)) { + if (psiClass != null && !refClass.isSelfInheritor(psiClass)) { for (PsiClass psiSuperClass : psiClass.getSupers()) { if (myManager.belongsToScope(psiSuperClass)) { RefClass refSuperClass = (RefClass)myManager.getReference(psiSuperClass); @@ -65,6 +61,9 @@ class CanBeFinalAnnotator extends RefGraphAnnotatorEx { } } } + if (refClass.isAbstract() || refClass.isAnonymous() || refClass.isInterface()) { + ((RefClassImpl)refClass).setFlag(false, CAN_BE_FINAL_MASK); + } } else if (refElement instanceof RefMethod) { final RefMethod refMethod = (RefMethod)refElement; diff --git a/java/java-tests/testData/inspection/canBeFinal/anonymous/expected.xml b/java/java-tests/testData/inspection/canBeFinal/anonymous/expected.xml new file mode 100644 index 000000000000..4704d91e891d --- /dev/null +++ b/java/java-tests/testData/inspection/canBeFinal/anonymous/expected.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/java/java-tests/testData/inspection/canBeFinal/anonymous/src/Foo.java b/java/java-tests/testData/inspection/canBeFinal/anonymous/src/Foo.java new file mode 100644 index 000000000000..89a258518f0b --- /dev/null +++ b/java/java-tests/testData/inspection/canBeFinal/anonymous/src/Foo.java @@ -0,0 +1,22 @@ +final class Test +{ + public static class Foo + { + void fun() + { + + } + } + + public Foo get() + { + return new Foo() + { + @Override + void fun() + { + super.fun(); + } + }; + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/CanBeFinalTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/CanBeFinalTest.java index f01ecb243249..bb77b6b9bb18 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/CanBeFinalTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/CanBeFinalTest.java @@ -42,6 +42,10 @@ public class CanBeFinalTest extends InspectionTestCase { doTest(); } + public void testanonymous() throws Exception { + doTest(); + } + public void testmethodInheritance() throws Exception { doTest(); }