From e6ca195feb512de5c303f2844b95c9715868910e Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 8 Feb 2019 15:19:33 +0700 Subject: [PATCH] DuplicatesFinder: deparenthesize qualifiers --- .../util/duplicates/DuplicatesFinder.java | 8 +++++++- .../UnresolvedQualifier.java | 12 ++++++++++++ .../codeInspection/DuplicateBranchesInSwitchTest.kt | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/inspection/duplicateBranchesInSwitch/UnresolvedQualifier.java diff --git a/java/java-analysis-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java b/java/java-analysis-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java index a00bdd572e6d..51a7d12bac1e 100644 --- a/java/java-analysis-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java +++ b/java/java-analysis-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java @@ -519,11 +519,17 @@ public class DuplicatesFinder { return (resolveResult2 instanceof PsiLocalVariable || resolveResult2 instanceof PsiParameter) && match.putDeclarationCorrespondence(resolveResult1, resolveResult2); } - final PsiElement qualifier2 = candidate.getQualifier(); + PsiElement qualifier2 = candidate.getQualifier(); + while (qualifier2 instanceof PsiParenthesizedExpression) { + qualifier2 = ((PsiParenthesizedExpression)qualifier2).getExpression(); + } if (!equivalentResolve(resolveResult1, resolveResult2, qualifier2)) { return matchExtractableVariable(pattern, candidate, match); } PsiElement qualifier1 = pattern.getQualifier(); + while (qualifier1 instanceof PsiParenthesizedExpression) { + qualifier1 = ((PsiParenthesizedExpression)qualifier1).getExpression(); + } if (qualifier1 instanceof PsiReferenceExpression && qualifier2 instanceof PsiReferenceExpression && !match.areCorrespond(((PsiReferenceExpression)qualifier1).resolve(), ((PsiReferenceExpression)qualifier2).resolve())) { return false; diff --git a/java/java-tests/testData/inspection/duplicateBranchesInSwitch/UnresolvedQualifier.java b/java/java-tests/testData/inspection/duplicateBranchesInSwitch/UnresolvedQualifier.java new file mode 100644 index 000000000000..14f325066b95 --- /dev/null +++ b/java/java-tests/testData/inspection/duplicateBranchesInSwitch/UnresolvedQualifier.java @@ -0,0 +1,12 @@ +class C { + public static void main(String[] args) { + switch (args.length) { + case 1: + foo.bar; + break; + case 2: + (baz).bar; + break; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/DuplicateBranchesInSwitchTest.kt b/java/java-tests/testSrc/com/intellij/java/codeInspection/DuplicateBranchesInSwitchTest.kt index 76604f66df55..d6b1c786210e 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/DuplicateBranchesInSwitchTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/DuplicateBranchesInSwitchTest.kt @@ -41,6 +41,7 @@ class DuplicateBranchesInSwitchTest : LightCodeInsightFixtureTestCase() { fun testParentheses() = doTest() fun testAssignment() = doTest() fun testNoExceptionWhenFirstLabelIsMissing() = doTest() + fun testUnresolvedQualifier() = doTest() private fun doTest() { myFixture.testHighlighting("${getTestName(false)}.java")