Support type arguments enhancement from type parameters bounds
Currently, only works for codeanalysis annotations because type parameters bounds are enhanced only for them
This commit is contained in:
committed by
Victor Petukhov
parent
e9e05c53e1
commit
392ef9aa2b
Vendored
+59
@@ -0,0 +1,59 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
||||
// FILE: A.java
|
||||
|
||||
import jspecify.annotations.*;
|
||||
|
||||
public class A<T extends @NotNull Object, E extends @Nullable Object, F extends @UnknownNullness Object> {
|
||||
}
|
||||
|
||||
// FILE: B.java
|
||||
|
||||
import jspecify.annotations.*;
|
||||
|
||||
@DefaultNullable
|
||||
public class B {
|
||||
public void bar(A<String, String, String> a) {}
|
||||
}
|
||||
|
||||
// FILE: C.java
|
||||
|
||||
import jspecify.annotations.*;
|
||||
|
||||
@DefaultNotNull
|
||||
public class C {
|
||||
public void bar(A<String, String, String> a) {}
|
||||
}
|
||||
|
||||
// FILE: D.java
|
||||
|
||||
import jspecify.annotations.*;
|
||||
|
||||
@DefaultUnknownNullness
|
||||
public class D {
|
||||
public void bar(A<String, String, String> a) {}
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
fun main(
|
||||
aNotNullNotNullNotNull: A<String, String, String>,
|
||||
aNotNullNotNullNull: A<String, String, String?>,
|
||||
aNotNullNullNotNull: A<String, String?, String>,
|
||||
aNotNullNullNull: A<String, String?, String?>,
|
||||
b: B, c: C, d: D
|
||||
) {
|
||||
b.bar(<!TYPE_MISMATCH!>aNotNullNotNullNotNull<!>)
|
||||
b.bar(<!TYPE_MISMATCH!>aNotNullNotNullNull<!>)
|
||||
b.bar(<!TYPE_MISMATCH!>aNotNullNullNotNull<!>)
|
||||
b.bar(aNotNullNullNull)
|
||||
|
||||
c.bar(aNotNullNotNullNotNull)
|
||||
c.bar(<!TYPE_MISMATCH!>aNotNullNotNullNull<!>)
|
||||
c.bar(<!TYPE_MISMATCH!>aNotNullNullNotNull<!>)
|
||||
c.bar(<!TYPE_MISMATCH!>aNotNullNullNull<!>)
|
||||
|
||||
d.bar(<!TYPE_MISMATCH!>aNotNullNotNullNotNull<!>)
|
||||
d.bar(<!TYPE_MISMATCH!>aNotNullNotNullNull<!>)
|
||||
d.bar(aNotNullNullNotNull)
|
||||
d.bar(aNotNullNullNull)
|
||||
}
|
||||
Vendored
+34
@@ -0,0 +1,34 @@
|
||||
package
|
||||
|
||||
public fun main(/*0*/ aNotNullNotNullNotNull: A<kotlin.String, kotlin.String, kotlin.String>, /*1*/ aNotNullNotNullNull: A<kotlin.String, kotlin.String, kotlin.String?>, /*2*/ aNotNullNullNotNull: A<kotlin.String, kotlin.String?, kotlin.String>, /*3*/ aNotNullNullNull: A<kotlin.String, kotlin.String?, kotlin.String?>, /*4*/ b: B, /*5*/ c: C, /*6*/ d: D): kotlin.Unit
|
||||
|
||||
public open class A</*0*/ T : @jspecify.annotations.NotNull kotlin.Any, /*1*/ E, /*2*/ F : @jspecify.annotations.UnknownNullness kotlin.Any!> {
|
||||
public constructor A</*0*/ T : @jspecify.annotations.NotNull kotlin.Any, /*1*/ E, /*2*/ F : @jspecify.annotations.UnknownNullness kotlin.Any!>()
|
||||
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
|
||||
}
|
||||
|
||||
@jspecify.annotations.DefaultNullable public open class B {
|
||||
public constructor B()
|
||||
public open fun bar(/*0*/ a: A<kotlin.String, kotlin.String?, kotlin.String?>?): kotlin.Unit
|
||||
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
|
||||
}
|
||||
|
||||
@jspecify.annotations.DefaultNotNull public open class C {
|
||||
public constructor C()
|
||||
public open fun bar(/*0*/ a: A<kotlin.String, kotlin.String, kotlin.String>): kotlin.Unit
|
||||
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
|
||||
}
|
||||
|
||||
@DefaultUnknownNullness /* annotation class not found */ public open class D {
|
||||
public constructor D()
|
||||
public open fun bar(/*0*/ a: A<kotlin.String, kotlin.String?, kotlin.String!>!): kotlin.Unit
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user