show error for enums constants referenced from instance field initializer (IDEA-136196)

This commit is contained in:
Anna Kozlova
2015-02-10 17:55:59 +01:00
parent 18e6a082d9
commit 7e0c4959db
3 changed files with 16 additions and 1 deletions
@@ -823,8 +823,9 @@ public final class PsiUtil extends PsiUtilCore {
@Nullable
public static PsiMember findEnclosingConstructorOrInitializer(PsiElement expression) {
PsiMember parent = PsiTreeUtil.getParentOfType(expression, PsiClassInitializer.class, PsiEnumConstantInitializer.class, PsiMethod.class);
PsiMember parent = PsiTreeUtil.getParentOfType(expression, PsiClassInitializer.class, PsiEnumConstantInitializer.class, PsiMethod.class, PsiField.class);
if (parent instanceof PsiMethod && !((PsiMethod)parent).isConstructor()) return null;
if (parent instanceof PsiField && parent.hasModifierProperty(PsiModifier.STATIC)) return null;
return parent;
}
@@ -0,0 +1,13 @@
enum MyEnumTest {
FOO;
MyEnumTest Foo = <error descr="It is illegal to access static member 'FOO' from enum constructor or instance initializer">FOO</error>;
{
MyEnumTest foo = <error descr="It is illegal to access static member 'FOO' from enum constructor or instance initializer">FOO</error>;
}
static MyEnumTest Bar = FOO;
MyEnumTest() {
System.out.println(<error descr="It is illegal to access static member 'Bar' from enum constructor or instance initializer">Bar</error>);
}
}
@@ -69,6 +69,7 @@ public class LightAdvHighlightingJdk6Test extends LightDaemonAnalyzerTestCase {
public void testEnumInitializers() { doTest(false, false); }
public void testEnumSynthetics() { doTest(false, false); }
public void testEnumWithoutConstants() { doTest(false, false); }
public void testEnumInstanceFieldInitializer() { doTest(false, false); }
public void testIDEA79251() { doTest(false, false); }
public void testIDEA65473() { doTest(false, false); }
public void testIDEA61415() { doTest(false, false); }