diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/enhancedRecursiveStarProjection.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/enhancedRecursiveStarProjection.fir.kt new file mode 100644 index 00000000000..ebf931dbd5d --- /dev/null +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/enhancedRecursiveStarProjection.fir.kt @@ -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> { } + +// FILE: main.kt +fun foo(): I2<*> = TODO() diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/enhancedRecursiveStarProjection.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/enhancedRecursiveStarProjection.kt new file mode 100644 index 00000000000..ebf931dbd5d --- /dev/null +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/enhancedRecursiveStarProjection.kt @@ -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> { } + +// FILE: main.kt +fun foo(): I2<*> = TODO() diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaTestGenerated.java index 068796ec6d5..80f0b209f99 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaTestGenerated.java @@ -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 { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaWithPsiClassReadingTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaWithPsiClassReadingTestGenerated.java index 6e717b22cc2..5bc75d04d70 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaWithPsiClassReadingTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaWithPsiClassReadingTestGenerated.java @@ -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 { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsSourceJavaTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsSourceJavaTestGenerated.java index c65c5f6169b..f23ffd306b2 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsSourceJavaTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsSourceJavaTestGenerated.java @@ -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 { diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/TypeSubstitutor.java b/core/descriptors/src/org/jetbrains/kotlin/types/TypeSubstitutor.java index 393252ef7fe..d90993e69f9 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/TypeSubstitutor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/TypeSubstitutor.java @@ -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(