diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/EquivalenceChecker.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/EquivalenceChecker.java index 6b08da31bf65..13a9c4ff0574 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/EquivalenceChecker.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/EquivalenceChecker.java @@ -15,6 +15,7 @@ */ package com.siyeh.ig.psiutils; +import com.intellij.openapi.util.Comparing; import com.intellij.psi.*; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiTreeUtil; @@ -775,6 +776,11 @@ public class EquivalenceChecker { if (!expressionsAreEquivalentDecision(arrayInitializer1, arrayInitializer2).getExactlyMatches()) { return EXACTLY_UN_MATCHES; } + final PsiMethod constructor1 = newExpression1.resolveConstructor(); + final PsiMethod constructor2 = newExpression2.resolveConstructor(); + if (!Comparing.equal(constructor1, constructor2)) { + return EXACTLY_UN_MATCHES; + } final PsiExpression qualifier1 = newExpression1.getQualifier(); final PsiExpression qualifier2 = newExpression2.getQualifier(); if (!expressionsAreEquivalentDecision(qualifier1, qualifier2).getExactlyMatches()) { diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/conditional_expression_with_identical_branches/ConditionalExpressionWithIdenticalBranches.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/conditional_expression_with_identical_branches/ConditionalExpressionWithIdenticalBranches.java index 6e10b9151fca..24fccf260af9 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/conditional_expression_with_identical_branches/ConditionalExpressionWithIdenticalBranches.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/conditional_expression_with_identical_branches/ConditionalExpressionWithIdenticalBranches.java @@ -47,4 +47,19 @@ class ConditionalExpressionWithIdenticalBranches { int someMethod(String s, String s2) { return s.length(); } + + class Item { + Item(String name) { + } + + Item(int value) { + } + + void v() { + int i = 1; + Item item = (i == 1 ? new Item("1") : new Item(i)); // warning here + + Item item1 = (i == 1 ? new Item("1") : new Item("2")); // warning here + } + } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/conditional_expression_with_identical_branches/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/conditional_expression_with_identical_branches/expected.xml index 03494e3dd12d..6b270c082c80 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/conditional_expression_with_identical_branches/expected.xml +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/conditional_expression_with_identical_branches/expected.xml @@ -55,4 +55,11 @@ Conditional expression with identical or similar branches Conditional expression <code>new Random().nextBoolean() ? "2" + "q" + "1" : "2" + "qwe" + "1"</code> with identical or similar branches #loc + + + ConditionalExpressionWithIdenticalBranches.java + 62 + Conditional expression with identical or similar branches + Conditional expression <code>i == 1 ? new Item("1") : new Item("2")</code> with identical or similar branches #loc + \ No newline at end of file