diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java
index 1e5d68fb2eca..3f9bf87694f3 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java
@@ -893,6 +893,7 @@ public class GenericsHighlightUtil {
return typeParameters[0];
}
+ //http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.2
@Nullable
public static HighlightInfo checkAccessStaticFieldFromEnumConstructor(PsiReferenceExpression expr, JavaResolveResult result) {
final PsiElement resolved = result.getElement();
@@ -903,14 +904,17 @@ public class GenericsHighlightUtil {
if (constructorOrInitializer == null) return null;
if (constructorOrInitializer.hasModifierProperty(PsiModifier.STATIC)) return null;
final PsiClass aClass = constructorOrInitializer.getContainingClass();
- if (aClass == null) return null;
- if (!aClass.isEnum()) return null;
+ if (aClass == null || !(aClass.isEnum() || aClass instanceof PsiEnumConstantInitializer)) return null;
final PsiField field = (PsiField)resolved;
- if (field.getContainingClass() != aClass) return null;
- final PsiType type = field.getType();
+ if (aClass instanceof PsiEnumConstantInitializer) {
+ if (field.getContainingClass() != aClass.getSuperClass()) return null;
+ } else if (field.getContainingClass() != aClass) return null;
- //TODO is access to enum constant is allowed ?
- if (type instanceof PsiClassType && ((PsiClassType)type).resolve() == aClass) return null;
+
+ if (!JavaVersionService.getInstance().isAtLeast(field, JavaSdkVersion.JDK_1_6)) {
+ final PsiType type = field.getType();
+ if (type instanceof PsiClassType && ((PsiClassType)type).resolve() == aClass) return null;
+ }
if (PsiUtil.isCompileTimeConstant(field)) return null;
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Enum56239.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Enum56239.java
new file mode 100644
index 000000000000..9f7d0b8f195e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Enum56239.java
@@ -0,0 +1,34 @@
+enum IDEA56239 {
+ A, B() {
+ {
+ System.out.println(A);
+ System.out.println(FOO);
+ System.out.println(FOO1);
+ System.out.println(C);
+ }
+ }, C(D), D;
+
+ public static String FOO = "";
+ public static final String FOO1 = "";
+
+ IDEA56239() {
+ }
+
+ IDEA56239(IDEA56239 t) {
+ System.out.println(A);
+ System.out.println(FOO);
+ System.out.println(FOO1);
+ }
+
+ {
+ System.out.println(A);
+ System.out.println(FOO);
+ System.out.println(FOO1);
+ }
+
+ void foo() {
+ System.out.println(A);
+ System.out.println(FOO);
+ System.out.println(FOO1);
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
index e6b5c096efeb..37163f203e22 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
@@ -73,7 +73,10 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase {
public void testAutoboxingMethods() { doTest5(false); }
public void testAutoboxingConstructors() { doTest5(false); }
public void testEnumWithAbstractMethods() { doTest5(false); }
- public void testEnum() { doTest5(false); }
+ public void testEnum() {
+ doTest(LanguageLevel.JDK_1_5, JavaSdkVersion.JDK_1_5, false);
+ }
+ public void testEnum56239() { doTest(LanguageLevel.JDK_1_6, JavaSdkVersion.JDK_1_6, false); }
public void testSameErasure() { doTest5(false); }
public void testMethods() { doTest5(false); }
public void testFields() { doTest5(false); }