Add diagnostics to test data from NI

This commit is contained in:
Mikhail Zarechenskiy
2017-11-22 08:50:30 +03:00
parent a71238bf94
commit 8757298994
480 changed files with 1136 additions and 1120 deletions
@@ -37,13 +37,13 @@ fun testInOut() {
Inv<Int>().f(1)
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<in Int>).f(1)
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<out Int>).<!MEMBER_PROJECTED_OUT!>f<!>(1) // !!
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<*>).<!MEMBER_PROJECTED_OUT!>f<!>(1) // !!
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<out Int>).<!OI;MEMBER_PROJECTED_OUT!>f<!>(<!NI;CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>) // !!
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<*>).<!OI;MEMBER_PROJECTED_OUT!>f<!>(<!NI;CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>) // !!
Inv<Int>().inf(1)
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<in Int>).inf(1)
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<out Int>).<!MEMBER_PROJECTED_OUT!>inf<!>(1) // !!
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<*>).<!MEMBER_PROJECTED_OUT!>inf<!>(1) // !!
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<out Int>).<!OI;MEMBER_PROJECTED_OUT!>inf<!>(<!NI;CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>) // !!
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<*>).<!OI;MEMBER_PROJECTED_OUT!>inf<!>(<!NI;CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>) // !!
Inv<Int>().outf()
checkSubtype<Int>(<!TYPE_MISMATCH!>(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<in Int>).outf()<!>) // Type mismatch
@@ -19,7 +19,7 @@ private class Outer<E> {
private var doubleStringInt = Outer<Double>().Inner<String>().foo<Int>()()
private fun bar() {
doubleCharSequenceInt = <!TYPE_MISMATCH!>doubleStringNumber<!>
doubleCharSequenceInt = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>doubleStringNumber<!>
doubleCharSequenceInt = doubleStringInt
doubleStringInt = Outer<Double>().Inner<String>().foo<Int>()()
@@ -15,7 +15,7 @@ class Q {
private var y = <!DEBUG_INFO_LEAKING_THIS!>foo<!><String>()()
fun bar() {
x = <!TYPE_MISMATCH!>y<!>
x = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>y<!>
x = foo<CharSequence>()()
y = foo<String>()()
@@ -13,7 +13,7 @@ class Q {
private var y = <!DEBUG_INFO_LEAKING_THIS!>foo<!><String>()
fun bar() {
x = <!TYPE_MISMATCH!>y<!>
x = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>y<!>
x = foo<CharSequence>()
y = foo<String>()
@@ -4,7 +4,7 @@ open class SuperOuter<E> {
}
class DerivedOuter<G> : SuperOuter<G>() {
inner class DerivedInner<H> : SuperOuter<G>.SuperInner<H>()
inner class DerivedInner<H> : SuperOuter<G>.<!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>SuperInner<!><H>()
}
fun bare(x: SuperOuter<*>.SuperInner<*>, y: Any?) {
@@ -45,7 +45,7 @@ fun test() {
x().foo().a() checkType { _<A<String, Double, Short, Long>>() }
x().bar() checkType { _<A<String, Double, Short, Char>>() }
x = <!TYPE_MISMATCH!>foobar<Int>()<!>
x = <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, TYPE_MISMATCH!>foobar<Int>()<!>
var y = noParameters()
y = noParameters()
@@ -46,8 +46,8 @@ class Outer<T> {
x().foo().a() checkType { _<A<T, F, String, Double, Short, Long>>() }
x().bar() checkType { _<A<T, F, String, Double, Short, Char>>() }
x = <!TYPE_MISMATCH!>foobar<Int>()<!>
x = <!TYPE_MISMATCH!>z.foobar<String>()<!>
x = <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, TYPE_MISMATCH!>foobar<Int>()<!>
x = <!TYPE_MISMATCH!>z.<!NI;TYPE_MISMATCH!>foobar<String>()<!><!>
var y = noParameters()
y = noParameters()
@@ -9,7 +9,7 @@ open class Outer<E> {
}
class DerivedOuter : Outer<String>() {
inner class DerivedInner : Inner<Int>() {
inner class DerivedInner : <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>Inner<!><Int>() {
fun foo(): Inner2<Char> = null!!
}
}
@@ -6,5 +6,5 @@ open class Super<T> {
class Sub : Super<String>() {
// TODO: it would be nice to have a possibility to omit explicit type argument in supertype
inner class SubInner : Super<String>.Inner() {}
inner class SubInner : Super<String>.<!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>Inner<!>() {}
}
@@ -7,7 +7,7 @@ open class Super<T> {
class Sub : Super<String>() {
inner class SubInner : Super<String>.Inner {
constructor()
constructor(x: Int) : super() {}
constructor()<!NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!><!>
constructor(x: Int) : <!NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>super<!>() {}
}
}
@@ -32,7 +32,7 @@ fun main() {
checkSubtype<Outer<*>.Inner<*>>(outer.Inner<Int>())
checkSubtype<Outer<CharSequence>.Inner<CharSequence>>(<!TYPE_MISMATCH!>outer.bar()<!>)
checkSubtype<Outer<CharSequence>.Inner<CharSequence>>(outer.<!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>Inner()<!>)
checkSubtype<Outer<CharSequence>.Inner<CharSequence>>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>outer.<!OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>Inner()<!><!>)
outer.set(outer.bar())
outer.set(outer.Inner())
@@ -15,7 +15,7 @@ class Outer<E> {
if (y is <!NO_TYPE_ARGUMENTS_ON_RHS!>Inner<!>) return
if (z is Inner) {
<!DEBUG_INFO_SMARTCAST!>z<!>.prop.checkType { _<Any?>() }
<!OI;DEBUG_INFO_SMARTCAST!>z<!>.prop.checkType { _<Any?>() }
return
}
@@ -29,9 +29,9 @@ fun <E> commonSupertype(x: E, y: E): E = x
fun foo() {
var myIt = A<String>().iterator()
myIt = <!TYPE_MISMATCH!>A<Int>().iterator()<!>
myIt = <!TYPE_MISMATCH!>A<Int>().<!NI;TYPE_MISMATCH!>iterator()<!><!>
val csIt: Iterator<CharSequence> = A<String>().iterator()
commonSupertype(A<String>().iterator(), A<Int>().iterator()).checkType { _<A<out Any>.MyIt>() }
commonSupertype(A<String>().iterator(), A<Int>().iterator()).checkType { <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><A<out Any>.MyIt>() }
}
@@ -8,7 +8,7 @@ open class Super<T> {
}
class Sub<T1>(): Super<T1>() {
inner class SubInner : Super<T1>.Inner() { // 'Inner' is unresolved
inner class SubInner : Super<T1>.<!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>Inner<!>() { // 'Inner' is unresolved
// Also, T1 is not resolved to anything, and not marked as resolved
init {
val x: Super<T1>.Inner = this // T1 is not resolved to anything
@@ -6,12 +6,12 @@ class Outer<T> {
inner class Inner
fun foo(x: Outer<String>.Inner, y: <!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Outer<!>.Inner, z: Inner) {
var inner = Inner()
x.checkType { <!TYPE_MISMATCH!>_<!><Inner>() }
x.checkType { <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER, OI;TYPE_MISMATCH!>_<!><Inner>() }
x.checkType { _<Outer<String>.Inner>() }
z.checkType { _<Inner>() }
z.checkType { _<Outer<T>.Inner>() }
inner = <!TYPE_MISMATCH!>x<!>
inner = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!>
}
class Nested
@@ -29,9 +29,9 @@ fun main() {
checkSubtype<Outer<out CharSequence>.Inner>(outer.bar())
checkSubtype<Outer<out CharSequence>.Inner>(outer.Inner())
outer.<!MEMBER_PROJECTED_OUT!>set<!>(outer.bar())
outer.<!MEMBER_PROJECTED_OUT!>set<!>(outer.Inner())
outer.<!OI;MEMBER_PROJECTED_OUT!>set<!>(<!NI;TYPE_MISMATCH!>outer.bar()<!>)
outer.<!OI;MEMBER_PROJECTED_OUT!>set<!>(<!NI;TYPE_MISMATCH!>outer.Inner()<!>)
val x: Outer<String>.Inner = factoryString()
outer.<!MEMBER_PROJECTED_OUT!>set<!>(x)
outer.<!OI;MEMBER_PROJECTED_OUT!>set<!>(<!NI;TYPE_MISMATCH!>x<!>)
}
+1 -1
View File
@@ -6,7 +6,7 @@ abstract class A<T> {
public abstract fun bar(x: T)
public inner abstract class B<S> : A<B<S>>() {
public inner <!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class C<!><U> : B<C<U>>()
public inner <!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class C<!><U> : <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>B<!><C<U>>()
{
// Here B<C<U>> means A<A<A<T>.B<S>>.B<A<T>.B<S>.C<U>>>.B<A<A<T>.B<S>>.B<A<T>.B<S>.C<U>>.C<U>>
// while for being a correct override it should be A<A<T>.B<S>>.B<A<T>.B<S>.C<U>>
@@ -9,6 +9,6 @@ interface B: A
fun <T> test(x: T) where T : C?, T : B? {
x?.foo()
if (x != null) {
<!DEBUG_INFO_SMARTCAST!>x<!>.foo()
<!OI;DEBUG_INFO_SMARTCAST!>x<!><!NI;UNSAFE_CALL!>.<!>foo()
}
}
@@ -7,13 +7,13 @@ fun <E : CharSequence> foo1(x: E) {}
fun <E : CharSequence> E.foo2() {}
fun <F : String?> bar(x: F) {
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>A<!>(x)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>A<!>(<!NI;TYPE_MISMATCH!>x<!>)
A<<!UPPER_BOUND_VIOLATED!>F<!>>(x)
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo1<!>(x)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo1<!>(<!NI;TYPE_MISMATCH!>x<!>)
foo1<<!UPPER_BOUND_VIOLATED!>F<!>>(x)
x.<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo2<!>()
x<!NI;UNSAFE_CALL!>.<!><!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo2<!>()
x.foo2<<!UPPER_BOUND_VIOLATED!>F<!>>()
}
@@ -1,14 +1,14 @@
// !WITH_NEW_INFERENCE
fun <E : String?, T : ((CharSequence) -> Unit)?> foo(x: E, y: T) {
if (x != null) {
<!UNSAFE_IMPLICIT_INVOKE_CALL!>y<!>(<!DEBUG_INFO_SMARTCAST!>x<!>)
<!NI;UNSAFE_CALL, OI;UNSAFE_IMPLICIT_INVOKE_CALL!>y<!>(<!NI;TYPE_MISMATCH, DEBUG_INFO_SMARTCAST!>x<!>)
}
if (y != null) {
<!DEBUG_INFO_SMARTCAST!>y<!>(<!TYPE_MISMATCH!>x<!>)
<!NI;UNSAFE_CALL, OI;DEBUG_INFO_SMARTCAST!>y<!>(<!TYPE_MISMATCH!>x<!>)
}
if (x != null && y != null) {
<!DEBUG_INFO_SMARTCAST!>y<!>(<!DEBUG_INFO_SMARTCAST!>x<!>)
<!NI;UNSAFE_CALL, OI;DEBUG_INFO_SMARTCAST!>y<!>(<!NI;TYPE_MISMATCH, DEBUG_INFO_SMARTCAST!>x<!>)
}
}
@@ -12,13 +12,13 @@ fun <T : CharSequence?> foo(x: T) {
if (x != null) {
if (<!SENSELESS_COMPARISON!>x != null<!>) {}
<!DEBUG_INFO_SMARTCAST!>x<!>.length
<!OI;DEBUG_INFO_SMARTCAST!>x<!><!NI;UNSAFE_CALL!>.<!>length
x<!UNNECESSARY_SAFE_CALL!>?.<!>length
x.bar1()
x.bar2()
x.<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar3<!>()
<!DEBUG_INFO_SMARTCAST!>x<!>.bar4()
x<!NI;UNSAFE_CALL!>.<!><!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar3<!>()
<!OI;DEBUG_INFO_SMARTCAST!>x<!><!NI;UNSAFE_CALL!>.<!>bar4()
x<!UNNECESSARY_SAFE_CALL!>?.<!>bar1()
@@ -32,14 +32,14 @@ fun <T : CharSequence?> foo(x: T) {
x.bar1()
x.bar2()
<!DEBUG_INFO_SMARTCAST!>x<!>.bar3()
<!OI;DEBUG_INFO_SMARTCAST!>x<!>.bar3()
}
if (x is CharSequence) {
<!DEBUG_INFO_SMARTCAST!>x<!>.length
x<!UNNECESSARY_SAFE_CALL!>?.<!>length
x.bar1()
<!NI;DEBUG_INFO_SMARTCAST!>x<!>.bar1()
x.bar2()
<!DEBUG_INFO_SMARTCAST!>x<!>.bar3()
}
@@ -11,13 +11,13 @@ fun <T : String?> T.foo() {
if (this != null) {
if (<!SENSELESS_COMPARISON!>this != null<!>) {}
length
<!NI;UNSAFE_CALL!>length<!>
this<!UNNECESSARY_SAFE_CALL!>?.<!>length
bar1()
bar2()
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar3<!>()
bar4()
<!NI;UNSAFE_CALL, OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar3<!>()
<!NI;UNSAFE_CALL!>bar4<!>()
this<!UNNECESSARY_SAFE_CALL!>?.<!>bar1()
@@ -31,6 +31,6 @@ fun <T : String?> T.foo() {
bar1()
bar2()
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar3<!>()
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar3<!>()
}
}
@@ -11,12 +11,12 @@ fun <T : CharSequence?> foo(x: T) {
if (x != null) {
if (<!SENSELESS_COMPARISON!>x != null<!>) {}
y1 = <!DEBUG_INFO_SMARTCAST!>x<!>
y2 = <!TYPE_MISMATCH!>x<!>
y1 = <!NI;TYPE_MISMATCH, DEBUG_INFO_SMARTCAST!>x<!>
y2 = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!>
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar1<!>(x)
bar1<CharSequence>(<!DEBUG_INFO_SMARTCAST!>x<!>)
bar2(<!DEBUG_INFO_SMARTCAST!>x<!>)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar1<!>(<!NI;TYPE_MISMATCH!>x<!>)
bar1<CharSequence>(<!NI;TYPE_MISMATCH, DEBUG_INFO_SMARTCAST!>x<!>)
bar2(<!NI;TYPE_MISMATCH, DEBUG_INFO_SMARTCAST!>x<!>)
bar3(<!TYPE_MISMATCH!>x<!>)
}
@@ -24,14 +24,14 @@ fun <T : CharSequence?> foo(x: T) {
y1 = <!DEBUG_INFO_SMARTCAST!>x<!>
y2 = <!DEBUG_INFO_SMARTCAST!>x<!>
bar1(<!DEBUG_INFO_SMARTCAST!>x<!>)
bar1(<!OI;DEBUG_INFO_SMARTCAST!>x<!>)
bar2(<!DEBUG_INFO_SMARTCAST!>x<!>)
bar3(<!DEBUG_INFO_SMARTCAST!>x<!>)
}
if (x is CharSequence) {
y1 = <!DEBUG_INFO_SMARTCAST!>x<!>
y2 = <!TYPE_MISMATCH!>x<!>
y2 = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!>
bar1(<!DEBUG_INFO_SMARTCAST!>x<!>)
bar2(<!DEBUG_INFO_SMARTCAST!>x<!>)
@@ -40,13 +40,13 @@ fun <T : CharSequence?> foo(x: T) {
if (1 == 1) {
val y = x!!
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar1<!>(x)
bar1<CharSequence>(<!DEBUG_INFO_SMARTCAST!>x<!>)
bar2(<!DEBUG_INFO_SMARTCAST!>x<!>)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar1<!>(<!NI;TYPE_MISMATCH!>x<!>)
bar1<CharSequence>(<!NI;TYPE_MISMATCH, DEBUG_INFO_SMARTCAST!>x<!>)
bar2(<!NI;TYPE_MISMATCH, DEBUG_INFO_SMARTCAST!>x<!>)
bar3(<!TYPE_MISMATCH!>x<!>)
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar1<!>(y)
bar2(<!DEBUG_INFO_SMARTCAST!>y<!>)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar1<!>(y)
bar2(<!OI;DEBUG_INFO_SMARTCAST!>y<!>)
bar3(<!TYPE_MISMATCH!>y<!>)
}
}
@@ -18,7 +18,7 @@ class A<F> {
x2.checkType { _<F>() }
foo1<<!UPPER_BOUND_VIOLATED!>F?<!>>(y)
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo1<!>(y)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo1<!>(<!NI;TYPE_MISMATCH!>y<!>)
foo2<F?>(y)
val x3 = foo2(y)
@@ -38,7 +38,7 @@ class A<F> {
x4.checkType { _<Z>() }
foo1<<!UPPER_BOUND_VIOLATED!>W<!>>(w)
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo1<!>(w)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo1<!>(<!NI;TYPE_MISMATCH!>w<!>)
foo2<W>(w)
val x6 = foo2(w)
@@ -18,9 +18,9 @@ class A<F> {
fun <Z : F, W : Z?> bar() {
// F
fooInv1<Inv<F>>(Inv<F>())
fooInv2<<!UPPER_BOUND_VIOLATED!>Inv<F><!>>(Inv<F>())
fooInv2<<!UPPER_BOUND_VIOLATED!>Inv<F><!>>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Inv<F>()<!>)
fooInv1(Inv<F>())
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooInv2<!>(Inv<F>())
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooInv2<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Inv<F>()<!>)
fooIn1<In<F?>>(In<F?>())
fooIn2<In<F?>>(In<F?>())
@@ -33,15 +33,15 @@ class A<F> {
fooOut2(Out<F>())
// Z
fooInv1<<!UPPER_BOUND_VIOLATED!>Inv<Z><!>>(Inv<Z>())
fooInv2<<!UPPER_BOUND_VIOLATED!>Inv<Z><!>>(Inv<Z>())
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooInv1<!>(Inv<Z>())
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooInv2<!>(Inv<Z>())
fooInv1<<!UPPER_BOUND_VIOLATED!>Inv<Z><!>>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Inv<Z>()<!>)
fooInv2<<!UPPER_BOUND_VIOLATED!>Inv<Z><!>>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Inv<Z>()<!>)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooInv1<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Inv<Z>()<!>)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooInv2<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Inv<Z>()<!>)
fooIn1<<!UPPER_BOUND_VIOLATED!>In<Z?><!>>(In<Z?>())
fooIn2<<!UPPER_BOUND_VIOLATED!>In<Z?><!>>(In<Z?>())
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooIn1<!>(In<Z?>())
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooIn2<!>(In<Z?>())
fooIn1<<!UPPER_BOUND_VIOLATED!>In<Z?><!>>(<!NI;TYPE_MISMATCH!>In<Z?>()<!>)
fooIn2<<!UPPER_BOUND_VIOLATED!>In<Z?><!>>(<!NI;TYPE_MISMATCH!>In<Z?>()<!>)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooIn1<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>In<Z?>()<!>)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooIn2<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>In<Z?>()<!>)
fooOut1<Out<Z>>(Out<Z>())
fooOut2<Out<Z>>(Out<Z>())
@@ -49,19 +49,19 @@ class A<F> {
fooOut2(Out<Z>())
// W
fooInv1<<!UPPER_BOUND_VIOLATED!>Inv<W><!>>(Inv<W>())
fooInv2<<!UPPER_BOUND_VIOLATED!>Inv<W><!>>(Inv<W>())
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooInv1<!>(Inv<W>())
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooInv2<!>(Inv<W>())
fooInv1<<!UPPER_BOUND_VIOLATED!>Inv<W><!>>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Inv<W>()<!>)
fooInv2<<!UPPER_BOUND_VIOLATED!>Inv<W><!>>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Inv<W>()<!>)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooInv1<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Inv<W>()<!>)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooInv2<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Inv<W>()<!>)
fooIn1<<!UPPER_BOUND_VIOLATED!>In<W?><!>>(In<W?>())
fooIn2<<!UPPER_BOUND_VIOLATED!>In<W?><!>>(In<W?>())
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooIn1<!>(In<W?>())
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooIn2<!>(In<W?>())
fooIn1<<!UPPER_BOUND_VIOLATED!>In<W?><!>>(<!NI;TYPE_MISMATCH!>In<W?>()<!>)
fooIn2<<!UPPER_BOUND_VIOLATED!>In<W?><!>>(<!NI;TYPE_MISMATCH!>In<W?>()<!>)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooIn1<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>In<W?>()<!>)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooIn2<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>In<W?>()<!>)
fooOut1<<!UPPER_BOUND_VIOLATED!>Out<W><!>>(Out<W>())
fooOut1<<!UPPER_BOUND_VIOLATED!>Out<W><!>>(<!NI;TYPE_MISMATCH!>Out<W>()<!>)
fooOut2<Out<W>>(Out<W>())
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooOut1<!>(Out<W>())
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>fooOut1<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Out<W>()<!>)
fooOut2(Out<W>())
}
}
@@ -24,13 +24,13 @@ class A<T : CharSequence?, E1 : T, E2: T?> {
}
if (1 == 1) {
t = <!TYPE_MISMATCH!>tN<!>
t = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>tN<!>
}
t = <!TYPE_MISMATCH!>y<!>
t = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>y<!>
if (y != null) {
t = <!DEBUG_INFO_SMARTCAST!>y<!>
t = <!NI;TYPE_MISMATCH, DEBUG_INFO_SMARTCAST!>y<!>
}
if (tN != null) {
@@ -21,7 +21,7 @@ fun <T : String?> foo(x: T) {
x?.bar1()
x?.bar2()
x.<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar3<!>()
x<!NI;UNSAFE_CALL!>.<!><!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar3<!>()
x?.let { it<!UNSAFE_CALL!>.<!>length }
}
@@ -13,6 +13,6 @@ fun <T : String?> foo(x: T) {
bar1(x)
bar2(x)
<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar3<!>(x)
<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>bar3<!>(<!NI;TYPE_MISMATCH!>x<!>)
bar4(<!TYPE_MISMATCH!>x<!>)
}
@@ -15,18 +15,18 @@ fun <T> mc(): MC<T> = null!!
fun <T> c(): C<T> = null!!
fun foo(x: MC<out Open>) {
x.addAll(<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS(C<Nothing>; MC<out Open>; MC<out Open>; public abstract fun addAll\(x: C<T>\): Boolean defined in MC)!>x<!>)
x.addAllMC(<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS(MC<Nothing>; MC<out Open>; MC<out Open>; public abstract fun addAllMC\(x: MC<out T>\): Boolean defined in MC)!>x<!>)
x.addAll(<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>x<!>)
x.addAllMC(<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>x<!>)
x.addAll(<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS(C<Nothing>; MC<Open>; MC<out Open>; public abstract fun addAll\(x: C<T>\): Boolean defined in MC)!>mc<Open>()<!>)
x.addAllMC(<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS(MC<Nothing>; MC<Open>; MC<out Open>; public abstract fun addAllMC\(x: MC<out T>\): Boolean defined in MC)!>mc<Open>()<!>)
x.addAll(<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>mc<Open>()<!>)
x.addAllMC(<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>mc<Open>()<!>)
x.addAll(<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS(C<Nothing>; MC<Derived>; MC<out Open>; public abstract fun addAll\(x: C<T>\): Boolean defined in MC)!>mc<Derived>()<!>)
x.addAllMC(<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS(MC<Nothing>; MC<Derived>; MC<out Open>; public abstract fun addAllMC\(x: MC<out T>\): Boolean defined in MC)!>mc<Derived>()<!>)
x.addAll(<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>mc<Derived>()<!>)
x.addAllMC(<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>mc<Derived>()<!>)
x.addAll(c())
x.addAll(c<Nothing>())
x.<!MEMBER_PROJECTED_OUT!>addAllInv<!>(mc<Open>())
x.<!OI;MEMBER_PROJECTED_OUT!>addAllInv<!>(<!NI;TYPE_MISMATCH!>mc<Open>()<!>)
x.addAll(<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>)
}
@@ -8,11 +8,11 @@ class Out<out E>
fun test(x: A<out CharSequence>, y: Out<CharSequence>) {
with(x) {
// TODO: this diagnostic could be replaced with TYPE_MISMATCH_DUE_TO_TYPE_PROJECTION
"".<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!>()
<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>y<!>.bar()
"".<!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!>()
<!OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>y<!>.<!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>bar<!>()
with(y) {
<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>bar<!>()
<!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>bar<!>()
}
}
}
@@ -5,5 +5,5 @@ interface B<E> {
}
fun foo(x: B<in CharSequence>, y: A<CharSequence>) {
x.foo(<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>y<!>)
x.foo(<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>y<!>)
}
@@ -9,7 +9,7 @@ fun main(args : Array<String>) {
val a : ArrayList<ArrayList<String>> = ArrayList()
val b : ListOfLists<String> = ListOfLists(a)
val c : ListOfLists<*> = b
val d : ArrayList<ArrayList<*>> = <!TYPE_MISMATCH!>c.x<!>
val d : ArrayList<ArrayList<*>> = <!TYPE_MISMATCH!>c.<!NI;TYPE_MISMATCH!>x<!><!>
c.x checkType { _<ArrayList<out ArrayList<*>>>() }
}
@@ -6,5 +6,5 @@ class A<T> {
}
fun test(a: A<out CharSequence>) {
a.<!MEMBER_PROJECTED_OUT!>foo<!>("", "")
a.<!OI;MEMBER_PROJECTED_OUT!>foo<!>(<!NI;TYPE_MISMATCH!>""<!>, <!NI;TYPE_MISMATCH!>""<!>)
}
@@ -10,10 +10,10 @@ public class Clazz<T> {
// FILE: main.kt
fun test(clazz: Clazz<*>) {
clazz.t checkType { _<Any?>() }
clazz.getSuperClass() checkType { _<Clazz<*>?>() }
clazz.getSuperClass() checkType { <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Clazz<*>?>() }
clazz.getSuperClass().t checkType { _<Any?>() }
clazz.superClass checkType { _<Clazz<*>?>() }
clazz.superClass checkType { <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Clazz<*>?>() }
clazz.superClass.t checkType { _<Any?>() }
// See KT-9294
@@ -8,7 +8,7 @@ class A<T> {
}
fun test(a: A<out CharSequence>) {
a <!MEMBER_PROJECTED_OUT(public final operator fun plus\(x: T\): A<T> defined in A; A<out CharSequence>)!>+<!> ""
<!MEMBER_PROJECTED_OUT(public final operator fun set\(x: Int, y: T\): Unit defined in A; A<out CharSequence>)!>a[1]<!> = ""
<!MEMBER_PROJECTED_OUT(public final operator fun get\(x: T\): Int defined in A; A<out CharSequence>)!>a[""]<!>
a <!OI;MEMBER_PROJECTED_OUT!>+<!> <!NI;TYPE_MISMATCH!>""<!>
<!OI;MEMBER_PROJECTED_OUT!>a[1]<!> = <!NI;TYPE_MISMATCH!>""<!>
<!OI;MEMBER_PROJECTED_OUT!>a[<!NI;TYPE_MISMATCH!>""<!>]<!>
}
@@ -6,18 +6,18 @@ class C<R> {
}
fun foo(x: Any?, y: C<*>) {
y.<!MEMBER_PROJECTED_OUT!>bindTo<!>("")
y.<!OI;MEMBER_PROJECTED_OUT!>bindTo<!>(<!NI;TYPE_MISMATCH!>""<!>)
if (x is C<*>) {
<!DEBUG_INFO_SMARTCAST!>x<!>.<!MEMBER_PROJECTED_OUT!>bindTo<!>("")
<!DEBUG_INFO_SMARTCAST!>x<!>.<!OI;MEMBER_PROJECTED_OUT!>bindTo<!>(<!NI;TYPE_MISMATCH!>""<!>)
with(<!DEBUG_INFO_SMARTCAST!>x<!>) {
<!MEMBER_PROJECTED_OUT!>bindTo<!>("")
<!OI;MEMBER_PROJECTED_OUT!>bindTo<!>(<!NI;TYPE_MISMATCH!>""<!>)
}
}
with(x) {
if (this is C<*>) {
<!MEMBER_PROJECTED_OUT, DEBUG_INFO_IMPLICIT_RECEIVER_SMARTCAST!>bindTo<!>("")
<!OI;MEMBER_PROJECTED_OUT, DEBUG_INFO_IMPLICIT_RECEIVER_SMARTCAST!>bindTo<!>(<!NI;TYPE_MISMATCH!>""<!>)
}
}
}
@@ -5,5 +5,5 @@ interface A<T : A<T?>?> {
fun foo(): T?
}
fun testA(a: A<*>) {
a.foo() checkType { _<A<*>?>() }
a.foo() checkType { <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><A<*>?>() }
}
@@ -10,9 +10,9 @@ class A<T> {
class Out<out F>
fun test(a: A<out CharSequence>, y: Out<CharSequence>) {
a + <!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>y<!>
a[1] = <!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>y<!>
a[<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>y<!>]
a + <!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>y<!>
a[1] = <!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>y<!>
a[<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>y<!>]
a + Out<Nothing>()
a[1] = Out<Nothing>()
@@ -14,14 +14,14 @@ class A<E> {
fun test(a: A<out CharSequence>, z: Out<CharSequence>) {
a.foo {
val x: String = <!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!> // Should be no TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS
<!TYPE_MISMATCH!>""<!>
<!NI;TYPE_MISMATCH, TYPE_MISMATCH!>""<!>
}
a.bar { <!TYPE_MISMATCH!>Out<CharSequence>()<!> }
a.bar { <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, TYPE_MISMATCH!>Out<CharSequence>()<!> }
a.bar { Out() }
a.bar { <!TYPE_MISMATCH!>z.id()<!> }
a.bar { <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, TYPE_MISMATCH!>z.<!NI;TYPE_MISMATCH!>id()<!><!> }
a.foo {
z.foobar(if (1 > 2) return@foo <!TYPE_MISMATCH!>""<!> else "")
<!TYPE_MISMATCH!>""<!>
<!NI;TYPE_MISMATCH, TYPE_MISMATCH!>""<!>
}
}
@@ -13,15 +13,15 @@ class A<T> {
}
fun foo2(a: A<out CharSequence>, b: A<in CharSequence>) {
a.<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo1<!>(Out<CharSequence>())
a.<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo1<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Out<CharSequence>()<!>)
a.foo1<<!UPPER_BOUND_VIOLATED!>Out<CharSequence><!>>(Out())
a.foo1(Out())
a.foo1(Out<Nothing>())
a.<!TYPE_INFERENCE_INCORPORATION_ERROR!>foo2<!>(<!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Inv<!>())
a.<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo2<!>(Inv<CharSequence>())
a.foo2<<!UPPER_BOUND_VIOLATED!>Inv<CharSequence><!>>(Inv())
a.<!OI;TYPE_INFERENCE_INCORPORATION_ERROR!>foo2<!>(<!OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Inv<!>())
a.<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo2<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Inv<CharSequence>()<!>)
a.foo2<<!UPPER_BOUND_VIOLATED!>Inv<CharSequence><!>>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Inv()<!>)
a.foo3(In())
a.foo3(In<CharSequence>())
@@ -31,12 +31,12 @@ fun foo2(a: A<out CharSequence>, b: A<in CharSequence>) {
b.foo1(Out<CharSequence>())
b.foo1<Out<CharSequence>>(Out())
b.<!TYPE_INFERENCE_INCORPORATION_ERROR!>foo2<!>(<!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Inv<!>())
b.<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo2<!>(Inv<CharSequence>())
b.foo2<<!UPPER_BOUND_VIOLATED!>Inv<CharSequence><!>>(Inv())
b.<!OI;TYPE_INFERENCE_INCORPORATION_ERROR!>foo2<!>(<!OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Inv<!>())
b.<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo2<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Inv<CharSequence>()<!>)
b.foo2<<!UPPER_BOUND_VIOLATED!>Inv<CharSequence><!>>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Inv()<!>)
b.<!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo3<!>(In<CharSequence>())
b.<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo3<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>In<CharSequence>()<!>)
b.foo3<<!UPPER_BOUND_VIOLATED!>In<CharSequence><!>>(In())
b.foo3(In<Any?>())
@@ -5,6 +5,6 @@ interface A<out K> {
}
fun test(a: A<*>) {
a.foo(null)
a.foo(Any())
a.foo(<!NI;NULL_FOR_NONNULL_TYPE!>null<!>)
a.foo(<!NI;TYPE_MISMATCH!>Any()<!>)
}
@@ -6,8 +6,8 @@ class A<T> {
}
fun test(a: A<out CharSequence>, y: Array<out CharSequence>) {
a.<!MEMBER_PROJECTED_OUT!>foo<!>("", "", "")
a.foo(*<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>y<!>)
a.<!OI;MEMBER_PROJECTED_OUT!>foo<!>(<!NI;TYPE_MISMATCH!>""<!>, <!NI;TYPE_MISMATCH!>""<!>, <!NI;TYPE_MISMATCH!>""<!>)
a.foo(*<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>y<!>)
// TODO: TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS probably redundant
a.<!MEMBER_PROJECTED_OUT!>foo<!>(*<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>y<!>, "")
a.<!OI;MEMBER_PROJECTED_OUT!>foo<!>(*<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>y<!>, <!NI;TYPE_MISMATCH!>""<!>)
}
@@ -13,11 +13,11 @@ class Inv2<<!FINITE_BOUNDS_VIOLATION!>T : Inv2<in T><!>>(val x: T)
fun main(a: A<*>, j: JavaClass<*>, i2: Inv2<*>) {
// Probably it's too restrictive to suppose star projection type here as Any?,
// but looks like we can refine it later
a.foo() checkType { _<Any?>() }
j.foo() checkType { _<Any?>() }
i2.x checkType { _<Any?>() }
a.foo() checkType { <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any?>() }
j.foo() checkType { <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any?>() }
i2.x checkType { <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any?>() }
j.<!MEMBER_PROJECTED_OUT!>bar<!>(1, 2, Any())
j.<!OI;MEMBER_PROJECTED_OUT!>bar<!>(<!NI;CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>, <!NI;CONSTANT_EXPECTED_TYPE_MISMATCH!>2<!>, <!NI;TYPE_MISMATCH!>Any()<!>)
}
// FILE: JavaClass.java
@@ -5,5 +5,5 @@ class A<F>
inline fun <reified T> foo(x: A<T>) {}
fun test(x: A<out CharSequence>) {
<!REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>foo<!>(x)
<!OI;REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>foo<!>(x)
}
@@ -4,7 +4,7 @@ class C<<!REIFIED_TYPE_PARAMETER_NO_INLINE!>reified<!> T>
fun <T> id(p: T): T = p
fun <A> main() {
<!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>C<!>()
<!OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>C<!>()
val <!UNUSED_VARIABLE!>a<!>: C<A> = <!TYPE_PARAMETER_AS_REIFIED!>C<!>()
C<<!TYPE_PARAMETER_AS_REIFIED!>A<!>>()
@@ -6,13 +6,13 @@ inline fun <reified T> f(): T = throw UnsupportedOperationException()
fun <T> id(p: T): T = p
fun <A> main() {
<!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>f<!>()
<!NI;REIFIED_TYPE_FORBIDDEN_SUBSTITUTION, OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>f<!>()
val <!UNUSED_VARIABLE!>a<!>: A = <!TYPE_PARAMETER_AS_REIFIED!>f<!>()
f<<!TYPE_PARAMETER_AS_REIFIED!>A<!>>()
<!NI;UNREACHABLE_CODE!>val <!OI;UNUSED_VARIABLE!>a<!>: A = <!TYPE_PARAMETER_AS_REIFIED!>f<!>()<!>
<!NI;UNREACHABLE_CODE!>f<<!TYPE_PARAMETER_AS_REIFIED!>A<!>>()<!>
val <!UNUSED_VARIABLE!>b<!>: Int = f()
f<Int>()
<!NI;UNREACHABLE_CODE!>val <!OI;UNUSED_VARIABLE!>b<!>: Int = f()<!>
<!NI;UNREACHABLE_CODE!>f<Int>()<!>
val <!UNUSED_VARIABLE!>с<!>: A = id(<!TYPE_PARAMETER_AS_REIFIED!>f<!>())
<!NI;UNREACHABLE_CODE!>val <!OI;UNUSED_VARIABLE!>с<!>: A = id(<!TYPE_PARAMETER_AS_REIFIED!>f<!>())<!>
}
@@ -1,9 +1,10 @@
// !CHECK_TYPE
// !WITH_NEW_INFERENCE
interface Tr<T> {
var v: Tr<T>
}
fun test(t: Tr<*>) {
<!SETTER_PROJECTED_OUT!>t.v<!> = t
<!OI;SETTER_PROJECTED_OUT!>t.v<!> = t
t.v checkType { _<Tr<*>>() }
}
@@ -1,5 +1,6 @@
// !DIAGNOSTICS: -UNREACHABLE_CODE -UNUSED_PARAMETER
// !CHECK_TYPE
// !WITH_NEW_INFERENCE
// t is unused due to KT-4233
interface Tr<T> {
var v: T
@@ -7,7 +8,7 @@ interface Tr<T> {
fun test(t: Tr<*>) {
t.v = null!!
<!SETTER_PROJECTED_OUT!>t.v<!> = ""
<!SETTER_PROJECTED_OUT!>t.v<!> = null
<!OI;SETTER_PROJECTED_OUT!>t.v<!> = ""
<!OI;SETTER_PROJECTED_OUT!>t.v<!> = null
t.v checkType { _<Any?>() }
}
@@ -1,4 +1,5 @@
// !DIAGNOSTICS: -UNREACHABLE_CODE
// !WITH_NEW_INFERENCE
interface Tr<T> {
var v: T
}
@@ -6,5 +7,5 @@ interface Tr<T> {
fun test(t: Tr<out String>) {
// resolved as t.v = t.v + null!!, where type of right operand is String,
// so TYPE_MISMATCH: String is not <: of Captured(out String)
<!SETTER_PROJECTED_OUT!>t.v<!> += null!!
<!OI;SETTER_PROJECTED_OUT!>t.v<!> += null!!
}
@@ -5,12 +5,12 @@ fun myFun(i : String) {}
fun myFun(i : Int) {}
fun test1() {
myFun<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!><Int><!>(3)
<!NI;NONE_APPLICABLE!>myFun<!><!OI;WRONG_NUMBER_OF_TYPE_ARGUMENTS!><Int><!>(3)
<!NONE_APPLICABLE!>myFun<!><String>('a')
}
fun test2() {
val m0 = java.util.<!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>HashMap<!>()
val m1 = java.util.HashMap<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!><String, String, String><!>()
val m2 = java.util.HashMap<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!><String><!>()
val m0 = java.util.<!OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>HashMap<!>()
val m1 = java.util.<!NI;NONE_APPLICABLE!>HashMap<!><!OI;WRONG_NUMBER_OF_TYPE_ARGUMENTS!><String, String, String><!>()
val m2 = java.util.<!NI;NONE_APPLICABLE!>HashMap<!><!OI;WRONG_NUMBER_OF_TYPE_ARGUMENTS!><String><!>()
}