Add diagnostics to test data from NI
This commit is contained in:
@@ -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
|
||||
|
||||
+1
-1
@@ -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>()()
|
||||
|
||||
+1
-1
@@ -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>()()
|
||||
|
||||
|
||||
+1
-1
@@ -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>()
|
||||
|
||||
|
||||
+1
-1
@@ -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?) {
|
||||
|
||||
compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClassesLocal.kt
Vendored
+1
-1
@@ -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()
|
||||
|
||||
+2
-2
@@ -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()
|
||||
|
||||
Vendored
+1
-1
@@ -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!!
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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<!>() {}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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())
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+3
-3
@@ -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
@@ -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>>
|
||||
|
||||
+1
-1
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -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<!>>()
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -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()
|
||||
}
|
||||
|
||||
+4
-4
@@ -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<!>()
|
||||
}
|
||||
}
|
||||
+12
-12
@@ -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<!>)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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)
|
||||
|
||||
+20
-20
@@ -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 }
|
||||
}
|
||||
|
||||
+1
-1
@@ -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<!>)
|
||||
}
|
||||
|
||||
Vendored
+3
-3
@@ -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<!>()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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<*>>>() }
|
||||
}
|
||||
|
||||
Vendored
+1
-1
@@ -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!>""<!>)
|
||||
}
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+3
-3
@@ -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!>""<!>]<!>
|
||||
}
|
||||
|
||||
+4
-4
@@ -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!>""<!>)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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<*>?>() }
|
||||
}
|
||||
|
||||
+3
-3
@@ -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>()
|
||||
|
||||
+4
-4
@@ -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!>""<!>
|
||||
}
|
||||
}
|
||||
|
||||
+8
-8
@@ -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?>())
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+1
-1
@@ -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<!>())<!>
|
||||
}
|
||||
+2
-1
@@ -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<*>>() }
|
||||
}
|
||||
+3
-2
@@ -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?>() }
|
||||
}
|
||||
Vendored
+2
-1
@@ -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!!
|
||||
}
|
||||
+4
-4
@@ -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><!>()
|
||||
}
|
||||
Reference in New Issue
Block a user