K2: Fix processing inference lower bound NullableType <: T & Any
Previously, it was led to plainly adding NullableType <: T constraint which silently led to successful call completion. What is suggested is just marking such initial constraint as unsuccessful. In K1, the error was reported just via additional type checking mechanism being run after call completion. ^KT-58665 Fixed
This commit is contained in:
committed by
Space Team
parent
7bc04e2c33
commit
0d070f8ba9
-14
@@ -1,14 +0,0 @@
|
||||
// !LANGUAGE: +DefinitelyNonNullableTypes
|
||||
|
||||
fun <T> foo(x: T, y: T & Any) = x!!
|
||||
|
||||
fun main() {
|
||||
foo<String>("", "").length
|
||||
foo<String>("", <!NULL_FOR_NONNULL_TYPE!>null<!>).length
|
||||
foo<String?>(null, "").length
|
||||
foo<String?>(null, null).length
|
||||
|
||||
foo("", "").length
|
||||
foo("", null).length
|
||||
foo(null, "").length
|
||||
}
|
||||
Vendored
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +DefinitelyNonNullableTypes
|
||||
|
||||
fun <T> foo(x: T, y: T & Any) = x!!
|
||||
|
||||
Vendored
+1
-1
@@ -28,6 +28,6 @@ fun <F> main(x: F, y: F, z: F, w: F, m: F) {
|
||||
w1.foo()
|
||||
w2.foo()
|
||||
|
||||
expectNN(m)
|
||||
expectNN(<!ARGUMENT_TYPE_MISMATCH!>m<!>)
|
||||
expectNN(m!!)
|
||||
}
|
||||
|
||||
Vendored
-14
@@ -1,14 +0,0 @@
|
||||
// !LANGUAGE: +DefinitelyNonNullableTypes
|
||||
|
||||
fun <T> foo(x: T, y: T & Any): T & Any = x ?: y
|
||||
|
||||
fun main() {
|
||||
foo<String>("", "").length
|
||||
foo<String>("", <!NULL_FOR_NONNULL_TYPE!>null<!>).length
|
||||
foo<String?>(null, "").length
|
||||
foo<String?>(null, null).length
|
||||
|
||||
foo("", "").length
|
||||
foo("", null).length
|
||||
foo(null, "").length
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +DefinitelyNonNullableTypes
|
||||
|
||||
fun <T> foo(x: T, y: T & Any): T & Any = x ?: y
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
// ISSUE: KT-58665
|
||||
|
||||
fun <R, T : Any> use(x: String?, r: R, t: T) {
|
||||
foo(<!ARGUMENT_TYPE_MISMATCH!>x<!>)
|
||||
foo(<!ARGUMENT_TYPE_MISMATCH!>r<!>)
|
||||
foo(t)
|
||||
}
|
||||
|
||||
fun <W> foo(x: W & Any) {}
|
||||
@@ -0,0 +1,9 @@
|
||||
// ISSUE: KT-58665
|
||||
|
||||
fun <R, T : Any> use(x: String?, r: R, t: T) {
|
||||
foo(<!TYPE_MISMATCH!>x<!>)
|
||||
foo(<!TYPE_MISMATCH!>r<!>)
|
||||
foo(t)
|
||||
}
|
||||
|
||||
fun <W> foo(x: W & Any) {}
|
||||
@@ -0,0 +1,8 @@
|
||||
// ISSUE: KT-58665
|
||||
// FULL_JDK
|
||||
|
||||
import java.util.*
|
||||
|
||||
fun use(x: String?) {
|
||||
Optional.of(<!ARGUMENT_TYPE_MISMATCH!>x<!>)
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// ISSUE: KT-58665
|
||||
// FULL_JDK
|
||||
|
||||
import java.util.*
|
||||
|
||||
fun use(x: String?) {
|
||||
Optional.of(<!TYPE_MISMATCH!>x<!>)
|
||||
}
|
||||
Vendored
+2
-2
@@ -21,8 +21,8 @@ fun <V> SLRUMap<V>.getOrPut(value: V, l: List<V>) {
|
||||
takeV(<!ARGUMENT_TYPE_MISMATCH!>value<!>)
|
||||
takeVList(<!ARGUMENT_TYPE_MISMATCH!>l<!>)
|
||||
|
||||
takeE(value)
|
||||
takeEList(l)
|
||||
takeE(<!ARGUMENT_TYPE_MISMATCH!>value<!>)
|
||||
takeEList(<!ARGUMENT_TYPE_MISMATCH!>l<!>)
|
||||
takeE(id(value))
|
||||
|
||||
if (value != null) {
|
||||
|
||||
Vendored
+2
-2
@@ -22,8 +22,8 @@ fun <V> SLRUMap<V>.getOrPut(value: V, l: List<V>) {
|
||||
takeV(<!ARGUMENT_TYPE_MISMATCH!>value<!>)
|
||||
takeVList(<!ARGUMENT_TYPE_MISMATCH!>l<!>)
|
||||
|
||||
takeE(value)
|
||||
takeEList(l)
|
||||
takeE(<!ARGUMENT_TYPE_MISMATCH!>value<!>)
|
||||
takeEList(<!ARGUMENT_TYPE_MISMATCH!>l<!>)
|
||||
takeE(id(value))
|
||||
|
||||
if (value != null) {
|
||||
|
||||
Vendored
-18
@@ -1,18 +0,0 @@
|
||||
// FILE: A.java
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class A {
|
||||
public static <T> void bar(@NotNull T x, T y) { }
|
||||
public static String platformString() { return null; }
|
||||
}
|
||||
|
||||
// FILE: k.kt
|
||||
|
||||
fun test() {
|
||||
A.bar(null, "")
|
||||
|
||||
A.bar<String>(<!NULL_FOR_NONNULL_TYPE!>null<!>, "")
|
||||
A.bar<String?>(null, "")
|
||||
A.bar(null, A.platformString())
|
||||
}
|
||||
Vendored
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: A.java
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
Reference in New Issue
Block a user