Load raw types as platform with specific bounds

Raw(A<T_i>) = (A<UP(T_i)>..A<*>)
Raw types have specific scopes that behaves like JVM signature erasure
This commit is contained in:
Denis Zharkov
2015-07-24 11:26:04 +03:00
parent 5b07eea1b9
commit 6b92f67eac
48 changed files with 1171 additions and 61 deletions
@@ -6,7 +6,7 @@ package test {
public open class Usage {
public constructor Usage()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public/*package*/ open fun foo(/*0*/ c: kotlin.(Mutable)Collection<*>!): kotlin.Unit
public/*package*/ open fun foo(/*0*/ c: (kotlin.MutableCollection<kotlin.Any?>..kotlin.Collection<*>?)): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -1,10 +1,10 @@
package
public /*synthesized*/ fun Bar(/*0*/ function: (Foo<*>!) -> kotlin.Unit): Bar
public /*synthesized*/ fun Bar(/*0*/ function: ((Foo<kotlin.CharSequence!>..Foo<*>?)) -> kotlin.Unit): Bar
public interface Bar {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun f(/*0*/ f: Foo<*>!): kotlin.Unit
public abstract fun f(/*0*/ f: (Foo<kotlin.CharSequence!>..Foo<*>?)): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -1,9 +1,9 @@
package
internal fun foo(/*0*/ p: X): Bad<*>!
internal fun foo(/*0*/ p: X): (Bad<(Bad<Bad<*>!>..Bad<out Bad<*>!>?)>..Bad<out (Bad<Bad<*>!>..Bad<out Bad<*>!>?)>?)
public/*package*/ open class Bad</*0*/ T : Bad<out kotlin.Any?>!> {
public/*package*/ constructor Bad</*0*/ T : Bad<out kotlin.Any?>!>()
public/*package*/ open class Bad</*0*/ T : (Bad<Bad<*>>..Bad<out Bad<*>>?)> {
public/*package*/ constructor Bad</*0*/ T : (Bad<Bad<*>>..Bad<out Bad<*>>?)>()
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
@@ -12,7 +12,7 @@ public/*package*/ open class Bad</*0*/ T : Bad<out kotlin.Any?>!> {
public/*package*/ open class X {
public/*package*/ constructor X()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public/*package*/ open fun foo(): Bad<*>!
public/*package*/ open fun foo(): (Bad<(Bad<Bad<*>!>..Bad<out Bad<*>!>?)>..Bad<out (Bad<Bad<*>!>..Bad<out Bad<*>!>?)>?)
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,43 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// FILE: A.java
import java.util.*;
public class A<T extends CharSequence, E> {
T[] charSequences;
Map<String, T>[] maps;
List<Double>[][] arraysOfLists;
E[][] arraysOfAny;
List<Double[]>[] erasedLists;
}
// FILE: Test.java
class Test {
static class RawADerived extends A {}
static A rawAField = null;
}
// FILE: main.kt
fun arrayOf<T>(): Array<T> = null!!
fun main() {
val raw = Test.rawAField
raw.charSequences = arrayOf<String>()
raw.charSequences = <!TYPE_MISMATCH!>arrayOf<Double>()<!>
raw.maps = arrayOf<Map<Int, Int>>()
raw.maps = arrayOf<MutableMap<Int, Int>>()
raw.maps = <!TYPE_MISMATCH!>arrayOf<List<String>>()<!>
raw.arraysOfLists = arrayOf<Array<List<*>>>()
raw.arraysOfLists = <!TYPE_MISMATCH!>arrayOf<List<String>>()<!>
raw.arraysOfLists = <!TYPE_MISMATCH!>arrayOf<Array<Array<String>>>()<!>
raw.arraysOfAny = arrayOf<Array<Array<String>>>()
raw.erasedLists = arrayOf<List<String>>()
}
@@ -0,0 +1,38 @@
package
internal fun </*0*/ T> arrayOf(): kotlin.Array<T>
internal fun main(): kotlin.Unit
public open class A</*0*/ T : kotlin.CharSequence!, /*1*/ E : kotlin.Any!> {
public constructor A</*0*/ T : kotlin.CharSequence!, /*1*/ E : kotlin.Any!>()
public/*package*/ final var arraysOfAny: kotlin.Array<(out) kotlin.Array<(out) E!>!>!
public/*package*/ final var arraysOfLists: kotlin.Array<(out) kotlin.Array<(out) kotlin.(Mutable)List<kotlin.Double!>!>!>!
public/*package*/ final var charSequences: kotlin.Array<(out) T!>!
public/*package*/ final var erasedLists: kotlin.Array<(out) kotlin.(Mutable)List<kotlin.Array<(out) kotlin.Double!>!>!>!
public/*package*/ final var maps: kotlin.Array<(out) kotlin.(Mutable)Map<kotlin.String!, T!>!>!
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/*package*/ open class Test {
public/*package*/ 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/*package*/ open class RawADerived : A<kotlin.CharSequence!, kotlin.Any!> {
public/*package*/ constructor RawADerived()
public/*package*/ final override /*1*/ /*fake_override*/ var arraysOfAny: kotlin.Array<(out) kotlin.Array<(out) kotlin.Any!>!>!
public/*package*/ final override /*1*/ /*fake_override*/ var arraysOfLists: kotlin.Array<(out) kotlin.Array<(out) (kotlin.MutableList<kotlin.Any?>..kotlin.List<*>?)>!>!
public/*package*/ final override /*1*/ /*fake_override*/ var charSequences: kotlin.Array<(out) kotlin.CharSequence!>!
public/*package*/ final override /*1*/ /*fake_override*/ var erasedLists: kotlin.Array<(out) (kotlin.MutableList<kotlin.Any?>..kotlin.List<*>?)>!
public/*package*/ final override /*1*/ /*fake_override*/ var maps: kotlin.Array<(out) (kotlin.MutableMap<kotlin.Any?, kotlin.Any?>..kotlin.Map<*, *>?)>!
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*/ final var rawAField: (A<kotlin.CharSequence!, kotlin.Any!>..A<*, *>?)
}
@@ -0,0 +1,34 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// FILE: A.java
import java.util.*;
class A<T> {
void foo(T x)
public class Inner<E> {
Inner(E x0, T x, List<T> y) {}
void foo(E x0, T x, List<T> y) {}
A<Map<E, T>> bar() {}
}
}
// FILE: Test.java
class Test {
static A rawAField = null;
}
// FILE: main.kt
val strList: List<String> = null!!
fun main() {
val rawA = Test.rawAField
var rawInner = rawA.Inner<Double>("", "", strList)
rawInner.foo("", "", strList)
rawInner.bar().foo("")
}
@@ -0,0 +1,31 @@
package
internal val strList: kotlin.List<kotlin.String>
internal fun main(): kotlin.Unit
public/*package*/ open class A</*0*/ T : kotlin.Any!> {
public/*package*/ constructor A</*0*/ T : kotlin.Any!>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public/*package*/ open fun foo(/*0*/ x: 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 inner class Inner</*0*/ E : kotlin.Any!> {
public/*package*/ constructor Inner</*0*/ E : kotlin.Any!>(/*0*/ x0: E!, /*1*/ x: T!, /*2*/ y: kotlin.(Mutable)List<T!>!)
public/*package*/ open fun bar(): A<kotlin.(Mutable)Map<E!, T!>!>!
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public/*package*/ open fun foo(/*0*/ x0: E!, /*1*/ x: T!, /*2*/ y: kotlin.(Mutable)List<T!>!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public/*package*/ open class Test {
public/*package*/ 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
// Static members
public/*package*/ final var rawAField: (A<kotlin.Any!>..A<*>?)
}
@@ -0,0 +1,34 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// FILE: A.java
import java.util.*;
class A<T> {
B b;
}
// FILE: B.java
import java.util.*;
class B {
void bar(List<Double> x);
}
// FILE: Test.java
class Test {
static A rawAField = null;
}
// FILE: main.kt
val strList: List<String> = null!!
fun main() {
val rawB = Test.rawAField.b;
// Raw(A).b is erased too although it have no type parameters
// so it's `bar` allows lists of any types
var rawInner = rawB.bar(strList)
}
@@ -0,0 +1,30 @@
package
internal val strList: kotlin.List<kotlin.String>
internal fun main(): kotlin.Unit
public/*package*/ open class A</*0*/ T : kotlin.Any!> {
public/*package*/ constructor A</*0*/ T : kotlin.Any!>()
public/*package*/ final var b: 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/*package*/ open class B {
public/*package*/ constructor B()
public/*package*/ open fun bar(/*0*/ x: kotlin.(Mutable)List<kotlin.Double!>!): 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/*package*/ open class Test {
public/*package*/ 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
// Static members
public/*package*/ final var rawAField: (A<kotlin.Any!>..A<*>?)
}
@@ -0,0 +1,29 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// FILE: A.java
import java.util.*;
class A<T extends A<T, E>, E extends T, F extends List<? extends Double>> {
T first;
E second;
F listOfDoubles;
}
// FILE: Test.java
class Test {
static class DerivedRawA extends A {}
static A rawAField = null;
}
// FILE: main.kt
val strList: List<String> = null!!
fun main() {
val rawA = Test.rawAField
rawA.first = Test.rawAField.second
Test.rawAField.second = rawA.first.second
rawA.listOfDoubles = strList
rawA.listOfDoubles = <!TYPE_MISMATCH!>""<!> // first should be List
}
@@ -0,0 +1,34 @@
package
internal val strList: kotlin.List<kotlin.String>
internal fun main(): kotlin.Unit
public/*package*/ open class A</*0*/ T : (A<A<*, *, *>, A<*, *, *>, kotlin.(Mutable)List<*>!>..A<out A<*, *, *>, out A<*, *, *>, out kotlin.(Mutable)List<*>!>?), /*1*/ E : T!, /*2*/ F : (kotlin.MutableList<out kotlin.Double!>..kotlin.List<kotlin.Double!>?)> {
public/*package*/ constructor A</*0*/ T : (A<A<*, *, *>, A<*, *, *>, kotlin.(Mutable)List<*>!>..A<out A<*, *, *>, out A<*, *, *>, out kotlin.(Mutable)List<*>!>?), /*1*/ E : T!, /*2*/ F : (kotlin.MutableList<out kotlin.Double!>..kotlin.List<kotlin.Double!>?)>()
public/*package*/ final var first: T!
public/*package*/ final var listOfDoubles: F!
public/*package*/ final var second: E!
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/*package*/ open class Test {
public/*package*/ 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/*package*/ open class DerivedRawA : A<out A<*, *, *>!, out A<*, *, *>!, out kotlin.(Mutable)List<*>!> {
public/*package*/ constructor DerivedRawA()
public/*package*/ final override /*1*/ /*fake_override*/ var first: (A<A<*, *, *>!, A<*, *, *>!, kotlin.(Mutable)List<*>!>..A<out A<*, *, *>!, out A<*, *, *>!, out kotlin.(Mutable)List<*>!>?)
public/*package*/ final override /*1*/ /*fake_override*/ var listOfDoubles: (kotlin.MutableList<kotlin.Any?>..kotlin.List<*>?)
public/*package*/ final override /*1*/ /*fake_override*/ var second: (A<A<*, *, *>!, A<*, *, *>!, kotlin.(Mutable)List<*>!>..A<out A<*, *, *>!, out A<*, *, *>!, out kotlin.(Mutable)List<*>!>?)
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*/ final var rawAField: (A<(A<A<*, *, *>!, A<*, *, *>!, kotlin.(Mutable)List<*>!>..A<out A<*, *, *>!, out A<*, *, *>!, out kotlin.(Mutable)List<*>!>?), (A<A<*, *, *>!, A<*, *, *>!, kotlin.(Mutable)List<*>!>..A<out A<*, *, *>!, out A<*, *, *>!, out kotlin.(Mutable)List<*>!>?), (kotlin.MutableList<kotlin.Any?>..kotlin.List<*>?)>..A<out (A<A<*, *, *>!, A<*, *, *>!, kotlin.(Mutable)List<*>!>..A<out A<*, *, *>!, out A<*, *, *>!, out kotlin.(Mutable)List<*>!>?), out (A<A<*, *, *>!, A<*, *, *>!, kotlin.(Mutable)List<*>!>..A<out A<*, *, *>!, out A<*, *, *>!, out kotlin.(Mutable)List<*>!>?), out (kotlin.MutableList<kotlin.Any?>..kotlin.List<*>?)>?)
}
@@ -0,0 +1,36 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// FILE: A.java
import java.util.*;
class A<T> {
List<T> x;
void foo(T x, List<T> y) {}
A<List<T>> bar() {}
}
// FILE: Test.java
class Test {
static class RawADerived extends A {
}
}
// FILE: main.kt
val strList: List<String> = null!!
val strMap: Map<String, String> = null!!
fun main() {
val rawADerived = Test.RawADerived()
rawADerived.x = strList
rawADerived.foo("", strList)
val rawA = rawADerived.bar()
rawA.x = strList
rawA.foo("", strList)
}
@@ -0,0 +1,32 @@
package
internal val strList: kotlin.List<kotlin.String>
internal val strMap: kotlin.Map<kotlin.String, kotlin.String>
internal fun main(): kotlin.Unit
public/*package*/ open class A</*0*/ T : kotlin.Any!> {
public/*package*/ constructor A</*0*/ T : kotlin.Any!>()
public/*package*/ final var x: kotlin.(Mutable)List<T!>!
public/*package*/ open fun bar(): A<kotlin.(Mutable)List<T!>!>!
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public/*package*/ open fun foo(/*0*/ x: T!, /*1*/ y: kotlin.(Mutable)List<T!>!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public/*package*/ open class Test {
public/*package*/ 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/*package*/ open class RawADerived : A<kotlin.Any!> {
public/*package*/ constructor RawADerived()
public/*package*/ final override /*1*/ /*fake_override*/ var x: (kotlin.MutableList<kotlin.Any?>..kotlin.List<*>?)
public/*package*/ open override /*1*/ /*fake_override*/ fun bar(): (A<kotlin.Any!>..A<*>?)
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ x: kotlin.Any!, /*1*/ y: (kotlin.MutableList<kotlin.Any?>..kotlin.List<*>?)): 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,41 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// FILE: A.java
import java.util.*;
class A<T extends CharSequence> {
A<List<T>> foo(T x, Map<String, List<T>> y, HashMap<T, T> z) {}
void bar(List<Double[]>[][] d) {}
}
// FILE: RawADerived.java
class RawADerived extends A {
}
// FILE: main.kt
import java.util.*;
class B1 : RawADerived() {
override fun foo(x: CharSequence, y: Map<Any?, Any?>, z: HashMap<Any, Any>): A<*> = null!!
override fun bar(d: Array<Array<List<*>>>) {}
}
class B2 : RawADerived() {
override fun foo(x: CharSequence?, y: MutableMap<Any?, Any?>, z: HashMap<Any?, Any?>): A<String> = null!!
override fun bar(d: Array<Array<MutableList<*>>>) {}
}
class B3 : RawADerived() {
// Type of second parameter (y) is not equal to overridden
// RawADerived.foo.y --- (MutableMap<Any?, Any?>..Map<out Any?, out Any?>) is not a subtype of Map<Any?, Any>
<!NOTHING_TO_OVERRIDE!>override<!> fun foo(x: CharSequence, y: Map<Any?, Any>, z: HashMap<Any, Any>): A<*> = null!!
}
class B4 : RawADerived() {
// Type of first parameter is not equal to overridden
<!NOTHING_TO_OVERRIDE!>override<!> fun bar(d: Array<Array<MutableList<Array<Double>>>>) {}
}
@@ -0,0 +1,57 @@
package
public/*package*/ open class A</*0*/ T : kotlin.CharSequence!> {
public/*package*/ constructor A</*0*/ T : kotlin.CharSequence!>()
public/*package*/ open fun bar(/*0*/ d: kotlin.Array<(out) kotlin.Array<(out) kotlin.(Mutable)List<kotlin.Array<(out) kotlin.Double!>!>!>!>!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public/*package*/ open fun foo(/*0*/ x: T!, /*1*/ y: kotlin.(Mutable)Map<kotlin.String!, kotlin.(Mutable)List<T!>!>!, /*2*/ z: java.util.HashMap<T!, T!>!): A<kotlin.(Mutable)List<T!>!>!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal final class B1 : RawADerived {
public constructor B1()
internal open override /*1*/ fun bar(/*0*/ d: kotlin.Array<kotlin.Array<kotlin.List<*>>>): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
internal open override /*1*/ fun foo(/*0*/ x: kotlin.CharSequence, /*1*/ y: kotlin.Map<kotlin.Any?, kotlin.Any?>, /*2*/ z: java.util.HashMap<kotlin.Any, kotlin.Any>): A<*>
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal final class B2 : RawADerived {
public constructor B2()
internal open override /*1*/ fun bar(/*0*/ d: kotlin.Array<kotlin.Array<kotlin.MutableList<*>>>): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
internal open override /*1*/ fun foo(/*0*/ x: kotlin.CharSequence?, /*1*/ y: kotlin.MutableMap<kotlin.Any?, kotlin.Any?>, /*2*/ z: java.util.HashMap<kotlin.Any?, kotlin.Any?>): A<kotlin.String>
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal final class B3 : RawADerived {
public constructor B3()
public/*package*/ open override /*1*/ /*fake_override*/ fun bar(/*0*/ d: kotlin.Array<(out) kotlin.Array<(out) (kotlin.MutableList<kotlin.Any?>..kotlin.List<*>?)>!>!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
internal open fun foo(/*0*/ x: kotlin.CharSequence, /*1*/ y: kotlin.Map<kotlin.Any?, kotlin.Any>, /*2*/ z: java.util.HashMap<kotlin.Any, kotlin.Any>): A<*>
public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ x: kotlin.CharSequence!, /*1*/ y: (kotlin.MutableMap<kotlin.Any?, kotlin.Any?>..kotlin.Map<*, *>?), /*2*/ z: (java.util.HashMap<kotlin.Any!, kotlin.Any!>..java.util.HashMap<*, *>?)): (A<kotlin.CharSequence!>..A<*>?)
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal final class B4 : RawADerived {
public constructor B4()
public/*package*/ open override /*1*/ /*fake_override*/ fun bar(/*0*/ d: kotlin.Array<(out) kotlin.Array<(out) (kotlin.MutableList<kotlin.Any?>..kotlin.List<*>?)>!>!): kotlin.Unit
internal open fun bar(/*0*/ d: kotlin.Array<kotlin.Array<kotlin.MutableList<kotlin.Array<kotlin.Double>>>>): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ x: kotlin.CharSequence!, /*1*/ y: (kotlin.MutableMap<kotlin.Any?, kotlin.Any?>..kotlin.Map<*, *>?), /*2*/ z: (java.util.HashMap<kotlin.Any!, kotlin.Any!>..java.util.HashMap<*, *>?)): (A<kotlin.CharSequence!>..A<*>?)
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public/*package*/ open class RawADerived : A<kotlin.CharSequence!> {
public/*package*/ constructor RawADerived()
public/*package*/ open override /*1*/ /*fake_override*/ fun bar(/*0*/ d: kotlin.Array<(out) kotlin.Array<(out) (kotlin.MutableList<kotlin.Any?>..kotlin.List<*>?)>!>!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ x: kotlin.CharSequence!, /*1*/ y: (kotlin.MutableMap<kotlin.Any?, kotlin.Any?>..kotlin.Map<*, *>?), /*2*/ z: (java.util.HashMap<kotlin.Any!, kotlin.Any!>..java.util.HashMap<*, *>?)): (A<kotlin.CharSequence!>..A<*>?)
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,37 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// FILE: A.java
import java.util.List;
public class A<T> {
List<String> getChildrenStubs() { return null; }
void consume(T x) {}
T produce() { return null; }
}
// FILE: B.java
public class B<E extends A> {
public E foo() { return null;}
E field;
}
// FILE: Test.java
public class Test {
static B rawB = null;
}
// FILE: main.kt
fun foo(x: B<*>) {
val q: MutableList<String> = <!TYPE_MISMATCH!>x.foo().getChildrenStubs()<!>
// Raw(B).field erased to A<Any!>..A<out Any!>?
Test.rawB.field = A<String>()
val anyA: A<Any> = Test.rawB.field
Test.rawB.field.consume("")
val y: Any = Test.rawB.field.produce()
}
@@ -0,0 +1,32 @@
package
internal fun foo(/*0*/ x: B<*>): kotlin.Unit
public open class A</*0*/ T : kotlin.Any!> {
public constructor A</*0*/ T : kotlin.Any!>()
public/*package*/ open fun consume(/*0*/ x: T!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public/*package*/ open fun getChildrenStubs(): kotlin.(Mutable)List<kotlin.String!>!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public/*package*/ open fun produce(): T!
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class B</*0*/ E : (A<kotlin.Any!>..A<*>?)> {
public constructor B</*0*/ E : (A<kotlin.Any!>..A<*>?)>()
public/*package*/ final var field: E!
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun foo(): E!
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
// Static members
public/*package*/ final var rawB: (B<(A<kotlin.Any!>..A<*>?)>..B<out (A<kotlin.Any!>..A<*>?)>?)
}
@@ -0,0 +1,11 @@
// FILE: Test.java
class Test {
static void foo(Comparable x) {}
}
// FILE: main.kt
fun main() {
Test.foo(1)
}
@@ -0,0 +1,13 @@
package
internal fun main(): kotlin.Unit
public/*package*/ open class Test {
public/*package*/ 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
// Static members
public/*package*/ open fun foo(/*0*/ x: (kotlin.Comparable<in kotlin.Any?>..kotlin.Comparable<in kotlin.Nothing>?)): kotlin.Unit
}
@@ -0,0 +1,15 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// FILE: A.java
import java.util.List;
public interface A<T extends A> {}
// FILE: main.kt
class D : A<D>
fun main(x: A<*>) {
if (x is D) {
}
}
@@ -0,0 +1,16 @@
package
internal fun main(/*0*/ x: A<*>): kotlin.Unit
public interface A</*0*/ T : (A<A<*>>..A<out A<*>>?)> {
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
}
internal final class D : A<D> {
public constructor D()
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
}
@@ -0,0 +1,27 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// FILE: A.java
import java.util.List;
public interface A<T> {
boolean value(T t);
}
// FILE: B.java
class B {
void foo(Runnable runnable, A x);
static A bar() {}
}
// FILE: main.kt
fun main() {
fun println() {}
// All parameters in SAM adapter of `foo` have functional types
B().foo(<!TYPE_MISMATCH!>{ println() }<!>, B.bar())
// So you should use SAM constructors when you want to use mix lambdas and Java objects
B().foo(Runnable { println() }, B.bar())
B().foo({ println() }, { it: Any? -> true } )
}
@@ -0,0 +1,23 @@
package
public /*synthesized*/ fun </*0*/ T : kotlin.Any!> A(/*0*/ function: (T!) -> kotlin.Boolean): A<T>
internal fun main(): 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 abstract fun value(/*0*/ t: T!): kotlin.Boolean
}
public/*package*/ open class B {
public/*package*/ constructor B()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public/*package*/ final /*synthesized*/ fun foo(/*0*/ runnable: (() -> kotlin.Unit)!, /*1*/ x: ((kotlin.Any!) -> kotlin.Boolean)!): kotlin.Unit
public/*package*/ open fun foo(/*0*/ runnable: java.lang.Runnable!, /*1*/ x: (A<kotlin.Any!>..A<*>?)): kotlin.Unit
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 bar(): (A<kotlin.Any!>..A<*>?)
}
@@ -0,0 +1,39 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// FILE: A.java
import java.util.*;
class A<T> {
List<T> x;
Map<T, T> y;
A<Map<String, T>> z;
void foo(T x, List<T> y, List<Map<Integer, T>> z) {}
A<List<T>> bar() {}
}
// FILE: Test.java
class Test {
static A rawAField = null;
}
// FILE: main.kt
val strList: List<String> = null!!
val strMap: Map<String, String> = null!!
fun main() {
val rawA = Test.rawAField
rawA.x = strList
rawA.y = strMap
rawA.foo("", strList, strList)
val barResult = rawA.bar()
barResult.x = strList
barResult.y = strMap
barResult.foo("", strList, null)
}
@@ -0,0 +1,27 @@
package
internal val strList: kotlin.List<kotlin.String>
internal val strMap: kotlin.Map<kotlin.String, kotlin.String>
internal fun main(): kotlin.Unit
public/*package*/ open class A</*0*/ T : kotlin.Any!> {
public/*package*/ constructor A</*0*/ T : kotlin.Any!>()
public/*package*/ final var x: kotlin.(Mutable)List<T!>!
public/*package*/ final var y: kotlin.(Mutable)Map<T!, T!>!
public/*package*/ final var z: A<kotlin.(Mutable)Map<kotlin.String!, T!>!>!
public/*package*/ open fun bar(): A<kotlin.(Mutable)List<T!>!>!
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public/*package*/ open fun foo(/*0*/ x: T!, /*1*/ y: kotlin.(Mutable)List<T!>!, /*2*/ z: kotlin.(Mutable)List<kotlin.(Mutable)Map<kotlin.Int!, T!>!>!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public/*package*/ open class Test {
public/*package*/ 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
// Static members
public/*package*/ final var rawAField: (A<kotlin.Any!>..A<*>?)
}
@@ -0,0 +1,25 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// FILE: A.java
import java.util.*;
class A<T extends CharSequence> {}
// FILE: B.java
import java.util.*;
class B<E extends A> {}
// FILE: Test.java
class Test {
static void foo(B x) {}
}
// FILE: main.kt
fun main(x: B<*>) {
Test.foo(x)
}
@@ -0,0 +1,27 @@
package
internal fun main(/*0*/ x: B<*>): kotlin.Unit
public/*package*/ open class A</*0*/ T : kotlin.CharSequence!> {
public/*package*/ constructor A</*0*/ T : kotlin.CharSequence!>()
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/*package*/ open class B</*0*/ E : (A<kotlin.CharSequence!>..A<*>?)> {
public/*package*/ constructor B</*0*/ E : (A<kotlin.CharSequence!>..A<*>?)>()
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/*package*/ open class Test {
public/*package*/ 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
// Static members
public/*package*/ open fun foo(/*0*/ x: (B<(A<kotlin.CharSequence!>..A<*>?)>..B<out (A<kotlin.CharSequence!>..A<*>?)>?)): kotlin.Unit
}
@@ -0,0 +1,27 @@
// FILE: A.java
import org.jetbrains.annotations.*;
import java.util.*;
class A<T> {
@NotNull
List<@Nullable String> foo(@NotNull T x, @Nullable List<@NotNull String> y) {}
}
// FILE: Test.java
class Test {
static class DerivedRawA extends A {}
static A rawField = null;
}
// FILE: main.kt
val doubleList: List<Double?> = null!!
fun main() {
Test.rawField.foo("", doubleList)
Test.rawField.foo(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>, doubleList)
Test.DerivedRawA().foo(<!NULL_FOR_NONNULL_TYPE!>null<!>, doubleList)
}
@@ -0,0 +1,30 @@
package
internal val doubleList: kotlin.List<kotlin.Double?>
internal fun main(): kotlin.Unit
public/*package*/ open class A</*0*/ T : kotlin.Any!> {
public/*package*/ constructor A</*0*/ T : kotlin.Any!>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
org.jetbrains.annotations.NotNull() public/*package*/ open fun foo(/*0*/ org.jetbrains.annotations.NotNull() x: T, /*1*/ org.jetbrains.annotations.Nullable() y: kotlin.(Mutable)List<kotlin.String>?): kotlin.(Mutable)List<kotlin.String?>
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public/*package*/ open class Test {
public/*package*/ 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/*package*/ open class DerivedRawA : A<kotlin.Any!> {
public/*package*/ constructor DerivedRawA()
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 foo(/*0*/ org.jetbrains.annotations.NotNull() x: kotlin.Any, /*1*/ org.jetbrains.annotations.Nullable() y: (kotlin.MutableList<kotlin.Any?>?..kotlin.List<*>?)): (kotlin.MutableList<kotlin.Any?>..kotlin.List<*>)
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
// Static members
public/*package*/ final var rawField: (A<kotlin.Any!>..A<*>?)
}
@@ -61,7 +61,7 @@ internal final class HashMapEx</*0*/ K, /*1*/ V> : java.util.HashMap<K, V>, ExtM
invisible_fake open override /*1*/ /*fake_override*/ fun resize(/*0*/ p0: kotlin.Int): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun size(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
invisible_fake open override /*1*/ /*fake_override*/ fun transfer(/*0*/ p0: kotlin.Array<(out) java.util.HashMap.Entry<*, *>!>!, /*1*/ p1: kotlin.Boolean): kotlin.Unit
invisible_fake open override /*1*/ /*fake_override*/ fun transfer(/*0*/ p0: kotlin.Array<(out) (java.util.HashMap.Entry<kotlin.Any!, kotlin.Any!>..java.util.HashMap.Entry<*, *>?)>!, /*1*/ p1: kotlin.Boolean): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun values(): kotlin.MutableCollection<V>
invisible_fake open override /*1*/ /*fake_override*/ fun writeObject(/*0*/ p0: java.io.ObjectOutputStream!): kotlin.Unit
}
@@ -37,7 +37,7 @@ package test {
invisible_fake final override /*1*/ /*fake_override*/ var focusCycleRoot: kotlin.Boolean
invisible_fake final override /*1*/ /*fake_override*/ var focusListener: [ERROR : Unresolved java classifier: FocusListener]!
invisible_fake final override /*1*/ /*fake_override*/ var focusMgr: [ERROR : Unresolved java classifier: FocusManager]!
invisible_fake final override /*1*/ /*fake_override*/ var focusTraversalKeys: kotlin.Array<(out) kotlin.(Mutable)Set<*>!>!
invisible_fake final override /*1*/ /*fake_override*/ var focusTraversalKeys: kotlin.Array<(out) (kotlin.MutableSet<kotlin.Any?>..kotlin.Set<*>?)>!
invisible_fake final override /*1*/ /*fake_override*/ var focusTraversalKeysEnabled: kotlin.Boolean
invisible_fake final override /*1*/ /*fake_override*/ var focusTraversalPolicy: [ERROR : Unresolved java classifier: FocusTraversalPolicy]!
invisible_fake final override /*1*/ /*fake_override*/ var focusTraversalPolicyProvider: kotlin.Boolean
@@ -98,7 +98,7 @@ package test {
invisible_fake final override /*1*/ /*fake_override*/ var prefSizeSet: kotlin.Boolean
invisible_fake final override /*1*/ /*fake_override*/ var preserveBackgroundColor: [ERROR : Unresolved java classifier: Color]!
invisible_fake final override /*1*/ /*fake_override*/ var printing: kotlin.Boolean
invisible_fake final override /*1*/ /*fake_override*/ var printingThreads: kotlin.(Mutable)Set<*>!
invisible_fake final override /*1*/ /*fake_override*/ var printingThreads: (kotlin.MutableSet<kotlin.Any?>..kotlin.Set<*>?)
invisible_fake final override /*1*/ /*fake_override*/ var resizable: kotlin.Boolean
protected/*protected and package*/ final override /*1*/ /*fake_override*/ var rootPane: [ERROR : Unresolved java classifier: JRootPane]!
protected/*protected and package*/ final override /*1*/ /*fake_override*/ var rootPaneCheckingEnabled: kotlin.Boolean
@@ -290,7 +290,7 @@ package test {
public open override /*1*/ /*fake_override*/ fun getFocusOwner(): java.awt.Component!
public open override /*1*/ /*fake_override*/ fun getFocusTraversalKeys(/*0*/ p0: kotlin.Int): kotlin.(Mutable)Set<java.awt.AWTKeyStroke!>!
public open override /*1*/ /*fake_override*/ fun getFocusTraversalKeysEnabled(): kotlin.Boolean
invisible_fake final override /*1*/ /*fake_override*/ fun getFocusTraversalKeys_NoIDCheck(/*0*/ p0: kotlin.Int): kotlin.(Mutable)Set<*>!
invisible_fake final override /*1*/ /*fake_override*/ fun getFocusTraversalKeys_NoIDCheck(/*0*/ p0: kotlin.Int): (kotlin.MutableSet<kotlin.Any?>..kotlin.Set<*>?)
public open override /*1*/ /*fake_override*/ fun getFocusTraversalPolicy(): [ERROR : Unresolved java classifier: FocusTraversalPolicy]!
public open override /*1*/ /*fake_override*/ fun getFocusableWindowState(): kotlin.Boolean
[ERROR : java.beans.Transient]() public open override /*1*/ /*fake_override*/ fun getFont(): [ERROR : Unresolved java classifier: Font]!