From fbd8237916db813a27f3ee556c275dd415be6561 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 12 Apr 2019 10:54:05 +0700 Subject: [PATCH] Switch label: do not resolve unqualified enum constants referenced on the right side of arrow Fixes IDEA-210771 Error message should be exposed for the new 'case' label in Java 12 in case of wrong constant usage --- .../tree/java/PsiSwitchLabelStatementBaseImpl.java | 2 +- .../SwitchExpressionsEnumResolve.java | 12 ++++++++++++ .../daemon/LightJava12HighlightingTest.kt | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting12/SwitchExpressionsEnumResolve.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiSwitchLabelStatementBaseImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiSwitchLabelStatementBaseImpl.java index fab24259f167..42185e466e26 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiSwitchLabelStatementBaseImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiSwitchLabelStatementBaseImpl.java @@ -44,7 +44,7 @@ public abstract class PsiSwitchLabelStatementBaseImpl extends CompositePsiElemen @NotNull ResolveState state, PsiElement lastParent, @NotNull PsiElement place) { - if (lastParent != null) { + if (lastParent instanceof PsiExpressionList) { PsiSwitchBlock switchStatement = getEnclosingSwitchBlock(); if (switchStatement != null) { PsiExpression expression = switchStatement.getExpression(); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting12/SwitchExpressionsEnumResolve.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting12/SwitchExpressionsEnumResolve.java new file mode 100644 index 000000000000..8490182b3175 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting12/SwitchExpressionsEnumResolve.java @@ -0,0 +1,12 @@ +import java.util.Random; + +class SwitchExpressionsEnumResolve { + enum E { E1, E2 } + + E test(E e) { + return switch (e) { + case E1 -> E2; + case E2 -> E1; + }; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightJava12HighlightingTest.kt b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightJava12HighlightingTest.kt index 2c7f46984c55..7d889ce0436c 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightJava12HighlightingTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightJava12HighlightingTest.kt @@ -10,6 +10,7 @@ class LightJava12HighlightingTest : LightCodeInsightFixtureTestCase() { fun testEnhancedSwitchStatements() = doTest() fun testSwitchExpressions() = doTest() + fun testSwitchExpressionsEnumResolve() = doTest() fun testValueBreaks() = doTest() fun testSwitchNumericPromotion() = doTest() fun testSimpleInferenceCases() = doTest()