DuplicatesFinder: deparenthesize qualifiers

This commit is contained in:
Tagir Valeev
2019-02-08 15:20:08 +07:00
parent 32cbfb6cfb
commit e6ca195feb
3 changed files with 20 additions and 1 deletions
@@ -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;
@@ -0,0 +1,12 @@
class C {
public static void main(String[] args) {
switch (args.length) {
case 1:
<error descr="Cannot resolve symbol 'foo'">foo</error>.bar;
break;
case 2:
(<error descr="Cannot resolve symbol 'baz'">baz</error>).bar;
break;
}
}
}
@@ -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")