diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java index d3d3a2a9009..7d7cc50e39e 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java @@ -15237,6 +15237,11 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirOldFronte runTest("compiler/testData/diagnostics/tests/nullableTypes/baseWithNullableUpperBound.kt"); } + @TestMetadata("definitelyNotNullWithNullableBound.kt") + public void testDefinitelyNotNullWithNullableBound() throws Exception { + runTest("compiler/testData/diagnostics/tests/nullableTypes/definitelyNotNullWithNullableBound.kt"); + } + @TestMetadata("elvisOnUnit.kt") public void testElvisOnUnit() throws Exception { runTest("compiler/testData/diagnostics/tests/nullableTypes/elvisOnUnit.kt"); diff --git a/compiler/testData/diagnostics/tests/nullableTypes/definitelyNotNullWithNullableBound.fir.kt b/compiler/testData/diagnostics/tests/nullableTypes/definitelyNotNullWithNullableBound.fir.kt new file mode 100644 index 00000000000..def41f7f059 --- /dev/null +++ b/compiler/testData/diagnostics/tests/nullableTypes/definitelyNotNullWithNullableBound.fir.kt @@ -0,0 +1,17 @@ +// !LANGUAGE: +NewInference +// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_EXPRESSION + +fun makeDefinitelyNotNull(arg: D?): D = TODO() + +fun test(arg: N) { + makeDefinitelyNotNull(arg) ?: 1 + + makeDefinitelyNotNull(arg)!! + + makeDefinitelyNotNull(arg)?.toInt() + + val nullImposible = when (val dnn = makeDefinitelyNotNull(arg)) { + null -> false + else -> true + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/nullableTypes/definitelyNotNullWithNullableBound.kt b/compiler/testData/diagnostics/tests/nullableTypes/definitelyNotNullWithNullableBound.kt new file mode 100644 index 00000000000..6fa620a97af --- /dev/null +++ b/compiler/testData/diagnostics/tests/nullableTypes/definitelyNotNullWithNullableBound.kt @@ -0,0 +1,17 @@ +// !LANGUAGE: +NewInference +// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_EXPRESSION + +fun makeDefinitelyNotNull(arg: D?): D = TODO() + +fun test(arg: N) { + makeDefinitelyNotNull(arg) ?: 1 + + makeDefinitelyNotNull(arg)!! + + makeDefinitelyNotNull(arg)?.toInt() + + val nullImposible = when (val dnn = makeDefinitelyNotNull(arg)) { + null -> false + else -> true + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/nullableTypes/definitelyNotNullWithNullableBound.txt b/compiler/testData/diagnostics/tests/nullableTypes/definitelyNotNullWithNullableBound.txt new file mode 100644 index 00000000000..aed39d75410 --- /dev/null +++ b/compiler/testData/diagnostics/tests/nullableTypes/definitelyNotNullWithNullableBound.txt @@ -0,0 +1,4 @@ +package + +public fun makeDefinitelyNotNull(/*0*/ arg: D?): D +public fun test(/*0*/ arg: N): kotlin.Unit diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index a9d555ab423..4b971012f9c 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -15244,6 +15244,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTestWithFirVali runTest("compiler/testData/diagnostics/tests/nullableTypes/baseWithNullableUpperBound.kt"); } + @TestMetadata("definitelyNotNullWithNullableBound.kt") + public void testDefinitelyNotNullWithNullableBound() throws Exception { + runTest("compiler/testData/diagnostics/tests/nullableTypes/definitelyNotNullWithNullableBound.kt"); + } + @TestMetadata("elvisOnUnit.kt") public void testElvisOnUnit() throws Exception { runTest("compiler/testData/diagnostics/tests/nullableTypes/elvisOnUnit.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 64fa36baa77..041d85739ec 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -15239,6 +15239,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/nullableTypes/baseWithNullableUpperBound.kt"); } + @TestMetadata("definitelyNotNullWithNullableBound.kt") + public void testDefinitelyNotNullWithNullableBound() throws Exception { + runTest("compiler/testData/diagnostics/tests/nullableTypes/definitelyNotNullWithNullableBound.kt"); + } + @TestMetadata("elvisOnUnit.kt") public void testElvisOnUnit() throws Exception { runTest("compiler/testData/diagnostics/tests/nullableTypes/elvisOnUnit.kt"); diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java index 1031c466a63..34676a24807 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java @@ -295,6 +295,9 @@ public class TypeUtils { if (FlexibleTypesKt.isFlexible(type) && isNullableType(FlexibleTypesKt.asFlexibleType(type).getUpperBound())) { return true; } + if (SpecialTypesKt.isDefinitelyNotNullType(type)) { + return false; + } if (isTypeParameter(type)) { return hasNullableSuperType(type); }