Introduce new type checker.

This commit is contained in:
Stanislav Erokhin
2016-06-29 19:26:30 +03:00
parent d4d98c87ee
commit 6556cde329
20 changed files with 857 additions and 43 deletions
@@ -0,0 +1,42 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: A.java
public interface A<T> {
}
// FILE: B.java
public class B implements A<String> {
}
// FILE: 1.kt
class C: B()
class D: B(), A<String>
class E: B(), A<String?>
fun eatAString(a: A<String>) {}
fun eatAStringN(a: A<String?>) {}
fun test(b: B, c: C, d: D, e: E) {
eatAString(b)
eatAString(c)
eatAString(d)
eatAString(<!TYPE_MISMATCH!>e<!>)
eatAStringN(b)
eatAStringN(c)
eatAStringN(<!TYPE_MISMATCH!>d<!>)
eatAStringN(e)
}
// FILE: 3.kt
interface X : A<String>
interface Y: X
interface Z: X
class W: B(), Z
fun test2(w: W) {
eatAString(w)
eatAStringN(<!TYPE_MISMATCH!>w<!>)
}
@@ -0,0 +1,65 @@
package
public fun eatAString(/*0*/ a: A<kotlin.String>): kotlin.Unit
public fun eatAStringN(/*0*/ a: A<kotlin.String?>): kotlin.Unit
public fun test(/*0*/ b: B, /*1*/ c: C, /*2*/ d: D, /*3*/ e: E): kotlin.Unit
public fun test2(/*0*/ w: W): kotlin.Unit
public interface A</*0*/ T : 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
}
public open class B : A<kotlin.String!> {
public constructor B()
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 final class C : B {
public constructor C()
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 final class D : B, A<kotlin.String> {
public constructor D()
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class E : B, A<kotlin.String?> {
public constructor E()
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class W : B, Z {
public constructor W()
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface X : A<kotlin.String> {
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 interface Y : X {
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 interface Z : X {
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
}