Prevent leaking of type parameter erasion results cache into static scope

This commit is contained in:
Victor Petukhov
2021-07-26 14:08:21 +03:00
committed by teamcityserver
parent 6706ee87ad
commit 20d50cfee7
20 changed files with 170 additions and 36 deletions
@@ -21826,6 +21826,18 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/interClassesRecursion.kt");
}
@Test
@TestMetadata("interdependentTypeParameters.kt")
public void testInterdependentTypeParameters() throws Exception {
runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/interdependentTypeParameters.kt");
}
@Test
@TestMetadata("interdependentTypeParametersFromKotlin.kt")
public void testInterdependentTypeParametersFromKotlin() throws Exception {
runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/interdependentTypeParametersFromKotlin.kt");
}
@Test
@TestMetadata("intermediateRecursion.kt")
public void testIntermediateRecursion() throws Exception {
@@ -21826,6 +21826,18 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac
runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/interClassesRecursion.kt");
}
@Test
@TestMetadata("interdependentTypeParameters.kt")
public void testInterdependentTypeParameters() throws Exception {
runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/interdependentTypeParameters.kt");
}
@Test
@TestMetadata("interdependentTypeParametersFromKotlin.kt")
public void testInterdependentTypeParametersFromKotlin() throws Exception {
runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/interdependentTypeParametersFromKotlin.kt");
}
@Test
@TestMetadata("intermediateRecursion.kt")
public void testIntermediateRecursion() throws Exception {
+3 -6
View File
@@ -1,4 +1,4 @@
// DONT_TARGET_EXACT_BACKEND: WASM
// TARGET_BACKEND: JVM
// FULL_JDK
// FILE: AbstractAssert.java
@@ -61,11 +61,9 @@ extends AbstractAssertWithOriginWithColumnsAndRows<S, A, D, A, C, CV, R, RV> imp
}
// FILE: AbstractValueAssert.java
import java.time.LocalDateTime;
public abstract class AbstractValueAssert<D extends AbstractDbData<D>, A extends AbstractDbAssert<D, A, C, CV, R, RV>, S extends AbstractSubAssert<D, A, S, V, C, CV, R, RV>, V extends AbstractValueAssert<D, A, S, V, C, CV, R, RV>, C extends AbstractColumnAssert<D, A, C, CV, R, RV>, CV extends AbstractColumnValueAssert<D, A, C, CV, R, RV>, R extends AbstractRowAssert<D, A, C, CV, R, RV>, RV extends AbstractRowValueAssert<D, A, C, CV, R, RV>>
extends AbstractAssertWithOriginWithColumnsAndRows<V, S, D, A, C, CV, R, RV> {
public V isEqualTo(LocalDateTime expected) {
public V isEqualTo(String expected) {
return (V) new RequestRowValueAssert();
}
}
@@ -115,10 +113,9 @@ public interface RowElement {}
import java.time.LocalDateTime
fun test(x: RequestAssert) {
val timestamp = LocalDateTime.now()
x.hasNumberOfRows(1)
.row()
.value("message_time").isEqualTo(timestamp)
.value("message_time").isEqualTo("")
}
fun box(): String {
@@ -0,0 +1,12 @@
// FILE: Boo.java
public class Boo<N> {}
// FILE: Foo.java
public class Foo<P1 extends Boo<P2, P3, P4>, P2 extends Boo<P1, P3, P4>, P3 extends Boo<P1, P2, P4>, P4 extends Boo<P1, P2, P3>> {
static Foo test1() { return null; }
}
// FILE: main.kt
fun main() {
val x = <!DEBUG_INFO_EXPRESSION_TYPE("Foo<Boo<*>..Boo<*>?!, Boo<*>..Boo<*>?!, Boo<*>..Boo<*>?!, Boo<*>..Boo<*>?!>..Foo<*, *, *, *>?!")!>Foo.test1()<!>
}
@@ -0,0 +1,12 @@
// FILE: Boo.java
public class Boo<N> {}
// FILE: Foo.java
public class Foo<P1 extends Boo<P2, P3, P4>, P2 extends Boo<P1, P3, P4>, P3 extends Boo<P1, P2, P4>, P4 extends Boo<P1, P2, P3>> {
static Foo test1() { return null; }
}
// FILE: main.kt
fun main() {
val x = <!DEBUG_INFO_EXPRESSION_TYPE("raw (Foo<(Boo<(Boo<*>..Boo<*>?)>..Boo<(Boo<*>..Boo<*>?)>?), (Boo<*>..Boo<*>?), (Boo<(Boo<(Boo<*>..Boo<*>?)>..Boo<(Boo<*>..Boo<*>?)>?)>..Boo<(Boo<(Boo<*>..Boo<*>?)>..Boo<(Boo<*>..Boo<*>?)>?)>?), (Boo<(Boo<(Boo<*>..Boo<*>?)>..Boo<(Boo<*>..Boo<*>?)>?)>..Boo<(Boo<(Boo<*>..Boo<*>?)>..Boo<(Boo<*>..Boo<*>?)>?)>?)>..Foo<out (Boo<out (Boo<*>..Boo<*>?)>..Boo<out (Boo<*>..Boo<*>?)>?), out (Boo<*>..Boo<*>?), out (Boo<out (Boo<out (Boo<*>..Boo<*>?)>..Boo<out (Boo<*>..Boo<*>?)>?)>..Boo<out (Boo<out (Boo<*>..Boo<*>?)>..Boo<out (Boo<*>..Boo<*>?)>?)>?), out (Boo<out (Boo<out (Boo<*>..Boo<*>?)>..Boo<out (Boo<*>..Boo<*>?)>?)>..Boo<out (Boo<out (Boo<*>..Boo<*>?)>..Boo<out (Boo<*>..Boo<*>?)>?)>?)>?)")!>Foo.test1()<!>
}
@@ -0,0 +1,20 @@
package
public fun main(): kotlin.Unit
public open class Boo</*0*/ N : kotlin.Any!> {
public constructor Boo</*0*/ N : kotlin.Any!>()
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 open class Foo</*0*/ P1 : Boo<P2!>!, /*1*/ P2 : Boo<P1!>!, /*2*/ P3 : Boo<P1!>!, /*3*/ P4 : Boo<P1!>!> {
public constructor Foo</*0*/ P1 : Boo<P2!>!, /*1*/ P2 : Boo<P1!>!, /*2*/ P3 : Boo<P1!>!, /*3*/ P4 : Boo<P1!>!>()
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
// Static members
public/*package*/ open fun test1(): (Foo<(raw) Boo<Boo<*>!>!, (raw) Boo<*>!, (raw) Boo<Boo<Boo<*>!>!>!, (raw) Boo<Boo<Boo<*>!>!>!>..Foo<out Boo<out Boo<*>!>!, out Boo<*>!, out Boo<out Boo<out Boo<*>!>!>!, out Boo<out Boo<out Boo<*>!>!>!>?)
}
@@ -0,0 +1,12 @@
// FILE: Boo.java
public class Boo<P2, P3, P4> {
static Foo test1() { return null; }
}
// FILE: Foo.kt
class Foo<P1 : Boo<P2, P3, P4>, P2 : Boo<P1, P3, P4>, P3 : Boo<P1, P2, P4>, P4 : Boo<P1, P2, P3>> {}
// FILE: main.kt
fun main() {
val x = <!DEBUG_INFO_EXPRESSION_TYPE("Foo<Boo<*, *, *>, Boo<*, *, *>, Boo<*, *, *>, Boo<*, *, *>>..Foo<out Boo<*, *, *>, out Boo<*, *, *>, out Boo<*, *, *>, out Boo<*, *, *>>?!")!>Boo.test1()<!>
}
@@ -0,0 +1,12 @@
// FILE: Boo.java
public class Boo<P2, P3, P4> {
static Foo test1() { return null; }
}
// FILE: Foo.kt
class Foo<P1 : Boo<P2, P3, P4>, P2 : Boo<P1, P3, P4>, P3 : Boo<P1, P2, P4>, P4 : Boo<P1, P2, P3>> {}
// FILE: main.kt
fun main() {
val x = <!DEBUG_INFO_EXPRESSION_TYPE("raw (Foo<Boo<Boo<*, Boo<*, *, Boo<*, *, *>>, Boo<*, *, *>>, Boo<*, *, Boo<*, *, *>>, Boo<*, *, *>>, Boo<*, Boo<*, *, Boo<*, *, *>>, Boo<*, *, *>>, Boo<*, *, Boo<*, *, *>>, Boo<*, *, *>>..Foo<out Boo<out Boo<*, out Boo<*, *, out Boo<*, *, *>>, out Boo<*, *, *>>, out Boo<*, *, out Boo<*, *, *>>, out Boo<*, *, *>>, out Boo<*, out Boo<*, *, out Boo<*, *, *>>, out Boo<*, *, *>>, out Boo<*, *, out Boo<*, *, *>>, out Boo<*, *, *>>?)")!>Boo.test1()<!>
}
@@ -0,0 +1,20 @@
package
public fun main(): kotlin.Unit
public open class Boo</*0*/ P2 : kotlin.Any!, /*1*/ P3 : kotlin.Any!, /*2*/ P4 : kotlin.Any!> {
public constructor Boo</*0*/ P2 : kotlin.Any!, /*1*/ P3 : kotlin.Any!, /*2*/ P4 : kotlin.Any!>()
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
// Static members
public/*package*/ open fun test1(): (Foo<(raw) Boo<Boo<*, Boo<*, *, Boo<*, *, *>>, Boo<*, *, *>>, Boo<*, *, Boo<*, *, *>>, Boo<*, *, *>>, (raw) Boo<*, Boo<*, *, Boo<*, *, *>>, Boo<*, *, *>>, (raw) Boo<*, *, Boo<*, *, *>>, (raw) Boo<*, *, *>>..Foo<out Boo<out Boo<*, out Boo<*, *, out Boo<*, *, *>>, out Boo<*, *, *>>, out Boo<*, *, out Boo<*, *, *>>, out Boo<*, *, *>>, out Boo<*, out Boo<*, *, out Boo<*, *, *>>, out Boo<*, *, *>>, out Boo<*, *, out Boo<*, *, *>>, out Boo<*, *, *>>?)
}
public final class Foo</*0*/ P1 : Boo<P2, P3, P4>, /*1*/ P2 : Boo<P1, P3, P4>, /*2*/ P3 : Boo<P1, P2, P4>, /*3*/ P4 : Boo<P1, P2, P3>> {
public constructor Foo</*0*/ P1 : Boo<P2, P3, P4>, /*1*/ P2 : Boo<P1, P3, P4>, /*2*/ P3 : Boo<P1, P2, P4>, /*3*/ P4 : Boo<P1, P2, P3>>()
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,13 @@
// FILE: Boo.java
public class Boo<N> {}
// FILE: Foo.java
public class Foo<T extends Boo<K>, K extends Boo<X>, X extends Boo<K>> {
T test2() { return null; }
static Foo test1() { return null; }
}
// FILE: main.kt
fun main() {
val x = <!DEBUG_INFO_EXPRESSION_TYPE("Foo<Boo<*>..Boo<*>?!, Boo<*>..Boo<*>?!, Boo<*>..Boo<*>?!>..Foo<*, *, *>?!")!>Foo.test1()<!>.test2()
}
@@ -1,4 +1,3 @@
// FIR_IDENTICAL
// FILE: Boo.java
public class Boo<N> {}
@@ -10,5 +9,5 @@ public class Foo<T extends Boo<K>, K extends Boo<X>, X extends Boo<K>> {
// FILE: main.kt
fun main() {
val x = Foo.test1().test2()
val x = <!DEBUG_INFO_EXPRESSION_TYPE("raw (Foo<(Boo<(Boo<(Boo<*>..Boo<*>?)>..Boo<(Boo<*>..Boo<*>?)>?)>..Boo<(Boo<(Boo<*>..Boo<*>?)>..Boo<(Boo<*>..Boo<*>?)>?)>?), (Boo<(Boo<*>..Boo<*>?)>..Boo<(Boo<*>..Boo<*>?)>?), (Boo<*>..Boo<*>?)>..Foo<out (Boo<out (Boo<out (Boo<*>..Boo<*>?)>..Boo<out (Boo<*>..Boo<*>?)>?)>..Boo<out (Boo<out (Boo<*>..Boo<*>?)>..Boo<out (Boo<*>..Boo<*>?)>?)>?), out (Boo<out (Boo<*>..Boo<*>?)>..Boo<out (Boo<*>..Boo<*>?)>?), out (Boo<*>..Boo<*>?)>?)")!>Foo.test1()<!>.test2()
}
@@ -21832,6 +21832,18 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/interClassesRecursion.kt");
}
@Test
@TestMetadata("interdependentTypeParameters.kt")
public void testInterdependentTypeParameters() throws Exception {
runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/interdependentTypeParameters.kt");
}
@Test
@TestMetadata("interdependentTypeParametersFromKotlin.kt")
public void testInterdependentTypeParametersFromKotlin() throws Exception {
runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/interdependentTypeParametersFromKotlin.kt");
}
@Test
@TestMetadata("intermediateRecursion.kt")
public void testIntermediateRecursion() throws Exception {