From f3363ce08c7aecff5020764d70c5b0e8e81c2cc3 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 6 Jun 2016 14:40:55 +0300 Subject: [PATCH] conditional with eq branches: don't push conditional inside type cast for functional expressions, incorrect context will appear otherwise --- .../src/com/siyeh/ig/psiutils/EquivalenceChecker.java | 3 +++ .../ConditionalExpressionWithIdenticalBranches.java | 6 ++++++ 2 files changed, 9 insertions(+) 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 d06eba609c06..9a4abecd7202 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/EquivalenceChecker.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/EquivalenceChecker.java @@ -781,6 +781,9 @@ public class EquivalenceChecker { } final PsiExpression operand1 = typeCastExpression1.getOperand(); final PsiExpression operand2 = typeCastExpression2.getOperand(); + if (operand1 instanceof PsiFunctionalExpression || operand2 instanceof PsiFunctionalExpression) { + return EXACTLY_UN_MATCHES; + } return expressionsAreEquivalentDecision(operand1, operand2).setConcreteIfExactUnMatches(operand1, operand2); } 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 ae47557b2100..b25ba92e5d3f 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 @@ -72,4 +72,10 @@ class ConditionalExpressionWithIdenticalBranches { String a = f ? test(new String[]{"a", "b"}) : test("a"); } } + + static class WithFunctionalExpression { + private void foo(boolean b) { + Runnable r = b ? (Runnable) () -> {} : (Runnable) () -> {}; + } + } } \ No newline at end of file