diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiPatternVariableImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiPatternVariableImpl.java index f3fcfcea74e4..f8d96cf83d2e 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiPatternVariableImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiPatternVariableImpl.java @@ -113,7 +113,8 @@ public class PsiPatternVariableImpl extends CompositePsiElement implements PsiPa } return nextParent.getParent(); } - if (nextParent instanceof PsiPattern || nextParent instanceof PsiCaseLabelElementList) { + if (nextParent instanceof PsiPattern || nextParent instanceof PsiCaseLabelElementList || + (parent instanceof PsiPattern && nextParent instanceof PsiInstanceOfExpression)) { continue; } return parent; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/HighlighterForPatternVariableInIf.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/HighlighterForPatternVariableInIf.java new file mode 100644 index 000000000000..561e1bab18a5 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/HighlighterForPatternVariableInIf.java @@ -0,0 +1,7 @@ +class Main { + void test(Object o) { + if (o instanceof ((String s) && s.length() > 1)) { + } + s = "fsfsdfsd"; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/HighlighterForPatternVariableInIfElse.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/HighlighterForPatternVariableInIfElse.java new file mode 100644 index 000000000000..7bb70464ff05 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/HighlighterForPatternVariableInIfElse.java @@ -0,0 +1,11 @@ +class Main { + void test(Object o) { + if (!(o instanceof ((String s) && s.length() > 1))) { + s = "fsfsdfsd"; // unresolved + } + else { + s = "fsfsdfsd"; + System.out.println(s); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/HighlighterForPatternVariableInLocalVariable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/HighlighterForPatternVariableInLocalVariable.java new file mode 100644 index 000000000000..5b0dc6e9593a --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/HighlighterForPatternVariableInLocalVariable.java @@ -0,0 +1,6 @@ +class Main { + void test(Object o) { + boolean b = o instanceof ((String s) && s.length() > 1); + s = "fsfsdfsd"; // unresolved + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/IdentifierHighlighterForPatternVariable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/HighlighterForPatternVariableInSwitch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/IdentifierHighlighterForPatternVariable.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/HighlighterForPatternVariableInSwitch.java diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightPatternsForSwitchHighlightingTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightPatternsForSwitchHighlightingTest.java index b92e5fcd66ce..65f11042c4de 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightPatternsForSwitchHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightPatternsForSwitchHighlightingTest.java @@ -70,10 +70,20 @@ public class LightPatternsForSwitchHighlightingTest extends LightJavaCodeInsight doTest(); } - public void testIdentifierHighlighterForPatternVariable() { - PsiFile file = myFixture.configureByFile(getTestName(false) + ".java"); - PsiElement element = myFixture.getElementAtCaret(); - assertSize(3, IdentifierHighlighterPass.getUsages(element, file, true)); + public void testHighlighterForPatternVariableInSwitch() { + testIdentifierHighlighter(3); + } + + public void testHighlighterForPatternVariableInIf() { + testIdentifierHighlighter(2); + } + + public void testHighlighterForPatternVariableInIfElse() { + testIdentifierHighlighter(4); + } + + public void testHighlighterForPatternVariableInLocalVariable() { + testIdentifierHighlighter(2); } public void testGuardWithInstanceOfPatternMatching() { @@ -92,4 +102,10 @@ public class LightPatternsForSwitchHighlightingTest extends LightJavaCodeInsight myFixture.configureByFile(getTestName(false) + ".java"); myFixture.checkHighlighting(); } + + private void testIdentifierHighlighter(int expectedUsages) { + PsiFile file = myFixture.configureByFile(getTestName(false) + ".java"); + PsiElement element = myFixture.getElementAtCaret(); + assertSize(expectedUsages, IdentifierHighlighterPass.getUsages(element, file, true)); + } }