diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index 96c753b4faf..2510a1c36d5 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -17269,6 +17269,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/j+k/recursiveRawUpperBound3.kt"); } + @Test + @TestMetadata("safeCallDefinitelyNotNull.kt") + public void testSafeCallDefinitelyNotNull() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/safeCallDefinitelyNotNull.kt"); + } + @Test @TestMetadata("samInConstructorWithGenerics.kt") public void testSamInConstructorWithGenerics() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index d783fc562aa..f249c94ed81 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -17269,6 +17269,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/j+k/recursiveRawUpperBound3.kt"); } + @Test + @TestMetadata("safeCallDefinitelyNotNull.kt") + public void testSafeCallDefinitelyNotNull() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/safeCallDefinitelyNotNull.kt"); + } + @Test @TestMetadata("samInConstructorWithGenerics.kt") public void testSamInConstructorWithGenerics() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index 07a6b6be157..ec32cdd27a5 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -17269,6 +17269,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/j+k/recursiveRawUpperBound3.kt"); } + @Test + @TestMetadata("safeCallDefinitelyNotNull.kt") + public void testSafeCallDefinitelyNotNull() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/safeCallDefinitelyNotNull.kt"); + } + @Test @TestMetadata("samInConstructorWithGenerics.kt") public void testSamInConstructorWithGenerics() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt index 61d7e429ac5..bfd7c4815dc 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt @@ -890,7 +890,7 @@ abstract class FirDataFlowAnalyzer( safeCall.receiver.let { receiver -> val type = receiver.coneType.takeIf { it.isMarkedNullable } - ?.withNullability(ConeNullability.NOT_NULL, components.session.typeContext) + ?.makeConeTypeDefinitelyNotNullOrNotNull(components.session.typeContext) ?: return@let val variable = variableStorage.getOrCreateVariable(flow, receiver) diff --git a/compiler/testData/diagnostics/tests/j+k/safeCallDefinitelyNotNull.fir.kt b/compiler/testData/diagnostics/tests/j+k/safeCallDefinitelyNotNull.fir.kt new file mode 100644 index 00000000000..a10001d2d60 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/safeCallDefinitelyNotNull.fir.kt @@ -0,0 +1,11 @@ +// SKIP_TXT +// FILE: Api.java +import org.jetbrains.annotations.NotNull; +public abstract class Api { + public abstract void typeOf(@NotNull T node); +} + +// FILE: main.kt +fun foo(a: Api, e: E?) { + e?.let { a.typeOf(e) } +} diff --git a/compiler/testData/diagnostics/tests/j+k/safeCallDefinitelyNotNull.kt b/compiler/testData/diagnostics/tests/j+k/safeCallDefinitelyNotNull.kt new file mode 100644 index 00000000000..a708a41a0bb --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/safeCallDefinitelyNotNull.kt @@ -0,0 +1,11 @@ +// SKIP_TXT +// FILE: Api.java +import org.jetbrains.annotations.NotNull; +public abstract class Api { + public abstract void typeOf(@NotNull T node); +} + +// FILE: main.kt +fun foo(a: Api, e: E?) { + e?.let { a.typeOf(e) } +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index bc3f16ec7f8..d3e7797effc 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -17275,6 +17275,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/j+k/recursiveRawUpperBound3.kt"); } + @Test + @TestMetadata("safeCallDefinitelyNotNull.kt") + public void testSafeCallDefinitelyNotNull() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/safeCallDefinitelyNotNull.kt"); + } + @Test @TestMetadata("samInConstructorWithGenerics.kt") public void testSamInConstructorWithGenerics() throws Exception {