From 784512b713ba914c6c630b55aa9d8cba9e7750db Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 2 Jun 2014 20:57:56 +0400 Subject: [PATCH] enum constants access inside enum constant initializers fixed (IDEA-125816) --- .../daemon/impl/analysis/GenericsHighlightUtil.java | 3 ++- java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java | 2 +- .../genericsHighlighting/IDEA125816.java | 8 ++++++++ .../codeInsight/daemon/GenericsHighlightingTest.java | 1 + 4 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125816.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java index 45524f11cc2a..659bd14aaec5 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java @@ -704,7 +704,8 @@ public class GenericsHighlightUtil { final PsiMember constructorOrInitializer = PsiUtil.findEnclosingConstructorOrInitializer(expr); if (constructorOrInitializer == null) return null; if (constructorOrInitializer.hasModifierProperty(PsiModifier.STATIC)) return null; - final PsiClass aClass = constructorOrInitializer.getContainingClass(); + final PsiClass aClass = constructorOrInitializer instanceof PsiEnumConstantInitializer ? + (PsiClass)constructorOrInitializer : constructorOrInitializer.getContainingClass(); if (aClass == null || !(aClass.isEnum() || aClass instanceof PsiEnumConstantInitializer)) return null; final PsiField field = (PsiField)resolved; if (aClass instanceof PsiEnumConstantInitializer) { diff --git a/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java b/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java index f5e5468fb202..c63a1373b00b 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java @@ -815,7 +815,7 @@ public final class PsiUtil extends PsiUtilCore { @Nullable public static PsiMember findEnclosingConstructorOrInitializer(PsiElement expression) { - PsiMember parent = PsiTreeUtil.getParentOfType(expression, PsiClassInitializer.class, PsiMethod.class); + PsiMember parent = PsiTreeUtil.getParentOfType(expression, PsiClassInitializer.class, PsiEnumConstantInitializer.class, PsiMethod.class); if (parent instanceof PsiMethod && !((PsiMethod)parent).isConstructor()) return null; return parent; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125816.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125816.java new file mode 100644 index 000000000000..e17d850a9106 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125816.java @@ -0,0 +1,8 @@ +public enum State { + STATE1 { + State s = STATE2; + }, + STATE2 { + State s = STATE1; + } +} 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 05ced906682d..e347b4c192b1 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java @@ -365,6 +365,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { public void testIDEA67578() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); } public void testIDEA57388() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); } public void testIDEA125800() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); } + public void testIDEA125816() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); } //jdk should propagate LL 1.4 but actually it provides LL 1.7?! public void testCastObjectToIntJdk14() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_4, false); }