FE: avoid stack overflow on star projection of enhanced type parameter

#KT-47846 Fixed
This commit is contained in:
pyos
2021-07-22 12:30:36 +02:00
committed by Victor Petukhov
parent ed44497a9b
commit d00fba3718
6 changed files with 59 additions and 0 deletions
@@ -0,0 +1,11 @@
// SKIP_TXT
// FILE: I1.java
import org.checkerframework.checker.nullness.qual.NonNull;
public interface I1<@NonNull T> { }
// FILE: I2.java
public interface I2<T extends I1<T>> { }
// FILE: main.kt
fun foo(): I2<*> = TODO()
@@ -0,0 +1,11 @@
// SKIP_TXT
// FILE: I1.java
import org.checkerframework.checker.nullness.qual.NonNull;
public interface I1<@NonNull T> { }
// FILE: I2.java
public interface I2<T extends I1<T>> { }
// FILE: main.kt
fun foo(): I2<*> = TODO()
@@ -955,6 +955,18 @@ public class ForeignAnnotationsCompiledJavaTestGenerated extends AbstractForeign
runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/classTypeParameterBound.fir.kt");
}
@Test
@TestMetadata("enhancedRecursiveStarProjection.kt")
public void testEnhancedRecursiveStarProjection() throws Exception {
runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/enhancedRecursiveStarProjection.kt");
}
@Test
@TestMetadata("enhancedRecursiveStarProjection.fir.kt")
public void testEnhancedRecursiveStarProjection_fir() throws Exception {
runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/enhancedRecursiveStarProjection.fir.kt");
}
@Test
@TestMetadata("methodWithTypeParameter.kt")
public void testMethodWithTypeParameter() throws Exception {
@@ -955,6 +955,18 @@ public class ForeignAnnotationsCompiledJavaWithPsiClassReadingTestGenerated exte
runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/classTypeParameterBound.fir.kt");
}
@Test
@TestMetadata("enhancedRecursiveStarProjection.kt")
public void testEnhancedRecursiveStarProjection() throws Exception {
runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/enhancedRecursiveStarProjection.kt");
}
@Test
@TestMetadata("enhancedRecursiveStarProjection.fir.kt")
public void testEnhancedRecursiveStarProjection_fir() throws Exception {
runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/enhancedRecursiveStarProjection.fir.kt");
}
@Test
@TestMetadata("methodWithTypeParameter.kt")
public void testMethodWithTypeParameter() throws Exception {
@@ -955,6 +955,18 @@ public class ForeignAnnotationsSourceJavaTestGenerated extends AbstractForeignAn
runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/classTypeParameterBound.fir.kt");
}
@Test
@TestMetadata("enhancedRecursiveStarProjection.kt")
public void testEnhancedRecursiveStarProjection() throws Exception {
runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/enhancedRecursiveStarProjection.kt");
}
@Test
@TestMetadata("enhancedRecursiveStarProjection.fir.kt")
public void testEnhancedRecursiveStarProjection_fir() throws Exception {
runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/enhancedRecursiveStarProjection.fir.kt");
}
@Test
@TestMetadata("methodWithTypeParameter.kt")
public void testMethodWithTypeParameter() throws Exception {
@@ -186,6 +186,7 @@ public class TypeSubstitutor implements TypeSubstitutorMarker {
typeParameter,
recursionDepth + 1
);
if (substitution.isStarProjection()) return substitution;
KotlinType substitutedEnhancement = substitute(enhancement, originalProjection.getProjectionKind());
KotlinType resultingType = TypeWithEnhancementKt.wrapEnhancement(