x?.y is now nullable even if y is Unit + three tests + codegen test fix + source code fix #KT-7936 Fixed #KT-8347 Fixed
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
class My {
|
||||
fun other() {}
|
||||
}
|
||||
|
||||
fun another() {}
|
||||
|
||||
fun foo(x: My?) {
|
||||
// Both elvis parts should be alive
|
||||
// See also KT-7936, KT-8347
|
||||
x?.other() ?: another()
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package
|
||||
|
||||
internal fun another(): kotlin.Unit
|
||||
internal fun foo(/*0*/ x: My?): kotlin.Unit
|
||||
|
||||
internal final class My {
|
||||
public constructor My()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
internal final fun other(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
data class My(val x: Unit)
|
||||
|
||||
fun foo(my: My?): Int? {
|
||||
val x = my?.x
|
||||
// ?. is required here
|
||||
return x?.hashCode()
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package
|
||||
|
||||
internal fun foo(/*0*/ my: My?): kotlin.Int?
|
||||
|
||||
kotlin.data() internal final class My {
|
||||
public constructor My(/*0*/ x: kotlin.Unit)
|
||||
internal final val x: kotlin.Unit
|
||||
internal final /*synthesized*/ fun component1(): kotlin.Unit
|
||||
public final /*synthesized*/ fun copy(/*0*/ x: kotlin.Unit = ...): My
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
fun foo(x: Int?) {
|
||||
// Both parts of the Elvis should be alive, see KT-7936
|
||||
x?.let {
|
||||
smth()
|
||||
}?: orElse()
|
||||
}
|
||||
|
||||
fun smth() {}
|
||||
fun orElse() {}
|
||||
@@ -0,0 +1,5 @@
|
||||
package
|
||||
|
||||
internal fun foo(/*0*/ x: kotlin.Int?): kotlin.Unit
|
||||
internal fun orElse(): kotlin.Unit
|
||||
internal fun smth(): kotlin.Unit
|
||||
Reference in New Issue
Block a user