diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java index 7aaecc0b85d0..925a8ac434fd 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java @@ -1490,8 +1490,9 @@ public class ControlFlowAnalyzer extends JavaElementVisitor { if (TypeConversionUtil.isPrimitiveAndNotNull(expectedType) && TypeConversionUtil.isPrimitiveWrapper(actualType)) { addInstruction(new UnwrapSpecialFieldInstruction(SpecialField.UNBOX)); + actualType = PsiPrimitiveType.getUnboxedType(actualType); } - else if (TypeConversionUtil.isPrimitiveAndNotNull(actualType) && TypeConversionUtil.isAssignableFromPrimitiveWrapper(expectedType)) { + if (TypeConversionUtil.isPrimitiveAndNotNull(actualType) && TypeConversionUtil.isAssignableFromPrimitiveWrapper(expectedType)) { addConditionalErrorThrow(); PsiType boxedType = ((PsiPrimitiveType)actualType).getBoxedType(context); addInstruction(new BoxingInstruction(boxedType)); diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/NewBoxedNumberEquality.java b/java/java-tests/testData/inspection/dataFlow/fixture/NewBoxedNumberEquality.java index f9ad4ad4f102..4172599f30fe 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/NewBoxedNumberEquality.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/NewBoxedNumberEquality.java @@ -1,6 +1,16 @@ import java.util.*; class Testcase { + // IDEA-219122 + public static void boxWithCast() { + Double d = 1D; + Long l = 1L; + if (d.equals(Double.valueOf(l))) { + System.out.println("e. d: " + d + " l: " + l); + } else { + System.out.println("ne. d: " + d + " l: " + l); + } + } void intToLong() { Integer i = 2;