Fix false negative UPPER_BOUND_VIOLATED with typealiases in supertypes
^KT-50797 Fixed ^KT-50798 Open
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
// SKIP_TXT
|
||||
// !LANGUAGE: -ReportMissingUpperBoundsViolatedErrorOnAbbreviationAtSupertypes
|
||||
|
||||
interface I
|
||||
open class TK<T : I, K : I>
|
||||
|
||||
typealias One<X> = TK<X, X>
|
||||
typealias OneList<X> = List<TK<X, X>>
|
||||
typealias Both<T, K> = TK<T, K>
|
||||
typealias BothList<T, K> = List<TK<T, K>>
|
||||
|
||||
object O1 : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>One<Any><!>() // compiler error expected
|
||||
object O2 : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>Both<Any, Any><!>()
|
||||
|
||||
class A1<T : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>One<Any><!>>
|
||||
class A2<T : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>One<Any, Any><!>>
|
||||
|
||||
interface IO1 : OneList<Any> {}
|
||||
interface IO2 : BothList<Any, Any> {}
|
||||
|
||||
fun foo1(x: <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>One<Any><!>) {}
|
||||
fun foo2(x: <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>Both<Any, Any><!>) {}
|
||||
|
||||
fun main() {
|
||||
<!UPPER_BOUND_VIOLATED, UPPER_BOUND_VIOLATED!>One<Any>()<!>
|
||||
<!UPPER_BOUND_VIOLATED, UPPER_BOUND_VIOLATED!>Both<Any, Any>()<!>
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
// SKIP_TXT
|
||||
// !LANGUAGE: -ReportMissingUpperBoundsViolatedErrorOnAbbreviationAtSupertypes
|
||||
|
||||
interface I
|
||||
open class TK<T : I, K : I>
|
||||
|
||||
typealias One<X> = TK<X, X>
|
||||
typealias OneList<X> = List<TK<X, X>>
|
||||
typealias Both<T, K> = TK<T, K>
|
||||
typealias BothList<T, K> = List<TK<T, K>>
|
||||
|
||||
object O1 : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION_WARNING!>One<Any><!>() // compiler error expected
|
||||
object O2 : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>Both<Any, Any><!>()
|
||||
|
||||
class A1<T : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION_WARNING!>One<Any><!>>
|
||||
class A2<T : One<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!><Any, Any><!>>
|
||||
|
||||
interface IO1 : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>OneList<Any><!> {}
|
||||
interface IO2 : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION_WARNING!>BothList<Any, Any><!> {}
|
||||
|
||||
fun foo1(x: One<<!UPPER_BOUND_VIOLATED!>Any<!>>) {}
|
||||
fun foo2(x: Both<<!UPPER_BOUND_VIOLATED!>Any<!>, <!UPPER_BOUND_VIOLATED!>Any<!>>) {}
|
||||
|
||||
fun main() {
|
||||
One<<!UPPER_BOUND_VIOLATED!>Any<!>>()
|
||||
Both<<!UPPER_BOUND_VIOLATED!>Any<!>, <!UPPER_BOUND_VIOLATED!>Any<!>>()
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
// SKIP_TXT
|
||||
// !LANGUAGE: +ReportMissingUpperBoundsViolatedErrorOnAbbreviationAtSupertypes
|
||||
|
||||
interface I
|
||||
open class TK<T : I, K : I>
|
||||
|
||||
typealias One<X> = TK<X, X>
|
||||
typealias OneList<X> = List<TK<X, X>>
|
||||
typealias Both<T, K> = TK<T, K>
|
||||
typealias BothList<T, K> = List<TK<T, K>>
|
||||
|
||||
object O1 : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>One<Any><!>() // compiler error expected
|
||||
object O2 : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>Both<Any, Any><!>()
|
||||
|
||||
class A1<T : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>One<Any><!>>
|
||||
class A2<T : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>One<Any, Any><!>>
|
||||
|
||||
interface IO1 : OneList<Any> {}
|
||||
interface IO2 : BothList<Any, Any> {}
|
||||
|
||||
fun foo1(x: <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>One<Any><!>) {}
|
||||
fun foo2(x: <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>Both<Any, Any><!>) {}
|
||||
|
||||
fun main() {
|
||||
<!UPPER_BOUND_VIOLATED, UPPER_BOUND_VIOLATED!>One<Any>()<!>
|
||||
<!UPPER_BOUND_VIOLATED, UPPER_BOUND_VIOLATED!>Both<Any, Any>()<!>
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
// SKIP_TXT
|
||||
// !LANGUAGE: +ReportMissingUpperBoundsViolatedErrorOnAbbreviationAtSupertypes
|
||||
|
||||
interface I
|
||||
open class TK<T : I, K : I>
|
||||
|
||||
typealias One<X> = TK<X, X>
|
||||
typealias OneList<X> = List<TK<X, X>>
|
||||
typealias Both<T, K> = TK<T, K>
|
||||
typealias BothList<T, K> = List<TK<T, K>>
|
||||
|
||||
object O1 : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>One<Any><!>() // compiler error expected
|
||||
object O2 : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>Both<Any, Any><!>()
|
||||
|
||||
class A1<T : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>One<Any><!>>
|
||||
class A2<T : One<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!><Any, Any><!>>
|
||||
|
||||
interface IO1 : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>OneList<Any><!> {}
|
||||
interface IO2 : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>BothList<Any, Any><!> {}
|
||||
|
||||
fun foo1(x: One<<!UPPER_BOUND_VIOLATED!>Any<!>>) {}
|
||||
fun foo2(x: Both<<!UPPER_BOUND_VIOLATED!>Any<!>, <!UPPER_BOUND_VIOLATED!>Any<!>>) {}
|
||||
|
||||
fun main() {
|
||||
One<<!UPPER_BOUND_VIOLATED!>Any<!>>()
|
||||
Both<<!UPPER_BOUND_VIOLATED!>Any<!>, <!UPPER_BOUND_VIOLATED!>Any<!>>()
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
interface Order<T>
|
||||
|
||||
typealias Ord<T> = Order<T>
|
||||
|
||||
class Test1<T1 : Ord<T1>>
|
||||
|
||||
interface Num<T : Number>
|
||||
|
||||
typealias N<T> = Num<T>
|
||||
|
||||
class Test2<T : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>N<String><!>>
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
interface Order<T>
|
||||
|
||||
typealias Ord<T> = Order<T>
|
||||
@@ -8,4 +9,4 @@ interface Num<T : Number>
|
||||
|
||||
typealias N<T> = Num<T>
|
||||
|
||||
class Test2<T : N<<!UPPER_BOUND_VIOLATED!>String<!>>>
|
||||
class Test2<T : <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>N<String><!>>
|
||||
|
||||
Reference in New Issue
Block a user