diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java index 32cd8428878..6a59fa9a9b7 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java @@ -1306,7 +1306,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { } // If break or continue was possible, take condition check info as the jump info - return TypeInfoFactoryPackage.createTypeInfo(DataFlowUtils.checkType(type, expression, context), + return TypeInfoFactoryPackage.createTypeInfo(DataFlowUtils.checkType(type, expression, contextWithExpectedType), dataFlowInfo, loopBreakContinuePossible, context.dataFlowInfo); diff --git a/compiler/testData/codegen/boxAgainstJava/notNullAssertions/RightElvisOperand.java b/compiler/testData/codegen/boxAgainstJava/notNullAssertions/RightElvisOperand.java new file mode 100644 index 00000000000..226c959529f --- /dev/null +++ b/compiler/testData/codegen/boxAgainstJava/notNullAssertions/RightElvisOperand.java @@ -0,0 +1,5 @@ +class RightElvisOperand { + static String foo() { + return null; + } +} \ No newline at end of file diff --git a/compiler/testData/codegen/boxAgainstJava/notNullAssertions/RightElvisOperand.kt b/compiler/testData/codegen/boxAgainstJava/notNullAssertions/RightElvisOperand.kt new file mode 100644 index 00000000000..39530d56335 --- /dev/null +++ b/compiler/testData/codegen/boxAgainstJava/notNullAssertions/RightElvisOperand.kt @@ -0,0 +1,21 @@ +fun baz(): String? = null + +fun bar(): String = baz() ?: RightElvisOperand.foo() + +fun foo(x: String) {} + +fun box(): String { + try { + foo(baz() ?: RightElvisOperand.foo()) + return "Fail: should have been an exception in `foo(baz() ?: RightElvisOperand.foo())`" + } + catch(e: IllegalStateException) {} + + try { + bar() + return "Fail: should have been an exception in `bar()`" + } + catch(e: IllegalStateException) { + return "OK" + } +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxAgainstJavaCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxAgainstJavaCodegenTestGenerated.java index b623aa01867..5afb47422e4 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxAgainstJavaCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxAgainstJavaCodegenTestGenerated.java @@ -423,6 +423,12 @@ public class BlackBoxAgainstJavaCodegenTestGenerated extends AbstractBlackBoxCod String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxAgainstJava/notNullAssertions/Delegation.kt"); doTestAgainstJava(fileName); } + + @TestMetadata("RightElvisOperand.kt") + public void testRightElvisOperand() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxAgainstJava/notNullAssertions/RightElvisOperand.kt"); + doTestAgainstJava(fileName); + } } @TestMetadata("compiler/testData/codegen/boxAgainstJava/platformTypes")