[Test] Migrate tests of foreign annotations to new infrastructure

This commit includes:
- test runners for foreign annotation tests
- minor changes testdata related to changed directives syntax
- dropping tests with javac integration: old javac tests actually ran
    compiler without javac because of bug in configuration, so some
    nullability annotations features are not supported in javac mode.
    It's fine to drop it since javac mode is not fully supported
    by compiler
This commit is contained in:
Dmitriy Novozhilov
2020-12-22 16:08:14 +03:00
committed by TeamCityServer
parent ef3d966d53
commit 660c438ebe
176 changed files with 2451 additions and 2970 deletions
@@ -0,0 +1,81 @@
import org.jspecify.annotations.*;
@DefaultNonNull
public class AnnotatedBoundsOfWildcard {
public void superAsIs(Test<? super @NullnessUnspecified Base, ? super @NullnessUnspecified 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 @NullnessUnspecified Base, ? extends @NullnessUnspecified 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<@NullnessUnspecified ?, @NullnessUnspecified ?, @NullnessUnspecified ?> a) {}
}
class Base {}
class Derived extends Base {}
@DefaultNonNull
class Test<T extends Object, E extends @Nullable Object, F extends @NullnessUnspecified Object> { }
@DefaultNonNull
class Use {
public void main(
Test<Derived, Derived, Derived> aNotNullNotNullNotNull,
Test<Derived, Derived, @Nullable Derived> aNotNullNotNullNull,
Test<Derived, @Nullable Derived, Derived> aNotNullNullNotNull,
Test<Derived, @Nullable Derived, @Nullable Derived> aNotNullNullNull,
Test<Object, Object, Object> aObjectNotNullNotNullNotNull,
Test<Object, Object, @Nullable Object> aObjectNotNullNotNullNull,
Test<Object, @Nullable Object, Object> aObjectNotNullNullNotNull,
Test<Object, @Nullable Object, @Nullable Object> aObjectNotNullNullNull,
AnnotatedBoundsOfWildcard b
) {
// jspecify_nullness_mismatch
b.superAsIs(aObjectNotNullNotNullNotNull);
// jspecify_nullness_mismatch
b.superAsIs(aObjectNotNullNotNullNull);
b.superAsIs(aObjectNotNullNullNotNull);
b.superAsIs(aObjectNotNullNullNull);
b.superNotNull(aObjectNotNullNotNullNotNull);
b.superNotNull(aObjectNotNullNotNullNull);
b.superNotNull(aObjectNotNullNullNotNull);
b.superNotNull(aObjectNotNullNullNull);
// jspecify_nullness_mismatch
b.superNullable(aObjectNotNullNotNullNotNull);
// jspecify_nullness_mismatch
b.superNullable(aObjectNotNullNotNullNull);
// jspecify_nullness_mismatch
b.superNullable(aObjectNotNullNullNotNull);
// jspecify_nullness_mismatch
b.superNullable(aObjectNotNullNullNull);
b.extendsAsIs(aNotNullNotNullNotNull);
b.extendsAsIs(aNotNullNotNullNull);
b.extendsAsIs(aNotNullNullNotNull);
b.extendsAsIs(aNotNullNullNull);
b.extendsNotNull(aNotNullNotNullNotNull);
// jspecify_nullness_mismatch
b.extendsNotNull(aNotNullNotNullNull);
// jspecify_nullness_mismatch
b.extendsNotNull(aNotNullNullNotNull);
// jspecify_nullness_mismatch
b.extendsNotNull(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);
}
}
@@ -0,0 +1,44 @@
import org.jspecify.annotations.*;
@DefaultNonNull
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; }
}
class Foo {
public Object foo() { return null; }
}
class Use {
static void main(Defaults a, Foo x) {
// jspecify_nullness_mismatch
a.everythingNotNullable(null).foo();
a.everythingNotNullable(x).foo();
a.everythingNullable(null).foo();
a.everythingUnknown(null).foo();
// jspecify_nullness_mismatch
a.mixed(null).foo();
a.mixed(x).foo();
a.explicitlyNullnessUnspecified(x).foo();
a.explicitlyNullnessUnspecified(null).foo();
a.defaultField.foo();
a.field.foo();
}
}
@@ -0,0 +1,41 @@
import org.jspecify.annotations.*;
@DefaultNonNull
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; }
}
class Base {
void foo() {}
}
class Derived extends Base { }
class Use {
static void main(IgnoreAnnotations a, Derived x) {
a.foo(x, null).foo();
// jspecify_nullness_mismatch
a.foo(null, x).foo();
a.field.foo();
// jspecify_nullness_mismatch
a.everythingNotNullable(null).foo();
a.everythingNotNullable(x).foo();
a.everythingNullable(null).foo();
a.everythingUnknown(null).foo();
}
}
@@ -0,0 +1,26 @@
import org.jspecify.annotations.*;
public class NonPlatformTypeParameter<T extends @Nullable Object> {
public void foo(T t) {}
public <E extends @Nullable Object> void bar(E e) {}
}
class Test {}
@DefaultNonNull
class Use {
public <T extends Test> void main(NonPlatformTypeParameter<@Nullable Object> a1, NonPlatformTypeParameter<Test> a2, T x) {
a1.foo(null);
a1.<@Nullable Test>bar(null);
// jspecify_nullness_mismatch
a1.<T>bar(null);
a1.<T>bar(x);
// jspecify_nullness_mismatch
a2.foo(null);
a2.<@Nullable Test>bar(null);
// jspecify_nullness_mismatch
a2.<T>bar(null);
a2.<T>bar(x);
}
}
@@ -0,0 +1,30 @@
import org.jspecify.annotations.*;
@DefaultNonNull
public class NullnessUnspecifiedTypeParameter<T> {
public void foo(T t) {}
public void bar(Test s, T t) {} // t should not become not nullable
}
class Test {}
class Use {
void main(NullnessUnspecifiedTypeParameter<Object> a1, NullnessUnspecifiedTypeParameter<@Nullable Object> a2, Test x) {
a1.foo(null);
a1.foo(1);
a2.foo(null);
a2.foo(1);
// jspecify_nullness_mismatch
a1.bar(null, null);
a1.bar(x, null);
a1.bar(x, 1);
// jspecify_nullness_mismatch
a2.bar(null, null);
a2.bar(x, null);
a2.bar(x, 1);
}
}
@@ -0,0 +1,40 @@
import org.jspecify.annotations.*;
@DefaultNotNull
public class SelfType<T extends SelfType<T>> {
public void foo(T t) {}
}
class B extends SelfType<B> {}
@DefaultNotNull
class C<E extends C<E>> extends SelfType<E> {}
class AK extends SelfType<AK> {}
class AKN extends SelfType<@Nullable AK> {}
class BK extends B {}
class CK extends C<CK> {}
class CKN extends C<@Nullable CK> {
public void main(AK ak, AKN akn, BK bk, CK ck, CKN ckn) {
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);
}
}
@@ -0,0 +1,33 @@
import org.jspecify.annotations.*;
@DefaultNonNull
public class Simple {
@Nullable public Derived field = null;
@Nullable
public Derived foo(Derived x, @NullnessUnspecified Base y) {
return null;
}
public Derived bar() {
return null;
}
}
class Base {}
class Derived extends Base {
void foo() {}
}
@DefaultNonNull
class Use {
static public void main(Simple a, Derived x) {
a.foo(x, null).foo();
// jspecify_nullness_mismatch
a.foo(null, x).foo();
a.bar().foo();
a.field.foo();
}
}
@@ -0,0 +1,53 @@
import org.jspecify.annotations.*;
@DefaultNonNull
public class TypeArgumentsFromParameterBounds<T extends Object, E extends @Nullable Object, F extends @NullnessUnspecified Object> { }
class A {
public void bar(TypeArgumentsFromParameterBounds<@Nullable Test, @Nullable Test, @Nullable Test> a) {}
}
@DefaultNonNull
class B {
public void bar(TypeArgumentsFromParameterBounds<Test, Test, Test> a) {}
}
class C {
public void bar(TypeArgumentsFromParameterBounds<Test, Test, Test> a) {}
}
class Test {}
@DefaultNonNull
class Use {
static public void main(
TypeArgumentsFromParameterBounds<Test, Test, Test> aNotNullNotNullNotNull,
TypeArgumentsFromParameterBounds<Test, Test, @Nullable Test> aNotNullNotNullNull,
TypeArgumentsFromParameterBounds<Test, @Nullable Test, Test> aNotNullNullNotNull,
TypeArgumentsFromParameterBounds<Test, @Nullable Test, @Nullable Test> aNotNullNullNull,
A a, B b, C c
) {
// jspecify_nullness_mismatch
a.bar(aNotNullNotNullNotNull);
// jspecify_nullness_mismatch
a.bar(aNotNullNotNullNull);
// jspecify_nullness_mismatch
a.bar(aNotNullNullNotNull);
a.bar(aNotNullNullNull);
b.bar(aNotNullNotNullNotNull);
// jspecify_nullness_mismatch
b.bar(aNotNullNotNullNull);
// jspecify_nullness_mismatch
b.bar(aNotNullNullNotNull);
// jspecify_nullness_mismatch
b.bar(aNotNullNullNull);
// jspecify_nullness_mismatch
c.bar(aNotNullNotNullNotNull);
// jspecify_nullness_mismatch
c.bar(aNotNullNotNullNull);
c.bar(aNotNullNullNotNull);
c.bar(aNotNullNullNull);
}
}
@@ -0,0 +1,44 @@
import org.jspecify.annotations.*;
@DefaultNonNull
class A<T> {
public void foo(@NullnessUnspecified T t) {}
public <E> void bar(E e) {}
}
@DefaultNonNull
class B<T> {
public void foo(T t) {}
public <E> void bar(E e) {}
}
class Test {}
@DefaultNonNull
public class TypeParameterBounds {
<T extends Test> void main(A<@Nullable Object> a1, A<Test> a2, B<@Nullable Object> b1, B<Test> b2, T x) {
// jspecify_nullness_mismatch
a1.foo(null);
// jspecify_nullness_mismatch
a1.<@Nullable T>bar(null);
a1.<T>bar(x);
// jspecify_nullness_mismatch
a2.foo(null);
// jspecify_nullness_mismatch
a2.<@Nullable T>bar(null);
a2.<T>bar(x);
// jspecify_nullness_mismatch
b1.foo(null);
// jspecify_nullness_mismatch
b1.<@Nullable T>bar(null);
b1.<T>bar(x);
// jspecify_nullness_mismatch
b2.foo(null);
// jspecify_nullness_mismatch
b2.<@Nullable T>bar(null);
b2.<T>bar(x);
}
}
@@ -0,0 +1,33 @@
import org.jspecify.annotations.*;
@DefaultNonNull
public class WildcardsWithDefault {
public void noBoundsNotNull(A<?, ?, ?> a) {}
public void noBoundsNullable(A<@Nullable ?, @Nullable ?, @Nullable ?> a) {}
}
class A <T extends Object, E extends @Nullable Object, F extends @NullnessUnspecified Object> {}
@DefaultNonNull
class Use {
public static void main(
A<Object, Object, Object> aNotNullNotNullNotNull,
A<Object, Object, @Nullable Object> aNotNullNotNullNull,
A<Object, @Nullable Object, Object> aNotNullNullNotNull,
A<Object, @Nullable Object, @Nullable Object> aNotNullNullNull,
WildcardsWithDefault b
) {
// jspecify_nullness_mismatch
b.noBoundsNotNull(aNotNullNotNullNotNull);
b.noBoundsNotNull(aNotNullNotNullNull);
// jspecify_nullness_mismatch
b.noBoundsNotNull(aNotNullNullNotNull);
// jspecify_nullness_mismatch
b.noBoundsNotNull(aNotNullNullNull);
b.noBoundsNullable(aNotNullNotNullNotNull);
b.noBoundsNullable(aNotNullNotNullNull);
b.noBoundsNullable(aNotNullNullNotNull);
b.noBoundsNullable(aNotNullNullNull);
}
}
@@ -0,0 +1,59 @@
// JAVA_SOURCES: AnnotatedBoundsOfWildcard.java
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(aAnyNotNullNotNullNotNull)
// jspecify_nullness_mismatch
b.superAsIs(aAnyNotNullNotNullNull)
b.superAsIs(aAnyNotNullNullNotNull)
b.superAsIs(aAnyNotNullNullNull)
b.superNotNull(aAnyNotNullNotNullNotNull)
b.superNotNull(aAnyNotNullNotNullNull)
b.superNotNull(aAnyNotNullNullNotNull)
b.superNotNull(aAnyNotNullNullNull)
// jspecify_nullness_mismatch
b.superNullable(aAnyNotNullNotNullNotNull)
// jspecify_nullness_mismatch
b.superNullable(aAnyNotNullNotNullNull)
// jspecify_nullness_mismatch
b.superNullable(aAnyNotNullNullNotNull)
// jspecify_nullness_mismatch
b.superNullable(aAnyNotNullNullNull)
b.extendsAsIs(aNotNullNotNullNotNull)
b.extendsAsIs(aNotNullNotNullNull)
b.extendsAsIs(aNotNullNullNotNull)
b.extendsAsIs(aNotNullNullNull)
b.extendsNotNull(aNotNullNotNullNotNull)
// jspecify_nullness_mismatch
b.extendsNotNull(aNotNullNotNullNull)
// jspecify_nullness_mismatch
b.extendsNotNull(aNotNullNullNotNull)
// jspecify_nullness_mismatch
b.extendsNotNull(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)
}
@@ -0,0 +1,46 @@
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.annotations.DefaultNonNull 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 @org.jspecify.annotations.NullnessUnspecified Base!, out @org.jspecify.annotations.NullnessUnspecified Base!, out @org.jspecify.annotations.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.annotations.Nullable Base!, out @org.jspecify.annotations.Nullable Base!, out @org.jspecify.annotations.Nullable Base!>!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open fun noBounds(/*0*/ a: Test<*, *, *>!): kotlin.Unit
public open fun superAsIs(/*0*/ a: Test<in @org.jspecify.annotations.NullnessUnspecified Base!, in @org.jspecify.annotations.NullnessUnspecified Base!, in @org.jspecify.annotations.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.annotations.Nullable Base!, in @org.jspecify.annotations.Nullable Base!, in @org.jspecify.annotations.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.annotations.DefaultNonNull public open class Test</*0*/ T : kotlin.Any!, /*1*/ E : @org.jspecify.annotations.Nullable kotlin.Any!, /*2*/ F : @org.jspecify.annotations.NullnessUnspecified kotlin.Any!> {
public constructor Test</*0*/ T : kotlin.Any!, /*1*/ E : @org.jspecify.annotations.Nullable kotlin.Any!, /*2*/ F : @org.jspecify.annotations.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.annotations.DefaultNonNull 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.annotations.Nullable Derived!>!, /*2*/ aNotNullNullNotNull: Test<Derived!, @org.jspecify.annotations.Nullable Derived!, Derived!>!, /*3*/ aNotNullNullNull: Test<Derived!, @org.jspecify.annotations.Nullable Derived!, @org.jspecify.annotations.Nullable Derived!>!, /*4*/ aObjectNotNullNotNullNotNull: Test<kotlin.Any!, kotlin.Any!, kotlin.Any!>!, /*5*/ aObjectNotNullNotNullNull: Test<kotlin.Any!, kotlin.Any!, @org.jspecify.annotations.Nullable kotlin.Any!>!, /*6*/ aObjectNotNullNullNotNull: Test<kotlin.Any!, @org.jspecify.annotations.Nullable kotlin.Any!, kotlin.Any!>!, /*7*/ aObjectNotNullNullNull: Test<kotlin.Any!, @org.jspecify.annotations.Nullable kotlin.Any!, @org.jspecify.annotations.Nullable kotlin.Any!>!, /*8*/ b: AnnotatedBoundsOfWildcard!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,22 @@
// JAVA_SOURCES: Defaults.java
fun main(a: Defaults, x: Foo): Unit {
// jspecify_nullness_mismatch
a.everythingNotNullable(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>).foo()
a.everythingNotNullable(x).foo()
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.everythingNullable(null)<!>.foo()
a.everythingUnknown(null).foo()
// 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(x)<!>.foo()
a.explicitlyNullnessUnspecified(x).foo()
a.explicitlyNullnessUnspecified(null).foo()
a.defaultField.foo()
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.field<!>.foo()
}
@@ -0,0 +1,35 @@
package
public fun main(/*0*/ a: Defaults, /*1*/ x: Foo): kotlin.Unit
@org.jspecify.annotations.DefaultNonNull public open class Defaults {
public constructor Defaults()
public final var defaultField: Foo!
@org.jspecify.annotations.Nullable public final var field: @org.jspecify.annotations.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.annotations.Nullable public open fun everythingNullable(/*0*/ @org.jspecify.annotations.Nullable x: @org.jspecify.annotations.Nullable Foo!): @org.jspecify.annotations.Nullable Foo!
@org.jspecify.annotations.NullnessUnspecified public open fun everythingUnknown(/*0*/ @org.jspecify.annotations.NullnessUnspecified x: @org.jspecify.annotations.NullnessUnspecified Foo!): @org.jspecify.annotations.NullnessUnspecified Foo!
public open fun explicitlyNullnessUnspecified(/*0*/ @org.jspecify.annotations.NullnessUnspecified x: @org.jspecify.annotations.NullnessUnspecified Foo!): Foo!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@org.jspecify.annotations.Nullable public open fun mixed(/*0*/ x: Foo!): @org.jspecify.annotations.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
}
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
}
@@ -0,0 +1,17 @@
// JAVA_SOURCES: IgnoreAnnotations.java
fun main(a: IgnoreAnnotations, x: Derived): Unit {
<!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()
<!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()
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.everythingNullable(null)<!>.foo()
a.everythingUnknown(null).foo()
}
@@ -0,0 +1,41 @@
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.annotations.DefaultNonNull public open class IgnoreAnnotations {
public constructor IgnoreAnnotations()
@org.jspecify.annotations.Nullable public final var field: @org.jspecify.annotations.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.annotations.Nullable public open fun everythingNullable(/*0*/ @org.jspecify.annotations.Nullable x: @org.jspecify.annotations.Nullable Derived!): @org.jspecify.annotations.Nullable Derived!
@org.jspecify.annotations.NullnessUnspecified public open fun everythingUnknown(/*0*/ @org.jspecify.annotations.NullnessUnspecified x: @org.jspecify.annotations.NullnessUnspecified Derived!): @org.jspecify.annotations.NullnessUnspecified Derived!
@org.jspecify.annotations.Nullable public open fun foo(/*0*/ x: Derived!, /*1*/ @org.jspecify.annotations.NullnessUnspecified y: @org.jspecify.annotations.NullnessUnspecified Base!): @org.jspecify.annotations.Nullable Derived!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
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
}
@@ -0,0 +1,16 @@
// JAVA_SOURCES: NonPlatformTypeParameter.java
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)
}
@@ -0,0 +1,27 @@
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 : @org.jspecify.annotations.Nullable kotlin.Any!> {
public constructor NonPlatformTypeParameter</*0*/ T : @org.jspecify.annotations.Nullable kotlin.Any!>()
public open fun </*0*/ E : @org.jspecify.annotations.Nullable 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
}
@org.jspecify.annotations.DefaultNonNull 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.annotations.Nullable kotlin.Any!>!, /*1*/ a2: NonPlatformTypeParameter<Test!>!, /*2*/ x: T!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,19 @@
// JAVA_SOURCES: NullnessUnspecifiedTypeParameter.java
fun main(a1: NullnessUnspecifiedTypeParameter<Any>, a2: NullnessUnspecifiedTypeParameter<Any?>, x: Test): Unit {
a1.foo(null)
a1.foo(1)
a2.foo(null)
a2.foo(1)
// jspecify_nullness_mismatch
a1.bar(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>, null)
a1.bar(x, null)
a1.bar(x, 1)
// jspecify_nullness_mismatch
a2.bar(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>, null)
a2.bar(x, null)
a2.bar(x, 1)
}
@@ -0,0 +1,27 @@
package
public fun main(/*0*/ a1: NullnessUnspecifiedTypeParameter<kotlin.Any>, /*1*/ a2: NullnessUnspecifiedTypeParameter<kotlin.Any?>, /*2*/ x: Test): kotlin.Unit
@org.jspecify.annotations.DefaultNonNull 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
}
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.annotations.Nullable kotlin.Any!>!, /*2*/ x: Test!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,21 @@
// JAVA_SOURCES: SelfType.java
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)
}
@@ -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.annotations.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.annotations.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
}
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.annotations.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.annotations.Nullable CK!): kotlin.Unit
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 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
}
@@ -0,0 +1,11 @@
// JAVA_SOURCES: Simple.java
fun main(a: Simple, x: Derived): Unit {
<!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()
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.field<!>.foo()
}
@@ -0,0 +1,38 @@
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.annotations.DefaultNonNull public open class Simple {
public constructor Simple()
@org.jspecify.annotations.Nullable public final var field: @org.jspecify.annotations.Nullable Derived!
public open fun bar(): Derived!
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@org.jspecify.annotations.Nullable public open fun foo(/*0*/ x: Derived!, /*1*/ @org.jspecify.annotations.NullnessUnspecified y: @org.jspecify.annotations.NullnessUnspecified Base!): @org.jspecify.annotations.Nullable Derived!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@org.jspecify.annotations.DefaultNonNull 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
}
@@ -0,0 +1,32 @@
// JAVA_SOURCES: TypeArgumentsFromParameterBounds.java
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, c: C
): Unit {
// jspecify_nullness_mismatch
a.bar(aNotNullNotNullNotNull)
// jspecify_nullness_mismatch
a.bar(aNotNullNotNullNull)
// jspecify_nullness_mismatch
a.bar(aNotNullNullNotNull)
a.bar(aNotNullNullNull)
b.bar(aNotNullNotNullNotNull)
// jspecify_nullness_mismatch
b.bar(aNotNullNotNullNull)
// jspecify_nullness_mismatch
b.bar(aNotNullNullNotNull)
// jspecify_nullness_mismatch
b.bar(aNotNullNullNull)
// jspecify_nullness_mismatch
c.bar(aNotNullNotNullNotNull)
// jspecify_nullness_mismatch
c.bar(aNotNullNotNullNull)
c.bar(aNotNullNullNotNull)
c.bar(aNotNullNullNull)
}
@@ -0,0 +1,51 @@
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 open class A {
public constructor A()
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<@org.jspecify.annotations.Nullable Test!, @org.jspecify.annotations.Nullable Test!, @org.jspecify.annotations.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.annotations.DefaultNonNull 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 C {
public constructor C()
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.annotations.DefaultNonNull public open class TypeArgumentsFromParameterBounds</*0*/ T : kotlin.Any!, /*1*/ E : @org.jspecify.annotations.Nullable kotlin.Any!, /*2*/ F : @org.jspecify.annotations.NullnessUnspecified kotlin.Any!> {
public constructor TypeArgumentsFromParameterBounds</*0*/ T : kotlin.Any!, /*1*/ E : @org.jspecify.annotations.Nullable kotlin.Any!, /*2*/ F : @org.jspecify.annotations.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.annotations.DefaultNonNull 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.annotations.Nullable Test!>!, /*2*/ aNotNullNullNotNull: TypeArgumentsFromParameterBounds<Test!, @org.jspecify.annotations.Nullable Test!, Test!>!, /*3*/ aNotNullNullNull: TypeArgumentsFromParameterBounds<Test!, @org.jspecify.annotations.Nullable Test!, @org.jspecify.annotations.Nullable Test!>!, /*4*/ a: A!, /*5*/ b: B!, /*6*/ c: C!): kotlin.Unit
}
@@ -0,0 +1,27 @@
// JAVA_SOURCES: TypeParameterBounds.java
fun <T : Test> main(a1: A<Any?>, a2: A<Test>, b1: B<Any?>, b2: B<Test>, x: T): Unit {
// jspecify_nullness_mismatch
a1.foo(null)
// jspecify_nullness_mismatch
a1.bar<T?>(null)
a1.bar<T>(x)
// jspecify_nullness_mismatch
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)
}
@@ -0,0 +1,36 @@
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.annotations.DefaultNonNull 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.annotations.NullnessUnspecified t: @org.jspecify.annotations.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.annotations.DefaultNonNull 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
}
@org.jspecify.annotations.DefaultNonNull 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.annotations.Nullable kotlin.Any!>!, /*1*/ a2: A<Test!>!, /*2*/ b1: B<@org.jspecify.annotations.Nullable kotlin.Any!>!, /*3*/ b2: B<Test!>!, /*4*/ x: T!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,22 @@
// JAVA_SOURCES: WildcardsWithDefault.java
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 {
// jspecify_nullness_mismatch
b.noBoundsNotNull(aNotNullNotNullNotNull)
b.noBoundsNotNull(aNotNullNotNullNull)
// jspecify_nullness_mismatch
b.noBoundsNotNull(aNotNullNullNotNull)
// jspecify_nullness_mismatch
b.noBoundsNotNull(aNotNullNullNull)
b.noBoundsNullable(aNotNullNotNullNotNull)
b.noBoundsNullable(aNotNullNotNullNull)
b.noBoundsNullable(aNotNullNullNotNull)
b.noBoundsNullable(aNotNullNullNull)
}
@@ -0,0 +1,29 @@
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 : @org.jspecify.annotations.Nullable kotlin.Any!, /*2*/ F : @org.jspecify.annotations.NullnessUnspecified kotlin.Any!> {
public constructor A</*0*/ T : kotlin.Any!, /*1*/ E : @org.jspecify.annotations.Nullable kotlin.Any!, /*2*/ F : @org.jspecify.annotations.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.annotations.DefaultNonNull 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.annotations.Nullable kotlin.Any!>!, /*2*/ aNotNullNullNotNull: A<kotlin.Any!, @org.jspecify.annotations.Nullable kotlin.Any!, kotlin.Any!>!, /*3*/ aNotNullNullNull: A<kotlin.Any!, @org.jspecify.annotations.Nullable kotlin.Any!, @org.jspecify.annotations.Nullable kotlin.Any!>!, /*4*/ b: WildcardsWithDefault!): kotlin.Unit
}
@org.jspecify.annotations.DefaultNonNull 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<*, *, *>!): kotlin.Unit
public open fun noBoundsNullable(/*0*/ a: A<*, *, *>!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,60 @@
// JAVA_SOURCES: AnnotatedBoundsOfWildcard.java
// JSPECIFY_STATE warn
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(aAnyNotNullNotNullNotNull)
// jspecify_nullness_mismatch
b.superAsIs(aAnyNotNullNotNullNull)
b.superAsIs(aAnyNotNullNullNotNull)
b.superAsIs(aAnyNotNullNullNull)
b.superNotNull(aAnyNotNullNotNullNotNull)
b.superNotNull(aAnyNotNullNotNullNull)
b.superNotNull(aAnyNotNullNullNotNull)
b.superNotNull(aAnyNotNullNullNull)
// jspecify_nullness_mismatch
b.superNullable(aAnyNotNullNotNullNotNull)
// jspecify_nullness_mismatch
b.superNullable(aAnyNotNullNotNullNull)
// jspecify_nullness_mismatch
b.superNullable(aAnyNotNullNullNotNull)
// jspecify_nullness_mismatch
b.superNullable(aAnyNotNullNullNull)
b.extendsAsIs(aNotNullNotNullNotNull)
b.extendsAsIs(aNotNullNotNullNull)
b.extendsAsIs(aNotNullNullNotNull)
b.extendsAsIs(aNotNullNullNull)
b.extendsNotNull(aNotNullNotNullNotNull)
// jspecify_nullness_mismatch
b.extendsNotNull(aNotNullNotNullNull)
// jspecify_nullness_mismatch
b.extendsNotNull(aNotNullNullNotNull)
// jspecify_nullness_mismatch
b.extendsNotNull(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)
}
@@ -0,0 +1,46 @@
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.annotations.DefaultNonNull 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 @org.jspecify.annotations.NullnessUnspecified Base!, out @org.jspecify.annotations.NullnessUnspecified Base!, out @org.jspecify.annotations.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.annotations.Nullable Base!, out @org.jspecify.annotations.Nullable Base!, out @org.jspecify.annotations.Nullable Base!>!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open fun noBounds(/*0*/ a: Test<*, *, *>!): kotlin.Unit
public open fun superAsIs(/*0*/ a: Test<in @org.jspecify.annotations.NullnessUnspecified Base!, in @org.jspecify.annotations.NullnessUnspecified Base!, in @org.jspecify.annotations.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.annotations.Nullable Base!, in @org.jspecify.annotations.Nullable Base!, in @org.jspecify.annotations.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.annotations.DefaultNonNull public open class Test</*0*/ T : kotlin.Any!, /*1*/ E : @org.jspecify.annotations.Nullable kotlin.Any!, /*2*/ F : @org.jspecify.annotations.NullnessUnspecified kotlin.Any!> {
public constructor Test</*0*/ T : kotlin.Any!, /*1*/ E : @org.jspecify.annotations.Nullable kotlin.Any!, /*2*/ F : @org.jspecify.annotations.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.annotations.DefaultNonNull 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.annotations.Nullable Derived!>!, /*2*/ aNotNullNullNotNull: Test<Derived!, @org.jspecify.annotations.Nullable Derived!, Derived!>!, /*3*/ aNotNullNullNull: Test<Derived!, @org.jspecify.annotations.Nullable Derived!, @org.jspecify.annotations.Nullable Derived!>!, /*4*/ aObjectNotNullNotNullNotNull: Test<kotlin.Any!, kotlin.Any!, kotlin.Any!>!, /*5*/ aObjectNotNullNotNullNull: Test<kotlin.Any!, kotlin.Any!, @org.jspecify.annotations.Nullable kotlin.Any!>!, /*6*/ aObjectNotNullNullNotNull: Test<kotlin.Any!, @org.jspecify.annotations.Nullable kotlin.Any!, kotlin.Any!>!, /*7*/ aObjectNotNullNullNull: Test<kotlin.Any!, @org.jspecify.annotations.Nullable kotlin.Any!, @org.jspecify.annotations.Nullable kotlin.Any!>!, /*8*/ b: AnnotatedBoundsOfWildcard!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,23 @@
// JAVA_SOURCES: Defaults.java
// JSPECIFY_STATE warn
fun main(a: Defaults, x: Foo): Unit {
// jspecify_nullness_mismatch
a.everythingNotNullable(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>).foo()
a.everythingNotNullable(x).foo()
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.everythingNullable(null)<!>.foo()
a.everythingUnknown(null).foo()
// 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(x)<!>.foo()
a.explicitlyNullnessUnspecified(x).foo()
a.explicitlyNullnessUnspecified(null).foo()
a.defaultField.foo()
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.field<!>.foo()
}
@@ -0,0 +1,35 @@
package
public fun main(/*0*/ a: Defaults, /*1*/ x: Foo): kotlin.Unit
@org.jspecify.annotations.DefaultNonNull public open class Defaults {
public constructor Defaults()
public final var defaultField: Foo!
@org.jspecify.annotations.Nullable public final var field: @org.jspecify.annotations.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.annotations.Nullable public open fun everythingNullable(/*0*/ @org.jspecify.annotations.Nullable x: @org.jspecify.annotations.Nullable Foo!): @org.jspecify.annotations.Nullable Foo!
@org.jspecify.annotations.NullnessUnspecified public open fun everythingUnknown(/*0*/ @org.jspecify.annotations.NullnessUnspecified x: @org.jspecify.annotations.NullnessUnspecified Foo!): @org.jspecify.annotations.NullnessUnspecified Foo!
public open fun explicitlyNullnessUnspecified(/*0*/ @org.jspecify.annotations.NullnessUnspecified x: @org.jspecify.annotations.NullnessUnspecified Foo!): Foo!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@org.jspecify.annotations.Nullable public open fun mixed(/*0*/ x: Foo!): @org.jspecify.annotations.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
}
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
}
@@ -0,0 +1,18 @@
// JAVA_SOURCES: IgnoreAnnotations.java
// JSPECIFY_STATE warn
fun main(a: IgnoreAnnotations, x: Derived): Unit {
<!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()
<!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()
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.everythingNullable(null)<!>.foo()
a.everythingUnknown(null).foo()
}
@@ -0,0 +1,41 @@
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.annotations.DefaultNonNull public open class IgnoreAnnotations {
public constructor IgnoreAnnotations()
@org.jspecify.annotations.Nullable public final var field: @org.jspecify.annotations.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.annotations.Nullable public open fun everythingNullable(/*0*/ @org.jspecify.annotations.Nullable x: @org.jspecify.annotations.Nullable Derived!): @org.jspecify.annotations.Nullable Derived!
@org.jspecify.annotations.NullnessUnspecified public open fun everythingUnknown(/*0*/ @org.jspecify.annotations.NullnessUnspecified x: @org.jspecify.annotations.NullnessUnspecified Derived!): @org.jspecify.annotations.NullnessUnspecified Derived!
@org.jspecify.annotations.Nullable public open fun foo(/*0*/ x: Derived!, /*1*/ @org.jspecify.annotations.NullnessUnspecified y: @org.jspecify.annotations.NullnessUnspecified Base!): @org.jspecify.annotations.Nullable Derived!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
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
}
@@ -0,0 +1,17 @@
// JAVA_SOURCES: NonPlatformTypeParameter.java
// JSPECIFY_STATE warn
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)
}
@@ -0,0 +1,27 @@
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 : @org.jspecify.annotations.Nullable kotlin.Any!> {
public constructor NonPlatformTypeParameter</*0*/ T : @org.jspecify.annotations.Nullable kotlin.Any!>()
public open fun </*0*/ E : @org.jspecify.annotations.Nullable 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
}
@org.jspecify.annotations.DefaultNonNull 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.annotations.Nullable kotlin.Any!>!, /*1*/ a2: NonPlatformTypeParameter<Test!>!, /*2*/ x: T!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,20 @@
// JAVA_SOURCES: NullnessUnspecifiedTypeParameter.java
// JSPECIFY_STATE warn
fun main(a1: NullnessUnspecifiedTypeParameter<Any>, a2: NullnessUnspecifiedTypeParameter<Any?>, x: Test): Unit {
a1.foo(null)
a1.foo(1)
a2.foo(null)
a2.foo(1)
// jspecify_nullness_mismatch
a1.bar(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>, null)
a1.bar(x, null)
a1.bar(x, 1)
// jspecify_nullness_mismatch
a2.bar(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>, null)
a2.bar(x, null)
a2.bar(x, 1)
}
@@ -0,0 +1,27 @@
package
public fun main(/*0*/ a1: NullnessUnspecifiedTypeParameter<kotlin.Any>, /*1*/ a2: NullnessUnspecifiedTypeParameter<kotlin.Any?>, /*2*/ x: Test): kotlin.Unit
@org.jspecify.annotations.DefaultNonNull 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
}
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.annotations.Nullable kotlin.Any!>!, /*2*/ x: Test!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,22 @@
// JAVA_SOURCES: SelfType.java
// JSPECIFY_STATE warn
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)
}
@@ -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.annotations.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.annotations.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
}
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.annotations.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.annotations.Nullable CK!): kotlin.Unit
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 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
}
@@ -0,0 +1,12 @@
// JAVA_SOURCES: Simple.java
// JSPECIFY_STATE warn
fun main(a: Simple, x: Derived): Unit {
<!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()
<!RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>a.field<!>.foo()
}
@@ -0,0 +1,38 @@
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.annotations.DefaultNonNull public open class Simple {
public constructor Simple()
@org.jspecify.annotations.Nullable public final var field: @org.jspecify.annotations.Nullable Derived!
public open fun bar(): Derived!
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@org.jspecify.annotations.Nullable public open fun foo(/*0*/ x: Derived!, /*1*/ @org.jspecify.annotations.NullnessUnspecified y: @org.jspecify.annotations.NullnessUnspecified Base!): @org.jspecify.annotations.Nullable Derived!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@org.jspecify.annotations.DefaultNonNull 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
}
@@ -0,0 +1,33 @@
// JAVA_SOURCES: TypeArgumentsFromParameterBounds.java
// JSPECIFY_STATE warn
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, c: C
): Unit {
// jspecify_nullness_mismatch
a.bar(aNotNullNotNullNotNull)
// jspecify_nullness_mismatch
a.bar(aNotNullNotNullNull)
// jspecify_nullness_mismatch
a.bar(aNotNullNullNotNull)
a.bar(aNotNullNullNull)
b.bar(aNotNullNotNullNotNull)
// jspecify_nullness_mismatch
b.bar(aNotNullNotNullNull)
// jspecify_nullness_mismatch
b.bar(aNotNullNullNotNull)
// jspecify_nullness_mismatch
b.bar(aNotNullNullNull)
// jspecify_nullness_mismatch
c.bar(aNotNullNotNullNotNull)
// jspecify_nullness_mismatch
c.bar(aNotNullNotNullNull)
c.bar(aNotNullNullNotNull)
c.bar(aNotNullNullNull)
}
@@ -0,0 +1,51 @@
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 open class A {
public constructor A()
public open fun bar(/*0*/ a: TypeArgumentsFromParameterBounds<@org.jspecify.annotations.Nullable Test!, @org.jspecify.annotations.Nullable Test!, @org.jspecify.annotations.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.annotations.DefaultNonNull 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 C {
public constructor C()
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.annotations.DefaultNonNull public open class TypeArgumentsFromParameterBounds</*0*/ T : kotlin.Any!, /*1*/ E : @org.jspecify.annotations.Nullable kotlin.Any!, /*2*/ F : @org.jspecify.annotations.NullnessUnspecified kotlin.Any!> {
public constructor TypeArgumentsFromParameterBounds</*0*/ T : kotlin.Any!, /*1*/ E : @org.jspecify.annotations.Nullable kotlin.Any!, /*2*/ F : @org.jspecify.annotations.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.annotations.DefaultNonNull 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.annotations.Nullable Test!>!, /*2*/ aNotNullNullNotNull: TypeArgumentsFromParameterBounds<Test!, @org.jspecify.annotations.Nullable Test!, Test!>!, /*3*/ aNotNullNullNull: TypeArgumentsFromParameterBounds<Test!, @org.jspecify.annotations.Nullable Test!, @org.jspecify.annotations.Nullable Test!>!, /*4*/ a: A!, /*5*/ b: B!, /*6*/ c: C!): kotlin.Unit
}
@@ -0,0 +1,28 @@
// JAVA_SOURCES: TypeParameterBounds.java
// JSPECIFY_STATE warn
fun <T : Test> main(a1: A<Any?>, a2: A<Test>, b1: B<Any?>, b2: B<Test>, x: T): Unit {
// jspecify_nullness_mismatch
a1.foo(null)
// jspecify_nullness_mismatch
a1.bar<T?>(null)
a1.bar<T>(x)
// jspecify_nullness_mismatch
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)
}
@@ -0,0 +1,36 @@
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.annotations.DefaultNonNull 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.annotations.NullnessUnspecified t: @org.jspecify.annotations.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.annotations.DefaultNonNull 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
}
@org.jspecify.annotations.DefaultNonNull 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.annotations.Nullable kotlin.Any!>!, /*1*/ a2: A<Test!>!, /*2*/ b1: B<@org.jspecify.annotations.Nullable kotlin.Any!>!, /*3*/ b2: B<Test!>!, /*4*/ x: T!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,23 @@
// JAVA_SOURCES: WildcardsWithDefault.java
// JSPECIFY_STATE warn
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 {
// jspecify_nullness_mismatch
b.noBoundsNotNull(aNotNullNotNullNotNull)
b.noBoundsNotNull(aNotNullNotNullNull)
// jspecify_nullness_mismatch
b.noBoundsNotNull(aNotNullNullNotNull)
// jspecify_nullness_mismatch
b.noBoundsNotNull(aNotNullNullNull)
b.noBoundsNullable(aNotNullNotNullNotNull)
b.noBoundsNullable(aNotNullNotNullNull)
b.noBoundsNullable(aNotNullNullNotNull)
b.noBoundsNullable(aNotNullNullNull)
}
@@ -0,0 +1,29 @@
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 : @org.jspecify.annotations.Nullable kotlin.Any!, /*2*/ F : @org.jspecify.annotations.NullnessUnspecified kotlin.Any!> {
public constructor A</*0*/ T : kotlin.Any!, /*1*/ E : @org.jspecify.annotations.Nullable kotlin.Any!, /*2*/ F : @org.jspecify.annotations.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.annotations.DefaultNonNull 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.annotations.Nullable kotlin.Any!>!, /*2*/ aNotNullNullNotNull: A<kotlin.Any!, @org.jspecify.annotations.Nullable kotlin.Any!, kotlin.Any!>!, /*3*/ aNotNullNullNull: A<kotlin.Any!, @org.jspecify.annotations.Nullable kotlin.Any!, @org.jspecify.annotations.Nullable kotlin.Any!>!, /*4*/ b: WildcardsWithDefault!): kotlin.Unit
}
@org.jspecify.annotations.DefaultNonNull 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<*, *, *>!): kotlin.Unit
public open fun noBoundsNullable(/*0*/ a: A<*, *, *>!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}