Move foreign annotation tests into diagnostics folder
This commit is contained in:
-2
@@ -1,7 +1,6 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
||||||
// SOURCE_RETENTION_ANNOTATIONS
|
// SOURCE_RETENTION_ANNOTATIONS
|
||||||
// FILE: A.java
|
// FILE: A.java
|
||||||
|
|
||||||
import org.checkerframework.checker.nullness.qual.*;
|
import org.checkerframework.checker.nullness.qual.*;
|
||||||
|
|
||||||
public class A<T> {
|
public class A<T> {
|
||||||
@@ -22,7 +21,6 @@ public class A<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: main.kt
|
// FILE: main.kt
|
||||||
|
|
||||||
fun main(a: A<String>, a1: A<String?>) {
|
fun main(a: A<String>, a1: A<String?>) {
|
||||||
a.foo("", null)?.length
|
a.foo("", null)?.length
|
||||||
a.foo("", null)<!UNSAFE_CALL!>.<!>length
|
a.foo("", null)<!UNSAFE_CALL!>.<!>length
|
||||||
-2
@@ -1,7 +1,6 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
||||||
// SOURCE_RETENTION_ANNOTATIONS
|
// SOURCE_RETENTION_ANNOTATIONS
|
||||||
// FILE: A.java
|
// FILE: A.java
|
||||||
|
|
||||||
import org.eclipse.jdt.annotation.*;
|
import org.eclipse.jdt.annotation.*;
|
||||||
|
|
||||||
public class A<T> {
|
public class A<T> {
|
||||||
@@ -22,7 +21,6 @@ public class A<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: main.kt
|
// FILE: main.kt
|
||||||
|
|
||||||
fun main(a: A<String>, a1: A<String?>) {
|
fun main(a: A<String>, a1: A<String?>) {
|
||||||
a.foo("", null)?.length
|
a.foo("", null)?.length
|
||||||
a.foo("", null)<!UNSAFE_CALL!>.<!>length
|
a.foo("", null)<!UNSAFE_CALL!>.<!>length
|
||||||
+88
@@ -0,0 +1,88 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: AnnotatedBoundsOfWildcard.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class AnnotatedBoundsOfWildcard {
|
||||||
|
public void superAsIs(Test<? super Base, ? super @Nullable Base, ? super @NullnessUnspecified Base> a) {}
|
||||||
|
public void superNotNull(Test<? super Base, ? super Base, ? super Base> a) {}
|
||||||
|
public void superNullable(Test<? super @Nullable Base, ? super @Nullable Base, ? super @Nullable Base> a) {}
|
||||||
|
|
||||||
|
public void extendsAsIs(Test<? extends Base, ? extends @Nullable Base, ? extends @NullnessUnspecified Base> a) {}
|
||||||
|
public void extendsNotNull(Test<? extends Base, ? extends Base, ? extends Base> a) {}
|
||||||
|
public void extendsNullable(Test<? extends @Nullable Base, ? extends @Nullable Base, ? extends @Nullable Base> a) {}
|
||||||
|
|
||||||
|
public void noBounds(Test<? extends @NullnessUnspecified Object, ? extends @NullnessUnspecified Object, ? extends @NullnessUnspecified Object> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Base.java
|
||||||
|
public class Base {}
|
||||||
|
|
||||||
|
// FILE: Derived.java
|
||||||
|
public class Derived extends Base {}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class Test<T extends Object, E extends @Nullable Object, F extends @NullnessUnspecified Object> { }
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(
|
||||||
|
aNotNullNotNullNotNull: Test<Derived, Derived, Derived>,
|
||||||
|
aNotNullNotNullNull: Test<Derived, Derived, Derived?>,
|
||||||
|
aNotNullNullNotNull: Test<Derived, Derived?, Derived>,
|
||||||
|
aNotNullNullNull: Test<Derived, Derived?, Derived?>,
|
||||||
|
|
||||||
|
aAnyNotNullNotNullNotNull: Test<Any, Any, Any>,
|
||||||
|
aAnyNotNullNotNullNull: Test<Any, Any, Any?>,
|
||||||
|
aAnyNotNullNullNotNull: Test<Any, Any?, Any>,
|
||||||
|
aAnyNotNullNullNull: Test<Any, Any?, Any?>,
|
||||||
|
|
||||||
|
b: AnnotatedBoundsOfWildcard
|
||||||
|
): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.superAsIs(<!TYPE_MISMATCH!>aAnyNotNullNotNullNotNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.superAsIs(<!TYPE_MISMATCH!>aAnyNotNullNotNullNull<!>)
|
||||||
|
b.superAsIs(aAnyNotNullNullNotNull)
|
||||||
|
b.superAsIs(aAnyNotNullNullNull)
|
||||||
|
|
||||||
|
b.superNotNull(aAnyNotNullNotNullNotNull)
|
||||||
|
b.superNotNull(aAnyNotNullNotNullNull)
|
||||||
|
b.superNotNull(aAnyNotNullNullNotNull)
|
||||||
|
b.superNotNull(aAnyNotNullNullNull)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.superNullable(<!TYPE_MISMATCH!>aAnyNotNullNotNullNotNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.superNullable(<!TYPE_MISMATCH!>aAnyNotNullNotNullNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.superNullable(<!TYPE_MISMATCH!>aAnyNotNullNullNotNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.superNullable(<!TYPE_MISMATCH!>aAnyNotNullNullNull<!>)
|
||||||
|
|
||||||
|
b.extendsAsIs(aNotNullNotNullNotNull)
|
||||||
|
b.extendsAsIs(aNotNullNotNullNull)
|
||||||
|
b.extendsAsIs(aNotNullNullNotNull)
|
||||||
|
b.extendsAsIs(aNotNullNullNull)
|
||||||
|
|
||||||
|
b.extendsNotNull(aNotNullNotNullNotNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.extendsNotNull(<!TYPE_MISMATCH!>aNotNullNotNullNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.extendsNotNull(<!TYPE_MISMATCH!>aNotNullNullNotNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.extendsNotNull(<!TYPE_MISMATCH!>aNotNullNullNull<!>)
|
||||||
|
|
||||||
|
b.extendsNullable(aNotNullNotNullNotNull)
|
||||||
|
b.extendsNullable(aNotNullNotNullNull)
|
||||||
|
b.extendsNullable(aNotNullNullNotNull)
|
||||||
|
b.extendsNullable(aNotNullNullNull)
|
||||||
|
|
||||||
|
b.noBounds(aNotNullNotNullNotNull)
|
||||||
|
b.noBounds(aNotNullNotNullNull)
|
||||||
|
b.noBounds(aNotNullNullNotNull)
|
||||||
|
b.noBounds(aNotNullNullNull)
|
||||||
|
}
|
||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ aNotNullNotNullNotNull: Test<Derived, Derived, Derived>, /*1*/ aNotNullNotNullNull: Test<Derived, Derived, Derived?>, /*2*/ aNotNullNullNotNull: Test<Derived, Derived?, Derived>, /*3*/ aNotNullNullNull: Test<Derived, Derived?, Derived?>, /*4*/ aAnyNotNullNotNullNotNull: Test<kotlin.Any, kotlin.Any, kotlin.Any>, /*5*/ aAnyNotNullNotNullNull: Test<kotlin.Any, kotlin.Any, kotlin.Any?>, /*6*/ aAnyNotNullNullNotNull: Test<kotlin.Any, kotlin.Any?, kotlin.Any>, /*7*/ aAnyNotNullNullNull: Test<kotlin.Any, kotlin.Any?, kotlin.Any?>, /*8*/ b: AnnotatedBoundsOfWildcard): kotlin.Unit
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class AnnotatedBoundsOfWildcard {
|
||||||
|
public constructor AnnotatedBoundsOfWildcard()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun extendsAsIs(/*0*/ a: Test<out Base, out @org.jspecify.nullness.Nullable Base?, out @org.jspecify.nullness.NullnessUnspecified Base!>): kotlin.Unit
|
||||||
|
public open fun extendsNotNull(/*0*/ a: Test<out Base, out Base, out Base>): kotlin.Unit
|
||||||
|
public open fun extendsNullable(/*0*/ a: Test<out @org.jspecify.nullness.Nullable Base?, out @org.jspecify.nullness.Nullable Base?, out @org.jspecify.nullness.Nullable Base?>): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open fun noBounds(/*0*/ a: Test<out @org.jspecify.nullness.NullnessUnspecified kotlin.Any!, out @org.jspecify.nullness.NullnessUnspecified kotlin.Any!, out @org.jspecify.nullness.NullnessUnspecified kotlin.Any!>): kotlin.Unit
|
||||||
|
public open fun superAsIs(/*0*/ a: Test<in Base, in @org.jspecify.nullness.Nullable Base?, in @org.jspecify.nullness.NullnessUnspecified Base!>): kotlin.Unit
|
||||||
|
public open fun superNotNull(/*0*/ a: Test<in Base, in Base, in Base>): kotlin.Unit
|
||||||
|
public open fun superNullable(/*0*/ a: Test<in @org.jspecify.nullness.Nullable Base?, in @org.jspecify.nullness.Nullable Base?, in @org.jspecify.nullness.Nullable Base?>): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Base {
|
||||||
|
public constructor Base()
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Derived : Base {
|
||||||
|
public constructor Derived()
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class Test</*0*/ T : kotlin.Any, /*1*/ E, /*2*/ F : @org.jspecify.nullness.NullnessUnspecified kotlin.Any!> {
|
||||||
|
public constructor Test</*0*/ T : kotlin.Any, /*1*/ E, /*2*/ F : @org.jspecify.nullness.NullnessUnspecified 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
|
||||||
|
}
|
||||||
+88
@@ -0,0 +1,88 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: AnnotatedBoundsOfWildcard.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class AnnotatedBoundsOfWildcard {
|
||||||
|
public void superAsIs(Test<? super Base, ? super @Nullable Base, ? super @NullnessUnspecified Base> a) {}
|
||||||
|
public void superNotNull(Test<? super Base, ? super Base, ? super Base> a) {}
|
||||||
|
public void superNullable(Test<? super @Nullable Base, ? super @Nullable Base, ? super @Nullable Base> a) {}
|
||||||
|
|
||||||
|
public void extendsAsIs(Test<? extends Base, ? extends @Nullable Base, ? extends @NullnessUnspecified Base> a) {}
|
||||||
|
public void extendsNotNull(Test<? extends Base, ? extends Base, ? extends Base> a) {}
|
||||||
|
public void extendsNullable(Test<? extends @Nullable Base, ? extends @Nullable Base, ? extends @Nullable Base> a) {}
|
||||||
|
|
||||||
|
public void noBounds(Test<? extends @NullnessUnspecified Object, ? extends @NullnessUnspecified Object, ? extends @NullnessUnspecified Object> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Base.java
|
||||||
|
public class Base {}
|
||||||
|
|
||||||
|
// FILE: Derived.java
|
||||||
|
public class Derived extends Base {}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class Test<T extends Object, E extends @Nullable Object, F extends @NullnessUnspecified Object> { }
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(
|
||||||
|
aNotNullNotNullNotNull: Test<Derived, Derived, Derived>,
|
||||||
|
aNotNullNotNullNull: Test<Derived, Derived, Derived?>,
|
||||||
|
aNotNullNullNotNull: Test<Derived, Derived?, Derived>,
|
||||||
|
aNotNullNullNull: Test<Derived, Derived?, Derived?>,
|
||||||
|
|
||||||
|
aAnyNotNullNotNullNotNull: Test<Any, Any, Any>,
|
||||||
|
aAnyNotNullNotNullNull: Test<Any, Any, Any?>,
|
||||||
|
aAnyNotNullNullNotNull: Test<Any, Any?, Any>,
|
||||||
|
aAnyNotNullNullNull: Test<Any, Any?, Any?>,
|
||||||
|
|
||||||
|
b: AnnotatedBoundsOfWildcard
|
||||||
|
): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.superAsIs(<!TYPE_MISMATCH!>aAnyNotNullNotNullNotNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.superAsIs(<!TYPE_MISMATCH!>aAnyNotNullNotNullNull<!>)
|
||||||
|
b.superAsIs(aAnyNotNullNullNotNull)
|
||||||
|
b.superAsIs(aAnyNotNullNullNull)
|
||||||
|
|
||||||
|
b.superNotNull(aAnyNotNullNotNullNotNull)
|
||||||
|
b.superNotNull(aAnyNotNullNotNullNull)
|
||||||
|
b.superNotNull(aAnyNotNullNullNotNull)
|
||||||
|
b.superNotNull(aAnyNotNullNullNull)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.superNullable(<!TYPE_MISMATCH!>aAnyNotNullNotNullNotNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.superNullable(<!TYPE_MISMATCH!>aAnyNotNullNotNullNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.superNullable(<!TYPE_MISMATCH!>aAnyNotNullNullNotNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.superNullable(<!TYPE_MISMATCH!>aAnyNotNullNullNull<!>)
|
||||||
|
|
||||||
|
b.extendsAsIs(aNotNullNotNullNotNull)
|
||||||
|
b.extendsAsIs(aNotNullNotNullNull)
|
||||||
|
b.extendsAsIs(aNotNullNullNotNull)
|
||||||
|
b.extendsAsIs(aNotNullNullNull)
|
||||||
|
|
||||||
|
b.extendsNotNull(aNotNullNotNullNotNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.extendsNotNull(<!TYPE_MISMATCH!>aNotNullNotNullNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.extendsNotNull(<!TYPE_MISMATCH!>aNotNullNullNotNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.extendsNotNull(<!TYPE_MISMATCH!>aNotNullNullNull<!>)
|
||||||
|
|
||||||
|
b.extendsNullable(aNotNullNotNullNotNull)
|
||||||
|
b.extendsNullable(aNotNullNotNullNull)
|
||||||
|
b.extendsNullable(aNotNullNullNotNull)
|
||||||
|
b.extendsNullable(aNotNullNullNull)
|
||||||
|
|
||||||
|
b.noBounds(aNotNullNotNullNotNull)
|
||||||
|
b.noBounds(aNotNullNotNullNull)
|
||||||
|
b.noBounds(aNotNullNullNotNull)
|
||||||
|
b.noBounds(aNotNullNullNull)
|
||||||
|
}
|
||||||
+39
@@ -0,0 +1,39 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ aNotNullNotNullNotNull: Test<Derived, Derived, Derived>, /*1*/ aNotNullNotNullNull: Test<Derived, Derived, Derived?>, /*2*/ aNotNullNullNotNull: Test<Derived, Derived?, Derived>, /*3*/ aNotNullNullNull: Test<Derived, Derived?, Derived?>, /*4*/ aAnyNotNullNotNullNotNull: Test<kotlin.Any, kotlin.Any, kotlin.Any>, /*5*/ aAnyNotNullNotNullNull: Test<kotlin.Any, kotlin.Any, kotlin.Any?>, /*6*/ aAnyNotNullNullNotNull: Test<kotlin.Any, kotlin.Any?, kotlin.Any>, /*7*/ aAnyNotNullNullNull: Test<kotlin.Any, kotlin.Any?, kotlin.Any?>, /*8*/ b: AnnotatedBoundsOfWildcard): kotlin.Unit
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class AnnotatedBoundsOfWildcard {
|
||||||
|
public constructor AnnotatedBoundsOfWildcard()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun extendsAsIs(/*0*/ a: Test<out Base, out @org.jspecify.nullness.Nullable Base?, out @org.jspecify.nullness.NullnessUnspecified Base!>): kotlin.Unit
|
||||||
|
public open fun extendsNotNull(/*0*/ a: Test<out Base, out Base, out Base>): kotlin.Unit
|
||||||
|
public open fun extendsNullable(/*0*/ a: Test<out @org.jspecify.nullness.Nullable Base?, out @org.jspecify.nullness.Nullable Base?, out @org.jspecify.nullness.Nullable Base?>): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open fun noBounds(/*0*/ a: Test<out @org.jspecify.nullness.NullnessUnspecified kotlin.Any!, out @org.jspecify.nullness.NullnessUnspecified kotlin.Any!, out @org.jspecify.nullness.NullnessUnspecified kotlin.Any!>): kotlin.Unit
|
||||||
|
public open fun superAsIs(/*0*/ a: Test<in Base, in @org.jspecify.nullness.Nullable Base?, in @org.jspecify.nullness.NullnessUnspecified Base!>): kotlin.Unit
|
||||||
|
public open fun superNotNull(/*0*/ a: Test<in Base, in Base, in Base>): kotlin.Unit
|
||||||
|
public open fun superNullable(/*0*/ a: Test<in @org.jspecify.nullness.Nullable Base?, in @org.jspecify.nullness.Nullable Base?, in @org.jspecify.nullness.Nullable Base?>): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Base {
|
||||||
|
public constructor Base()
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Derived : Base {
|
||||||
|
public constructor Derived()
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class Test</*0*/ T : kotlin.Any, /*1*/ E, /*2*/ F : @org.jspecify.nullness.NullnessUnspecified kotlin.Any!> {
|
||||||
|
public constructor Test</*0*/ T : kotlin.Any, /*1*/ E, /*2*/ F : @org.jspecify.nullness.NullnessUnspecified 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
|
||||||
|
}
|
||||||
|
|
||||||
compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/strictMode/Defaults.fir.kt
Vendored
+50
@@ -0,0 +1,50 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: Defaults.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class Defaults {
|
||||||
|
public Foo defaultField = null;
|
||||||
|
@Nullable public Foo field = null;
|
||||||
|
|
||||||
|
public Foo everythingNotNullable(Foo x) { return null; }
|
||||||
|
|
||||||
|
public @Nullable Foo everythingNullable(@Nullable Foo x) { return null; }
|
||||||
|
|
||||||
|
public @NullnessUnspecified Foo everythingUnknown(@NullnessUnspecified Foo x) { return null; }
|
||||||
|
|
||||||
|
public @Nullable Foo mixed(Foo x) { return null; }
|
||||||
|
|
||||||
|
public Foo explicitlyNullnessUnspecified(@NullnessUnspecified Foo x) { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Foo.java
|
||||||
|
public class Foo {
|
||||||
|
public Object foo() { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(a: Defaults, x: Foo): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.everythingNotNullable(<!NULL_FOR_NONNULL_TYPE!>null<!>).foo()
|
||||||
|
a.everythingNotNullable(x).foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.everythingNullable(null)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
|
||||||
|
a.everythingUnknown(null).foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.mixed(<!NULL_FOR_NONNULL_TYPE!>null<!>)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.mixed(x)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
|
||||||
|
a.explicitlyNullnessUnspecified(x).foo()
|
||||||
|
a.explicitlyNullnessUnspecified(null).foo()
|
||||||
|
|
||||||
|
a.defaultField.foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.field<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
}
|
||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ a: Defaults, /*1*/ x: Foo): kotlin.Unit
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class Defaults {
|
||||||
|
public constructor Defaults()
|
||||||
|
public final var defaultField: Foo
|
||||||
|
@org.jspecify.nullness.Nullable public final var field: @org.jspecify.nullness.Nullable Foo?
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun everythingNotNullable(/*0*/ x: Foo): Foo
|
||||||
|
@org.jspecify.nullness.Nullable public open fun everythingNullable(/*0*/ @org.jspecify.nullness.Nullable x: @org.jspecify.nullness.Nullable Foo?): @org.jspecify.nullness.Nullable Foo?
|
||||||
|
@org.jspecify.nullness.NullnessUnspecified public open fun everythingUnknown(/*0*/ @org.jspecify.nullness.NullnessUnspecified x: @org.jspecify.nullness.NullnessUnspecified Foo!): @org.jspecify.nullness.NullnessUnspecified Foo!
|
||||||
|
public open fun explicitlyNullnessUnspecified(/*0*/ @org.jspecify.nullness.NullnessUnspecified x: @org.jspecify.nullness.NullnessUnspecified Foo!): Foo
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
@org.jspecify.nullness.Nullable public open fun mixed(/*0*/ x: Foo): @org.jspecify.nullness.Nullable Foo?
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Foo {
|
||||||
|
public constructor Foo()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun foo(): kotlin.Any!
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
Vendored
+50
@@ -0,0 +1,50 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: Defaults.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class Defaults {
|
||||||
|
public Foo defaultField = null;
|
||||||
|
@Nullable public Foo field = null;
|
||||||
|
|
||||||
|
public Foo everythingNotNullable(Foo x) { return null; }
|
||||||
|
|
||||||
|
public @Nullable Foo everythingNullable(@Nullable Foo x) { return null; }
|
||||||
|
|
||||||
|
public @NullnessUnspecified Foo everythingUnknown(@NullnessUnspecified Foo x) { return null; }
|
||||||
|
|
||||||
|
public @Nullable Foo mixed(Foo x) { return null; }
|
||||||
|
|
||||||
|
public Foo explicitlyNullnessUnspecified(@NullnessUnspecified Foo x) { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Foo.java
|
||||||
|
public class Foo {
|
||||||
|
public Object foo() { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(a: Defaults, x: Foo): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.everythingNotNullable(<!NULL_FOR_NONNULL_TYPE!>null<!>).foo()
|
||||||
|
a.everythingNotNullable(x).foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.everythingNullable(null)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
|
||||||
|
a.everythingUnknown(null).foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.mixed(<!NULL_FOR_NONNULL_TYPE!>null<!>)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.mixed(x)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
|
||||||
|
a.explicitlyNullnessUnspecified(x).foo()
|
||||||
|
a.explicitlyNullnessUnspecified(null).foo()
|
||||||
|
|
||||||
|
a.defaultField.foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.field<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
}
|
||||||
Vendored
+26
@@ -0,0 +1,26 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ a: Defaults, /*1*/ x: Foo): kotlin.Unit
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class Defaults {
|
||||||
|
public constructor Defaults()
|
||||||
|
public final var defaultField: Foo
|
||||||
|
@org.jspecify.nullness.Nullable public final var field: @org.jspecify.nullness.Nullable Foo?
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun everythingNotNullable(/*0*/ x: Foo): Foo
|
||||||
|
@org.jspecify.nullness.Nullable public open fun everythingNullable(/*0*/ @org.jspecify.nullness.Nullable x: @org.jspecify.nullness.Nullable Foo?): @org.jspecify.nullness.Nullable Foo?
|
||||||
|
@org.jspecify.nullness.NullnessUnspecified public open fun everythingUnknown(/*0*/ @org.jspecify.nullness.NullnessUnspecified x: @org.jspecify.nullness.NullnessUnspecified Foo!): @org.jspecify.nullness.NullnessUnspecified Foo!
|
||||||
|
public open fun explicitlyNullnessUnspecified(/*0*/ @org.jspecify.nullness.NullnessUnspecified x: @org.jspecify.nullness.NullnessUnspecified Foo!): Foo
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
@org.jspecify.nullness.Nullable public open fun mixed(/*0*/ x: Foo): @org.jspecify.nullness.Nullable Foo?
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Foo {
|
||||||
|
public constructor Foo()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun foo(): kotlin.Any!
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: IgnoreAnnotations.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class IgnoreAnnotations {
|
||||||
|
@Nullable public Derived field = null;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public Derived foo(Derived x, @NullnessUnspecified Base y) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Derived everythingNotNullable(Derived x) { return null; }
|
||||||
|
|
||||||
|
public @Nullable Derived everythingNullable(@Nullable Derived x) { return null; }
|
||||||
|
|
||||||
|
public @NullnessUnspecified Derived everythingUnknown(@NullnessUnspecified Derived x) { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Base.java
|
||||||
|
public class Base {
|
||||||
|
void foo() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Derived.java
|
||||||
|
public class Derived extends Base { }
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(a: IgnoreAnnotations, x: Derived): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.foo(x, null)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>, x)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.field<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.everythingNotNullable(<!NULL_FOR_NONNULL_TYPE!>null<!>).foo()
|
||||||
|
a.everythingNotNullable(x).foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.everythingNullable(null)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
|
||||||
|
a.everythingUnknown(null).foo()
|
||||||
|
}
|
||||||
+31
@@ -0,0 +1,31 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ a: IgnoreAnnotations, /*1*/ x: Derived): kotlin.Unit
|
||||||
|
|
||||||
|
public open class Base {
|
||||||
|
public constructor Base()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public/*package*/ open fun foo(): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Derived : Base {
|
||||||
|
public constructor Derived()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public/*package*/ open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class IgnoreAnnotations {
|
||||||
|
public constructor IgnoreAnnotations()
|
||||||
|
@org.jspecify.nullness.Nullable public final var field: @org.jspecify.nullness.Nullable Derived?
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun everythingNotNullable(/*0*/ x: Derived): Derived
|
||||||
|
@org.jspecify.nullness.Nullable public open fun everythingNullable(/*0*/ @org.jspecify.nullness.Nullable x: @org.jspecify.nullness.Nullable Derived?): @org.jspecify.nullness.Nullable Derived?
|
||||||
|
@org.jspecify.nullness.NullnessUnspecified public open fun everythingUnknown(/*0*/ @org.jspecify.nullness.NullnessUnspecified x: @org.jspecify.nullness.NullnessUnspecified Derived!): @org.jspecify.nullness.NullnessUnspecified Derived!
|
||||||
|
@org.jspecify.nullness.Nullable public open fun foo(/*0*/ x: Derived, /*1*/ @org.jspecify.nullness.NullnessUnspecified y: @org.jspecify.nullness.NullnessUnspecified Base!): @org.jspecify.nullness.Nullable Derived?
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: IgnoreAnnotations.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class IgnoreAnnotations {
|
||||||
|
@Nullable public Derived field = null;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public Derived foo(Derived x, @NullnessUnspecified Base y) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Derived everythingNotNullable(Derived x) { return null; }
|
||||||
|
|
||||||
|
public @Nullable Derived everythingNullable(@Nullable Derived x) { return null; }
|
||||||
|
|
||||||
|
public @NullnessUnspecified Derived everythingUnknown(@NullnessUnspecified Derived x) { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Base.java
|
||||||
|
public class Base {
|
||||||
|
void foo() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Derived.java
|
||||||
|
public class Derived extends Base { }
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(a: IgnoreAnnotations, x: Derived): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.foo(x, null)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>, x)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.field<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.everythingNotNullable(<!NULL_FOR_NONNULL_TYPE!>null<!>).foo()
|
||||||
|
a.everythingNotNullable(x).foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.everythingNullable(null)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
|
||||||
|
a.everythingUnknown(null).foo()
|
||||||
|
}
|
||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ a: IgnoreAnnotations, /*1*/ x: Derived): kotlin.Unit
|
||||||
|
|
||||||
|
public open class Base {
|
||||||
|
public constructor Base()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public/*package*/ open fun foo(): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Derived : Base {
|
||||||
|
public constructor Derived()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public/*package*/ open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class IgnoreAnnotations {
|
||||||
|
public constructor IgnoreAnnotations()
|
||||||
|
@org.jspecify.nullness.Nullable public final var field: @org.jspecify.nullness.Nullable Derived?
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun everythingNotNullable(/*0*/ x: Derived): Derived
|
||||||
|
@org.jspecify.nullness.Nullable public open fun everythingNullable(/*0*/ @org.jspecify.nullness.Nullable x: @org.jspecify.nullness.Nullable Derived?): @org.jspecify.nullness.Nullable Derived?
|
||||||
|
@org.jspecify.nullness.NullnessUnspecified public open fun everythingUnknown(/*0*/ @org.jspecify.nullness.NullnessUnspecified x: @org.jspecify.nullness.NullnessUnspecified Derived!): @org.jspecify.nullness.NullnessUnspecified Derived!
|
||||||
|
@org.jspecify.nullness.Nullable public open fun foo(/*0*/ x: Derived, /*1*/ @org.jspecify.nullness.NullnessUnspecified y: @org.jspecify.nullness.NullnessUnspecified Base!): @org.jspecify.nullness.Nullable Derived?
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
// !LANGUAGE: +ProhibitUsingNullableTypeParameterAgainstNotNullAnnotated
|
||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: NonPlatformTypeParameter.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class NonPlatformTypeParameter<T extends @Nullable Object> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
public <E extends @Nullable Object> void bar(E e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun <T : Test> main(a1: NonPlatformTypeParameter<Any?>, a2: NonPlatformTypeParameter<Test>, x: T): Unit {
|
||||||
|
a1.foo(null)
|
||||||
|
a1.bar<Test?>(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar<T>(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a1.bar<T>(x)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a2.bar<Test?>(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar<T>(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a2.bar<T>(x)
|
||||||
|
}
|
||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun </*0*/ T : Test> main(/*0*/ a1: NonPlatformTypeParameter<kotlin.Any?>, /*1*/ a2: NonPlatformTypeParameter<Test>, /*2*/ x: T): kotlin.Unit
|
||||||
|
|
||||||
|
public open class NonPlatformTypeParameter</*0*/ T> {
|
||||||
|
public constructor NonPlatformTypeParameter</*0*/ T>()
|
||||||
|
public open fun </*0*/ E> bar(/*0*/ e: E): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun foo(/*0*/ t: T): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Test {
|
||||||
|
public constructor Test()
|
||||||
|
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
|
||||||
|
}
|
||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
// !LANGUAGE: +ProhibitUsingNullableTypeParameterAgainstNotNullAnnotated
|
||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: NonPlatformTypeParameter.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class NonPlatformTypeParameter<T extends @Nullable Object> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
public <E extends @Nullable Object> void bar(E e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun <T : Test> main(a1: NonPlatformTypeParameter<Any?>, a2: NonPlatformTypeParameter<Test>, x: T): Unit {
|
||||||
|
a1.foo(null)
|
||||||
|
a1.bar<Test?>(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar<T>(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a1.bar<T>(x)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a2.bar<Test?>(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar<T>(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a2.bar<T>(x)
|
||||||
|
}
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun </*0*/ T : Test> main(/*0*/ a1: NonPlatformTypeParameter<kotlin.Any?>, /*1*/ a2: NonPlatformTypeParameter<Test>, /*2*/ x: T): kotlin.Unit
|
||||||
|
|
||||||
|
public open class NonPlatformTypeParameter</*0*/ T> {
|
||||||
|
public constructor NonPlatformTypeParameter</*0*/ T>()
|
||||||
|
public open fun </*0*/ E> bar(/*0*/ e: E): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun foo(/*0*/ t: T): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Test {
|
||||||
|
public constructor Test()
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: NullnessUnspecifiedTypeParameter.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class NullnessUnspecifiedTypeParameter<T> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
|
||||||
|
public void bar(Test s, T t) {} // t should not become not nullable
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
fun main(a1: NullnessUnspecifiedTypeParameter<Any>, a2: NullnessUnspecifiedTypeParameter<<!UPPER_BOUND_VIOLATED!>Any?<!>>, x: Test): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a1.foo(1)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a2.foo(1)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar(<!NULL_FOR_NONNULL_TYPE!>null<!>, <!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar(x, <!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a1.bar(x, 1)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar(<!NULL_FOR_NONNULL_TYPE!>null<!>, <!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar(x, <!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a2.bar(x, 1)
|
||||||
|
}
|
||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ a1: NullnessUnspecifiedTypeParameter<kotlin.Any>, /*1*/ a2: NullnessUnspecifiedTypeParameter<kotlin.Any?>, /*2*/ x: Test): kotlin.Unit
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class NullnessUnspecifiedTypeParameter</*0*/ T : kotlin.Any> {
|
||||||
|
public constructor NullnessUnspecifiedTypeParameter</*0*/ T : kotlin.Any>()
|
||||||
|
public open fun bar(/*0*/ s: Test, /*1*/ t: T): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun foo(/*0*/ t: T): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Test {
|
||||||
|
public constructor Test()
|
||||||
|
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
|
||||||
|
}
|
||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: NullnessUnspecifiedTypeParameter.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class NullnessUnspecifiedTypeParameter<T> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
|
||||||
|
public void bar(Test s, T t) {} // t should not become not nullable
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
fun main(a1: NullnessUnspecifiedTypeParameter<Any>, a2: NullnessUnspecifiedTypeParameter<<!UPPER_BOUND_VIOLATED!>Any?<!>>, x: Test): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a1.foo(1)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a2.foo(1)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar(<!NULL_FOR_NONNULL_TYPE!>null<!>, <!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar(x, <!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a1.bar(x, 1)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar(<!NULL_FOR_NONNULL_TYPE!>null<!>, <!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar(x, <!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a2.bar(x, 1)
|
||||||
|
}
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ a1: NullnessUnspecifiedTypeParameter<kotlin.Any>, /*1*/ a2: NullnessUnspecifiedTypeParameter<kotlin.Any?>, /*2*/ x: Test): kotlin.Unit
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class NullnessUnspecifiedTypeParameter</*0*/ T : kotlin.Any> {
|
||||||
|
public constructor NullnessUnspecifiedTypeParameter</*0*/ T : kotlin.Any>()
|
||||||
|
public open fun bar(/*0*/ s: Test, /*1*/ t: T): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun foo(/*0*/ t: T): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Test {
|
||||||
|
public constructor Test()
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/strictMode/SelfType.fir.kt
Vendored
+58
@@ -0,0 +1,58 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: SelfType.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class SelfType<T extends SelfType<T>> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: B.java
|
||||||
|
public class B extends SelfType<B> {}
|
||||||
|
|
||||||
|
// FILE: C.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class C<E extends C<E>> extends SelfType<E> {}
|
||||||
|
|
||||||
|
// FILE: AK.java
|
||||||
|
public class AK extends SelfType<AK> {}
|
||||||
|
|
||||||
|
// FILE: AKN.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class AKN extends SelfType<@Nullable AK> {}
|
||||||
|
|
||||||
|
// FILE: BK.java
|
||||||
|
public class BK extends B {}
|
||||||
|
|
||||||
|
// FILE: CK.java
|
||||||
|
public class CK extends C<CK> {}
|
||||||
|
|
||||||
|
// FILE: CKN.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class CKN extends C<@Nullable CK> {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(ak: AK, akn: AKN, bk: BK, ck: CK, ckn: CKN): Unit {
|
||||||
|
ak.foo(ak)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
ak.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
akn.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
|
||||||
|
bk.foo(bk)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
bk.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
|
||||||
|
ck.foo(ck)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
ck.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
ckn.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
}
|
||||||
+67
@@ -0,0 +1,67 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ ak: AK, /*1*/ akn: AKN, /*2*/ bk: BK, /*3*/ ck: CK, /*4*/ ckn: CKN): kotlin.Unit
|
||||||
|
|
||||||
|
public open class AK : SelfType<AK!> {
|
||||||
|
public constructor AK()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: AK): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class AKN : SelfType<@org.jspecify.nullness.Nullable AK!> {
|
||||||
|
public constructor AKN()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: @org.jspecify.nullness.Nullable AK): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class B : SelfType<B!> {
|
||||||
|
public constructor B()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: B): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class BK : B {
|
||||||
|
public constructor BK()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: B): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class C</*0*/ E : C<E!>> : SelfType<E!> {
|
||||||
|
public constructor C</*0*/ E : C<E!>>()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: E): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class CK : C<CK!> {
|
||||||
|
public constructor CK()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: CK): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class CKN : C<@org.jspecify.nullness.Nullable CK!> {
|
||||||
|
public constructor CKN()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: @org.jspecify.nullness.Nullable CK): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class SelfType</*0*/ T : SelfType<T!>> {
|
||||||
|
public constructor SelfType</*0*/ T : SelfType<T!>>()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun foo(/*0*/ t: T): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
Vendored
+58
@@ -0,0 +1,58 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: SelfType.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class SelfType<T extends SelfType<T>> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: B.java
|
||||||
|
public class B extends SelfType<B> {}
|
||||||
|
|
||||||
|
// FILE: C.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class C<E extends C<E>> extends SelfType<E> {}
|
||||||
|
|
||||||
|
// FILE: AK.java
|
||||||
|
public class AK extends SelfType<AK> {}
|
||||||
|
|
||||||
|
// FILE: AKN.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class AKN extends SelfType<@Nullable AK> {}
|
||||||
|
|
||||||
|
// FILE: BK.java
|
||||||
|
public class BK extends B {}
|
||||||
|
|
||||||
|
// FILE: CK.java
|
||||||
|
public class CK extends C<CK> {}
|
||||||
|
|
||||||
|
// FILE: CKN.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class CKN extends C<@Nullable CK> {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(ak: AK, akn: AKN, bk: BK, ck: CK, ckn: CKN): Unit {
|
||||||
|
ak.foo(ak)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
ak.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
akn.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
|
||||||
|
bk.foo(bk)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
bk.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
|
||||||
|
ck.foo(ck)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
ck.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
ckn.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
}
|
||||||
Vendored
+68
@@ -0,0 +1,68 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ ak: AK, /*1*/ akn: AKN, /*2*/ bk: BK, /*3*/ ck: CK, /*4*/ ckn: CKN): kotlin.Unit
|
||||||
|
|
||||||
|
public open class AK : SelfType<AK!> {
|
||||||
|
public constructor AK()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: AK): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class AKN : SelfType<@org.jspecify.nullness.Nullable AK!> {
|
||||||
|
public constructor AKN()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: @org.jspecify.nullness.Nullable AK): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class B : SelfType<B!> {
|
||||||
|
public constructor B()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: B): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class BK : B {
|
||||||
|
public constructor BK()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: B): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class C</*0*/ E : C<E!>> : SelfType<E!> {
|
||||||
|
public constructor C</*0*/ E : C<E!>>()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: E): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class CK : C<CK!> {
|
||||||
|
public constructor CK()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: CK): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class CKN : C<@org.jspecify.nullness.Nullable CK!> {
|
||||||
|
public constructor CKN()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: @org.jspecify.nullness.Nullable CK): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class SelfType</*0*/ T : SelfType<T!>> {
|
||||||
|
public constructor SelfType</*0*/ T : SelfType<T!>>()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun foo(/*0*/ t: T): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
Vendored
+39
@@ -0,0 +1,39 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: Simple.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class Simple {
|
||||||
|
@Nullable public Derived field = null;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public Derived foo(Derived x, @NullnessUnspecified Base y) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Derived bar() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Base.java
|
||||||
|
public class Base {}
|
||||||
|
|
||||||
|
// FILE: Derived.java
|
||||||
|
public class Derived extends Base {
|
||||||
|
void foo() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(a: Simple, x: Derived): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.foo(x, null)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>, x)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
|
||||||
|
a.bar().foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.field<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
}
|
||||||
Vendored
+28
@@ -0,0 +1,28 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ a: Simple, /*1*/ x: Derived): kotlin.Unit
|
||||||
|
|
||||||
|
public open class Base {
|
||||||
|
public constructor Base()
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Derived : Base {
|
||||||
|
public constructor Derived()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public/*package*/ open fun foo(): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class Simple {
|
||||||
|
public constructor Simple()
|
||||||
|
@org.jspecify.nullness.Nullable public final var field: @org.jspecify.nullness.Nullable Derived?
|
||||||
|
public open fun bar(): Derived
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
@org.jspecify.nullness.Nullable public open fun foo(/*0*/ x: Derived, /*1*/ @org.jspecify.nullness.NullnessUnspecified y: @org.jspecify.nullness.NullnessUnspecified Base!): @org.jspecify.nullness.Nullable Derived?
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
Vendored
+39
@@ -0,0 +1,39 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: Simple.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class Simple {
|
||||||
|
@Nullable public Derived field = null;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public Derived foo(Derived x, @NullnessUnspecified Base y) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Derived bar() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Base.java
|
||||||
|
public class Base {}
|
||||||
|
|
||||||
|
// FILE: Derived.java
|
||||||
|
public class Derived extends Base {
|
||||||
|
void foo() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(a: Simple, x: Derived): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.foo(x, null)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>, x)<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
|
||||||
|
a.bar().foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.field<!UNSAFE_CALL!>.<!>foo()
|
||||||
|
}
|
||||||
Vendored
+29
@@ -0,0 +1,29 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ a: Simple, /*1*/ x: Derived): kotlin.Unit
|
||||||
|
|
||||||
|
public open class Base {
|
||||||
|
public constructor Base()
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Derived : Base {
|
||||||
|
public constructor Derived()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public/*package*/ open fun foo(): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class Simple {
|
||||||
|
public constructor Simple()
|
||||||
|
@org.jspecify.nullness.Nullable public final var field: @org.jspecify.nullness.Nullable Derived?
|
||||||
|
public open fun bar(): Derived
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
@org.jspecify.nullness.Nullable public open fun foo(/*0*/ x: Derived, /*1*/ @org.jspecify.nullness.NullnessUnspecified y: @org.jspecify.nullness.NullnessUnspecified Base!): @org.jspecify.nullness.Nullable Derived?
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
+49
@@ -0,0 +1,49 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: TypeArgumentsFromParameterBounds.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class TypeArgumentsFromParameterBounds<T extends Object, E extends @Nullable Object, F extends @NullnessUnspecified Object> {}
|
||||||
|
|
||||||
|
// FILE: A.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class A {
|
||||||
|
public void bar(TypeArgumentsFromParameterBounds<Test, Test, Test> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: B.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class B {
|
||||||
|
public void bar(TypeArgumentsFromParameterBounds<Test, Test, Test> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(
|
||||||
|
aNotNullNotNullNotNull: TypeArgumentsFromParameterBounds<Test, Test, Test>,
|
||||||
|
aNotNullNotNullNull: TypeArgumentsFromParameterBounds<Test, Test, Test?>,
|
||||||
|
aNotNullNullNotNull: TypeArgumentsFromParameterBounds<Test, Test?, Test>,
|
||||||
|
aNotNullNullNull: TypeArgumentsFromParameterBounds<Test, Test?, Test?>,
|
||||||
|
a: A, b: B
|
||||||
|
): Unit {
|
||||||
|
a.bar(aNotNullNotNullNotNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.bar(<!TYPE_MISMATCH!>aNotNullNotNullNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.bar(<!TYPE_MISMATCH!>aNotNullNullNotNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.bar(<!TYPE_MISMATCH!>aNotNullNullNull<!>)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.bar(<!TYPE_MISMATCH!>aNotNullNotNullNotNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.bar(<!TYPE_MISMATCH!>aNotNullNotNullNull<!>)
|
||||||
|
b.bar(aNotNullNullNotNull)
|
||||||
|
b.bar(aNotNullNullNull)
|
||||||
|
}
|
||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ aNotNullNotNullNotNull: TypeArgumentsFromParameterBounds<Test, Test, Test>, /*1*/ aNotNullNotNullNull: TypeArgumentsFromParameterBounds<Test, Test, Test?>, /*2*/ aNotNullNullNotNull: TypeArgumentsFromParameterBounds<Test, Test?, Test>, /*3*/ aNotNullNullNull: TypeArgumentsFromParameterBounds<Test, Test?, Test?>, /*4*/ a: A, /*5*/ b: B): kotlin.Unit
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class A {
|
||||||
|
public constructor A()
|
||||||
|
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<Test, Test, Test>): 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
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class B {
|
||||||
|
public constructor B()
|
||||||
|
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<Test, Test?, Test!>!): 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
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Test {
|
||||||
|
public constructor Test()
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class TypeArgumentsFromParameterBounds</*0*/ T : kotlin.Any, /*1*/ E, /*2*/ F : @org.jspecify.nullness.NullnessUnspecified kotlin.Any!> {
|
||||||
|
public constructor TypeArgumentsFromParameterBounds</*0*/ T : kotlin.Any, /*1*/ E, /*2*/ F : @org.jspecify.nullness.NullnessUnspecified 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
|
||||||
|
}
|
||||||
+49
@@ -0,0 +1,49 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: TypeArgumentsFromParameterBounds.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class TypeArgumentsFromParameterBounds<T extends Object, E extends @Nullable Object, F extends @NullnessUnspecified Object> {}
|
||||||
|
|
||||||
|
// FILE: A.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class A {
|
||||||
|
public void bar(TypeArgumentsFromParameterBounds<Test, Test, Test> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: B.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class B {
|
||||||
|
public void bar(TypeArgumentsFromParameterBounds<Test, Test, Test> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(
|
||||||
|
aNotNullNotNullNotNull: TypeArgumentsFromParameterBounds<Test, Test, Test>,
|
||||||
|
aNotNullNotNullNull: TypeArgumentsFromParameterBounds<Test, Test, Test?>,
|
||||||
|
aNotNullNullNotNull: TypeArgumentsFromParameterBounds<Test, Test?, Test>,
|
||||||
|
aNotNullNullNull: TypeArgumentsFromParameterBounds<Test, Test?, Test?>,
|
||||||
|
a: A, b: B
|
||||||
|
): Unit {
|
||||||
|
a.bar(aNotNullNotNullNotNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.bar(<!TYPE_MISMATCH!>aNotNullNotNullNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.bar(<!TYPE_MISMATCH!>aNotNullNullNotNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.bar(<!TYPE_MISMATCH!>aNotNullNullNull<!>)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.bar(<!TYPE_MISMATCH!>aNotNullNotNullNotNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.bar(<!TYPE_MISMATCH!>aNotNullNotNullNull<!>)
|
||||||
|
b.bar(aNotNullNullNotNull)
|
||||||
|
b.bar(aNotNullNullNull)
|
||||||
|
}
|
||||||
+34
@@ -0,0 +1,34 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ aNotNullNotNullNotNull: TypeArgumentsFromParameterBounds<Test, Test, Test>, /*1*/ aNotNullNotNullNull: TypeArgumentsFromParameterBounds<Test, Test, Test?>, /*2*/ aNotNullNullNotNull: TypeArgumentsFromParameterBounds<Test, Test?, Test>, /*3*/ aNotNullNullNull: TypeArgumentsFromParameterBounds<Test, Test?, Test?>, /*4*/ a: A, /*5*/ b: B): kotlin.Unit
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class A {
|
||||||
|
public constructor A()
|
||||||
|
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<Test, Test, Test>): 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
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class B {
|
||||||
|
public constructor B()
|
||||||
|
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<Test, Test?, Test!>!): 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
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Test {
|
||||||
|
public constructor Test()
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class TypeArgumentsFromParameterBounds</*0*/ T : kotlin.Any, /*1*/ E, /*2*/ F : @org.jspecify.nullness.NullnessUnspecified kotlin.Any!> {
|
||||||
|
public constructor TypeArgumentsFromParameterBounds</*0*/ T : kotlin.Any, /*1*/ E, /*2*/ F : @org.jspecify.nullness.NullnessUnspecified 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
|
||||||
|
}
|
||||||
|
|
||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: A.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class A<T> {
|
||||||
|
public void foo(@NullnessUnspecified T t) {}
|
||||||
|
public <E> void bar(E e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: B.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
@NullMarked
|
||||||
|
public class B<T> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
public <E> void bar(E e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
fun <T : Test> main(a1: A<<!UPPER_BOUND_VIOLATED!>Any?<!>>, a2: A<Test>, b1: B<<!UPPER_BOUND_VIOLATED!>Any?<!>>, b2: B<Test>, x: T): Unit {
|
||||||
|
a1.foo(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar<<!UPPER_BOUND_VIOLATED!>T?<!>>(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a1.bar<T>(x)
|
||||||
|
|
||||||
|
a2.foo(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar<<!UPPER_BOUND_VIOLATED!>T?<!>>(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a2.bar<T>(x)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b1.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b1.bar<<!UPPER_BOUND_VIOLATED!>T?<!>>(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
b1.bar<T>(x)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b2.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b2.bar<<!UPPER_BOUND_VIOLATED!>T?<!>>(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
b2.bar<T>(x)
|
||||||
|
}
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun </*0*/ T : Test> main(/*0*/ a1: A<kotlin.Any?>, /*1*/ a2: A<Test>, /*2*/ b1: B<kotlin.Any?>, /*3*/ b2: B<Test>, /*4*/ x: T): kotlin.Unit
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class A</*0*/ T : kotlin.Any> {
|
||||||
|
public constructor A</*0*/ T : kotlin.Any>()
|
||||||
|
public open fun </*0*/ E : kotlin.Any> bar(/*0*/ e: E): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun foo(/*0*/ @org.jspecify.nullness.NullnessUnspecified t: @org.jspecify.nullness.NullnessUnspecified T!): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class B</*0*/ T : kotlin.Any> {
|
||||||
|
public constructor B</*0*/ T : kotlin.Any>()
|
||||||
|
public open fun </*0*/ E : kotlin.Any> bar(/*0*/ e: E): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun foo(/*0*/ t: T): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Test {
|
||||||
|
public constructor Test()
|
||||||
|
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
|
||||||
|
}
|
||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: A.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class A<T> {
|
||||||
|
public void foo(@NullnessUnspecified T t) {}
|
||||||
|
public <E> void bar(E e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: B.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
@NullMarked
|
||||||
|
public class B<T> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
public <E> void bar(E e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
fun <T : Test> main(a1: A<<!UPPER_BOUND_VIOLATED!>Any?<!>>, a2: A<Test>, b1: B<<!UPPER_BOUND_VIOLATED!>Any?<!>>, b2: B<Test>, x: T): Unit {
|
||||||
|
a1.foo(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar<<!UPPER_BOUND_VIOLATED!>T?<!>>(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a1.bar<T>(x)
|
||||||
|
|
||||||
|
a2.foo(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar<<!UPPER_BOUND_VIOLATED!>T?<!>>(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
a2.bar<T>(x)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b1.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b1.bar<<!UPPER_BOUND_VIOLATED!>T?<!>>(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
b1.bar<T>(x)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b2.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b2.bar<<!UPPER_BOUND_VIOLATED!>T?<!>>(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
b2.bar<T>(x)
|
||||||
|
}
|
||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun </*0*/ T : Test> main(/*0*/ a1: A<kotlin.Any?>, /*1*/ a2: A<Test>, /*2*/ b1: B<kotlin.Any?>, /*3*/ b2: B<Test>, /*4*/ x: T): kotlin.Unit
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class A</*0*/ T : kotlin.Any> {
|
||||||
|
public constructor A</*0*/ T : kotlin.Any>()
|
||||||
|
public open fun </*0*/ E : kotlin.Any> bar(/*0*/ e: E): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun foo(/*0*/ @org.jspecify.nullness.NullnessUnspecified t: @org.jspecify.nullness.NullnessUnspecified T!): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class B</*0*/ T : kotlin.Any> {
|
||||||
|
public constructor B</*0*/ T : kotlin.Any>()
|
||||||
|
public open fun </*0*/ E : kotlin.Any> bar(/*0*/ e: E): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open fun foo(/*0*/ t: T): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class Test {
|
||||||
|
public constructor Test()
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
+37
@@ -0,0 +1,37 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: WildcardsWithDefault.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class WildcardsWithDefault {
|
||||||
|
public void noBoundsNotNull(A<?, ?, ?> a) {}
|
||||||
|
public void noBoundsNullable(A<? extends @Nullable Object, ? extends @Nullable Object, ? extends @Nullable Object> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: A.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class A <T extends Object, E extends @Nullable Object, F extends @NullnessUnspecified Object> {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(
|
||||||
|
aNotNullNotNullNotNull: A<Any, Any, Any>,
|
||||||
|
aNotNullNotNullNull: A<Any, Any, Any?>,
|
||||||
|
aNotNullNullNotNull: A<Any, Any?, Any>,
|
||||||
|
aNotNullNullNull: A<Any, Any?, Any?>,
|
||||||
|
b: WildcardsWithDefault
|
||||||
|
): Unit {
|
||||||
|
b.noBoundsNotNull(aNotNullNotNullNotNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.noBoundsNotNull(<!TYPE_MISMATCH!>aNotNullNotNullNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.noBoundsNotNull(<!TYPE_MISMATCH!>aNotNullNullNotNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.noBoundsNotNull(<!TYPE_MISMATCH!>aNotNullNullNull<!>)
|
||||||
|
|
||||||
|
b.noBoundsNullable(aNotNullNotNullNotNull)
|
||||||
|
b.noBoundsNullable(aNotNullNotNullNull)
|
||||||
|
b.noBoundsNullable(aNotNullNullNotNull)
|
||||||
|
b.noBoundsNullable(aNotNullNullNull)
|
||||||
|
}
|
||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ aNotNullNotNullNotNull: A<kotlin.Any, kotlin.Any, kotlin.Any>, /*1*/ aNotNullNotNullNull: A<kotlin.Any, kotlin.Any, kotlin.Any?>, /*2*/ aNotNullNullNotNull: A<kotlin.Any, kotlin.Any?, kotlin.Any>, /*3*/ aNotNullNullNull: A<kotlin.Any, kotlin.Any?, kotlin.Any?>, /*4*/ b: WildcardsWithDefault): kotlin.Unit
|
||||||
|
|
||||||
|
public open class A</*0*/ T : kotlin.Any!, /*1*/ E, /*2*/ F : @org.jspecify.nullness.NullnessUnspecified kotlin.Any!> {
|
||||||
|
public constructor A</*0*/ T : kotlin.Any!, /*1*/ E, /*2*/ F : @org.jspecify.nullness.NullnessUnspecified 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
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class WildcardsWithDefault {
|
||||||
|
public constructor WildcardsWithDefault()
|
||||||
|
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 fun noBoundsNotNull(/*0*/ a: A<out kotlin.Any, out @org.jspecify.nullness.Nullable kotlin.Any, out @org.jspecify.nullness.NullnessUnspecified kotlin.Any>): kotlin.Unit
|
||||||
|
public open fun noBoundsNullable(/*0*/ a: A<out @org.jspecify.nullness.Nullable kotlin.Any?, out @org.jspecify.nullness.Nullable kotlin.Any?, out @org.jspecify.nullness.Nullable kotlin.Any?>): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
+37
@@ -0,0 +1,37 @@
|
|||||||
|
// JSPECIFY_STATE: strict
|
||||||
|
|
||||||
|
// FILE: WildcardsWithDefault.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class WildcardsWithDefault {
|
||||||
|
public void noBoundsNotNull(A<?, ?, ?> a) {}
|
||||||
|
public void noBoundsNullable(A<? extends @Nullable Object, ? extends @Nullable Object, ? extends @Nullable Object> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: A.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class A <T extends Object, E extends @Nullable Object, F extends @NullnessUnspecified Object> {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(
|
||||||
|
aNotNullNotNullNotNull: A<Any, Any, Any>,
|
||||||
|
aNotNullNotNullNull: A<Any, Any, Any?>,
|
||||||
|
aNotNullNullNotNull: A<Any, Any?, Any>,
|
||||||
|
aNotNullNullNull: A<Any, Any?, Any?>,
|
||||||
|
b: WildcardsWithDefault
|
||||||
|
): Unit {
|
||||||
|
b.noBoundsNotNull(aNotNullNotNullNotNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.noBoundsNotNull(<!TYPE_MISMATCH!>aNotNullNotNullNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.noBoundsNotNull(<!TYPE_MISMATCH!>aNotNullNullNotNull<!>)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.noBoundsNotNull(<!TYPE_MISMATCH!>aNotNullNullNull<!>)
|
||||||
|
|
||||||
|
b.noBoundsNullable(aNotNullNotNullNotNull)
|
||||||
|
b.noBoundsNullable(aNotNullNotNullNull)
|
||||||
|
b.noBoundsNullable(aNotNullNullNotNull)
|
||||||
|
b.noBoundsNullable(aNotNullNullNull)
|
||||||
|
}
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun main(/*0*/ aNotNullNotNullNotNull: A<kotlin.Any, kotlin.Any, kotlin.Any>, /*1*/ aNotNullNotNullNull: A<kotlin.Any, kotlin.Any, kotlin.Any?>, /*2*/ aNotNullNullNotNull: A<kotlin.Any, kotlin.Any?, kotlin.Any>, /*3*/ aNotNullNullNull: A<kotlin.Any, kotlin.Any?, kotlin.Any?>, /*4*/ b: WildcardsWithDefault): kotlin.Unit
|
||||||
|
|
||||||
|
public open class A</*0*/ T : kotlin.Any!, /*1*/ E, /*2*/ F : @org.jspecify.nullness.NullnessUnspecified kotlin.Any!> {
|
||||||
|
public constructor A</*0*/ T : kotlin.Any!, /*1*/ E, /*2*/ F : @org.jspecify.nullness.NullnessUnspecified 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
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.jspecify.nullness.NullMarked public open class WildcardsWithDefault {
|
||||||
|
public constructor WildcardsWithDefault()
|
||||||
|
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 fun noBoundsNotNull(/*0*/ a: A<out kotlin.Any, out @org.jspecify.nullness.Nullable kotlin.Any, out @org.jspecify.nullness.NullnessUnspecified kotlin.Any>): kotlin.Unit
|
||||||
|
public open fun noBoundsNullable(/*0*/ a: A<out @org.jspecify.nullness.Nullable kotlin.Any?, out @org.jspecify.nullness.Nullable kotlin.Any?, out @org.jspecify.nullness.Nullable kotlin.Any?>): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
+30
-2
@@ -1,6 +1,34 @@
|
|||||||
// JAVA_SOURCES: AnnotatedBoundsOfWildcard.java
|
// JSPECIFY_MUTE
|
||||||
// JSPECIFY_STATE warn
|
|
||||||
|
|
||||||
|
// FILE: AnnotatedBoundsOfWildcard.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class AnnotatedBoundsOfWildcard {
|
||||||
|
public void superAsIs(Test<? super Base, ? super @Nullable Base, ? super @NullnessUnspecified Base> a) {}
|
||||||
|
public void superNotNull(Test<? super Base, ? super Base, ? super Base> a) {}
|
||||||
|
public void superNullable(Test<? super @Nullable Base, ? super @Nullable Base, ? super @Nullable Base> a) {}
|
||||||
|
|
||||||
|
public void extendsAsIs(Test<? extends Base, ? extends @Nullable Base, ? extends @NullnessUnspecified Base> a) {}
|
||||||
|
public void extendsNotNull(Test<? extends Base, ? extends Base, ? extends Base> a) {}
|
||||||
|
public void extendsNullable(Test<? extends @Nullable Base, ? extends @Nullable Base, ? extends @Nullable Base> a) {}
|
||||||
|
|
||||||
|
public void noBounds(Test<? extends @NullnessUnspecified Object, ? extends @NullnessUnspecified Object, ? extends @NullnessUnspecified Object> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Base.java
|
||||||
|
public class Base {}
|
||||||
|
|
||||||
|
// FILE: Derived.java
|
||||||
|
public class Derived extends Base {}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class Test<T extends Object, E extends @Nullable Object, F extends @NullnessUnspecified Object> { }
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
fun main(
|
fun main(
|
||||||
aNotNullNotNullNotNull: Test<Derived, Derived, Derived>,
|
aNotNullNotNullNotNull: Test<Derived, Derived, Derived>,
|
||||||
aNotNullNotNullNull: Test<Derived, Derived, Derived?>,
|
aNotNullNotNullNull: Test<Derived, Derived, Derived?>,
|
||||||
+3
-11
@@ -5,12 +5,12 @@ public fun main(/*0*/ aNotNullNotNullNotNull: Test<Derived, Derived, Derived>, /
|
|||||||
@org.jspecify.nullness.NullMarked public open class AnnotatedBoundsOfWildcard {
|
@org.jspecify.nullness.NullMarked public open class AnnotatedBoundsOfWildcard {
|
||||||
public constructor AnnotatedBoundsOfWildcard()
|
public constructor AnnotatedBoundsOfWildcard()
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open fun extendsAsIs(/*0*/ a: Test<out @org.jspecify.nullness.NullnessUnspecified Base!, out @org.jspecify.nullness.NullnessUnspecified Base!, out @org.jspecify.nullness.NullnessUnspecified Base!>!): kotlin.Unit
|
public open fun extendsAsIs(/*0*/ a: Test<out Base!, out @org.jspecify.nullness.Nullable Base!, out @org.jspecify.nullness.NullnessUnspecified Base!>!): kotlin.Unit
|
||||||
public open fun extendsNotNull(/*0*/ a: Test<out Base!, out Base!, out Base!>!): kotlin.Unit
|
public open fun extendsNotNull(/*0*/ a: Test<out Base!, out Base!, out Base!>!): kotlin.Unit
|
||||||
public open fun extendsNullable(/*0*/ a: Test<out @org.jspecify.nullness.Nullable Base!, out @org.jspecify.nullness.Nullable Base!, out @org.jspecify.nullness.Nullable Base!>!): kotlin.Unit
|
public open fun extendsNullable(/*0*/ a: Test<out @org.jspecify.nullness.Nullable Base!, out @org.jspecify.nullness.Nullable Base!, out @org.jspecify.nullness.Nullable Base!>!): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open fun noBounds(/*0*/ a: Test<*, *, *>!): kotlin.Unit
|
public open fun noBounds(/*0*/ a: Test<out @org.jspecify.nullness.NullnessUnspecified kotlin.Any!, out @org.jspecify.nullness.NullnessUnspecified kotlin.Any!, out @org.jspecify.nullness.NullnessUnspecified kotlin.Any!>!): kotlin.Unit
|
||||||
public open fun superAsIs(/*0*/ a: Test<in @org.jspecify.nullness.NullnessUnspecified Base!, in @org.jspecify.nullness.NullnessUnspecified Base!, in @org.jspecify.nullness.NullnessUnspecified Base!>!): kotlin.Unit
|
public open fun superAsIs(/*0*/ a: Test<in Base!, in @org.jspecify.nullness.Nullable Base!, in @org.jspecify.nullness.NullnessUnspecified Base!>!): kotlin.Unit
|
||||||
public open fun superNotNull(/*0*/ a: Test<in Base!, in Base!, in Base!>!): kotlin.Unit
|
public open fun superNotNull(/*0*/ a: Test<in Base!, in Base!, in Base!>!): kotlin.Unit
|
||||||
public open fun superNullable(/*0*/ a: Test<in @org.jspecify.nullness.Nullable Base!, in @org.jspecify.nullness.Nullable Base!, in @org.jspecify.nullness.Nullable Base!>!): kotlin.Unit
|
public open fun superNullable(/*0*/ a: Test<in @org.jspecify.nullness.Nullable Base!, in @org.jspecify.nullness.Nullable Base!, in @org.jspecify.nullness.Nullable Base!>!): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
@@ -36,11 +36,3 @@ public open class Derived : Base {
|
|||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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 fun main(/*0*/ aNotNullNotNullNotNull: Test<Derived!, Derived!, Derived!>!, /*1*/ aNotNullNotNullNull: Test<Derived!, Derived!, @org.jspecify.nullness.Nullable Derived!>!, /*2*/ aNotNullNullNotNull: Test<Derived!, @org.jspecify.nullness.Nullable Derived!, Derived!>!, /*3*/ aNotNullNullNull: Test<Derived!, @org.jspecify.nullness.Nullable Derived!, @org.jspecify.nullness.Nullable Derived!>!, /*4*/ aObjectNotNullNotNullNotNull: Test<kotlin.Any!, kotlin.Any!, kotlin.Any!>!, /*5*/ aObjectNotNullNotNullNull: Test<kotlin.Any!, kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!>!, /*6*/ aObjectNotNullNullNotNull: Test<kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!, kotlin.Any!>!, /*7*/ aObjectNotNullNullNull: Test<kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!>!, /*8*/ b: AnnotatedBoundsOfWildcard!): kotlin.Unit
|
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
|
||||||
}
|
|
||||||
+30
-1
@@ -1,5 +1,34 @@
|
|||||||
// JAVA_SOURCES: AnnotatedBoundsOfWildcard.java
|
// JSPECIFY_MUTE
|
||||||
|
|
||||||
|
// FILE: AnnotatedBoundsOfWildcard.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class AnnotatedBoundsOfWildcard {
|
||||||
|
public void superAsIs(Test<? super Base, ? super @Nullable Base, ? super @NullnessUnspecified Base> a) {}
|
||||||
|
public void superNotNull(Test<? super Base, ? super Base, ? super Base> a) {}
|
||||||
|
public void superNullable(Test<? super @Nullable Base, ? super @Nullable Base, ? super @Nullable Base> a) {}
|
||||||
|
|
||||||
|
public void extendsAsIs(Test<? extends Base, ? extends @Nullable Base, ? extends @NullnessUnspecified Base> a) {}
|
||||||
|
public void extendsNotNull(Test<? extends Base, ? extends Base, ? extends Base> a) {}
|
||||||
|
public void extendsNullable(Test<? extends @Nullable Base, ? extends @Nullable Base, ? extends @Nullable Base> a) {}
|
||||||
|
|
||||||
|
public void noBounds(Test<? extends @NullnessUnspecified Object, ? extends @NullnessUnspecified Object, ? extends @NullnessUnspecified Object> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Base.java
|
||||||
|
public class Base {}
|
||||||
|
|
||||||
|
// FILE: Derived.java
|
||||||
|
public class Derived extends Base {}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class Test<T extends Object, E extends @Nullable Object, F extends @NullnessUnspecified Object> { }
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
fun main(
|
fun main(
|
||||||
aNotNullNotNullNotNull: Test<Derived, Derived, Derived>,
|
aNotNullNotNullNotNull: Test<Derived, Derived, Derived>,
|
||||||
aNotNullNotNullNull: Test<Derived, Derived, Derived?>,
|
aNotNullNotNullNull: Test<Derived, Derived, Derived?>,
|
||||||
+3
-10
@@ -5,12 +5,12 @@ public fun main(/*0*/ aNotNullNotNullNotNull: Test<Derived, Derived, Derived>, /
|
|||||||
@org.jspecify.nullness.NullMarked public open class AnnotatedBoundsOfWildcard {
|
@org.jspecify.nullness.NullMarked public open class AnnotatedBoundsOfWildcard {
|
||||||
public constructor AnnotatedBoundsOfWildcard()
|
public constructor AnnotatedBoundsOfWildcard()
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open fun extendsAsIs(/*0*/ a: Test<out @org.jspecify.nullness.NullnessUnspecified Base!, out @org.jspecify.nullness.NullnessUnspecified Base!, out @org.jspecify.nullness.NullnessUnspecified Base!>!): kotlin.Unit
|
public open fun extendsAsIs(/*0*/ a: Test<out Base!, out @org.jspecify.nullness.Nullable Base!, out @org.jspecify.nullness.NullnessUnspecified Base!>!): kotlin.Unit
|
||||||
public open fun extendsNotNull(/*0*/ a: Test<out Base!, out Base!, out Base!>!): kotlin.Unit
|
public open fun extendsNotNull(/*0*/ a: Test<out Base!, out Base!, out Base!>!): kotlin.Unit
|
||||||
public open fun extendsNullable(/*0*/ a: Test<out @org.jspecify.nullness.Nullable Base!, out @org.jspecify.nullness.Nullable Base!, out @org.jspecify.nullness.Nullable Base!>!): kotlin.Unit
|
public open fun extendsNullable(/*0*/ a: Test<out @org.jspecify.nullness.Nullable Base!, out @org.jspecify.nullness.Nullable Base!, out @org.jspecify.nullness.Nullable Base!>!): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open fun noBounds(/*0*/ a: Test<*, *, *>!): kotlin.Unit
|
public open fun noBounds(/*0*/ a: Test<out @org.jspecify.nullness.NullnessUnspecified kotlin.Any!, out @org.jspecify.nullness.NullnessUnspecified kotlin.Any!, out @org.jspecify.nullness.NullnessUnspecified kotlin.Any!>!): kotlin.Unit
|
||||||
public open fun superAsIs(/*0*/ a: Test<in @org.jspecify.nullness.NullnessUnspecified Base!, in @org.jspecify.nullness.NullnessUnspecified Base!, in @org.jspecify.nullness.NullnessUnspecified Base!>!): kotlin.Unit
|
public open fun superAsIs(/*0*/ a: Test<in Base!, in @org.jspecify.nullness.Nullable Base!, in @org.jspecify.nullness.NullnessUnspecified Base!>!): kotlin.Unit
|
||||||
public open fun superNotNull(/*0*/ a: Test<in Base!, in Base!, in Base!>!): kotlin.Unit
|
public open fun superNotNull(/*0*/ a: Test<in Base!, in Base!, in Base!>!): kotlin.Unit
|
||||||
public open fun superNullable(/*0*/ a: Test<in @org.jspecify.nullness.Nullable Base!, in @org.jspecify.nullness.Nullable Base!, in @org.jspecify.nullness.Nullable Base!>!): kotlin.Unit
|
public open fun superNullable(/*0*/ a: Test<in @org.jspecify.nullness.Nullable Base!, in @org.jspecify.nullness.Nullable Base!, in @org.jspecify.nullness.Nullable Base!>!): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
@@ -37,10 +37,3 @@ public open class Derived : Base {
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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 fun main(/*0*/ aNotNullNotNullNotNull: Test<Derived!, Derived!, Derived!>!, /*1*/ aNotNullNotNullNull: Test<Derived!, Derived!, @org.jspecify.nullness.Nullable Derived!>!, /*2*/ aNotNullNullNotNull: Test<Derived!, @org.jspecify.nullness.Nullable Derived!, Derived!>!, /*3*/ aNotNullNullNull: Test<Derived!, @org.jspecify.nullness.Nullable Derived!, @org.jspecify.nullness.Nullable Derived!>!, /*4*/ aObjectNotNullNotNullNotNull: Test<kotlin.Any!, kotlin.Any!, kotlin.Any!>!, /*5*/ aObjectNotNullNotNullNull: Test<kotlin.Any!, kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!>!, /*6*/ aObjectNotNullNullNotNull: Test<kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!, kotlin.Any!>!, /*7*/ aObjectNotNullNullNull: Test<kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!>!, /*8*/ b: AnnotatedBoundsOfWildcard!): kotlin.Unit
|
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
|
||||||
}
|
|
||||||
+29
-3
@@ -1,17 +1,42 @@
|
|||||||
// JAVA_SOURCES: Defaults.java
|
|
||||||
// JSPECIFY_STATE warn
|
|
||||||
|
|
||||||
|
// FILE: Defaults.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class Defaults {
|
||||||
|
public Foo defaultField = null;
|
||||||
|
@Nullable public Foo field = null;
|
||||||
|
|
||||||
|
public Foo everythingNotNullable(Foo x) { return null; }
|
||||||
|
|
||||||
|
public @Nullable Foo everythingNullable(@Nullable Foo x) { return null; }
|
||||||
|
|
||||||
|
public @NullnessUnspecified Foo everythingUnknown(@NullnessUnspecified Foo x) { return null; }
|
||||||
|
|
||||||
|
public @Nullable Foo mixed(Foo x) { return null; }
|
||||||
|
|
||||||
|
public Foo explicitlyNullnessUnspecified(@NullnessUnspecified Foo x) { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Foo.java
|
||||||
|
public class Foo {
|
||||||
|
public Object foo() { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
fun main(a: Defaults, x: Foo): Unit {
|
fun main(a: Defaults, x: Foo): Unit {
|
||||||
// jspecify_nullness_mismatch
|
// jspecify_nullness_mismatch
|
||||||
a.everythingNotNullable(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>).foo()
|
a.everythingNotNullable(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>).foo()
|
||||||
a.everythingNotNullable(x).foo()
|
a.everythingNotNullable(x).foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.everythingNullable(null)<!>.foo()
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.everythingNullable(null)<!>.foo()
|
||||||
|
|
||||||
a.everythingUnknown(null).foo()
|
a.everythingUnknown(null).foo()
|
||||||
|
|
||||||
// jspecify_nullness_mismatch
|
// jspecify_nullness_mismatch
|
||||||
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.mixed(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>)<!>.foo()
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.mixed(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>)<!>.foo()
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.mixed(x)<!>.foo()
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.mixed(x)<!>.foo()
|
||||||
|
|
||||||
a.explicitlyNullnessUnspecified(x).foo()
|
a.explicitlyNullnessUnspecified(x).foo()
|
||||||
@@ -19,5 +44,6 @@ fun main(a: Defaults, x: Foo): Unit {
|
|||||||
|
|
||||||
a.defaultField.foo()
|
a.defaultField.foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.field<!>.foo()
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.field<!>.foo()
|
||||||
}
|
}
|
||||||
-10
@@ -23,13 +23,3 @@ public open class Foo {
|
|||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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
|
|
||||||
|
|
||||||
// Static members
|
|
||||||
public/*package*/ open fun main(/*0*/ a: Defaults!, /*1*/ x: Foo!): kotlin.Unit
|
|
||||||
}
|
|
||||||
+28
-1
@@ -1,16 +1,42 @@
|
|||||||
// JAVA_SOURCES: Defaults.java
|
|
||||||
|
|
||||||
|
// FILE: Defaults.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class Defaults {
|
||||||
|
public Foo defaultField = null;
|
||||||
|
@Nullable public Foo field = null;
|
||||||
|
|
||||||
|
public Foo everythingNotNullable(Foo x) { return null; }
|
||||||
|
|
||||||
|
public @Nullable Foo everythingNullable(@Nullable Foo x) { return null; }
|
||||||
|
|
||||||
|
public @NullnessUnspecified Foo everythingUnknown(@NullnessUnspecified Foo x) { return null; }
|
||||||
|
|
||||||
|
public @Nullable Foo mixed(Foo x) { return null; }
|
||||||
|
|
||||||
|
public Foo explicitlyNullnessUnspecified(@NullnessUnspecified Foo x) { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Foo.java
|
||||||
|
public class Foo {
|
||||||
|
public Object foo() { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
fun main(a: Defaults, x: Foo): Unit {
|
fun main(a: Defaults, x: Foo): Unit {
|
||||||
// jspecify_nullness_mismatch
|
// jspecify_nullness_mismatch
|
||||||
a.everythingNotNullable(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>).foo()
|
a.everythingNotNullable(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>).foo()
|
||||||
a.everythingNotNullable(x).foo()
|
a.everythingNotNullable(x).foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.everythingNullable(null)<!>.foo()
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.everythingNullable(null)<!>.foo()
|
||||||
|
|
||||||
a.everythingUnknown(null).foo()
|
a.everythingUnknown(null).foo()
|
||||||
|
|
||||||
// jspecify_nullness_mismatch
|
// jspecify_nullness_mismatch
|
||||||
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.mixed(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>)<!>.foo()
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.mixed(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>)<!>.foo()
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.mixed(x)<!>.foo()
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.mixed(x)<!>.foo()
|
||||||
|
|
||||||
a.explicitlyNullnessUnspecified(x).foo()
|
a.explicitlyNullnessUnspecified(x).foo()
|
||||||
@@ -18,5 +44,6 @@ fun main(a: Defaults, x: Foo): Unit {
|
|||||||
|
|
||||||
a.defaultField.foo()
|
a.defaultField.foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.field<!>.foo()
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.field<!>.foo()
|
||||||
}
|
}
|
||||||
-9
@@ -24,12 +24,3 @@ public open class Foo {
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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
|
|
||||||
|
|
||||||
// Static members
|
|
||||||
public/*package*/ open fun main(/*0*/ a: Defaults!, /*1*/ x: Foo!): kotlin.Unit
|
|
||||||
}
|
|
||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
|
||||||
|
// FILE: IgnoreAnnotations.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class IgnoreAnnotations {
|
||||||
|
@Nullable public Derived field = null;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public Derived foo(Derived x, @NullnessUnspecified Base y) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Derived everythingNotNullable(Derived x) { return null; }
|
||||||
|
|
||||||
|
public @Nullable Derived everythingNullable(@Nullable Derived x) { return null; }
|
||||||
|
|
||||||
|
public @NullnessUnspecified Derived everythingUnknown(@NullnessUnspecified Derived x) { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Base.java
|
||||||
|
public class Base {
|
||||||
|
void foo() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Derived.java
|
||||||
|
public class Derived extends Base { }
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(a: IgnoreAnnotations, x: Derived): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.foo(x, null)<!>.foo()
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.foo(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>, x)<!>.foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.field<!>.foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.everythingNotNullable(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>).foo()
|
||||||
|
a.everythingNotNullable(x).foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.everythingNullable(null)<!>.foo()
|
||||||
|
|
||||||
|
a.everythingUnknown(null).foo()
|
||||||
|
}
|
||||||
-10
@@ -29,13 +29,3 @@ public open class Derived : Base {
|
|||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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
|
|
||||||
|
|
||||||
// Static members
|
|
||||||
public/*package*/ open fun main(/*0*/ a: IgnoreAnnotations!, /*1*/ x: Derived!): kotlin.Unit
|
|
||||||
}
|
|
||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
|
||||||
|
// FILE: IgnoreAnnotations.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class IgnoreAnnotations {
|
||||||
|
@Nullable public Derived field = null;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public Derived foo(Derived x, @NullnessUnspecified Base y) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Derived everythingNotNullable(Derived x) { return null; }
|
||||||
|
|
||||||
|
public @Nullable Derived everythingNullable(@Nullable Derived x) { return null; }
|
||||||
|
|
||||||
|
public @NullnessUnspecified Derived everythingUnknown(@NullnessUnspecified Derived x) { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Base.java
|
||||||
|
public class Base {
|
||||||
|
void foo() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Derived.java
|
||||||
|
public class Derived extends Base { }
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(a: IgnoreAnnotations, x: Derived): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.foo(x, null)<!>.foo()
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.foo(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>, x)<!>.foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.field<!>.foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.everythingNotNullable(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>).foo()
|
||||||
|
a.everythingNotNullable(x).foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.everythingNullable(null)<!>.foo()
|
||||||
|
|
||||||
|
a.everythingUnknown(null).foo()
|
||||||
|
}
|
||||||
-9
@@ -30,12 +30,3 @@ public open class Derived : Base {
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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
|
|
||||||
|
|
||||||
// Static members
|
|
||||||
public/*package*/ open fun main(/*0*/ a: IgnoreAnnotations!, /*1*/ x: Derived!): kotlin.Unit
|
|
||||||
}
|
|
||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
// !LANGUAGE: +ProhibitUsingNullableTypeParameterAgainstNotNullAnnotated
|
||||||
|
// JSPECIFY_MUTE
|
||||||
|
|
||||||
|
// FILE: NonPlatformTypeParameter.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class NonPlatformTypeParameter<T extends @Nullable Object> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
public <E extends @Nullable Object> void bar(E e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun <T : Test> main(a1: NonPlatformTypeParameter<Any?>, a2: NonPlatformTypeParameter<Test>, x: T): Unit {
|
||||||
|
a1.foo(null)
|
||||||
|
a1.bar<Test?>(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar<T>(null)
|
||||||
|
a1.bar<T>(x)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.foo(null)
|
||||||
|
a2.bar<Test?>(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar<T>(null)
|
||||||
|
a2.bar<T>(x)
|
||||||
|
}
|
||||||
-8
@@ -17,11 +17,3 @@ public open class Test {
|
|||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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 fun </*0*/ T : Test!> main(/*0*/ a1: NonPlatformTypeParameter<@org.jspecify.nullness.Nullable kotlin.Any!>!, /*1*/ a2: NonPlatformTypeParameter<Test!>!, /*2*/ x: T!): kotlin.Unit
|
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
|
||||||
}
|
|
||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
// !LANGUAGE: +ProhibitUsingNullableTypeParameterAgainstNotNullAnnotated
|
||||||
|
// JSPECIFY_MUTE
|
||||||
|
|
||||||
|
// FILE: NonPlatformTypeParameter.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class NonPlatformTypeParameter<T extends @Nullable Object> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
public <E extends @Nullable Object> void bar(E e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun <T : Test> main(a1: NonPlatformTypeParameter<Any?>, a2: NonPlatformTypeParameter<Test>, x: T): Unit {
|
||||||
|
a1.foo(null)
|
||||||
|
a1.bar<Test?>(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar<T>(null)
|
||||||
|
a1.bar<T>(x)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.foo(null)
|
||||||
|
a2.bar<Test?>(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar<T>(null)
|
||||||
|
a2.bar<T>(x)
|
||||||
|
}
|
||||||
-7
@@ -18,10 +18,3 @@ public open class Test {
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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 fun </*0*/ T : Test!> main(/*0*/ a1: NonPlatformTypeParameter<@org.jspecify.nullness.Nullable kotlin.Any!>!, /*1*/ a2: NonPlatformTypeParameter<Test!>!, /*2*/ x: T!): kotlin.Unit
|
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
|
||||||
}
|
|
||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
// JSPECIFY_MUTE
|
||||||
|
|
||||||
|
// FILE: NullnessUnspecifiedTypeParameter.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class NullnessUnspecifiedTypeParameter<T> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
|
||||||
|
public void bar(Test s, T t) {} // t should not become not nullable
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
fun main(a1: NullnessUnspecifiedTypeParameter<Any>, a2: NullnessUnspecifiedTypeParameter<<!UPPER_BOUND_VIOLATED_BASED_ON_JAVA_ANNOTATIONS!>Any?<!>>, x: Test): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.foo(null)
|
||||||
|
a1.foo(1)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.foo(null)
|
||||||
|
a2.foo(1)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>, null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar(x, null)
|
||||||
|
a1.bar(x, 1)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>, null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar(x, null)
|
||||||
|
a2.bar(x, 1)
|
||||||
|
}
|
||||||
-8
@@ -17,11 +17,3 @@ public open class Test {
|
|||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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/*package*/ open fun main(/*0*/ a1: NullnessUnspecifiedTypeParameter<kotlin.Any!>!, /*1*/ a2: NullnessUnspecifiedTypeParameter<@org.jspecify.nullness.Nullable kotlin.Any!>!, /*2*/ x: Test!): kotlin.Unit
|
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
|
||||||
}
|
|
||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
// JSPECIFY_MUTE
|
||||||
|
|
||||||
|
// FILE: NullnessUnspecifiedTypeParameter.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class NullnessUnspecifiedTypeParameter<T> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
|
||||||
|
public void bar(Test s, T t) {} // t should not become not nullable
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
fun main(a1: NullnessUnspecifiedTypeParameter<Any>, a2: NullnessUnspecifiedTypeParameter<<!UPPER_BOUND_VIOLATED_BASED_ON_JAVA_ANNOTATIONS!>Any?<!>>, x: Test): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.foo(null)
|
||||||
|
a1.foo(1)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.foo(null)
|
||||||
|
a2.foo(1)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>, null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar(x, null)
|
||||||
|
a1.bar(x, 1)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>, null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar(x, null)
|
||||||
|
a2.bar(x, 1)
|
||||||
|
}
|
||||||
-7
@@ -18,10 +18,3 @@ public open class Test {
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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/*package*/ open fun main(/*0*/ a1: NullnessUnspecifiedTypeParameter<kotlin.Any!>!, /*1*/ a2: NullnessUnspecifiedTypeParameter<@org.jspecify.nullness.Nullable kotlin.Any!>!, /*2*/ x: Test!): kotlin.Unit
|
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
|
||||||
}
|
|
||||||
Vendored
+58
@@ -0,0 +1,58 @@
|
|||||||
|
// JSPECIFY_MUTE
|
||||||
|
|
||||||
|
// FILE: SelfType.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class SelfType<T extends SelfType<T>> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: B.java
|
||||||
|
public class B extends SelfType<B> {}
|
||||||
|
|
||||||
|
// FILE: C.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class C<E extends C<E>> extends SelfType<E> {}
|
||||||
|
|
||||||
|
// FILE: AK.java
|
||||||
|
public class AK extends SelfType<AK> {}
|
||||||
|
|
||||||
|
// FILE: AKN.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class AKN extends SelfType<@Nullable AK> {}
|
||||||
|
|
||||||
|
// FILE: BK.java
|
||||||
|
public class BK extends B {}
|
||||||
|
|
||||||
|
// FILE: CK.java
|
||||||
|
public class CK extends C<CK> {}
|
||||||
|
|
||||||
|
// FILE: CKN.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class CKN extends C<@Nullable CK> {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(ak: AK, akn: AKN, bk: BK, ck: CK, ckn: CKN): Unit {
|
||||||
|
ak.foo(ak)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
ak.foo(null)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
akn.foo(null)
|
||||||
|
|
||||||
|
bk.foo(bk)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
bk.foo(null)
|
||||||
|
|
||||||
|
ck.foo(ck)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
ck.foo(null)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
ckn.foo(null)
|
||||||
|
}
|
||||||
+2
-3
@@ -34,7 +34,7 @@ public open class BK : B {
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
public open class C</*0*/ E : C<E!>!> : SelfType<E!> {
|
@org.jspecify.nullness.NullMarked public open class C</*0*/ E : C<E!>!> : SelfType<E!> {
|
||||||
public constructor C</*0*/ E : C<E!>!>()
|
public constructor C</*0*/ E : C<E!>!>()
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: E!): kotlin.Unit
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: E!): kotlin.Unit
|
||||||
@@ -55,11 +55,10 @@ public open class CKN : C<@org.jspecify.nullness.Nullable CK!> {
|
|||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: @org.jspecify.nullness.Nullable CK!): kotlin.Unit
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: @org.jspecify.nullness.Nullable CK!): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open fun main(/*0*/ ak: AK!, /*1*/ akn: AKN!, /*2*/ bk: BK!, /*3*/ ck: CK!, /*4*/ ckn: CKN!): kotlin.Unit
|
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
public open class SelfType</*0*/ T : SelfType<T!>!> {
|
@org.jspecify.nullness.NullMarked public open class SelfType</*0*/ T : SelfType<T!>!> {
|
||||||
public constructor SelfType</*0*/ T : SelfType<T!>!>()
|
public constructor SelfType</*0*/ T : SelfType<T!>!>()
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open fun foo(/*0*/ t: T!): kotlin.Unit
|
public open fun foo(/*0*/ t: T!): kotlin.Unit
|
||||||
Vendored
+58
@@ -0,0 +1,58 @@
|
|||||||
|
// JSPECIFY_MUTE
|
||||||
|
|
||||||
|
// FILE: SelfType.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class SelfType<T extends SelfType<T>> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: B.java
|
||||||
|
public class B extends SelfType<B> {}
|
||||||
|
|
||||||
|
// FILE: C.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class C<E extends C<E>> extends SelfType<E> {}
|
||||||
|
|
||||||
|
// FILE: AK.java
|
||||||
|
public class AK extends SelfType<AK> {}
|
||||||
|
|
||||||
|
// FILE: AKN.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class AKN extends SelfType<@Nullable AK> {}
|
||||||
|
|
||||||
|
// FILE: BK.java
|
||||||
|
public class BK extends B {}
|
||||||
|
|
||||||
|
// FILE: CK.java
|
||||||
|
public class CK extends C<CK> {}
|
||||||
|
|
||||||
|
// FILE: CKN.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class CKN extends C<@Nullable CK> {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(ak: AK, akn: AKN, bk: BK, ck: CK, ckn: CKN): Unit {
|
||||||
|
ak.foo(ak)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
ak.foo(null)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
akn.foo(null)
|
||||||
|
|
||||||
|
bk.foo(bk)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
bk.foo(null)
|
||||||
|
|
||||||
|
ck.foo(ck)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
ck.foo(null)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
ckn.foo(null)
|
||||||
|
}
|
||||||
+3
-3
@@ -34,7 +34,7 @@ public open class BK : B {
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
public open class C</*0*/ E : C<E!>!> : SelfType<E!> {
|
@org.jspecify.nullness.NullMarked public open class C</*0*/ E : C<E!>!> : SelfType<E!> {
|
||||||
public constructor C</*0*/ E : C<E!>!>()
|
public constructor C</*0*/ E : C<E!>!>()
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: E!): kotlin.Unit
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: E!): kotlin.Unit
|
||||||
@@ -55,14 +55,14 @@ public open class CKN : C<@org.jspecify.nullness.Nullable CK!> {
|
|||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: @org.jspecify.nullness.Nullable CK!): kotlin.Unit
|
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ t: @org.jspecify.nullness.Nullable CK!): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open fun main(/*0*/ ak: AK!, /*1*/ akn: AKN!, /*2*/ bk: BK!, /*3*/ ck: CK!, /*4*/ ckn: CKN!): kotlin.Unit
|
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
public open class SelfType</*0*/ T : SelfType<T!>!> {
|
@org.jspecify.nullness.NullMarked public open class SelfType</*0*/ T : SelfType<T!>!> {
|
||||||
public constructor SelfType</*0*/ T : SelfType<T!>!>()
|
public constructor SelfType</*0*/ T : SelfType<T!>!>()
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open fun foo(/*0*/ t: T!): kotlin.Unit
|
public open fun foo(/*0*/ t: T!): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
Vendored
+38
@@ -0,0 +1,38 @@
|
|||||||
|
|
||||||
|
// FILE: Simple.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class Simple {
|
||||||
|
@Nullable public Derived field = null;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public Derived foo(Derived x, @NullnessUnspecified Base y) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Derived bar() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Base.java
|
||||||
|
public class Base {}
|
||||||
|
|
||||||
|
// FILE: Derived.java
|
||||||
|
public class Derived extends Base {
|
||||||
|
void foo() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(a: Simple, x: Derived): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.foo(x, null)<!>.foo()
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.foo(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>, x)<!>.foo()
|
||||||
|
|
||||||
|
a.bar().foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.field<!>.foo()
|
||||||
|
}
|
||||||
-10
@@ -26,13 +26,3 @@ public open class Derived : Base {
|
|||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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
|
|
||||||
|
|
||||||
// Static members
|
|
||||||
public open fun main(/*0*/ a: Simple!, /*1*/ x: Derived!): kotlin.Unit
|
|
||||||
}
|
|
||||||
Vendored
+38
@@ -0,0 +1,38 @@
|
|||||||
|
|
||||||
|
// FILE: Simple.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class Simple {
|
||||||
|
@Nullable public Derived field = null;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public Derived foo(Derived x, @NullnessUnspecified Base y) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Derived bar() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Base.java
|
||||||
|
public class Base {}
|
||||||
|
|
||||||
|
// FILE: Derived.java
|
||||||
|
public class Derived extends Base {
|
||||||
|
void foo() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(a: Simple, x: Derived): Unit {
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.foo(x, null)<!>.foo()
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.foo(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>, x)<!>.foo()
|
||||||
|
|
||||||
|
a.bar().foo()
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.field<!>.foo()
|
||||||
|
}
|
||||||
-9
@@ -27,12 +27,3 @@ public open class Derived : Base {
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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
|
|
||||||
|
|
||||||
// Static members
|
|
||||||
public open fun main(/*0*/ a: Simple!, /*1*/ x: Derived!): kotlin.Unit
|
|
||||||
}
|
|
||||||
+49
@@ -0,0 +1,49 @@
|
|||||||
|
// JSPECIFY_MUTE
|
||||||
|
|
||||||
|
// FILE: TypeArgumentsFromParameterBounds.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class TypeArgumentsFromParameterBounds<T extends Object, E extends @Nullable Object, F extends @NullnessUnspecified Object> {}
|
||||||
|
|
||||||
|
// FILE: A.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class A {
|
||||||
|
public void bar(TypeArgumentsFromParameterBounds<Test, Test, Test> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: B.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class B {
|
||||||
|
public void bar(TypeArgumentsFromParameterBounds<Test, Test, Test> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(
|
||||||
|
aNotNullNotNullNotNull: TypeArgumentsFromParameterBounds<Test, Test, Test>,
|
||||||
|
aNotNullNotNullNull: TypeArgumentsFromParameterBounds<Test, Test, Test?>,
|
||||||
|
aNotNullNullNotNull: TypeArgumentsFromParameterBounds<Test, Test?, Test>,
|
||||||
|
aNotNullNullNull: TypeArgumentsFromParameterBounds<Test, Test?, Test?>,
|
||||||
|
a: A, b: B
|
||||||
|
): Unit {
|
||||||
|
a.bar(aNotNullNotNullNotNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.bar(aNotNullNotNullNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.bar(aNotNullNullNotNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.bar(aNotNullNullNull)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.bar(aNotNullNotNullNotNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.bar(aNotNullNotNullNull)
|
||||||
|
b.bar(aNotNullNullNotNull)
|
||||||
|
b.bar(aNotNullNullNull)
|
||||||
|
}
|
||||||
+4
-22
@@ -1,25 +1,17 @@
|
|||||||
package
|
package
|
||||||
|
|
||||||
public fun main(/*0*/ aNotNullNotNullNotNull: TypeArgumentsFromParameterBounds<Test, Test, Test>, /*1*/ aNotNullNotNullNull: TypeArgumentsFromParameterBounds<Test, Test, Test?>, /*2*/ aNotNullNullNotNull: TypeArgumentsFromParameterBounds<Test, Test?, Test>, /*3*/ aNotNullNullNull: TypeArgumentsFromParameterBounds<Test, Test?, Test?>, /*4*/ a: A, /*5*/ b: B, /*6*/ c: C): kotlin.Unit
|
public fun main(/*0*/ aNotNullNotNullNotNull: TypeArgumentsFromParameterBounds<Test, Test, Test>, /*1*/ aNotNullNotNullNull: TypeArgumentsFromParameterBounds<Test, Test, Test?>, /*2*/ aNotNullNullNotNull: TypeArgumentsFromParameterBounds<Test, Test?, Test>, /*3*/ aNotNullNullNull: TypeArgumentsFromParameterBounds<Test, Test?, Test?>, /*4*/ a: A, /*5*/ b: B): kotlin.Unit
|
||||||
|
|
||||||
public open class A {
|
@org.jspecify.nullness.NullMarked public open class A {
|
||||||
public constructor A()
|
public constructor A()
|
||||||
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<@org.jspecify.nullness.Nullable Test!, @org.jspecify.nullness.Nullable Test!, @org.jspecify.nullness.Nullable Test!>!): 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
|
|
||||||
}
|
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class B {
|
|
||||||
public constructor B()
|
|
||||||
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<Test!, Test!, Test!>!): kotlin.Unit
|
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<Test!, Test!, Test!>!): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
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 hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
public open class C {
|
public open class B {
|
||||||
public constructor C()
|
public constructor B()
|
||||||
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<Test!, Test!, Test!>!): kotlin.Unit
|
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<Test!, Test!, Test!>!): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
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 hashCode(): kotlin.Int
|
||||||
@@ -39,13 +31,3 @@ public open class Test {
|
|||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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
|
|
||||||
|
|
||||||
// Static members
|
|
||||||
public open fun main(/*0*/ aNotNullNotNullNotNull: TypeArgumentsFromParameterBounds<Test!, Test!, Test!>!, /*1*/ aNotNullNotNullNull: TypeArgumentsFromParameterBounds<Test!, Test!, @org.jspecify.nullness.Nullable Test!>!, /*2*/ aNotNullNullNotNull: TypeArgumentsFromParameterBounds<Test!, @org.jspecify.nullness.Nullable Test!, Test!>!, /*3*/ aNotNullNullNull: TypeArgumentsFromParameterBounds<Test!, @org.jspecify.nullness.Nullable Test!, @org.jspecify.nullness.Nullable Test!>!, /*4*/ a: A!, /*5*/ b: B!, /*6*/ c: C!): kotlin.Unit
|
|
||||||
}
|
|
||||||
+49
@@ -0,0 +1,49 @@
|
|||||||
|
// JSPECIFY_MUTE
|
||||||
|
|
||||||
|
// FILE: TypeArgumentsFromParameterBounds.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class TypeArgumentsFromParameterBounds<T extends Object, E extends @Nullable Object, F extends @NullnessUnspecified Object> {}
|
||||||
|
|
||||||
|
// FILE: A.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class A {
|
||||||
|
public void bar(TypeArgumentsFromParameterBounds<Test, Test, Test> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: B.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class B {
|
||||||
|
public void bar(TypeArgumentsFromParameterBounds<Test, Test, Test> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(
|
||||||
|
aNotNullNotNullNotNull: TypeArgumentsFromParameterBounds<Test, Test, Test>,
|
||||||
|
aNotNullNotNullNull: TypeArgumentsFromParameterBounds<Test, Test, Test?>,
|
||||||
|
aNotNullNullNotNull: TypeArgumentsFromParameterBounds<Test, Test?, Test>,
|
||||||
|
aNotNullNullNull: TypeArgumentsFromParameterBounds<Test, Test?, Test?>,
|
||||||
|
a: A, b: B
|
||||||
|
): Unit {
|
||||||
|
a.bar(aNotNullNotNullNotNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.bar(aNotNullNotNullNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.bar(aNotNullNullNotNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a.bar(aNotNullNullNull)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.bar(aNotNullNotNullNotNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b.bar(aNotNullNotNullNull)
|
||||||
|
b.bar(aNotNullNullNotNull)
|
||||||
|
b.bar(aNotNullNullNull)
|
||||||
|
}
|
||||||
+4
-21
@@ -1,25 +1,17 @@
|
|||||||
package
|
package
|
||||||
|
|
||||||
public fun main(/*0*/ aNotNullNotNullNotNull: TypeArgumentsFromParameterBounds<Test, Test, Test>, /*1*/ aNotNullNotNullNull: TypeArgumentsFromParameterBounds<Test, Test, Test?>, /*2*/ aNotNullNullNotNull: TypeArgumentsFromParameterBounds<Test, Test?, Test>, /*3*/ aNotNullNullNull: TypeArgumentsFromParameterBounds<Test, Test?, Test?>, /*4*/ a: A, /*5*/ b: B, /*6*/ c: C): kotlin.Unit
|
public fun main(/*0*/ aNotNullNotNullNotNull: TypeArgumentsFromParameterBounds<Test, Test, Test>, /*1*/ aNotNullNotNullNull: TypeArgumentsFromParameterBounds<Test, Test, Test?>, /*2*/ aNotNullNullNotNull: TypeArgumentsFromParameterBounds<Test, Test?, Test>, /*3*/ aNotNullNullNull: TypeArgumentsFromParameterBounds<Test, Test?, Test?>, /*4*/ a: A, /*5*/ b: B): kotlin.Unit
|
||||||
|
|
||||||
public open class A {
|
@org.jspecify.nullness.NullMarked public open class A {
|
||||||
public constructor A()
|
public constructor A()
|
||||||
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<@org.jspecify.nullness.Nullable Test!, @org.jspecify.nullness.Nullable Test!, @org.jspecify.nullness.Nullable Test!>!): 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
|
|
||||||
}
|
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class B {
|
|
||||||
public constructor B()
|
|
||||||
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<Test!, Test!, Test!>!): kotlin.Unit
|
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<Test!, Test!, Test!>!): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
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 hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
public open class C {
|
public open class B {
|
||||||
public constructor C()
|
public constructor B()
|
||||||
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<Test!, Test!, Test!>!): kotlin.Unit
|
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<Test!, Test!, Test!>!): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
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 hashCode(): kotlin.Int
|
||||||
@@ -40,12 +32,3 @@ public open class Test {
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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
|
|
||||||
|
|
||||||
// Static members
|
|
||||||
public open fun main(/*0*/ aNotNullNotNullNotNull: TypeArgumentsFromParameterBounds<Test!, Test!, Test!>!, /*1*/ aNotNullNotNullNull: TypeArgumentsFromParameterBounds<Test!, Test!, @org.jspecify.nullness.Nullable Test!>!, /*2*/ aNotNullNullNotNull: TypeArgumentsFromParameterBounds<Test!, @org.jspecify.nullness.Nullable Test!, Test!>!, /*3*/ aNotNullNullNull: TypeArgumentsFromParameterBounds<Test!, @org.jspecify.nullness.Nullable Test!, @org.jspecify.nullness.Nullable Test!>!, /*4*/ a: A!, /*5*/ b: B!, /*6*/ c: C!): kotlin.Unit
|
|
||||||
}
|
|
||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
// JSPECIFY_MUTE
|
||||||
|
|
||||||
|
// FILE: A.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class A<T> {
|
||||||
|
public void foo(@NullnessUnspecified T t) {}
|
||||||
|
public <E> void bar(E e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: B.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
@NullMarked
|
||||||
|
public class B<T> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
public <E> void bar(E e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
fun <T : Test> main(a1: A<<!UPPER_BOUND_VIOLATED_BASED_ON_JAVA_ANNOTATIONS!>Any?<!>>, a2: A<Test>, b1: B<<!UPPER_BOUND_VIOLATED_BASED_ON_JAVA_ANNOTATIONS!>Any?<!>>, b2: B<Test>, x: T): Unit {
|
||||||
|
a1.foo(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar<T?>(null)
|
||||||
|
a1.bar<T>(x)
|
||||||
|
|
||||||
|
a2.foo(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar<T?>(null)
|
||||||
|
a2.bar<T>(x)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b1.foo(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b1.bar<T?>(null)
|
||||||
|
b1.bar<T>(x)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b2.foo(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b2.bar<T?>(null)
|
||||||
|
b2.bar<T>(x)
|
||||||
|
}
|
||||||
-8
@@ -26,11 +26,3 @@ public open class Test {
|
|||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class TypeParameterBounds {
|
|
||||||
public constructor TypeParameterBounds()
|
|
||||||
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/*package*/ open fun </*0*/ T : Test!> main(/*0*/ a1: A<@org.jspecify.nullness.Nullable kotlin.Any!>!, /*1*/ a2: A<Test!>!, /*2*/ b1: B<@org.jspecify.nullness.Nullable kotlin.Any!>!, /*3*/ b2: B<Test!>!, /*4*/ x: T!): kotlin.Unit
|
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
|
||||||
}
|
|
||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
// JSPECIFY_MUTE
|
||||||
|
|
||||||
|
// FILE: A.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class A<T> {
|
||||||
|
public void foo(@NullnessUnspecified T t) {}
|
||||||
|
public <E> void bar(E e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: B.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
@NullMarked
|
||||||
|
public class B<T> {
|
||||||
|
public void foo(T t) {}
|
||||||
|
public <E> void bar(E e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Test.java
|
||||||
|
public class Test {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
fun <T : Test> main(a1: A<<!UPPER_BOUND_VIOLATED_BASED_ON_JAVA_ANNOTATIONS!>Any?<!>>, a2: A<Test>, b1: B<<!UPPER_BOUND_VIOLATED_BASED_ON_JAVA_ANNOTATIONS!>Any?<!>>, b2: B<Test>, x: T): Unit {
|
||||||
|
a1.foo(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a1.bar<T?>(null)
|
||||||
|
a1.bar<T>(x)
|
||||||
|
|
||||||
|
a2.foo(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
a2.bar<T?>(null)
|
||||||
|
a2.bar<T>(x)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b1.foo(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b1.bar<T?>(null)
|
||||||
|
b1.bar<T>(x)
|
||||||
|
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b2.foo(null)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
|
b2.bar<T?>(null)
|
||||||
|
b2.bar<T>(x)
|
||||||
|
}
|
||||||
-7
@@ -27,10 +27,3 @@ public open class Test {
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class TypeParameterBounds {
|
|
||||||
public constructor TypeParameterBounds()
|
|
||||||
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/*package*/ open fun </*0*/ T : Test!> main(/*0*/ a1: A<@org.jspecify.nullness.Nullable kotlin.Any!>!, /*1*/ a2: A<Test!>!, /*2*/ b1: B<@org.jspecify.nullness.Nullable kotlin.Any!>!, /*3*/ b2: B<Test!>!, /*4*/ x: T!): kotlin.Unit
|
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
|
||||||
}
|
|
||||||
+17
-2
@@ -1,5 +1,20 @@
|
|||||||
// JAVA_SOURCES: WildcardsWithDefault.java
|
// JSPECIFY_MUTE
|
||||||
|
|
||||||
|
// FILE: WildcardsWithDefault.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class WildcardsWithDefault {
|
||||||
|
public void noBoundsNotNull(A<?, ?, ?> a) {}
|
||||||
|
public void noBoundsNullable(A<? extends @Nullable Object, ? extends @Nullable Object, ? extends @Nullable Object> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: A.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class A <T extends Object, E extends @Nullable Object, F extends @NullnessUnspecified Object> {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
fun main(
|
fun main(
|
||||||
aNotNullNotNullNotNull: A<Any, Any, Any>,
|
aNotNullNotNullNotNull: A<Any, Any, Any>,
|
||||||
aNotNullNotNullNull: A<Any, Any, Any?>,
|
aNotNullNotNullNull: A<Any, Any, Any?>,
|
||||||
@@ -7,8 +22,8 @@ fun main(
|
|||||||
aNotNullNullNull: A<Any, Any?, Any?>,
|
aNotNullNullNull: A<Any, Any?, Any?>,
|
||||||
b: WildcardsWithDefault
|
b: WildcardsWithDefault
|
||||||
): Unit {
|
): Unit {
|
||||||
// jspecify_nullness_mismatch
|
|
||||||
b.noBoundsNotNull(aNotNullNotNullNotNull)
|
b.noBoundsNotNull(aNotNullNotNullNotNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
b.noBoundsNotNull(aNotNullNotNullNull)
|
b.noBoundsNotNull(aNotNullNotNullNull)
|
||||||
// jspecify_nullness_mismatch
|
// jspecify_nullness_mismatch
|
||||||
b.noBoundsNotNull(aNotNullNullNotNull)
|
b.noBoundsNotNull(aNotNullNullNotNull)
|
||||||
+1
-11
@@ -9,21 +9,11 @@ public open class A</*0*/ T : kotlin.Any!, /*1*/ E : @org.jspecify.nullness.Null
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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
|
|
||||||
|
|
||||||
// Static members
|
|
||||||
public open fun main(/*0*/ aNotNullNotNullNotNull: A<kotlin.Any!, kotlin.Any!, kotlin.Any!>!, /*1*/ aNotNullNotNullNull: A<kotlin.Any!, kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!>!, /*2*/ aNotNullNullNotNull: A<kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!, kotlin.Any!>!, /*3*/ aNotNullNullNull: A<kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!>!, /*4*/ b: WildcardsWithDefault!): kotlin.Unit
|
|
||||||
}
|
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class WildcardsWithDefault {
|
@org.jspecify.nullness.NullMarked public open class WildcardsWithDefault {
|
||||||
public constructor WildcardsWithDefault()
|
public constructor WildcardsWithDefault()
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
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 hashCode(): kotlin.Int
|
||||||
public open fun noBoundsNotNull(/*0*/ a: A<*, *, *>!): kotlin.Unit
|
public open fun noBoundsNotNull(/*0*/ a: A<*, *, *>!): kotlin.Unit
|
||||||
public open fun noBoundsNullable(/*0*/ a: A<*, *, *>!): kotlin.Unit
|
public open fun noBoundsNullable(/*0*/ a: A<out @org.jspecify.nullness.Nullable kotlin.Any!, out @org.jspecify.nullness.Nullable kotlin.Any!, out @org.jspecify.nullness.Nullable kotlin.Any!>!): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
+17
-3
@@ -1,6 +1,20 @@
|
|||||||
// JAVA_SOURCES: WildcardsWithDefault.java
|
// JSPECIFY_MUTE
|
||||||
// JSPECIFY_STATE warn
|
|
||||||
|
|
||||||
|
// FILE: WildcardsWithDefault.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
@NullMarked
|
||||||
|
public class WildcardsWithDefault {
|
||||||
|
public void noBoundsNotNull(A<?, ?, ?> a) {}
|
||||||
|
public void noBoundsNullable(A<? extends @Nullable Object, ? extends @Nullable Object, ? extends @Nullable Object> a) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: A.java
|
||||||
|
import org.jspecify.nullness.*;
|
||||||
|
|
||||||
|
public class A <T extends Object, E extends @Nullable Object, F extends @NullnessUnspecified Object> {}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
fun main(
|
fun main(
|
||||||
aNotNullNotNullNotNull: A<Any, Any, Any>,
|
aNotNullNotNullNotNull: A<Any, Any, Any>,
|
||||||
aNotNullNotNullNull: A<Any, Any, Any?>,
|
aNotNullNotNullNull: A<Any, Any, Any?>,
|
||||||
@@ -8,8 +22,8 @@ fun main(
|
|||||||
aNotNullNullNull: A<Any, Any?, Any?>,
|
aNotNullNullNull: A<Any, Any?, Any?>,
|
||||||
b: WildcardsWithDefault
|
b: WildcardsWithDefault
|
||||||
): Unit {
|
): Unit {
|
||||||
// jspecify_nullness_mismatch
|
|
||||||
b.noBoundsNotNull(aNotNullNotNullNotNull)
|
b.noBoundsNotNull(aNotNullNotNullNotNull)
|
||||||
|
// jspecify_nullness_mismatch
|
||||||
b.noBoundsNotNull(aNotNullNotNullNull)
|
b.noBoundsNotNull(aNotNullNotNullNull)
|
||||||
// jspecify_nullness_mismatch
|
// jspecify_nullness_mismatch
|
||||||
b.noBoundsNotNull(aNotNullNullNotNull)
|
b.noBoundsNotNull(aNotNullNullNotNull)
|
||||||
+2
-11
@@ -9,21 +9,12 @@ public open class A</*0*/ T : kotlin.Any!, /*1*/ E : @org.jspecify.nullness.Null
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class Use {
|
|
||||||
public constructor Use()
|
|
||||||
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
|
|
||||||
|
|
||||||
// Static members
|
|
||||||
public open fun main(/*0*/ aNotNullNotNullNotNull: A<kotlin.Any!, kotlin.Any!, kotlin.Any!>!, /*1*/ aNotNullNotNullNull: A<kotlin.Any!, kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!>!, /*2*/ aNotNullNullNotNull: A<kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!, kotlin.Any!>!, /*3*/ aNotNullNullNull: A<kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!, @org.jspecify.nullness.Nullable kotlin.Any!>!, /*4*/ b: WildcardsWithDefault!): kotlin.Unit
|
|
||||||
}
|
|
||||||
|
|
||||||
@org.jspecify.nullness.NullMarked public open class WildcardsWithDefault {
|
@org.jspecify.nullness.NullMarked public open class WildcardsWithDefault {
|
||||||
public constructor WildcardsWithDefault()
|
public constructor WildcardsWithDefault()
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
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 hashCode(): kotlin.Int
|
||||||
public open fun noBoundsNotNull(/*0*/ a: A<*, *, *>!): kotlin.Unit
|
public open fun noBoundsNotNull(/*0*/ a: A<*, *, *>!): kotlin.Unit
|
||||||
public open fun noBoundsNullable(/*0*/ a: A<*, *, *>!): kotlin.Unit
|
public open fun noBoundsNullable(/*0*/ a: A<out @org.jspecify.nullness.Nullable kotlin.Any!, out @org.jspecify.nullness.Nullable kotlin.Any!, out @org.jspecify.nullness.Nullable kotlin.Any!>!): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
+1
-4
@@ -1,9 +1,9 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
||||||
// SKIP_JAVAC
|
// SKIP_JAVAC
|
||||||
// SOURCE_RETENTION_ANNOTATIONS
|
// SOURCE_RETENTION_ANNOTATIONS
|
||||||
|
// JSR305_GLOBAL_REPORT: strict
|
||||||
|
|
||||||
// FILE: spr/NonNullApi.java
|
// FILE: spr/NonNullApi.java
|
||||||
|
|
||||||
package spr;
|
package spr;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
@@ -23,7 +23,6 @@ public @interface NonNullApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: spr/NullableApi.java
|
// FILE: spr/NullableApi.java
|
||||||
|
|
||||||
package spr;
|
package spr;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
@@ -44,7 +43,6 @@ public @interface NullableApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: A.java
|
// FILE: A.java
|
||||||
|
|
||||||
import spr.*;
|
import spr.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@@ -58,7 +56,6 @@ public class A {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: main.kt
|
// FILE: main.kt
|
||||||
|
|
||||||
fun main(a: A) {
|
fun main(a: A) {
|
||||||
a.foo("").length
|
a.foo("").length
|
||||||
a.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)<!UNNECESSARY_SAFE_CALL!>?.<!>length
|
a.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)<!UNNECESSARY_SAFE_CALL!>?.<!>length
|
||||||
+1
-4
@@ -1,9 +1,9 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
||||||
// SKIP_JAVAC
|
// SKIP_JAVAC
|
||||||
// SOURCE_RETENTION_ANNOTATIONS
|
// SOURCE_RETENTION_ANNOTATIONS
|
||||||
|
// JSR305_GLOBAL_REPORT: strict
|
||||||
|
|
||||||
// FILE: spr/NonNullApi.java
|
// FILE: spr/NonNullApi.java
|
||||||
|
|
||||||
package spr;
|
package spr;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
@@ -23,7 +23,6 @@ public @interface NonNullApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: spr/NullableApi.java
|
// FILE: spr/NullableApi.java
|
||||||
|
|
||||||
package spr;
|
package spr;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
@@ -44,7 +43,6 @@ public @interface NullableApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: A.java
|
// FILE: A.java
|
||||||
|
|
||||||
import spr.*;
|
import spr.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@@ -56,7 +54,6 @@ public class A {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: main.kt
|
// FILE: main.kt
|
||||||
|
|
||||||
fun main(a: A) {
|
fun main(a: A) {
|
||||||
a.foo("").length
|
a.foo("").length
|
||||||
a.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)<!UNNECESSARY_SAFE_CALL!>?.<!>length
|
a.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)<!UNNECESSARY_SAFE_CALL!>?.<!>length
|
||||||
+1
-4
@@ -1,7 +1,7 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
||||||
|
// JSR305_GLOBAL_REPORT: strict
|
||||||
|
|
||||||
// FILE: spr/Nullable.java
|
// FILE: spr/Nullable.java
|
||||||
|
|
||||||
package spr;
|
package spr;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
@@ -22,7 +22,6 @@ public @interface Nullable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: spr/NonNullApi.java
|
// FILE: spr/NonNullApi.java
|
||||||
|
|
||||||
package spr;
|
package spr;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
@@ -42,7 +41,6 @@ public @interface NonNullApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: A.java
|
// FILE: A.java
|
||||||
|
|
||||||
import spr.*;
|
import spr.*;
|
||||||
|
|
||||||
@NonNullApi
|
@NonNullApi
|
||||||
@@ -64,7 +62,6 @@ public class A {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: main.kt
|
// FILE: main.kt
|
||||||
|
|
||||||
fun main(a: A) {
|
fun main(a: A) {
|
||||||
a.foo("", null)<!UNNECESSARY_SAFE_CALL!>?.<!>length
|
a.foo("", null)<!UNNECESSARY_SAFE_CALL!>?.<!>length
|
||||||
a.foo("", null).length
|
a.foo("", null).length
|
||||||
+2
-6
@@ -3,8 +3,9 @@
|
|||||||
// RENDER_PACKAGE: test
|
// RENDER_PACKAGE: test
|
||||||
// SOURCE_RETENTION_ANNOTATIONS
|
// SOURCE_RETENTION_ANNOTATIONS
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// FILE: spr/Nullable.java
|
// JSR305_GLOBAL_REPORT: strict
|
||||||
|
|
||||||
|
// FILE: spr/Nullable.java
|
||||||
package spr;
|
package spr;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
@@ -25,7 +26,6 @@ public @interface Nullable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: spr/NonNullApi.java
|
// FILE: spr/NonNullApi.java
|
||||||
|
|
||||||
package spr;
|
package spr;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
@@ -45,12 +45,10 @@ public @interface NonNullApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: test/package-info.java
|
// FILE: test/package-info.java
|
||||||
|
|
||||||
@spr.NonNullApi()
|
@spr.NonNullApi()
|
||||||
package test;
|
package test;
|
||||||
|
|
||||||
// FILE: test/L.java
|
// FILE: test/L.java
|
||||||
|
|
||||||
package test;
|
package test;
|
||||||
|
|
||||||
public class L<T extends java.util.Map<String, S>, S> {
|
public class L<T extends java.util.Map<String, S>, S> {
|
||||||
@@ -62,7 +60,6 @@ public class L<T extends java.util.Map<String, S>, S> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: test/A.java
|
// FILE: test/A.java
|
||||||
|
|
||||||
package test;
|
package test;
|
||||||
|
|
||||||
import spr.*;
|
import spr.*;
|
||||||
@@ -77,7 +74,6 @@ public class A {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: main.kt
|
// FILE: main.kt
|
||||||
|
|
||||||
import test.L
|
import test.L
|
||||||
|
|
||||||
fun main(a: test.A, l: L<Map<String, Int>, Int?>, l1: L<Map<String, Int>, Int>) {
|
fun main(a: test.A, l: L<Map<String, Int>, Int?>, l1: L<Map<String, Int>, Int>) {
|
||||||
+1
-4
@@ -1,9 +1,9 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
||||||
// SKIP_JAVAC
|
// SKIP_JAVAC
|
||||||
// SOURCE_RETENTION_ANNOTATIONS
|
// SOURCE_RETENTION_ANNOTATIONS
|
||||||
|
// JSR305_GLOBAL_REPORT: strict
|
||||||
|
|
||||||
// FILE: spr/NonNullApi.java
|
// FILE: spr/NonNullApi.java
|
||||||
|
|
||||||
package spr;
|
package spr;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
@@ -23,7 +23,6 @@ public @interface NonNullApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: spr/NullableApi.java
|
// FILE: spr/NullableApi.java
|
||||||
|
|
||||||
package spr;
|
package spr;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
@@ -44,7 +43,6 @@ public @interface NullableApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: A.java
|
// FILE: A.java
|
||||||
|
|
||||||
import spr.*;
|
import spr.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@@ -58,7 +56,6 @@ public class A {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FILE: main.kt
|
// FILE: main.kt
|
||||||
|
|
||||||
fun main(a: A) {
|
fun main(a: A) {
|
||||||
a.foo("").length
|
a.foo("").length
|
||||||
a.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)<!UNNECESSARY_SAFE_CALL!>?.<!>length
|
a.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)<!UNNECESSARY_SAFE_CALL!>?.<!>length
|
||||||
+11
@@ -2,6 +2,17 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||||
// SKIP_TXT
|
// SKIP_TXT
|
||||||
|
|
||||||
|
// FILE: ClassTypeParameterBound.java
|
||||||
|
// INCLUDE_JAVA_AS_BINARY
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class ClassTypeParameterBound <T extends @NotNull String> {
|
||||||
|
ClassTypeParameterBound(T x) { }
|
||||||
|
ClassTypeParameterBound() { }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
fun main(x: ClassTypeParameterBound<<!UPPER_BOUND_VIOLATED!>String?<!>>, y: ClassTypeParameterBound<String>, a: String?, b: String) {
|
fun main(x: ClassTypeParameterBound<<!UPPER_BOUND_VIOLATED!>String?<!>>, y: ClassTypeParameterBound<String>, a: String?, b: String) {
|
||||||
val x2 = ClassTypeParameterBound<<!UPPER_BOUND_VIOLATED!>String?<!>>()
|
val x2 = ClassTypeParameterBound<<!UPPER_BOUND_VIOLATED!>String?<!>>()
|
||||||
val y2 = ClassTypeParameterBound<String>()
|
val y2 = ClassTypeParameterBound<String>()
|
||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
// !LANGUAGE: +TypeEnhancementImprovementsInStrictMode +ProhibitUsingNullableTypeParameterAgainstNotNullAnnotated
|
||||||
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||||
|
// SKIP_TXT
|
||||||
|
|
||||||
|
// FILE: ClassTypeParameterBound.java
|
||||||
|
// INCLUDE_JAVA_AS_BINARY
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class ClassTypeParameterBound <T extends @NotNull String> {
|
||||||
|
ClassTypeParameterBound(T x) { }
|
||||||
|
ClassTypeParameterBound() { }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(x: ClassTypeParameterBound<<!UPPER_BOUND_VIOLATED!>String?<!>>, y: ClassTypeParameterBound<String>, a: String?, b: String) {
|
||||||
|
val x2 = ClassTypeParameterBound<<!UPPER_BOUND_VIOLATED!>String?<!>>()
|
||||||
|
val y2 = ClassTypeParameterBound<String>()
|
||||||
|
|
||||||
|
val x3 = ClassTypeParameterBound(<!TYPE_MISMATCH!>a<!>)
|
||||||
|
val y3 = ClassTypeParameterBound(b)
|
||||||
|
|
||||||
|
val x4: ClassTypeParameterBound<<!UPPER_BOUND_VIOLATED!>String?<!>> = <!TYPE_MISMATCH!>ClassTypeParameterBound()<!>
|
||||||
|
val y4: ClassTypeParameterBound<String> = ClassTypeParameterBound()
|
||||||
|
}
|
||||||
+11
-1
@@ -2,7 +2,17 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||||
// SKIP_TXT
|
// SKIP_TXT
|
||||||
|
|
||||||
// TODO: report warnings "UPPER_BOUND_VIOLATED"
|
// FILE: ClassTypeParameterBoundWithWarnings.java
|
||||||
|
// INCLUDE_JAVA_AS_BINARY
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class ClassTypeParameterBoundWithWarnings <T extends @NotNull String> {
|
||||||
|
ClassTypeParameterBoundWithWarnings() { }
|
||||||
|
ClassTypeParameterBoundWithWarnings(T x) { }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
fun main(x: ClassTypeParameterBoundWithWarnings<<!UPPER_BOUND_VIOLATED_BASED_ON_JAVA_ANNOTATIONS!>String?<!>>, y: ClassTypeParameterBoundWithWarnings<String>, a: String?, b: String) {
|
fun main(x: ClassTypeParameterBoundWithWarnings<<!UPPER_BOUND_VIOLATED_BASED_ON_JAVA_ANNOTATIONS!>String?<!>>, y: ClassTypeParameterBoundWithWarnings<String>, a: String?, b: String) {
|
||||||
val x2 = ClassTypeParameterBoundWithWarnings<String?>()
|
val x2 = ClassTypeParameterBoundWithWarnings<String?>()
|
||||||
val y2 = ClassTypeParameterBoundWithWarnings<String>()
|
val y2 = ClassTypeParameterBoundWithWarnings<String>()
|
||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
// !LANGUAGE: +ProhibitUsingNullableTypeParameterAgainstNotNullAnnotated
|
||||||
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||||
|
// SKIP_TXT
|
||||||
|
|
||||||
|
// FILE: ClassTypeParameterBoundWithWarnings.java
|
||||||
|
// INCLUDE_JAVA_AS_BINARY
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class ClassTypeParameterBoundWithWarnings <T extends @NotNull String> {
|
||||||
|
ClassTypeParameterBoundWithWarnings() { }
|
||||||
|
ClassTypeParameterBoundWithWarnings(T x) { }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun main(x: ClassTypeParameterBoundWithWarnings<<!UPPER_BOUND_VIOLATED_BASED_ON_JAVA_ANNOTATIONS!>String?<!>>, y: ClassTypeParameterBoundWithWarnings<String>, a: String?, b: String) {
|
||||||
|
val x2 = ClassTypeParameterBoundWithWarnings<String?>()
|
||||||
|
val y2 = ClassTypeParameterBoundWithWarnings<String>()
|
||||||
|
|
||||||
|
val x3 = ClassTypeParameterBoundWithWarnings(a)
|
||||||
|
val y3 = ClassTypeParameterBoundWithWarnings(b)
|
||||||
|
|
||||||
|
val x4: ClassTypeParameterBoundWithWarnings<<!UPPER_BOUND_VIOLATED_BASED_ON_JAVA_ANNOTATIONS!>String?<!>> = ClassTypeParameterBoundWithWarnings()
|
||||||
|
val y4: ClassTypeParameterBoundWithWarnings<String> = ClassTypeParameterBoundWithWarnings()
|
||||||
|
}
|
||||||
+65
@@ -0,0 +1,65 @@
|
|||||||
|
// !LANGUAGE: +TypeEnhancementImprovementsInStrictMode +ProhibitUsingNullableTypeParameterAgainstNotNullAnnotated
|
||||||
|
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
|
// SKIP_TXT
|
||||||
|
|
||||||
|
// FILE: ReturnType.java
|
||||||
|
// INCLUDE_JAVA_AS_BINARY
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.*;
|
||||||
|
|
||||||
|
public class ReturnType<T> {
|
||||||
|
public interface A<T1, T2> {}
|
||||||
|
|
||||||
|
public A<@Nullable String, @Nullable T> foo1() { return null; }
|
||||||
|
public A<@Nullable String, @NotNull T> foo2() { return null; }
|
||||||
|
public A<@NotNull String, @NotNull T> foo3 = null;
|
||||||
|
public @NotNull T [] foo4 = null;
|
||||||
|
public ReturnType<@Nullable String> foo41 = null;
|
||||||
|
public T foo411 = null;
|
||||||
|
public @Nullable String [] foo5() { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
fun <K> takeNotNullStringAndKNullable(x: ReturnType.A<String, K?>) {}
|
||||||
|
fun <K> takeNullableStringAndKNullable(x: ReturnType.A<String?, K?>) {}
|
||||||
|
fun <K: Any> takeNotNullStringAndNotNullK(x: ReturnType.A<String, K>) {}
|
||||||
|
fun <K: Any> takeNullableStringAndNotNullK(x: ReturnType.A<String?, K>) {}
|
||||||
|
fun takeNotNullString(x: String) {}
|
||||||
|
|
||||||
|
fun takeArrayOfNotNullString(x: Array<String>) {}
|
||||||
|
fun takeArrayOfNullableString(x: Array<String?>) {}
|
||||||
|
fun <K: Any> takeArrayOfNotNullK(x: Array<K>) {}
|
||||||
|
fun <K> takeArrayOfNullableK(x: Array<K?>) {}
|
||||||
|
|
||||||
|
fun <R> main(a: ReturnType<R>) {
|
||||||
|
val x1 = a.foo1()
|
||||||
|
takeNotNullStringAndKNullable(<!TYPE_MISMATCH!>x1<!>)
|
||||||
|
takeNullableStringAndKNullable(x1)
|
||||||
|
takeNotNullStringAndNotNullK(<!TYPE_MISMATCH!>x1<!>)
|
||||||
|
takeNullableStringAndNotNullK(<!TYPE_MISMATCH, TYPE_MISMATCH!>x1<!>)
|
||||||
|
takeNotNullString(<!TYPE_MISMATCH!>a.foo41.foo411<!>)
|
||||||
|
|
||||||
|
val x2 = a.foo2()
|
||||||
|
takeNotNullStringAndKNullable(<!TYPE_MISMATCH!>x2<!>)
|
||||||
|
takeNullableStringAndKNullable(<!TYPE_MISMATCH!>x2<!>)
|
||||||
|
takeNotNullStringAndNotNullK(<!TYPE_MISMATCH!>x2<!>)
|
||||||
|
takeNullableStringAndNotNullK(x2)
|
||||||
|
|
||||||
|
val x3 = a.foo3
|
||||||
|
takeNotNullStringAndKNullable(<!TYPE_MISMATCH!>x3<!>)
|
||||||
|
takeNullableStringAndKNullable(<!TYPE_MISMATCH!>x3<!>)
|
||||||
|
takeNotNullStringAndNotNullK(x3)
|
||||||
|
takeNullableStringAndNotNullK(<!TYPE_MISMATCH!>x3<!>)
|
||||||
|
|
||||||
|
val x4 = a.foo4
|
||||||
|
takeArrayOfNotNullString(<!TYPE_MISMATCH!>x4<!>)
|
||||||
|
takeArrayOfNullableString(<!TYPE_MISMATCH!>x4<!>)
|
||||||
|
takeArrayOfNotNullK(x4)
|
||||||
|
takeArrayOfNullableK(<!TYPE_MISMATCH!>x4<!>)
|
||||||
|
|
||||||
|
val x5 = a.foo5()
|
||||||
|
takeArrayOfNotNullString(<!TYPE_MISMATCH!>x5<!>)
|
||||||
|
takeArrayOfNullableString(x5)
|
||||||
|
takeArrayOfNotNullK(<!TYPE_MISMATCH, TYPE_MISMATCH!>x5<!>)
|
||||||
|
takeArrayOfNullableK(x5)
|
||||||
|
}
|
||||||
+21
-4
@@ -2,6 +2,24 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
// SKIP_TXT
|
// SKIP_TXT
|
||||||
|
|
||||||
|
// FILE: ReturnType.java
|
||||||
|
// INCLUDE_JAVA_AS_BINARY
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.*;
|
||||||
|
|
||||||
|
public class ReturnType<T> {
|
||||||
|
public interface A<T1, T2> {}
|
||||||
|
|
||||||
|
public A<@Nullable String, @Nullable T> foo1() { return null; }
|
||||||
|
public A<@Nullable String, @NotNull T> foo2() { return null; }
|
||||||
|
public A<@NotNull String, @NotNull T> foo3 = null;
|
||||||
|
public @NotNull T [] foo4 = null;
|
||||||
|
public ReturnType<@Nullable String> foo41 = null;
|
||||||
|
public T foo411 = null;
|
||||||
|
public @Nullable String [] foo5() { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
fun <K> takeNotNullStringAndKNullable(x: ReturnType.A<String, K?>) {}
|
fun <K> takeNotNullStringAndKNullable(x: ReturnType.A<String, K?>) {}
|
||||||
fun <K> takeNullableStringAndKNullable(x: ReturnType.A<String?, K?>) {}
|
fun <K> takeNullableStringAndKNullable(x: ReturnType.A<String?, K?>) {}
|
||||||
fun <K: Any> takeNotNullStringAndNotNullK(x: ReturnType.A<String, K>) {}
|
fun <K: Any> takeNotNullStringAndNotNullK(x: ReturnType.A<String, K>) {}
|
||||||
@@ -13,26 +31,25 @@ fun takeArrayOfNullableString(x: Array<String?>) {}
|
|||||||
fun <K: Any> takeArrayOfNotNullK(x: Array<K>) {}
|
fun <K: Any> takeArrayOfNotNullK(x: Array<K>) {}
|
||||||
fun <K> takeArrayOfNullableK(x: Array<K?>) {}
|
fun <K> takeArrayOfNullableK(x: Array<K?>) {}
|
||||||
|
|
||||||
// FILE: main.kt
|
|
||||||
fun <R> main(a: ReturnType<R>) {
|
fun <R> main(a: ReturnType<R>) {
|
||||||
val x1 = <!DEBUG_INFO_EXPRESSION_TYPE("(ReturnType.A<@org.jetbrains.annotations.Nullable kotlin.String?, @org.jetbrains.annotations.Nullable R?>..ReturnType.A<@org.jetbrains.annotations.Nullable kotlin.String?, @org.jetbrains.annotations.Nullable R?>?)")!>a.foo1()<!>
|
val x1 = <!DEBUG_INFO_EXPRESSION_TYPE("(ReturnType.A<@org.jetbrains.annotations.Nullable kotlin.String?, @org.jetbrains.annotations.Nullable R?>..ReturnType.A<@org.jetbrains.annotations.Nullable kotlin.String?, @org.jetbrains.annotations.Nullable R?>?)")!>a.foo1()<!>
|
||||||
takeNotNullStringAndKNullable(<!TYPE_MISMATCH!>x1<!>)
|
takeNotNullStringAndKNullable(<!TYPE_MISMATCH!>x1<!>)
|
||||||
takeNullableStringAndKNullable(x1)
|
takeNullableStringAndKNullable(x1)
|
||||||
takeNotNullStringAndNotNullK(<!TYPE_MISMATCH("ReturnType.A<String, TypeVariable(K)>", "ReturnType.A<String?, R?>!")!>x1<!>)
|
takeNotNullStringAndNotNullK(<!TYPE_MISMATCH("ReturnType.A<String, TypeVariable(K)>; ReturnType.A<String?, R?>!")!>x1<!>)
|
||||||
takeNullableStringAndNotNullK(<!TYPE_MISMATCH, TYPE_MISMATCH!>x1<!>)
|
takeNullableStringAndNotNullK(<!TYPE_MISMATCH, TYPE_MISMATCH!>x1<!>)
|
||||||
takeNotNullString(<!TYPE_MISMATCH!>a.foo41.foo411<!>)
|
takeNotNullString(<!TYPE_MISMATCH!>a.foo41.foo411<!>)
|
||||||
|
|
||||||
val x2 = <!DEBUG_INFO_EXPRESSION_TYPE("(ReturnType.A<@org.jetbrains.annotations.Nullable kotlin.String?, @org.jetbrains.annotations.NotNull R!!>..ReturnType.A<@org.jetbrains.annotations.Nullable kotlin.String?, @org.jetbrains.annotations.NotNull R!!>?)")!>a.foo2()<!>
|
val x2 = <!DEBUG_INFO_EXPRESSION_TYPE("(ReturnType.A<@org.jetbrains.annotations.Nullable kotlin.String?, @org.jetbrains.annotations.NotNull R!!>..ReturnType.A<@org.jetbrains.annotations.Nullable kotlin.String?, @org.jetbrains.annotations.NotNull R!!>?)")!>a.foo2()<!>
|
||||||
takeNotNullStringAndKNullable(<!TYPE_MISMATCH!>x2<!>)
|
takeNotNullStringAndKNullable(<!TYPE_MISMATCH!>x2<!>)
|
||||||
takeNullableStringAndKNullable(<!TYPE_MISMATCH!>x2<!>)
|
takeNullableStringAndKNullable(<!TYPE_MISMATCH!>x2<!>)
|
||||||
takeNotNullStringAndNotNullK(<!TYPE_MISMATCH("ReturnType.A<String, TypeVariable(K)>", "ReturnType.A<String?, R!!>!")!>x2<!>)
|
takeNotNullStringAndNotNullK(<!TYPE_MISMATCH("ReturnType.A<String, TypeVariable(K)>; ReturnType.A<String?, R!!>!")!>x2<!>)
|
||||||
takeNullableStringAndNotNullK(x2)
|
takeNullableStringAndNotNullK(x2)
|
||||||
|
|
||||||
val x3 = <!DEBUG_INFO_EXPRESSION_TYPE("(ReturnType.A<@org.jetbrains.annotations.NotNull kotlin.String, @org.jetbrains.annotations.NotNull R!!>..ReturnType.A<@org.jetbrains.annotations.NotNull kotlin.String, @org.jetbrains.annotations.NotNull R!!>?)")!>a.foo3<!>
|
val x3 = <!DEBUG_INFO_EXPRESSION_TYPE("(ReturnType.A<@org.jetbrains.annotations.NotNull kotlin.String, @org.jetbrains.annotations.NotNull R!!>..ReturnType.A<@org.jetbrains.annotations.NotNull kotlin.String, @org.jetbrains.annotations.NotNull R!!>?)")!>a.foo3<!>
|
||||||
takeNotNullStringAndKNullable(<!TYPE_MISMATCH!>x3<!>)
|
takeNotNullStringAndKNullable(<!TYPE_MISMATCH!>x3<!>)
|
||||||
takeNullableStringAndKNullable(<!TYPE_MISMATCH!>x3<!>)
|
takeNullableStringAndKNullable(<!TYPE_MISMATCH!>x3<!>)
|
||||||
takeNotNullStringAndNotNullK(x3)
|
takeNotNullStringAndNotNullK(x3)
|
||||||
takeNullableStringAndNotNullK(<!TYPE_MISMATCH("ReturnType.A<String?, TypeVariable(K)>", "ReturnType.A<String, R!!>!")!>x3<!>)
|
takeNullableStringAndNotNullK(<!TYPE_MISMATCH("ReturnType.A<String?, TypeVariable(K)>; ReturnType.A<String, R!!>!")!>x3<!>)
|
||||||
|
|
||||||
val x4 = <!DEBUG_INFO_EXPRESSION_TYPE("(kotlin.Array<@org.jetbrains.annotations.NotNull R!!>..kotlin.Array<out @org.jetbrains.annotations.NotNull R!!>?)")!>a.foo4<!>
|
val x4 = <!DEBUG_INFO_EXPRESSION_TYPE("(kotlin.Array<@org.jetbrains.annotations.NotNull R!!>..kotlin.Array<out @org.jetbrains.annotations.NotNull R!!>?)")!>a.foo4<!>
|
||||||
takeArrayOfNotNullString(<!TYPE_MISMATCH!>x4<!>)
|
takeArrayOfNotNullString(<!TYPE_MISMATCH!>x4<!>)
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user