[FIR-TEST] Move analysis tests to separate module
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
// FILE: JavaClass.java
|
||||
|
||||
public class JavaClass {
|
||||
protected String field;
|
||||
|
||||
public String getField() {
|
||||
return field;
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
package some
|
||||
|
||||
fun test(jc: JavaClass) {
|
||||
jc.field
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
FILE: test.kt
|
||||
public final fun test(jc: R|JavaClass|): R|kotlin/Unit| {
|
||||
R|<local>/jc|.R|/JavaClass.field|
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// FILE: JavaClass.java
|
||||
|
||||
public class JavaClass<T> {
|
||||
protected final T myHost;
|
||||
}
|
||||
|
||||
// FILE: Derived.kt
|
||||
|
||||
public class Derived : JavaClass<String>() {
|
||||
fun test() {
|
||||
myHost.length
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
FILE: Derived.kt
|
||||
public final class Derived : R|JavaClass<kotlin/String>| {
|
||||
public constructor(): R|Derived| {
|
||||
super<R|JavaClass<kotlin/String>|>()
|
||||
}
|
||||
|
||||
public final fun test(): R|kotlin/Unit| {
|
||||
this@R|/Derived|.R|/Derived.myHost|.R|kotlin/String.length|
|
||||
}
|
||||
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
// WITH_RUNTIME
|
||||
// FILE: JavaClass.java
|
||||
public class JavaClass {
|
||||
public static void foo1(kotlin.jvm.functions.Function0<Integer> x) {}
|
||||
public static void foo2(kotlin.jvm.functions.Function1<Integer, String> x) {}
|
||||
public static <T> void foo3(kotlin.jvm.functions.Function1<T, String> x, T y) {}
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
fun main() {
|
||||
JavaClass.foo1 { 123 }
|
||||
|
||||
|
||||
JavaClass.foo2 { (it + 2).toString() }
|
||||
JavaClass.foo2({ (it + 3).toString() })
|
||||
val y = { x: Int -> x.toString() }
|
||||
JavaClass.foo2(y)
|
||||
|
||||
|
||||
JavaClass.foo3({ (it + 4).toString() }, 5)
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
FILE: main.kt
|
||||
public final fun main(): R|kotlin/Unit| {
|
||||
Q|JavaClass|.R|/JavaClass.foo1|(<L> = foo1@fun <anonymous>(): R|ft<kotlin/Int, kotlin/Int?>!| {
|
||||
^ Int(123)
|
||||
}
|
||||
)
|
||||
Q|JavaClass|.R|/JavaClass.foo2|(<L> = foo2@fun <anonymous>(it: R|ft<kotlin/Int, kotlin/Int?>!|): R|ft<kotlin/String, kotlin/String?>!| {
|
||||
^ R|<local>/it|.R|kotlin/Int.plus|(Int(2)).R|kotlin/Any.toString|()
|
||||
}
|
||||
)
|
||||
Q|JavaClass|.R|/JavaClass.foo2|(foo2@fun <anonymous>(it: R|ft<kotlin/Int, kotlin/Int?>!|): R|ft<kotlin/String, kotlin/String?>!| {
|
||||
^ R|<local>/it|.R|kotlin/Int.plus|(Int(3)).R|kotlin/Any.toString|()
|
||||
}
|
||||
)
|
||||
lval y: R|(kotlin/Int) -> kotlin/String| = fun <anonymous>(x: R|kotlin/Int|): R|kotlin/String| {
|
||||
^ R|<local>/x|.R|kotlin/Any.toString|()
|
||||
}
|
||||
|
||||
Q|JavaClass|.R|/JavaClass.foo2|(R|<local>/y|)
|
||||
Q|JavaClass|.R|/JavaClass.foo3|<R|kotlin/Int|>(foo3@fun <anonymous>(it: R|kotlin/Int|): R|ft<kotlin/String, kotlin/String?>!| {
|
||||
^ R|<local>/it|.R|kotlin/Int.plus|(Int(4)).R|kotlin/Any.toString|()
|
||||
}
|
||||
, Int(5))
|
||||
}
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
// FILE: j/JavaPackageLocal.java
|
||||
package j;
|
||||
|
||||
public class JavaPackageLocal {
|
||||
static void javaMPackage() {}
|
||||
static int javaPPackage = 4;
|
||||
}
|
||||
|
||||
// FILE: j/JavaProtected.java
|
||||
package j;
|
||||
|
||||
public class JavaProtected {
|
||||
protected static void javaMProtectedStatic() {}
|
||||
protected static int javaPProtectedStatic = 4;
|
||||
protected final int javaPProtectedPackage = 4;
|
||||
}
|
||||
|
||||
// FILE: k.kt
|
||||
package k
|
||||
|
||||
import j.JavaProtected
|
||||
import j.JavaPackageLocal
|
||||
|
||||
class A {
|
||||
val p1 = JavaPackageLocal.<!INAPPLICABLE_CANDIDATE!>javaPPackage<!>
|
||||
val p2 = JavaProtected.<!INAPPLICABLE_CANDIDATE!>javaPProtectedStatic<!>
|
||||
val p3 = JavaProtected().<!INAPPLICABLE_CANDIDATE!>javaPProtectedPackage<!>
|
||||
|
||||
fun test() {
|
||||
JavaProtected.<!INAPPLICABLE_CANDIDATE!>javaMProtectedStatic<!>()
|
||||
JavaPackageLocal.<!INAPPLICABLE_CANDIDATE!>javaMPackage<!>()
|
||||
}
|
||||
}
|
||||
|
||||
class B : JavaProtected() {
|
||||
val p1 = JavaPackageLocal.<!INAPPLICABLE_CANDIDATE!>javaPPackage<!>
|
||||
val p2 = JavaProtected.javaPProtectedStatic
|
||||
val p3 = javaPProtectedPackage
|
||||
|
||||
fun test() {
|
||||
JavaProtected.javaMProtectedStatic()
|
||||
JavaPackageLocal.<!INAPPLICABLE_CANDIDATE!>javaMPackage<!>()
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: j.kt
|
||||
package j
|
||||
|
||||
import j.JavaProtected
|
||||
import j.JavaPackageLocal
|
||||
|
||||
class C {
|
||||
val p1 = JavaPackageLocal.javaPPackage
|
||||
val p2 = JavaProtected.javaPProtectedStatic
|
||||
val p3 = JavaProtected().javaPProtectedPackage
|
||||
|
||||
fun test() {
|
||||
JavaProtected.javaMProtectedStatic()
|
||||
JavaProtected.javaMProtectedStatic()
|
||||
JavaPackageLocal.javaMPackage()
|
||||
}
|
||||
}
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
FILE: k.kt
|
||||
public final class A : R|kotlin/Any| {
|
||||
public constructor(): R|k/A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val p1: <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaPackageLocal.javaPPackage]> = Q|j/JavaPackageLocal|.<Inapplicable(HIDDEN): [j/JavaPackageLocal.javaPPackage]>#
|
||||
public get(): <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaPackageLocal.javaPPackage]>
|
||||
|
||||
public final val p2: <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaProtected.javaPProtectedStatic]> = Q|j/JavaProtected|.<Inapplicable(HIDDEN): [j/JavaProtected.javaPProtectedStatic]>#
|
||||
public get(): <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaProtected.javaPProtectedStatic]>
|
||||
|
||||
public final val p3: <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaProtected.javaPProtectedPackage]> = R|j/JavaProtected.JavaProtected|().<Inapplicable(HIDDEN): [j/JavaProtected.javaPProtectedPackage]>#
|
||||
public get(): <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaProtected.javaPProtectedPackage]>
|
||||
|
||||
public final fun test(): R|kotlin/Unit| {
|
||||
Q|j/JavaProtected|.<Inapplicable(HIDDEN): [j/JavaProtected.javaMProtectedStatic]>#()
|
||||
Q|j/JavaPackageLocal|.<Inapplicable(HIDDEN): [j/JavaPackageLocal.javaMPackage]>#()
|
||||
}
|
||||
|
||||
}
|
||||
public final class B : R|j/JavaProtected| {
|
||||
public constructor(): R|k/B| {
|
||||
super<R|j/JavaProtected|>()
|
||||
}
|
||||
|
||||
public final val p1: <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaPackageLocal.javaPPackage]> = Q|j/JavaPackageLocal|.<Inapplicable(HIDDEN): [j/JavaPackageLocal.javaPPackage]>#
|
||||
public get(): <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaPackageLocal.javaPPackage]>
|
||||
|
||||
public final val p2: R|kotlin/Int| = Q|j/JavaProtected|.R|j/JavaProtected.javaPProtectedStatic|
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final val p3: R|kotlin/Int| = this@R|k/B|.R|j/JavaProtected.javaPProtectedPackage|
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final fun test(): R|kotlin/Unit| {
|
||||
Q|j/JavaProtected|.R|j/JavaProtected.javaMProtectedStatic|()
|
||||
Q|j/JavaPackageLocal|.<Inapplicable(HIDDEN): [j/JavaPackageLocal.javaMPackage]>#()
|
||||
}
|
||||
|
||||
}
|
||||
FILE: j.kt
|
||||
public final class C : R|kotlin/Any| {
|
||||
public constructor(): R|j/C| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val p1: R|kotlin/Int| = Q|j/JavaPackageLocal|.R|j/JavaPackageLocal.javaPPackage|
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final val p2: R|kotlin/Int| = Q|j/JavaProtected|.R|j/JavaProtected.javaPProtectedStatic|
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final val p3: R|kotlin/Int| = R|j/JavaProtected.JavaProtected|().R|j/JavaProtected.javaPProtectedPackage|
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final fun test(): R|kotlin/Unit| {
|
||||
Q|j/JavaProtected|.R|j/JavaProtected.javaMProtectedStatic|()
|
||||
Q|j/JavaProtected|.R|j/JavaProtected.javaMProtectedStatic|()
|
||||
Q|j/JavaPackageLocal|.R|j/JavaPackageLocal.javaMPackage|()
|
||||
}
|
||||
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
// FILE: K1.kt
|
||||
class K2: J1() {
|
||||
fun bar() {
|
||||
foo()
|
||||
baz()
|
||||
|
||||
superClass()
|
||||
superI()
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: J1.java
|
||||
public class J1 extends KFirst {
|
||||
void baz() {}
|
||||
}
|
||||
|
||||
// FILE: K2.kt
|
||||
open class KFirst : SuperClass(), SuperI {
|
||||
fun foo() {
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: K3.kt
|
||||
abstract class SuperClass {
|
||||
fun superClass() {}
|
||||
}
|
||||
|
||||
interface SuperI {
|
||||
fun superI() {}
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
FILE: K1.kt
|
||||
public final class K2 : R|J1| {
|
||||
public constructor(): R|K2| {
|
||||
super<R|J1|>()
|
||||
}
|
||||
|
||||
public final fun bar(): R|kotlin/Unit| {
|
||||
this@R|/K2|.R|/KFirst.foo|()
|
||||
this@R|/K2|.R|/J1.baz|()
|
||||
this@R|/K2|.R|/SuperClass.superClass|()
|
||||
this@R|/K2|.R|/SuperI.superI|()
|
||||
}
|
||||
|
||||
}
|
||||
FILE: K2.kt
|
||||
public open class KFirst : R|SuperClass|, R|SuperI| {
|
||||
public constructor(): R|KFirst| {
|
||||
super<R|SuperClass|>()
|
||||
}
|
||||
|
||||
public final fun foo(): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
}
|
||||
FILE: K3.kt
|
||||
public abstract class SuperClass : R|kotlin/Any| {
|
||||
public constructor(): R|SuperClass| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final fun superClass(): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
}
|
||||
public abstract interface SuperI : R|kotlin/Any| {
|
||||
public open fun superI(): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
}
|
||||
Vendored
+37
@@ -0,0 +1,37 @@
|
||||
// FILE: K1.kt
|
||||
class KSub : J1()
|
||||
|
||||
fun main(k: KSub, vString: SuperClass<String>.NestedInSuperClass, vInt: SuperClass<Int>.NestedInSuperClass) {
|
||||
k.getImpl().nestedI(vString)
|
||||
|
||||
// TODO: Support parametrisized inner classes
|
||||
k.getImpl().nestedI(vInt)
|
||||
k.getNestedSubClass().<!INAPPLICABLE_CANDIDATE!>nested<!>("")
|
||||
k.getNestedSubClass().nested(1)
|
||||
}
|
||||
|
||||
// FILE: J1.java
|
||||
public class J1 extends KFirst {
|
||||
|
||||
public class NestedSubClass extends NestedInSuperClass {}
|
||||
public abstract class NestedIImpl implements NestedInI<NestedInSuperClass> {}
|
||||
|
||||
public NestedIImpl getImpl() { return null; }
|
||||
public NestedSubClass getNestedSubClass() { return null; }
|
||||
}
|
||||
|
||||
// FILE: K2.kt
|
||||
open class KFirst : SuperClass<String>(), SuperI<Int>
|
||||
|
||||
// FILE: K3.kt
|
||||
abstract class SuperClass<T> {
|
||||
inner open class NestedInSuperClass {
|
||||
fun nested(x: T) {}
|
||||
}
|
||||
}
|
||||
|
||||
interface SuperI<E> {
|
||||
interface NestedInI<F> {
|
||||
fun nestedI(f: F) {}
|
||||
}
|
||||
}
|
||||
Vendored
+45
@@ -0,0 +1,45 @@
|
||||
FILE: K1.kt
|
||||
public final class KSub : R|J1| {
|
||||
public constructor(): R|KSub| {
|
||||
super<R|J1|>()
|
||||
}
|
||||
|
||||
}
|
||||
public final fun main(k: R|KSub|, vString: R|SuperClass.NestedInSuperClass<kotlin/String>|, vInt: R|SuperClass.NestedInSuperClass<kotlin/Int>|): R|kotlin/Unit| {
|
||||
R|<local>/k|.R|/J1.getImpl|().R|FakeOverride</J1.NestedIImpl.nestedI: R|kotlin/Unit|>|(R|<local>/vString|)
|
||||
R|<local>/k|.R|/J1.getImpl|().R|FakeOverride</J1.NestedIImpl.nestedI: R|kotlin/Unit|>|(R|<local>/vInt|)
|
||||
R|<local>/k|.R|/J1.getNestedSubClass|().<Inapplicable(INAPPLICABLE): [/SuperClass.NestedInSuperClass.nested]>#(String())
|
||||
R|<local>/k|.R|/J1.getNestedSubClass|().R|/SuperClass.NestedInSuperClass.nested|(Int(1))
|
||||
}
|
||||
FILE: K2.kt
|
||||
public open class KFirst : R|SuperClass<kotlin/String>|, R|SuperI<kotlin/Int>| {
|
||||
public constructor(): R|KFirst| {
|
||||
super<R|SuperClass<kotlin/String>|>()
|
||||
}
|
||||
|
||||
}
|
||||
FILE: K3.kt
|
||||
public abstract class SuperClass<T> : R|kotlin/Any| {
|
||||
public constructor<T>(): R|SuperClass<T>| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public open inner class NestedInSuperClass : R|kotlin/Any| {
|
||||
public constructor(): R|SuperClass.NestedInSuperClass| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final fun nested(x: R|T|): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public abstract interface SuperI<E> : R|kotlin/Any| {
|
||||
public abstract interface NestedInI<F> : R|kotlin/Any| {
|
||||
public open fun nestedI(f: R|F|): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// FILE: K1.kt
|
||||
open class KFirst() {
|
||||
fun foo() {
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: J1.java
|
||||
public class J1 extends KFirst {
|
||||
void baz() {}
|
||||
}
|
||||
|
||||
// FILE: K2.kt
|
||||
class K2: J1() {
|
||||
fun bar() {
|
||||
foo()
|
||||
baz()
|
||||
}
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
FILE: K1.kt
|
||||
public open class KFirst : R|kotlin/Any| {
|
||||
public constructor(): R|KFirst| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final fun foo(): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
}
|
||||
FILE: K2.kt
|
||||
public final class K2 : R|J1| {
|
||||
public constructor(): R|K2| {
|
||||
super<R|J1|>()
|
||||
}
|
||||
|
||||
public final fun bar(): R|kotlin/Unit| {
|
||||
this@R|/K2|.R|/KFirst.foo|()
|
||||
this@R|/K2|.R|/J1.baz|()
|
||||
}
|
||||
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
// FILE: K1.kt
|
||||
open class KFirst<T: java.io.Serializable>() {
|
||||
fun foo(t: T): T = t
|
||||
}
|
||||
|
||||
// FILE: J1.java
|
||||
public class J1 extends KFirst<Integer> {
|
||||
void baz() {}
|
||||
}
|
||||
|
||||
// FILE: K2.kt
|
||||
class K2: J1() {
|
||||
fun bar() {
|
||||
foo(1)
|
||||
baz()
|
||||
}
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
FILE: K1.kt
|
||||
public open class KFirst<T : R|java/io/Serializable|> : R|kotlin/Any| {
|
||||
public constructor<T : R|java/io/Serializable|>(): R|KFirst<T>| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final fun foo(t: R|T|): R|T| {
|
||||
^foo R|<local>/t|
|
||||
}
|
||||
|
||||
}
|
||||
FILE: K2.kt
|
||||
public final class K2 : R|J1| {
|
||||
public constructor(): R|K2| {
|
||||
super<R|J1|>()
|
||||
}
|
||||
|
||||
public final fun bar(): R|kotlin/Unit| {
|
||||
this@R|/K2|.R|FakeOverride</J1.foo: R|ft<kotlin/Int, kotlin/Int?>!|>|(Int(1))
|
||||
this@R|/K2|.R|/J1.baz|()
|
||||
}
|
||||
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// FILE: K1.kt
|
||||
class KotlinClass
|
||||
|
||||
// FILE: JavaClass.java
|
||||
public class JavaClass {
|
||||
public static void baz(KotlinClass k) {}
|
||||
}
|
||||
|
||||
// FILE: K2.kt
|
||||
fun main() {
|
||||
JavaClass.baz(KotlinClass())
|
||||
JavaClass.<!INAPPLICABLE_CANDIDATE!>baz<!>("")
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
FILE: K1.kt
|
||||
public final class KotlinClass : R|kotlin/Any| {
|
||||
public constructor(): R|KotlinClass| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
FILE: K2.kt
|
||||
public final fun main(): R|kotlin/Unit| {
|
||||
Q|JavaClass|.R|/JavaClass.baz|(R|/KotlinClass.KotlinClass|())
|
||||
Q|JavaClass|.<Inapplicable(INAPPLICABLE): [/JavaClass.baz]>#(String())
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
// FILE: K1.kt
|
||||
class KotlinClass<T>
|
||||
|
||||
// FILE: JavaClass.java
|
||||
public class JavaClass {
|
||||
public static void baz(KotlinClass<Integer> k) {}
|
||||
}
|
||||
|
||||
// FILE: K2.kt
|
||||
fun main() {
|
||||
JavaClass.baz(KotlinClass())
|
||||
JavaClass.baz(KotlinClass<Int>())
|
||||
JavaClass.<!INAPPLICABLE_CANDIDATE!>baz<!>(KotlinClass<String>())
|
||||
JavaClass.<!INAPPLICABLE_CANDIDATE!>baz<!>("")
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
FILE: K1.kt
|
||||
public final class KotlinClass<T> : R|kotlin/Any| {
|
||||
public constructor<T>(): R|KotlinClass<T>| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
FILE: K2.kt
|
||||
public final fun main(): R|kotlin/Unit| {
|
||||
Q|JavaClass|.R|/JavaClass.baz|(R|/KotlinClass.KotlinClass|<R|ft<kotlin/Int, kotlin/Int?>!|>())
|
||||
Q|JavaClass|.R|/JavaClass.baz|(R|/KotlinClass.KotlinClass|<R|kotlin/Int|>())
|
||||
Q|JavaClass|.<Inapplicable(INAPPLICABLE): [/JavaClass.baz]>#(R|/KotlinClass.KotlinClass|<R|kotlin/String|>())
|
||||
Q|JavaClass|.<Inapplicable(INAPPLICABLE): [/JavaClass.baz]>#(String())
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
// FULL_JDK
|
||||
// FILE: Logger.java
|
||||
|
||||
public class Logger {
|
||||
private static Logger me = new Logger();
|
||||
|
||||
public static Logger getInstance(String s) {
|
||||
return me;
|
||||
}
|
||||
|
||||
public static Logger getInstance(Class c) {
|
||||
return me;
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
fun test() {
|
||||
val logger = Logger.getInstance("test")
|
||||
}
|
||||
|
||||
class MyTest {
|
||||
private val klass = this::class.java
|
||||
|
||||
private val logger = Logger.getInstance(klass)
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
FILE: test.kt
|
||||
public final fun test(): R|kotlin/Unit| {
|
||||
lval logger: R|ft<Logger, Logger?>!| = Q|Logger|.R|/Logger.getInstance|(String(test))
|
||||
}
|
||||
public final class MyTest : R|kotlin/Any| {
|
||||
public constructor(): R|MyTest| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
private final val klass: R|java/lang/Class<MyTest>| = <getClass>(this@R|/MyTest|).R|kotlin/jvm/java|<R|MyTest|>
|
||||
private get(): R|java/lang/Class<MyTest>|
|
||||
|
||||
private final val logger: R|ft<Logger, Logger?>!| = Q|Logger|.R|/Logger.getInstance|(this@R|/MyTest|.R|/MyTest.klass|)
|
||||
private get(): R|ft<Logger, Logger?>!|
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
// FULL_JDK
|
||||
// STDLIB_JDK8
|
||||
// !JVM_TARGET: 1.8
|
||||
|
||||
fun <D> MutableMap<String, MutableSet<D>>.initAndAdd(key: String, value: D) {
|
||||
this.compute(key) { _, maybeValues ->
|
||||
val setOfValues = maybeValues ?: mutableSetOf()
|
||||
setOfValues.add(value)
|
||||
setOfValues
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
FILE: MapCompute.kt
|
||||
public final fun <D> R|kotlin/collections/MutableMap<kotlin/String, kotlin/collections/MutableSet<D>>|.initAndAdd(key: R|kotlin/String|, value: R|D|): R|kotlin/Unit| {
|
||||
this@R|/initAndAdd|.R|FakeOverride<java/util/Map.compute: R|kotlin/collections/MutableSet<D>?|>|(R|<local>/key|, <L> = compute@fun <anonymous>(_: R|ft<kotlin/String, kotlin/String?>!|, maybeValues: R|ft<kotlin/collections/MutableSet<D>, kotlin/collections/MutableSet<D>?>!|): R|ft<kotlin/collections/MutableSet<D>, kotlin/collections/MutableSet<D>?>!| {
|
||||
lval setOfValues: R|kotlin/collections/MutableSet<D>| = when (lval <elvis>: R|ft<kotlin/collections/MutableSet<D>, kotlin/collections/MutableSet<D>?>!| = R|<local>/maybeValues|) {
|
||||
==($subj$, Null(null)) -> {
|
||||
R|kotlin/collections/mutableSetOf|<R|D|>()
|
||||
}
|
||||
else -> {
|
||||
R|<local>/<elvis>|
|
||||
}
|
||||
}
|
||||
|
||||
R|<local>/setOfValues|.R|FakeOverride<kotlin/collections/MutableSet.add: R|kotlin/Boolean|>|(R|<local>/value|)
|
||||
^ R|<local>/setOfValues|
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
// FILE: Test.java
|
||||
|
||||
import java.lang.*;
|
||||
import java.util.*;
|
||||
|
||||
public class Test {
|
||||
public static class MapEntryImpl implements Map.Entry<String, String> {
|
||||
public String getKey() { return null; }
|
||||
public String getValue() { return null; }
|
||||
public String setValue(String s) { return null; }
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
class MyMapEntry : Test.MapEntryImpl()
|
||||
|
||||
fun test() {
|
||||
val b = MyMapEntry()
|
||||
val key = b.key
|
||||
val value = b.value
|
||||
b.setValue(null)
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
FILE: main.kt
|
||||
public final class MyMapEntry : R|Test.MapEntryImpl| {
|
||||
public constructor(): R|MyMapEntry| {
|
||||
super<R|Test.MapEntryImpl|>()
|
||||
}
|
||||
|
||||
}
|
||||
public final fun test(): R|kotlin/Unit| {
|
||||
lval b: R|MyMapEntry| = R|/MyMapEntry.MyMapEntry|()
|
||||
lval key: R|ft<kotlin/String, kotlin/String?>!| = R|<local>/b|.R|/Test.MapEntryImpl.key|
|
||||
lval value: R|ft<kotlin/String, kotlin/String?>!| = R|<local>/b|.R|/Test.MapEntryImpl.value|
|
||||
R|<local>/b|.R|/Test.MapEntryImpl.setValue|(Null(null))
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
// FULL_JDK
|
||||
// FILE: YourException.java
|
||||
class YourException extends Exception {
|
||||
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
import java.io.PrintStream
|
||||
|
||||
class MyException : Exception()
|
||||
|
||||
fun test(e: MyException, stream: PrintStream) {
|
||||
e.printStackTrace() // Cannot be resolved with early J2K mapping due deriving of kotlin.Throwable instead of java.lang.Throwable
|
||||
e.printStackTrace(stream)
|
||||
val result = e.getLocalizedMessage()
|
||||
}
|
||||
|
||||
fun test(e: YourException, stream: PrintStream) {
|
||||
e.printStackTrace()
|
||||
e.printStackTrace(stream)
|
||||
val result = e.getLocalizedMessage()
|
||||
}
|
||||
|
||||
fun test(e: Exception, stream: PrintStream) {
|
||||
e.printStackTrace()
|
||||
e.printStackTrace(stream)
|
||||
val result = e.getLocalizedMessage()
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
FILE: test.kt
|
||||
public final class MyException : R|kotlin/Exception| {
|
||||
public constructor(): R|MyException| {
|
||||
super<R|kotlin/Exception|>()
|
||||
}
|
||||
|
||||
}
|
||||
public final fun test(e: R|MyException|, stream: R|java/io/PrintStream|): R|kotlin/Unit| {
|
||||
R|<local>/e|.R|java/lang/Throwable.printStackTrace|()
|
||||
R|<local>/e|.R|java/lang/Throwable.printStackTrace|(R|<local>/stream|)
|
||||
lval result: R|ft<kotlin/String, kotlin/String?>!| = R|<local>/e|.R|java/lang/Throwable.getLocalizedMessage|()
|
||||
}
|
||||
public final fun test(e: R|YourException|, stream: R|java/io/PrintStream|): R|kotlin/Unit| {
|
||||
R|<local>/e|.R|java/lang/Throwable.printStackTrace|()
|
||||
R|<local>/e|.R|java/lang/Throwable.printStackTrace|(R|<local>/stream|)
|
||||
lval result: R|ft<kotlin/String, kotlin/String?>!| = R|<local>/e|.R|java/lang/Throwable.getLocalizedMessage|()
|
||||
}
|
||||
public final fun test(e: R|kotlin/Exception|, stream: R|java/io/PrintStream|): R|kotlin/Unit| {
|
||||
R|<local>/e|.R|java/lang/Throwable.printStackTrace|()
|
||||
R|<local>/e|.R|java/lang/Throwable.printStackTrace|(R|<local>/stream|)
|
||||
lval result: R|ft<kotlin/String, kotlin/String?>!| = R|<local>/e|.R|java/lang/Throwable.getLocalizedMessage|()
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
// FULL_JDK
|
||||
// FILE: MyIterable.java
|
||||
public interface MyIterable<T> extends Iterable<T>
|
||||
|
||||
// FILE: test.kt
|
||||
interface UseIterable : MyIterable<String> {
|
||||
fun test() {
|
||||
val it = iterator()
|
||||
val split = spliterator()
|
||||
}
|
||||
}
|
||||
|
||||
fun test(some: Iterable<String>) {
|
||||
val it = some.iterator()
|
||||
val split = some.spliterator()
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
FILE: test.kt
|
||||
public abstract interface UseIterable : R|MyIterable<kotlin/String>| {
|
||||
public open fun test(): R|kotlin/Unit| {
|
||||
lval it: R|kotlin/collections/MutableIterator<ft<kotlin/String, kotlin/String?>!>| = this@R|/UseIterable|.R|FakeOverride</UseIterable.iterator: R|kotlin/collections/MutableIterator<ft<kotlin/String, kotlin/String?>!>|>|()
|
||||
lval split: R|java/util/Spliterator<ft<kotlin/String, kotlin/String?>!>| = this@R|/UseIterable|.R|FakeOverride</UseIterable.spliterator: R|java/util/Spliterator<ft<kotlin/String, kotlin/String?>!>|>|()
|
||||
}
|
||||
|
||||
}
|
||||
public final fun test(some: R|kotlin/collections/Iterable<kotlin/String>|): R|kotlin/Unit| {
|
||||
lval it: R|kotlin/collections/Iterator<kotlin/String>| = R|<local>/some|.R|FakeOverride<kotlin/collections/Iterable.iterator: R|kotlin/collections/Iterator<kotlin/String>|>|()
|
||||
lval split: R|java/util/Spliterator<ft<kotlin/String, kotlin/String?>!>| = R|<local>/some|.R|FakeOverride<java/lang/Iterable.spliterator: R|java/util/Spliterator<ft<kotlin/String, kotlin/String?>!>|>|()
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
// FULL_JDK
|
||||
// FILE: MyMap.java
|
||||
|
||||
public abstract class MyMap implements java.util.Map<String, String> {}
|
||||
|
||||
// FILE: test.kt
|
||||
fun test(map: MyMap) {
|
||||
val result = map.getOrPut("key") { "value" } // Cannot be resolved without early J2K mapping
|
||||
// In contrast, should be taken from JDK
|
||||
val otherResult = map.getOrDefault("key", "value")
|
||||
val anotherResult = map.replace("key", "value")
|
||||
// Java forEach
|
||||
map.forEach { key, value ->
|
||||
println("$key: $value")
|
||||
key.length
|
||||
value.length
|
||||
}
|
||||
// Kotlin forEach
|
||||
map.forEach { (key, value) ->
|
||||
println("$key: $value")
|
||||
key.length
|
||||
value.length
|
||||
}
|
||||
}
|
||||
|
||||
fun test(map: MutableMap<String, String>) {
|
||||
val result = map.getOrPut("key") { "value" } // Cannot be resolved without early J2K mapping
|
||||
// In contrast, should be taken from JDK
|
||||
val otherResult = map.getOrDefault("key", "value")
|
||||
val anotherResult = map.replace("key", "value")
|
||||
// Java forEach
|
||||
map.forEach { key, value ->
|
||||
println("$key: $value")
|
||||
key.length
|
||||
value.length
|
||||
}
|
||||
// Kotlin forEach
|
||||
map.forEach { (key, value) ->
|
||||
println("$key: $value")
|
||||
key.length
|
||||
value.length
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
FILE: test.kt
|
||||
public final fun test(map: R|MyMap|): R|kotlin/Unit| {
|
||||
lval result: R|ft<kotlin/String, kotlin/String?>!| = R|<local>/map|.R|kotlin/collections/getOrPut|<R|ft<kotlin/String, kotlin/String?>!|, R|ft<kotlin/String, kotlin/String?>!|>(String(key), <L> = getOrPut@fun <anonymous>(): R|kotlin/String| <kind=UNKNOWN> {
|
||||
^ String(value)
|
||||
}
|
||||
)
|
||||
lval otherResult: R|ft<kotlin/String, kotlin/String?>!| = R|<local>/map|.R|FakeOverride</MyMap.getOrDefault: R|ft<kotlin/String, kotlin/String?>!|>|(String(key), String(value))
|
||||
lval anotherResult: R|kotlin/String?| = R|<local>/map|.R|FakeOverride</MyMap.replace: R|kotlin/String?|>|(String(key), String(value))
|
||||
R|<local>/map|.R|FakeOverride</MyMap.forEach: R|kotlin/Unit|>|(<L> = forEach@fun <anonymous>(key: R|ft<kotlin/String, kotlin/String?>!|, value: R|ft<kotlin/String, kotlin/String?>!|): R|kotlin/Unit| {
|
||||
R|kotlin/io/println|(<strcat>(R|<local>/key|.R|kotlin/Any.toString|(), String(: ), R|<local>/value|.R|kotlin/Any.toString|()))
|
||||
R|<local>/key|.R|kotlin/String.length|
|
||||
^ R|<local>/value|.R|kotlin/String.length|
|
||||
}
|
||||
)
|
||||
R|<local>/map|.R|kotlin/collections/forEach|<R|ft<kotlin/String, kotlin/String?>!|, R|ft<kotlin/String, kotlin/String?>!|>(<L> = forEach@fun <anonymous>(<destruct>: R|kotlin/collections/Map.Entry<ft<kotlin/String, kotlin/String?>!, ft<kotlin/String, kotlin/String?>!>|): R|kotlin/Unit| <kind=UNKNOWN> {
|
||||
lval key: R|ft<kotlin/String, kotlin/String?>!| = R|<local>/<destruct>|.R|kotlin/collections/component1|<R|ft<kotlin/String, kotlin/String?>!|, R|ft<kotlin/String, kotlin/String?>!|>()
|
||||
lval value: R|ft<kotlin/String, kotlin/String?>!| = R|<local>/<destruct>|.R|kotlin/collections/component2|<R|ft<kotlin/String, kotlin/String?>!|, R|ft<kotlin/String, kotlin/String?>!|>()
|
||||
R|kotlin/io/println|(<strcat>(R|<local>/key|.R|kotlin/Any.toString|(), String(: ), R|<local>/value|.R|kotlin/Any.toString|()))
|
||||
R|<local>/key|.R|kotlin/String.length|
|
||||
^ R|<local>/value|.R|kotlin/String.length|
|
||||
}
|
||||
)
|
||||
}
|
||||
public final fun test(map: R|kotlin/collections/MutableMap<kotlin/String, kotlin/String>|): R|kotlin/Unit| {
|
||||
lval result: R|kotlin/String| = R|<local>/map|.R|kotlin/collections/getOrPut|<R|kotlin/String|, R|kotlin/String|>(String(key), <L> = getOrPut@fun <anonymous>(): R|kotlin/String| <kind=UNKNOWN> {
|
||||
^ String(value)
|
||||
}
|
||||
)
|
||||
lval otherResult: R|kotlin/String| = R|<local>/map|.R|FakeOverride<kotlin/collections/MutableMap.getOrDefault: R|kotlin/String|>|(String(key), String(value))
|
||||
lval anotherResult: R|kotlin/String?| = R|<local>/map|.R|FakeOverride<java/util/Map.replace: R|kotlin/String?|>|(String(key), String(value))
|
||||
R|<local>/map|.R|FakeOverride<java/util/Map.forEach: R|kotlin/Unit|>|(<L> = forEach@fun <anonymous>(key: R|ft<kotlin/String, kotlin/String?>!|, value: R|ft<kotlin/String, kotlin/String?>!|): R|kotlin/Unit| {
|
||||
R|kotlin/io/println|(<strcat>(R|<local>/key|.R|kotlin/Any.toString|(), String(: ), R|<local>/value|.R|kotlin/Any.toString|()))
|
||||
R|<local>/key|.R|kotlin/String.length|
|
||||
^ R|<local>/value|.R|kotlin/String.length|
|
||||
}
|
||||
)
|
||||
R|<local>/map|.R|kotlin/collections/forEach|<R|kotlin/String|, R|kotlin/String|>(<L> = forEach@fun <anonymous>(<destruct>: R|kotlin/collections/Map.Entry<kotlin/String, kotlin/String>|): R|kotlin/Unit| <kind=UNKNOWN> {
|
||||
lval key: R|kotlin/String| = R|<local>/<destruct>|.R|kotlin/collections/component1|<R|kotlin/String|, R|kotlin/String|>()
|
||||
lval value: R|kotlin/String| = R|<local>/<destruct>|.R|kotlin/collections/component2|<R|kotlin/String|, R|kotlin/String|>()
|
||||
R|kotlin/io/println|(<strcat>(R|<local>/key|.R|kotlin/Any.toString|(), String(: ), R|<local>/value|.R|kotlin/Any.toString|()))
|
||||
R|<local>/key|.R|kotlin/String.length|
|
||||
^ R|<local>/value|.R|kotlin/String.length|
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
// FILE: JavaClass.java
|
||||
|
||||
public class JavaClass {
|
||||
public static void foo(ArrayList list) {}
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
class Some
|
||||
|
||||
fun test(list: ArrayList<Some>) {
|
||||
JavaClass.foo(list)
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
FILE: test.kt
|
||||
public final class Some : R|kotlin/Any| {
|
||||
public constructor(): R|Some| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
public final fun test(list: R|kotlin/collections/ArrayList<Some>|): R|kotlin/Unit| {
|
||||
Q|JavaClass|.R|/JavaClass.foo|(R|<local>/list|)
|
||||
}
|
||||
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
// FILE: AbstractClass.java
|
||||
|
||||
public abstract class AbstractClass {
|
||||
public static class StaticClass {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: User.kt
|
||||
|
||||
class User : AbstractClass() {
|
||||
fun foo() {
|
||||
val sc = StaticClass()
|
||||
}
|
||||
}
|
||||
|
||||
fun test() {
|
||||
AbstractClass.StaticClass()
|
||||
}
|
||||
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
FILE: User.kt
|
||||
public final class User : R|AbstractClass| {
|
||||
public constructor(): R|User| {
|
||||
super<R|AbstractClass|>()
|
||||
}
|
||||
|
||||
public final fun foo(): R|kotlin/Unit| {
|
||||
lval sc: R|AbstractClass.StaticClass| = R|/AbstractClass.StaticClass.StaticClass|()
|
||||
}
|
||||
|
||||
}
|
||||
public final fun test(): R|kotlin/Unit| {
|
||||
Q|AbstractClass|.R|/AbstractClass.StaticClass.StaticClass|()
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* See org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt:93
|
||||
*/
|
||||
|
||||
// FILE: CommonDataKeys.java
|
||||
|
||||
public class CommonDataKeys {
|
||||
public static final String PROJECT = "project";
|
||||
public final String MEMBER = "member"
|
||||
}
|
||||
|
||||
// FILE: PlatformDataKeys.java
|
||||
|
||||
public class PlatformDataKeys extends CommonDataKeys {
|
||||
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
fun test() {
|
||||
val project = PlatformDataKeys.PROJECT
|
||||
val member = PlatformDataKeys().MEMBER
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
FILE: main.kt
|
||||
public final fun test(): R|kotlin/Unit| {
|
||||
lval project: R|ft<kotlin/String, kotlin/String?>!| = Q|PlatformDataKeys|.R|/CommonDataKeys.PROJECT|
|
||||
lval member: R|ft<kotlin/String, kotlin/String?>!| = R|/PlatformDataKeys.PlatformDataKeys|().R|/CommonDataKeys.MEMBER|
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
// FILE: StaticOwner.java
|
||||
// FULL_JDK
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class StaticOwner {
|
||||
@NotNull
|
||||
public static <T> T newInstance(@NotNull Class<T> aClass) {}
|
||||
}
|
||||
|
||||
// FILE: User.kt
|
||||
|
||||
interface Freezable
|
||||
|
||||
abstract class User<T : Freezable> {
|
||||
|
||||
private var settings: T = createSettings()
|
||||
|
||||
protected abstract fun createSettings(): T
|
||||
|
||||
fun foo() {
|
||||
settings = StaticOwner.newInstance(settings.javaClass)
|
||||
}
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
FILE: User.kt
|
||||
public abstract interface Freezable : R|kotlin/Any| {
|
||||
}
|
||||
public abstract class User<T : R|Freezable|> : R|kotlin/Any| {
|
||||
public constructor<T : R|Freezable|>(): R|User<T>| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
private final var settings: R|T| = this@R|/User|.R|/User.createSettings|()
|
||||
private get(): R|T|
|
||||
private set(value: R|T|): R|kotlin/Unit|
|
||||
|
||||
protected abstract fun createSettings(): R|T|
|
||||
|
||||
public final fun foo(): R|kotlin/Unit| {
|
||||
this@R|/User|.R|/User.settings| = Q|StaticOwner|.R|/StaticOwner.newInstance|<R|ft<T, T?>!|>(this@R|/User|.R|/User.settings|.R|kotlin/jvm/javaClass|<R|ft<T, T?>!|>)
|
||||
}
|
||||
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// FILE: PsiElement.java
|
||||
|
||||
public interface PsiElement {
|
||||
PsiElement[] getChildren();
|
||||
}
|
||||
|
||||
// FILE: XmlTag.java
|
||||
|
||||
public interface XmlTag extends PsiElement {
|
||||
String getLocalName();
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
fun foo(tag: XmlTag, name: String): List<XmlTag> {
|
||||
val result = tag.children.filterIsInstance<XmlTag>().filter { it.localName == name }
|
||||
return result
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
FILE: test.kt
|
||||
public final fun foo(tag: R|XmlTag|, name: R|kotlin/String|): R|kotlin/collections/List<XmlTag>| {
|
||||
lval result: R|kotlin/collections/List<XmlTag>| = R|<local>/tag|.R|/PsiElement.children|.R|kotlin/collections/filterIsInstance|<R|XmlTag|>().R|kotlin/collections/filter|<R|XmlTag|>(<L> = filter@fun <anonymous>(it: R|XmlTag|): R|kotlin/Boolean| <kind=UNKNOWN> {
|
||||
^ ==(R|<local>/it|.R|/XmlTag.localName|, R|<local>/name|)
|
||||
}
|
||||
)
|
||||
^foo R|<local>/result|
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
// FULL_JDK
|
||||
// FILE: Call.java
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import java.util.*;
|
||||
|
||||
public interface Call<D> {
|
||||
@NotNull
|
||||
Map<String, String> getArguments();
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
fun <D : Any> Call<D>.testForEach() {
|
||||
arguments.forEach { key, value ->
|
||||
key.length
|
||||
value.length
|
||||
}
|
||||
arguments.forEach {
|
||||
it.key.length
|
||||
it.value.length
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
FILE: test.kt
|
||||
public final fun <D : R|kotlin/Any|> R|Call<D>|.testForEach(): R|kotlin/Unit| {
|
||||
this@R|/testForEach|.R|/Call.arguments|.R|FakeOverride<java/util/Map.forEach: R|kotlin/Unit|>|(<L> = forEach@fun <anonymous>(key: R|ft<kotlin/String, kotlin/String?>!|, value: R|ft<kotlin/String, kotlin/String?>!|): R|kotlin/Unit| {
|
||||
R|<local>/key|.R|kotlin/String.length|
|
||||
^ R|<local>/value|.R|kotlin/String.length|
|
||||
}
|
||||
)
|
||||
this@R|/testForEach|.R|/Call.arguments|.R|kotlin/collections/forEach|<R|ft<kotlin/String, kotlin/String?>!|, R|ft<kotlin/String, kotlin/String?>!|>(<L> = forEach@fun <anonymous>(it: R|kotlin/collections/Map.Entry<ft<kotlin/String, kotlin/String?>!, ft<kotlin/String, kotlin/String?>!>|): R|kotlin/Unit| <kind=UNKNOWN> {
|
||||
R|<local>/it|.R|FakeOverride<kotlin/collections/Map.Entry.key: R|ft<kotlin/String, kotlin/String?>!|>|.R|kotlin/String.length|
|
||||
^ R|<local>/it|.R|FakeOverride<kotlin/collections/Map.Entry.value: R|ft<kotlin/String, kotlin/String?>!|>|.R|kotlin/String.length|
|
||||
}
|
||||
)
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
// FULL_JDK
|
||||
fun foo(z: java.util.zip.ZipFile) {
|
||||
z.entries().asSequence()
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
FILE: capturedFlexible.kt
|
||||
public final fun foo(z: R|java/util/zip/ZipFile|): R|kotlin/Unit| {
|
||||
R|<local>/z|.R|java/util/zip/ZipFile.entries|().R|kotlin/sequences/asSequence|<R|CapturedType(out ft<java/util/zip/ZipEntry, java/util/zip/ZipEntry?>!)|>()
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
// FILE: BindingContext.java
|
||||
public interface BindingContext {
|
||||
@org.jetbrains.annotations.Nullable
|
||||
<K, V> V get(ReadOnlySlice<K, V> slice, K key);
|
||||
}
|
||||
|
||||
// FILE: ReadOnlySlice.java
|
||||
public interface ReadOnlySlice<K, V> {}
|
||||
|
||||
// FILE: Slices.java
|
||||
|
||||
public class Slices {
|
||||
public static ReadOnlySlice<String, Double> X = null;
|
||||
public static ReadOnlySlice<Integer, String> Y = null;
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
fun bar(bindingContext: BindingContext) {
|
||||
bindingContext[Slices.X, bindingContext[Slices.Y, 1]]
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
FILE: main.kt
|
||||
public final fun bar(bindingContext: R|BindingContext|): R|kotlin/Unit| {
|
||||
R|<local>/bindingContext|.R|/BindingContext.get|<R|ft<kotlin/String, kotlin/String?>!|, R|ft<kotlin/Double, kotlin/Double?>!|>(Q|Slices|.R|/Slices.X|, R|<local>/bindingContext|.R|/BindingContext.get|<R|ft<kotlin/Int, kotlin/Int?>!|, R|ft<kotlin/String, kotlin/String?>!|>(Q|Slices|.R|/Slices.Y|, Int(1)))
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
// FILE: A.java
|
||||
public class A {
|
||||
public String x = "";
|
||||
}
|
||||
|
||||
// FILE: B.java
|
||||
public class B extends A {
|
||||
public int x = 1;
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
fun main(b: B) {
|
||||
b.x + 1
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
FILE: main.kt
|
||||
public final fun main(b: R|B|): R|kotlin/Unit| {
|
||||
R|<local>/b|.R|/B.x|.R|kotlin/Int.plus|(Int(1))
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
// FULL_JDK
|
||||
// FILE: imm/Map.java
|
||||
package imm;
|
||||
public interface Map<K, V> {
|
||||
Option<V> get(k K);
|
||||
}
|
||||
|
||||
// FILE: imm/Set.java
|
||||
package imm;
|
||||
public interface Set<E> {
|
||||
}
|
||||
|
||||
// FILE: imm/Option.java
|
||||
package imm;
|
||||
public interface Option<T> {
|
||||
T getOrElse(T other);
|
||||
}
|
||||
|
||||
// FILE: imm/LinkedHashSet.java
|
||||
package imm;
|
||||
public class LinkedHashSet<E> extends Set<E> {
|
||||
public static <T> LinkedHashSet<T> empty() { return null; }
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
typealias ImmutableMap<K, V> = imm.Map<K, V>
|
||||
typealias ImmutableSet<E> = imm.Set<E>
|
||||
typealias ImmutableLinkedHashSet<E> = imm.LinkedHashSet<E>
|
||||
|
||||
private typealias ImmutableMultimap<K, V> = ImmutableMap<K, ImmutableSet<V>>
|
||||
|
||||
private fun <K, V> ImmutableMultimap<K, V>.put(key: K, value: V) {
|
||||
this[key].getOrElse(ImmutableLinkedHashSet.empty<V>())
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
FILE: main.kt
|
||||
public final typealias ImmutableMap<K, V> = R|imm/Map<K, V>|
|
||||
public final typealias ImmutableSet<E> = R|imm/Set<E>|
|
||||
public final typealias ImmutableLinkedHashSet<E> = R|imm/LinkedHashSet<E>|
|
||||
private final typealias ImmutableMultimap<K, V> = R|ImmutableMap<K, ImmutableSet<V>>|
|
||||
private final fun <K, V> R|ImmutableMultimap<K, V>|.put(key: R|K|, value: R|V|): R|kotlin/Unit| {
|
||||
this@R|/put|.R|FakeOverride<imm/Map.get: R|ft<imm/Option<ft<ImmutableSet<V>, ImmutableSet<V>?>!>, imm/Option<ft<ImmutableSet<V>, ImmutableSet<V>?>!>?>!|>|(R|<local>/key|).R|FakeOverride<imm/Option.getOrElse: R|ft<ImmutableSet<V>, ImmutableSet<V>?>!|>|(Q|ImmutableLinkedHashSet|.R|imm/LinkedHashSet.empty|<R|V|>())
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
// FULL_JDK
|
||||
|
||||
fun foo(x: MutableMap<String, List<String>>) {
|
||||
x.merge("", listOf("")) { a, b -> a + b }
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
FILE: mapMerge.kt
|
||||
public final fun foo(x: R|kotlin/collections/MutableMap<kotlin/String, kotlin/collections/List<kotlin/String>>|): R|kotlin/Unit| {
|
||||
R|<local>/x|.R|FakeOverride<java/util/Map.merge: R|kotlin/collections/List<kotlin/String>?|>|(String(), R|kotlin/collections/listOf|<R|kotlin/String|>(String()), <L> = merge@fun <anonymous>(a: R|ft<kotlin/collections/List<kotlin/String>, kotlin/collections/List<kotlin/String>?>!|, b: R|ft<kotlin/collections/List<kotlin/String>, kotlin/collections/List<kotlin/String>?>!|): R|ft<kotlin/collections/List<kotlin/String>, kotlin/collections/List<kotlin/String>?>!| {
|
||||
^ R|<local>/a|.R|kotlin/collections/plus|<R|kotlin/String|>(R|<local>/b|)
|
||||
}
|
||||
)
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
// FILE: K1.kt
|
||||
open class KotlinOuter {
|
||||
inner open class KotlinInner {
|
||||
fun foo() {}
|
||||
}
|
||||
|
||||
fun bar() {}
|
||||
}
|
||||
|
||||
// FILE: J1.java
|
||||
public class J1 extends KotlinOuter {
|
||||
public class J2 extends KotlinInner {
|
||||
public void bazbaz() {}
|
||||
}
|
||||
|
||||
public void baz() {}
|
||||
}
|
||||
|
||||
// FILE: K2.kt
|
||||
class K2: J1() {
|
||||
fun main() {
|
||||
bar()
|
||||
baz()
|
||||
}
|
||||
|
||||
inner class K3 : J2() {
|
||||
fun main() {
|
||||
foo()
|
||||
bazbaz()
|
||||
bar()
|
||||
baz()
|
||||
}
|
||||
}
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
FILE: K1.kt
|
||||
public open class KotlinOuter : R|kotlin/Any| {
|
||||
public constructor(): R|KotlinOuter| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public open inner class KotlinInner : R|kotlin/Any| {
|
||||
public constructor(): R|KotlinOuter.KotlinInner| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final fun foo(): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public final fun bar(): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
}
|
||||
FILE: K2.kt
|
||||
public final class K2 : R|J1| {
|
||||
public constructor(): R|K2| {
|
||||
super<R|J1|>()
|
||||
}
|
||||
|
||||
public final fun main(): R|kotlin/Unit| {
|
||||
this@R|/K2|.R|/KotlinOuter.bar|()
|
||||
this@R|/K2|.R|/J1.baz|()
|
||||
}
|
||||
|
||||
public final inner class K3 : R|J1.J2| {
|
||||
public constructor(): R|K2.K3| {
|
||||
super<R|J1.J2|>()
|
||||
}
|
||||
|
||||
public final fun main(): R|kotlin/Unit| {
|
||||
this@R|/K2.K3|.R|/KotlinOuter.KotlinInner.foo|()
|
||||
this@R|/K2.K3|.R|/J1.J2.bazbaz|()
|
||||
this@R|/K2|.R|/KotlinOuter.bar|()
|
||||
this@R|/K2|.R|/J1.baz|()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
import java.util.AbstractSet
|
||||
|
||||
class SmartSet<T> : AbstractSet<T>() {
|
||||
override var size: Int = 0
|
||||
override fun iterator(): MutableIterator<T> = TODO()
|
||||
override fun add(element: T): Boolean = true
|
||||
override fun clear() {}
|
||||
override fun contains(element: T): Boolean = false
|
||||
}
|
||||
|
||||
fun foo(x: Any) {
|
||||
val s = SmartSet<Any>()
|
||||
s.add(x)
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
FILE: smartSet.kt
|
||||
public final class SmartSet<T> : R|java/util/AbstractSet<T>| {
|
||||
public constructor<T>(): R|SmartSet<T>| {
|
||||
super<R|java/util/AbstractSet<T>|>()
|
||||
}
|
||||
|
||||
public final override var size: R|kotlin/Int| = Int(0)
|
||||
public get(): R|kotlin/Int|
|
||||
public set(value: R|kotlin/Int|): R|kotlin/Unit|
|
||||
|
||||
public final override fun iterator(): R|kotlin/collections/MutableIterator<T>| {
|
||||
^iterator R|kotlin/TODO|()
|
||||
}
|
||||
|
||||
public final override fun add(element: R|T|): R|kotlin/Boolean| {
|
||||
^add Boolean(true)
|
||||
}
|
||||
|
||||
public final override fun clear(): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
public final override fun contains(element: R|T|): R|kotlin/Boolean| {
|
||||
^contains Boolean(false)
|
||||
}
|
||||
|
||||
}
|
||||
public final fun foo(x: R|kotlin/Any|): R|kotlin/Unit| {
|
||||
lval s: R|SmartSet<kotlin/Any>| = R|/SmartSet.SmartSet|<R|kotlin/Any|>()
|
||||
R|<local>/s|.R|FakeOverride</SmartSet.add: R|kotlin/Boolean|>|(R|<local>/x|)
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
// FULL_JDK
|
||||
// FILE: U.java
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
public class U {
|
||||
|
||||
@NotNull
|
||||
public <T> T getValue(Box<@NotNull T> box) {}
|
||||
}
|
||||
|
||||
// FILE: Box.java
|
||||
|
||||
public class Box<T> {}
|
||||
|
||||
|
||||
// FILE: useSite.kt
|
||||
fun foo(holder: U, box: Box<Int>): Int {
|
||||
|
||||
return holder.getValue(box)
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
FILE: useSite.kt
|
||||
public final fun foo(holder: R|U|, box: R|Box<kotlin/Int>|): R|kotlin/Int| {
|
||||
^foo R|<local>/holder|.R|/U.getValue|<R|ft<kotlin/Int, kotlin/Int?>!|>(R|<local>/box|)
|
||||
}
|
||||
Reference in New Issue
Block a user