Preserve type annotations on type parameter when substituting

Subsitute(@A T, T:@B String) = @B @A String

Nullability when loading Java:
Subsitute(@NotNull T, T:String) = @NotNull String
Subsitute(@NotNull T, T:String!) = @NotNull String
Subsitute(@NotNull T, T:String?) = @NotNull String

Subsitute(@Nullable T, T:String) = @Nullable String?
Subsitute(@Nullable T, T:String!) = @Nullable String?
Subsitute(@Nullable T, T:String?) = @Nullable String?
This commit is contained in:
Denis Zharkov
2015-07-14 14:20:39 +03:00
parent 2b541a560e
commit e23c7f457b
11 changed files with 128 additions and 10 deletions
@@ -19,6 +19,5 @@ public class Y extends X<String> {
fun main() {
checkSubtype<Any>(Y().fooN())
Y().barN(null);
Y().barN(<!NULL_FOR_NONNULL_TYPE!>null<!>);
}
@@ -20,9 +20,9 @@ public open class X</*0*/ T> {
public open class Y : X<kotlin.String!> {
public constructor Y()
public/*package*/ open override /*1*/ /*fake_override*/ fun barN(/*0*/ org.jetbrains.annotations.NotNull() a: kotlin.String!): kotlin.Unit
public/*package*/ open override /*1*/ /*fake_override*/ fun barN(/*0*/ org.jetbrains.annotations.NotNull() a: kotlin.String): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
org.jetbrains.annotations.NotNull() public/*package*/ open override /*1*/ /*fake_override*/ fun fooN(): kotlin.String!
org.jetbrains.annotations.NotNull() public/*package*/ open override /*1*/ /*fake_override*/ fun fooN(): kotlin.String
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -19,6 +19,5 @@ public class Y extends X<A> {
fun main() {
checkSubtype<Any>(Y().fooN())
Y().barN(null);
Y().barN(<!NULL_FOR_NONNULL_TYPE!>null<!>);
}
@@ -20,9 +20,9 @@ public open class X</*0*/ T> {
public open class Y : X<A!> {
public constructor Y()
public/*package*/ open override /*1*/ /*fake_override*/ fun barN(/*0*/ org.jetbrains.annotations.NotNull() a: A!): kotlin.Unit
public/*package*/ open override /*1*/ /*fake_override*/ fun barN(/*0*/ org.jetbrains.annotations.NotNull() a: A): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
org.jetbrains.annotations.NotNull() public/*package*/ open override /*1*/ /*fake_override*/ fun fooN(): A!
org.jetbrains.annotations.NotNull() public/*package*/ open override /*1*/ /*fake_override*/ fun fooN(): A
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}