blob: bc335a31b6375b22e4e9fc70e5602fc9fb57971a [file]
// RUN_PIPELINE_TILL: BACKEND
// LATEST_LV_DIFFERENCE
// IGNORE_DEXING
// ISSUE: KT-49710
// WITH_STDLIB
// FILE: JClass.java
import org.jetbrains.annotations.Nullable;
public class JClass {
@Nullable
public static int intProp = 0;
@Nullable
public static Integer integerProp = 0;
@Nullable
public static String stringProp = "";
@Nullable
public static Object objectProp = new Object();
}
// FILE: test.kt
<!CONFLICTING_JVM_DECLARATIONS!>fun Int?.isNull() = when (this) {
null -> true
is Int -> false
}<!>
fun <T> List<T>.isNull() = when (this) {
is List<T> -> false
}
fun <T> List<T>.isNull1() = when (this) {
is List<*> -> false
}
<!CONFLICTING_JVM_DECLARATIONS!>fun <T: Int?> isNull(arg: T) = when(arg) {
is Int -> false
null -> true
}<!>
fun testNullableInt(arg: Int?) = when (arg) {
null -> true
is Int -> false
}
fun testNullable(arg: Any?) = when (arg) {
null -> true
is Any -> false
}
fun testNullable(arg: Nothing?) = when (arg) {
<!SENSELESS_COMPARISON!>null<!> -> true
}
fun testNullable(arg: Unit?) = when (arg) {
null -> true
is Unit -> false
}
fun testNullable(arg: IntArray?) = when (arg) {
null -> true
is IntArray -> false
}
fun testNullable(arg: UInt?) = when (arg) {
null -> true
is UInt -> false
}
typealias NullableInt = Int?
fun testTypeAliasToNullable(arg: NullableInt) = when (arg) {
null -> true
is NullableInt -> false
}
fun NullableInt.isNotNull() = when (this) {
null -> false
is NullableInt -> true
}
class KClassWithGetter {
var prop: Int? = 0
get() = when (prop) {
null -> null
is Int -> prop
}
}
fun testSubclass(arg: String?) = when (arg) {
null -> true
is CharSequence -> false
}
fun testSmartCast(x: Any?) {
if (x !is String?) return
return when (x) {
is CharSequence -> Unit
null -> Unit
}
}
val testLambda = {arg: String? -> when (arg) {
null -> true
is CharSequence -> false
}}
fun testLambda(arg: (() -> Unit)?) = when (arg) {
null -> true
is ()->Unit -> false
}
sealed class SealedClass {
class A(val a: String) : SealedClass()
class B(val b: String) : SealedClass()
}
fun testSealedClass(arg: SealedClass?) {
when (arg) {
is SealedClass.A? -> println(arg?.a)
is SealedClass.B -> println(arg.b)
}
}
fun testJavaNullableProps() {
var a = when (JClass.intProp) {
<!SENSELESS_NULL_IN_WHEN!>null<!> -> true
is Int -> false
}
a = when (JClass.intProp) {
is Int -> false
}
a = when (JClass.integerProp) {
null -> true
is Int -> false
}
a = when (JClass.stringProp) {
null -> true
is String -> false
}
a = when (JClass.objectProp) {
null -> true
is Any -> false
}
}
fun testWhenStatementWithComma(arg: Int?): Int {
return when(arg) {
is Int, null -> 2
}
}
sealed class Value
fun test(value: Value?) {
val x = when (value) {
is Value -> 1
null -> 2
}
}
class Inv<T>(val x: T)
fun testCaptured1(inv1: Inv<*>, inv2: Inv<out Number?>) {
val arg1 = when (inv1.x) {
is Any -> true
<!SENSELESS_COMPARISON!>null<!> -> false
}
val arg2 = when (inv2.x) {
is Number -> true
null -> false
}
}
fun typeErased(list: MutableList<String>?) = when (list) {
is MutableList -> 1
null -> 2
}
fun <T> testDNN(arg: T& Any) = when (arg) {
is T -> false
}
fun isNullable(a: Int?) = when (a) {
<!USELESS_IS_CHECK!>is Number?<!> -> false
}
/* GENERATED_FIR_TAGS: assignment, classDeclaration, disjunctionExpression, dnnType, equalityExpression,
funWithExtensionReceiver, functionDeclaration, functionalType, getter, ifExpression, integerLiteral, isExpression,
lambdaLiteral, localProperty, nestedClass, nullableType, outProjection, primaryConstructor, propertyDeclaration,
safeCall, sealed, smartcast, starProjection, typeAliasDeclaration, typeConstraint, typeParameter, whenExpression,
whenWithSubject */