FIR: Use intersection of all upper bounds for parameterized types in

ConeKotlinType.canBeNull.

^KT-45903 In progress
This commit is contained in:
Mark Punzalan
2021-04-05 23:08:18 +00:00
committed by TeamCityServer
parent ac85f9d983
commit 21a3a14289
25 changed files with 417 additions and 3 deletions
@@ -21649,6 +21649,24 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/staticCallErrorMessage.kt");
}
@Test
@TestMetadata("typeParameterWithMixedNullableAndNotNullableBounds.kt")
public void testTypeParameterWithMixedNullableAndNotNullableBounds() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/typeParameterWithMixedNullableAndNotNullableBounds.kt");
}
@Test
@TestMetadata("typeParameterWithMultipleNotNullableBounds.kt")
public void testTypeParameterWithMultipleNotNullableBounds() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/typeParameterWithMultipleNotNullableBounds.kt");
}
@Test
@TestMetadata("typeParameterWithMultipleNullableBounds.kt")
public void testTypeParameterWithMultipleNullableBounds() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/typeParameterWithMultipleNullableBounds.kt");
}
@Nested
@TestMetadata("compiler/testData/codegen/box/javaInterop/notNullAssertions/enhancedNullability")
@TestDataPath("$PROJECT_ROOT")
@@ -2737,6 +2737,24 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest {
runTest("compiler/testData/ir/irText/types/nullChecks/platformTypeReceiver.kt");
}
@Test
@TestMetadata("typeParameterWithMixedNullableAndNotNullableBounds.kt")
public void testTypeParameterWithMixedNullableAndNotNullableBounds() throws Exception {
runTest("compiler/testData/ir/irText/types/nullChecks/typeParameterWithMixedNullableAndNotNullableBounds.kt");
}
@Test
@TestMetadata("typeParameterWithMultipleNotNullableBounds.kt")
public void testTypeParameterWithMultipleNotNullableBounds() throws Exception {
runTest("compiler/testData/ir/irText/types/nullChecks/typeParameterWithMultipleNotNullableBounds.kt");
}
@Test
@TestMetadata("typeParameterWithMultipleNullableBounds.kt")
public void testTypeParameterWithMultipleNullableBounds() throws Exception {
runTest("compiler/testData/ir/irText/types/nullChecks/typeParameterWithMultipleNullableBounds.kt");
}
@Nested
@TestMetadata("compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult")
@TestDataPath("$PROJECT_ROOT")
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef
import org.jetbrains.kotlin.name.ClassId
@@ -165,8 +166,8 @@ val ConeKotlinType.canBeNull: Boolean
return when (this) {
is ConeFlexibleType -> upperBound.canBeNull
is ConeDefinitelyNotNullType -> false
is ConeTypeParameterType -> this.lookupTag.typeParameterSymbol.fir.bounds.any { it.canBeNull }
is ConeIntersectionType -> intersectedTypes.any { it.canBeNull }
is ConeTypeParameterType -> this.lookupTag.typeParameterSymbol.fir.bounds.all { it.coneType.canBeNull }
is ConeIntersectionType -> intersectedTypes.all { it.canBeNull }
else -> isNullable
}
}
@@ -180,4 +181,4 @@ val ConeKotlinType?.functionTypeKind: FunctionClassKind?
}
val FirResolvedTypeRef.functionTypeKind: FunctionClassKind?
get() = type.functionTypeKind
get() = type.functionTypeKind
@@ -0,0 +1,26 @@
// TARGET_BACKEND: JVM
// IGNORE_BACKEND: JVM, JVM_IR
// Note: This fails on non-FIR because of KT-45903 (missing not-null assertion on argument).
// FILE: typeParameterWithMixedNullableAndNotNullableBounds.kt
fun <T> f(x: T): Int where T : CharSequence?, T : Comparable<T> {
try {
return x.compareTo(x)
} catch (e: NullPointerException) {
return 42
}
}
fun box() = try {
val r = f(J.s())
if (r == 42) "FAIL" else "Unexpected, x.compareTo(x) should have NPE'd"
} catch (e: NullPointerException) {
"OK"
}
// FILE: J.java
public class J {
public static String s() { return null; }
}
@@ -0,0 +1,22 @@
// TARGET_BACKEND: JVM
// FILE: typeParameterWithMultipleNotNullableBounds.kt
fun <T> f(x: T): Int where T : CharSequence, T : Comparable<T> {
try {
return x.compareTo(x)
} catch (e: NullPointerException) {
return 42
}
}
fun box() = try {
val r = f(J.s())
if (r == 42) "FAIL" else "Unexpected, x.compareTo(x) should have NPE'd"
} catch (e: NullPointerException) {
"OK"
}
// FILE: J.java
public class J {
public static String s() { return null; }
}
@@ -0,0 +1,12 @@
// TARGET_BACKEND: JVM
// FILE: typeParameterWithMultipleNullableBounds.kt
fun <T> f(x: T): Int? where T : CharSequence?, T : Comparable<T>? {
return x?.compareTo(x)
}
fun box() = f(J.s()) ?: "OK"
// FILE: J.java
public class J {
public static String s() { return null; }
}
@@ -0,0 +1,8 @@
fun <T> f(x: T): Int where T : CharSequence?, T : Comparable<T> {
return x.compareTo(other = x)
}
fun test() {
f<@FlexibleNullability String?>(x = s() /*!! @FlexibleNullability String */) /*~> Unit */
f<@FlexibleNullability String?>(x = #STRING /*!! @FlexibleNullability String */) /*~> Unit */
}
@@ -0,0 +1,21 @@
FILE fqName:<root> fileName:/typeParameterWithMixedNullableAndNotNullableBounds.kt
FUN name:f visibility:public modality:FINAL <T> (x:T of <root>.f) returnType:kotlin.Int
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.CharSequence?; kotlin.Comparable<T of <root>.f>]
VALUE_PARAMETER name:x index:0 type:T of <root>.f
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun f <T> (x: T of <root>.f): kotlin.Int declared in <root>'
CALL 'public abstract fun compareTo (other: T of kotlin.Comparable): kotlin.Int [operator] declared in kotlin.Comparable' type=kotlin.Int origin=null
$this: GET_VAR 'x: T of <root>.f declared in <root>.f' type=T of <root>.f origin=null
other: GET_VAR 'x: T of <root>.f declared in <root>.f' type=T of <root>.f origin=null
FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun f <T> (x: T of <root>.f): kotlin.Int declared in <root>' type=kotlin.Int origin=null
<T>: @[FlexibleNullability] kotlin.String?
x: TYPE_OP type=@[FlexibleNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] kotlin.String
CALL 'public open fun s (): @[FlexibleNullability] kotlin.String? declared in <root>.J' type=@[FlexibleNullability] kotlin.String? origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun f <T> (x: T of <root>.f): kotlin.Int declared in <root>' type=kotlin.Int origin=null
<T>: @[FlexibleNullability] kotlin.String?
x: TYPE_OP type=@[FlexibleNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] kotlin.String
GET_FIELD 'FIELD IR_EXTERNAL_JAVA_DECLARATION_STUB name:STRING type:@[FlexibleNullability] kotlin.String? visibility:public [static]' type=@[FlexibleNullability] kotlin.String? origin=GET_PROPERTY
@@ -0,0 +1,16 @@
// FILE: typeParameterWithMixedNullableAndNotNullableBounds.kt
fun <T> f(x: T): Int where T : CharSequence?, T : Comparable<T> {
return x.compareTo(x)
}
fun test() {
f(J.s())
f(J.STRING)
}
// FILE: J.java
public class J {
public static String STRING = s()
public static String s() { return null; }
}
@@ -0,0 +1,8 @@
fun <T> f(x: T): Int where T : CharSequence?, T : Comparable<T> {
return x.compareTo(other = x)
}
fun test() {
f<@FlexibleNullability String?>(x = s()) /*~> Unit */
f<@FlexibleNullability String?>(x = super.#STRING) /*~> Unit */
}
@@ -0,0 +1,19 @@
FILE fqName:<root> fileName:/typeParameterWithMixedNullableAndNotNullableBounds.kt
FUN name:f visibility:public modality:FINAL <T> (x:T of <root>.f) returnType:kotlin.Int
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.CharSequence?; kotlin.Comparable<T of <root>.f>]
VALUE_PARAMETER name:x index:0 type:T of <root>.f
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun f <T> (x: T of <root>.f): kotlin.Int declared in <root>'
CALL 'public abstract fun compareTo (other: T of kotlin.Comparable): kotlin.Int [operator] declared in kotlin.Comparable' type=kotlin.Int origin=null
$this: GET_VAR 'x: T of <root>.f declared in <root>.f' type=T of <root>.f origin=null
other: GET_VAR 'x: T of <root>.f declared in <root>.f' type=T of <root>.f origin=null
FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun f <T> (x: T of <root>.f): kotlin.Int declared in <root>' type=kotlin.Int origin=null
<T>: @[FlexibleNullability] kotlin.String?
x: CALL 'public open fun s (): @[FlexibleNullability] kotlin.String? declared in <root>.J' type=@[FlexibleNullability] kotlin.String? origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun f <T> (x: T of <root>.f): kotlin.Int declared in <root>' type=kotlin.Int origin=null
<T>: @[FlexibleNullability] kotlin.String?
x: GET_FIELD 'FIELD IR_EXTERNAL_JAVA_DECLARATION_STUB name:STRING type:@[FlexibleNullability] kotlin.String? visibility:public [static]' type=@[FlexibleNullability] kotlin.String? origin=GET_PROPERTY
@@ -0,0 +1,8 @@
fun <T> f(x: T): Int where T : CharSequence, T : Comparable<T> {
return x.compareTo(other = x)
}
fun test() {
f<@FlexibleNullability String?>(x = s() /*!! @FlexibleNullability String */) /*~> Unit */
f<@FlexibleNullability String?>(x = #STRING /*!! @FlexibleNullability String */) /*~> Unit */
}
@@ -0,0 +1,21 @@
FILE fqName:<root> fileName:/typeParameterWithMultipleNotNullableBounds.kt
FUN name:f visibility:public modality:FINAL <T> (x:T of <root>.f) returnType:kotlin.Int
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.CharSequence; kotlin.Comparable<T of <root>.f>]
VALUE_PARAMETER name:x index:0 type:T of <root>.f
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun f <T> (x: T of <root>.f): kotlin.Int declared in <root>'
CALL 'public abstract fun compareTo (other: T of kotlin.Comparable): kotlin.Int [operator] declared in kotlin.Comparable' type=kotlin.Int origin=null
$this: GET_VAR 'x: T of <root>.f declared in <root>.f' type=T of <root>.f origin=null
other: GET_VAR 'x: T of <root>.f declared in <root>.f' type=T of <root>.f origin=null
FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun f <T> (x: T of <root>.f): kotlin.Int declared in <root>' type=kotlin.Int origin=null
<T>: @[FlexibleNullability] kotlin.String?
x: TYPE_OP type=@[FlexibleNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] kotlin.String
CALL 'public open fun s (): @[FlexibleNullability] kotlin.String? declared in <root>.J' type=@[FlexibleNullability] kotlin.String? origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun f <T> (x: T of <root>.f): kotlin.Int declared in <root>' type=kotlin.Int origin=null
<T>: @[FlexibleNullability] kotlin.String?
x: TYPE_OP type=@[FlexibleNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] kotlin.String
GET_FIELD 'FIELD IR_EXTERNAL_JAVA_DECLARATION_STUB name:STRING type:@[FlexibleNullability] kotlin.String? visibility:public [static]' type=@[FlexibleNullability] kotlin.String? origin=GET_PROPERTY
@@ -0,0 +1,16 @@
// FILE: typeParameterWithMultipleNotNullableBounds.kt
fun <T> f(x: T): Int where T : CharSequence, T : Comparable<T> {
return x.compareTo(x)
}
fun test() {
f(J.s())
f(J.STRING)
}
// FILE: J.java
public class J {
public static String STRING = s()
public static String s() { return null; }
}
@@ -0,0 +1,8 @@
fun <T> f(x: T): Int where T : CharSequence, T : Comparable<T> {
return x.compareTo(other = x)
}
fun test() {
f<@FlexibleNullability String?>(x = s()) /*~> Unit */
f<@FlexibleNullability String?>(x = super.#STRING) /*~> Unit */
}
@@ -0,0 +1,19 @@
FILE fqName:<root> fileName:/typeParameterWithMultipleNotNullableBounds.kt
FUN name:f visibility:public modality:FINAL <T> (x:T of <root>.f) returnType:kotlin.Int
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.CharSequence; kotlin.Comparable<T of <root>.f>]
VALUE_PARAMETER name:x index:0 type:T of <root>.f
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun f <T> (x: T of <root>.f): kotlin.Int declared in <root>'
CALL 'public abstract fun compareTo (other: T of kotlin.Comparable): kotlin.Int [operator] declared in kotlin.Comparable' type=kotlin.Int origin=null
$this: GET_VAR 'x: T of <root>.f declared in <root>.f' type=T of <root>.f origin=null
other: GET_VAR 'x: T of <root>.f declared in <root>.f' type=T of <root>.f origin=null
FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun f <T> (x: T of <root>.f): kotlin.Int declared in <root>' type=kotlin.Int origin=null
<T>: @[FlexibleNullability] kotlin.String?
x: CALL 'public open fun s (): @[FlexibleNullability] kotlin.String? declared in <root>.J' type=@[FlexibleNullability] kotlin.String? origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun f <T> (x: T of <root>.f): kotlin.Int declared in <root>' type=kotlin.Int origin=null
<T>: @[FlexibleNullability] kotlin.String?
x: GET_FIELD 'FIELD IR_EXTERNAL_JAVA_DECLARATION_STUB name:STRING type:@[FlexibleNullability] kotlin.String? visibility:public [static]' type=@[FlexibleNullability] kotlin.String? origin=GET_PROPERTY
@@ -0,0 +1,14 @@
fun <T> f(x: T): Int? where T : CharSequence?, T : Comparable<T>? {
return { // BLOCK
val tmp0_safe_receiver: T = x
when {
EQEQ(arg0 = tmp0_safe_receiver, arg1 = null) -> null
else -> tmp0_safe_receiver.compareTo(other = x)
}
}
}
fun test() {
f<@FlexibleNullability String?>(x = s()) /*~> Unit */
f<@FlexibleNullability String?>(x = #STRING) /*~> Unit */
}
@@ -0,0 +1,30 @@
FILE fqName:<root> fileName:/typeParameterWithMultipleNullableBounds.kt
FUN name:f visibility:public modality:FINAL <T> (x:T of <root>.f) returnType:kotlin.Int?
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.CharSequence?; kotlin.Comparable<T of <root>.f>?]
VALUE_PARAMETER name:x index:0 type:T of <root>.f
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun f <T> (x: T of <root>.f): kotlin.Int? declared in <root>'
BLOCK type=kotlin.Int? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:T of <root>.f [val]
GET_VAR 'x: T of <root>.f declared in <root>.f' type=T of <root>.f origin=null
WHEN type=kotlin.Int? origin=null
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_0: T of <root>.f [val] declared in <root>.f' type=T of <root>.f origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL 'public abstract fun compareTo (other: T of kotlin.Comparable): kotlin.Int [operator] declared in kotlin.Comparable' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_0: T of <root>.f [val] declared in <root>.f' type=T of <root>.f origin=null
other: GET_VAR 'x: T of <root>.f declared in <root>.f' type=T of <root>.f origin=null
FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun f <T> (x: T of <root>.f): kotlin.Int? declared in <root>' type=kotlin.Int? origin=null
<T>: @[FlexibleNullability] kotlin.String?
x: CALL 'public open fun s (): @[FlexibleNullability] kotlin.String? declared in <root>.J' type=@[FlexibleNullability] kotlin.String? origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun f <T> (x: T of <root>.f): kotlin.Int? declared in <root>' type=kotlin.Int? origin=null
<T>: @[FlexibleNullability] kotlin.String?
x: GET_FIELD 'FIELD IR_EXTERNAL_JAVA_DECLARATION_STUB name:STRING type:@[FlexibleNullability] kotlin.String? visibility:public [static]' type=@[FlexibleNullability] kotlin.String? origin=GET_PROPERTY
@@ -0,0 +1,16 @@
// FILE: typeParameterWithMultipleNullableBounds.kt
fun <T> f(x: T): Int? where T : CharSequence?, T : Comparable<T>? {
return x?.compareTo(x)
}
fun test() {
f(J.s())
f(J.STRING)
}
// FILE: J.java
public class J {
public static String STRING = s()
public static String s() { return null; }
}
@@ -0,0 +1,14 @@
fun <T> f(x: T): Int? where T : CharSequence?, T : Comparable<T>? {
return { // BLOCK
val tmp0_safe_receiver: T = x
when {
EQEQ(arg0 = tmp0_safe_receiver, arg1 = null) -> null
else -> tmp0_safe_receiver.compareTo(other = x)
}
}
}
fun test() {
f<@FlexibleNullability String?>(x = s()) /*~> Unit */
f<@FlexibleNullability String?>(x = super.#STRING) /*~> Unit */
}
@@ -0,0 +1,30 @@
FILE fqName:<root> fileName:/typeParameterWithMultipleNullableBounds.kt
FUN name:f visibility:public modality:FINAL <T> (x:T of <root>.f) returnType:kotlin.Int?
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.CharSequence?; kotlin.Comparable<T of <root>.f>?]
VALUE_PARAMETER name:x index:0 type:T of <root>.f
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun f <T> (x: T of <root>.f): kotlin.Int? declared in <root>'
BLOCK type=kotlin.Int? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:T of <root>.f [val]
GET_VAR 'x: T of <root>.f declared in <root>.f' type=T of <root>.f origin=null
WHEN type=kotlin.Int? origin=null
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_0: T of <root>.f [val] declared in <root>.f' type=T of <root>.f origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL 'public abstract fun compareTo (other: T of kotlin.Comparable): kotlin.Int [operator] declared in kotlin.Comparable' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_0: T of <root>.f [val] declared in <root>.f' type=T of <root>.f origin=null
other: GET_VAR 'x: T of <root>.f declared in <root>.f' type=T of <root>.f origin=null
FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun f <T> (x: T of <root>.f): kotlin.Int? declared in <root>' type=kotlin.Int? origin=null
<T>: @[FlexibleNullability] kotlin.String?
x: CALL 'public open fun s (): @[FlexibleNullability] kotlin.String? declared in <root>.J' type=@[FlexibleNullability] kotlin.String? origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun f <T> (x: T of <root>.f): kotlin.Int? declared in <root>' type=kotlin.Int? origin=null
<T>: @[FlexibleNullability] kotlin.String?
x: GET_FIELD 'FIELD IR_EXTERNAL_JAVA_DECLARATION_STUB name:STRING type:@[FlexibleNullability] kotlin.String? visibility:public [static]' type=@[FlexibleNullability] kotlin.String? origin=GET_PROPERTY
@@ -21631,6 +21631,24 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/staticCallErrorMessage.kt");
}
@Test
@TestMetadata("typeParameterWithMixedNullableAndNotNullableBounds.kt")
public void testTypeParameterWithMixedNullableAndNotNullableBounds() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/typeParameterWithMixedNullableAndNotNullableBounds.kt");
}
@Test
@TestMetadata("typeParameterWithMultipleNotNullableBounds.kt")
public void testTypeParameterWithMultipleNotNullableBounds() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/typeParameterWithMultipleNotNullableBounds.kt");
}
@Test
@TestMetadata("typeParameterWithMultipleNullableBounds.kt")
public void testTypeParameterWithMultipleNullableBounds() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/typeParameterWithMultipleNullableBounds.kt");
}
@Nested
@TestMetadata("compiler/testData/codegen/box/javaInterop/notNullAssertions/enhancedNullability")
@TestDataPath("$PROJECT_ROOT")
@@ -21649,6 +21649,24 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/staticCallErrorMessage.kt");
}
@Test
@TestMetadata("typeParameterWithMixedNullableAndNotNullableBounds.kt")
public void testTypeParameterWithMixedNullableAndNotNullableBounds() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/typeParameterWithMixedNullableAndNotNullableBounds.kt");
}
@Test
@TestMetadata("typeParameterWithMultipleNotNullableBounds.kt")
public void testTypeParameterWithMultipleNotNullableBounds() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/typeParameterWithMultipleNotNullableBounds.kt");
}
@Test
@TestMetadata("typeParameterWithMultipleNullableBounds.kt")
public void testTypeParameterWithMultipleNullableBounds() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/typeParameterWithMultipleNullableBounds.kt");
}
@Nested
@TestMetadata("compiler/testData/codegen/box/javaInterop/notNullAssertions/enhancedNullability")
@TestDataPath("$PROJECT_ROOT")
@@ -2737,6 +2737,24 @@ public class IrTextTestGenerated extends AbstractIrTextTest {
runTest("compiler/testData/ir/irText/types/nullChecks/platformTypeReceiver.kt");
}
@Test
@TestMetadata("typeParameterWithMixedNullableAndNotNullableBounds.kt")
public void testTypeParameterWithMixedNullableAndNotNullableBounds() throws Exception {
runTest("compiler/testData/ir/irText/types/nullChecks/typeParameterWithMixedNullableAndNotNullableBounds.kt");
}
@Test
@TestMetadata("typeParameterWithMultipleNotNullableBounds.kt")
public void testTypeParameterWithMultipleNotNullableBounds() throws Exception {
runTest("compiler/testData/ir/irText/types/nullChecks/typeParameterWithMultipleNotNullableBounds.kt");
}
@Test
@TestMetadata("typeParameterWithMultipleNullableBounds.kt")
public void testTypeParameterWithMultipleNullableBounds() throws Exception {
runTest("compiler/testData/ir/irText/types/nullChecks/typeParameterWithMultipleNullableBounds.kt");
}
@Nested
@TestMetadata("compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult")
@TestDataPath("$PROJECT_ROOT")
@@ -18025,6 +18025,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/kt24258.kt");
}
@TestMetadata("typeParameterWithMixedNullableAndNotNullableBounds.kt")
public void ignoreTypeParameterWithMixedNullableAndNotNullableBounds() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/typeParameterWithMixedNullableAndNotNullableBounds.kt");
}
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath);
}
@@ -18133,6 +18138,16 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/staticCallErrorMessage.kt");
}
@TestMetadata("typeParameterWithMultipleNotNullableBounds.kt")
public void testTypeParameterWithMultipleNotNullableBounds() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/typeParameterWithMultipleNotNullableBounds.kt");
}
@TestMetadata("typeParameterWithMultipleNullableBounds.kt")
public void testTypeParameterWithMultipleNullableBounds() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/notNullAssertions/typeParameterWithMultipleNullableBounds.kt");
}
@TestMetadata("compiler/testData/codegen/box/javaInterop/notNullAssertions/enhancedNullability")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)