Disconnect loops between upper bounds of type parameters
#KT-9759 Fixed
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
fun <<!CYCLIC_GENERIC_UPPER_BOUND!>T : F?<!>, F : T?> foo1() {}
|
||||
|
||||
fun <T : F?, <!CYCLIC_GENERIC_UPPER_BOUND!>F : E<!>, E : F?> foo2() {}
|
||||
|
||||
fun <<!CYCLIC_GENERIC_UPPER_BOUND!>T<!>, F> foo3() where T : F?, F : T {}
|
||||
|
||||
fun <T, <!CYCLIC_GENERIC_UPPER_BOUND!>F<!>, E> foo4() where T : F?, F : E, E : F? {}
|
||||
@@ -0,0 +1,6 @@
|
||||
package
|
||||
|
||||
public fun </*0*/ T : [ERROR : Cyclic upper bounds], /*1*/ F : T?> foo1(): kotlin.Unit
|
||||
public fun </*0*/ T : F?, /*1*/ F : [ERROR : Cyclic upper bounds], /*2*/ E : F?> foo2(): kotlin.Unit
|
||||
public fun </*0*/ T : [ERROR : Cyclic upper bounds], /*1*/ F : T> foo3(): kotlin.Unit
|
||||
public fun </*0*/ T : F?, /*1*/ F : [ERROR : Cyclic upper bounds], /*2*/ E : F?> foo4(): kotlin.Unit
|
||||
@@ -0,0 +1,7 @@
|
||||
class A1<T : <!CYCLIC_GENERIC_UPPER_BOUND!>F?<!>, F : <!CYCLIC_GENERIC_UPPER_BOUND!>T?<!>>
|
||||
|
||||
class A2<T : F?, F : <!CYCLIC_GENERIC_UPPER_BOUND!>E<!>, E : <!CYCLIC_GENERIC_UPPER_BOUND!>F?<!>>
|
||||
|
||||
class A3<T, F> where T : <!CYCLIC_GENERIC_UPPER_BOUND!>F?<!>, F : <!CYCLIC_GENERIC_UPPER_BOUND!>T?<!>
|
||||
|
||||
class A4<T, F, E> where T : F?, F : <!CYCLIC_GENERIC_UPPER_BOUND!>E<!>, E : <!CYCLIC_GENERIC_UPPER_BOUND!>F<!>
|
||||
@@ -0,0 +1,29 @@
|
||||
package
|
||||
|
||||
public final class A1</*0*/ T : [ERROR : Cyclic upper bounds], /*1*/ F : [ERROR : Cyclic upper bounds]> {
|
||||
public constructor A1</*0*/ T : [ERROR : Cyclic upper bounds], /*1*/ F : [ERROR : Cyclic upper bounds]>()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class A2</*0*/ T : F?, /*1*/ F : [ERROR : Cyclic upper bounds], /*2*/ E : [ERROR : Cyclic upper bounds]> {
|
||||
public constructor A2</*0*/ T : F?, /*1*/ F : [ERROR : Cyclic upper bounds], /*2*/ E : [ERROR : Cyclic upper bounds]>()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class A3</*0*/ T : [ERROR : Cyclic upper bounds], /*1*/ F : [ERROR : Cyclic upper bounds]> {
|
||||
public constructor A3</*0*/ T : [ERROR : Cyclic upper bounds], /*1*/ F : [ERROR : Cyclic upper bounds]>()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class A4</*0*/ T : F?, /*1*/ F : [ERROR : Cyclic upper bounds], /*2*/ E : [ERROR : Cyclic upper bounds]> {
|
||||
public constructor A4</*0*/ T : F?, /*1*/ F : [ERROR : Cyclic upper bounds], /*2*/ E : [ERROR : Cyclic upper bounds]>()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// FILE: XYZ.java
|
||||
public interface XYZ<X extends X> {
|
||||
XYZ foo() {}
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
fun main(xyz: XYZ<*>) = xyz.foo()
|
||||
@@ -0,0 +1,11 @@
|
||||
package
|
||||
|
||||
public /*synthesized*/ fun </*0*/ X : [ERROR : Cyclic upper bounds]> XYZ(/*0*/ function: () -> XYZ<(raw) [ERROR : Cyclic upper bounds]>!): XYZ<X>
|
||||
public fun main(/*0*/ xyz: XYZ<*>): XYZ<(raw) [ERROR : Cyclic upper bounds]>!
|
||||
|
||||
public interface XYZ</*0*/ X : [ERROR : Cyclic upper bounds]> {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public abstract fun foo(): XYZ<(raw) [ERROR : Cyclic upper bounds]>!
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// FILE: XYZ.java
|
||||
public interface XYZ<X extends Y, Y extends Z, Z extends Y> {
|
||||
XYZ foo() {}
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
fun main(xyz: XYZ<*, *, *>) = xyz.foo()
|
||||
@@ -0,0 +1,11 @@
|
||||
package
|
||||
|
||||
public /*synthesized*/ fun </*0*/ X : Y!, /*1*/ Y : [ERROR : Cyclic upper bounds], /*2*/ Z : [ERROR : Cyclic upper bounds]> XYZ(/*0*/ function: () -> XYZ<(raw) [ERROR : Cyclic upper bounds], (raw) [ERROR : Cyclic upper bounds], (raw) [ERROR : Cyclic upper bounds]>!): XYZ<X, Y, Z>
|
||||
public fun main(/*0*/ xyz: XYZ<*, *, *>): XYZ<(raw) [ERROR : Cyclic upper bounds], (raw) [ERROR : Cyclic upper bounds], (raw) [ERROR : Cyclic upper bounds]>!
|
||||
|
||||
public interface XYZ</*0*/ X : Y!, /*1*/ Y : [ERROR : Cyclic upper bounds], /*2*/ Z : [ERROR : Cyclic upper bounds]> {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public abstract fun foo(): XYZ<(raw) [ERROR : Cyclic upper bounds], (raw) [ERROR : Cyclic upper bounds], (raw) [ERROR : Cyclic upper bounds]>!
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -1,3 +1,3 @@
|
||||
// !DIAGNOSTICS: -MUST_BE_INITIALIZED -TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER
|
||||
fun <T: <!CYCLIC_GENERIC_UPPER_BOUND!>T?<!>> foo() {}
|
||||
val <T: <!CYCLIC_GENERIC_UPPER_BOUND!>T?<!>> prop
|
||||
fun <<!CYCLIC_GENERIC_UPPER_BOUND!>T: T?<!>> foo() {}
|
||||
val <<!CYCLIC_GENERIC_UPPER_BOUND!>T: T?<!>> prop
|
||||
@@ -1,4 +1,4 @@
|
||||
package
|
||||
|
||||
public val </*0*/ T : [ERROR : Cyclic upper bound: T?]> prop: [ERROR : No type, no body]
|
||||
public fun </*0*/ T : [ERROR : Cyclic upper bound: T?]> foo(): kotlin.Unit
|
||||
public val </*0*/ T : [ERROR : Cyclic upper bounds]> prop: [ERROR : No type, no body]
|
||||
public fun </*0*/ T : [ERROR : Cyclic upper bounds]> foo(): kotlin.Unit
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
package
|
||||
|
||||
public final class MyClass</*0*/ T : [ERROR : Cyclic upper bound: T?]> {
|
||||
public constructor MyClass</*0*/ T : [ERROR : Cyclic upper bound: T?]>()
|
||||
public final class MyClass</*0*/ T : [ERROR : Cyclic upper bounds]> {
|
||||
public constructor MyClass</*0*/ T : [ERROR : Cyclic upper bounds]>()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
package
|
||||
|
||||
public final class MyClass</*0*/ T : [ERROR : Cyclic upper bound: T]> {
|
||||
public constructor MyClass</*0*/ T : [ERROR : Cyclic upper bound: T]>()
|
||||
public final class MyClass</*0*/ T : [ERROR : Cyclic upper bounds]> {
|
||||
public constructor MyClass</*0*/ T : [ERROR : Cyclic upper bounds]>()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
fun bar() {
|
||||
fun <T: <!CYCLIC_GENERIC_UPPER_BOUND!>T?<!>> foo() {}
|
||||
fun <<!CYCLIC_GENERIC_UPPER_BOUND!>T: T?<!>> foo() {}
|
||||
<!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>()
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
// !DIAGNOSTICS: -MUST_BE_INITIALIZED_OR_BE_ABSTRACT -TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER
|
||||
class My {
|
||||
fun <T: <!CYCLIC_GENERIC_UPPER_BOUND!>T?<!>> foo() {}
|
||||
val <T: <!CYCLIC_GENERIC_UPPER_BOUND!>T?<!>> prop: T
|
||||
fun <<!CYCLIC_GENERIC_UPPER_BOUND!>T: T?<!>> foo() {}
|
||||
val <<!CYCLIC_GENERIC_UPPER_BOUND!>T: T?<!>> prop: T
|
||||
}
|
||||
+2
-2
@@ -2,9 +2,9 @@ package
|
||||
|
||||
public final class My {
|
||||
public constructor My()
|
||||
public final val </*0*/ T : [ERROR : Cyclic upper bound: T?]> prop: [ERROR : ?]
|
||||
public final val </*0*/ T : [ERROR : Cyclic upper bounds]> prop: [ERROR : ?]
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final fun </*0*/ T : [ERROR : Cyclic upper bound: T?]> foo(): kotlin.Unit
|
||||
public final fun </*0*/ T : [ERROR : Cyclic upper bounds]> foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
// !DIAGNOSTICS: -MUST_BE_INITIALIZED -TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER
|
||||
fun <T: <!CYCLIC_GENERIC_UPPER_BOUND!>T<!>> foo() {}
|
||||
val <T: <!CYCLIC_GENERIC_UPPER_BOUND!>T?<!>> prop: T
|
||||
fun <<!CYCLIC_GENERIC_UPPER_BOUND!>T: T<!>> foo() {}
|
||||
val <<!CYCLIC_GENERIC_UPPER_BOUND!>T: T?<!>> prop: T
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package
|
||||
|
||||
public val </*0*/ T : [ERROR : Cyclic upper bound: T?]> prop: [ERROR : ?]
|
||||
public fun </*0*/ T : [ERROR : Cyclic upper bound: T]> foo(): kotlin.Unit
|
||||
public val </*0*/ T : [ERROR : Cyclic upper bounds]> prop: [ERROR : ?]
|
||||
public fun </*0*/ T : [ERROR : Cyclic upper bounds]> foo(): kotlin.Unit
|
||||
|
||||
Reference in New Issue
Block a user