[FIR] Support captured type parameters in java symbol provider

This commit is contained in:
simon.ogorodnik
2020-04-09 19:02:23 +03:00
parent af27ca013b
commit 276c393141
9 changed files with 53 additions and 89 deletions
@@ -1,28 +0,0 @@
// !CHECK_TYPE
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER
// FILE: Outer.java
public class Outer<E> {
public class Inner<F> {
E foo() {}
F bar() {}
Outer<E> outer() {}
}
Inner<E> baz() { }
void set(Inner<String> x) {}
}
// FILE: main.kt
fun main() {
var outerStr: Outer<String> = Outer()
outerStr.baz().checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Outer<String>.Inner<String>>() }
val strInt: Outer<String>.Inner<Int> = outerStr.Inner()
strInt.foo().checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
strInt.bar().checkType { _<Int>() }
strInt.outer().checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Outer<String>>() }
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !CHECK_TYPE
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER
// FILE: Outer.java
@@ -1,35 +0,0 @@
// !CHECK_TYPE
// FILE: BaseOuter.java
// See KT-10285
public class BaseOuter<H> {
abstract public class BaseInner<E, F> {
public H foo1() {
return null;
}
public E foo2() {
return null;
}
public F foo3() {
return null;
}
}
}
// FILE: Outer.java
public class Outer<H> extends BaseOuter<H> {
public BaseInner<Double, String> bar() { return null; }
public class Inner extends BaseOuter<H>.BaseInner<Double, String> {}
}
// FILE: main.kt
fun foo(x1: Outer<Int>, x2: Outer<Int>.Inner) {
x1.bar().foo1().checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
x1.bar().foo2().checkType { _<Double>() }
x1.bar().foo3().checkType { _<String>() }
x2.foo1().checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
x2.foo2().checkType { _<Double>() }
x2.foo3().checkType { _<String>() }
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !CHECK_TYPE
// FILE: BaseOuter.java
// See KT-10285