diff --git a/compiler/testData/diagnostics/tests/generics/starProjections/checkBounds.kt b/compiler/testData/diagnostics/tests/generics/starProjections/checkBounds.kt new file mode 100644 index 00000000000..17f1e033cf6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/generics/starProjections/checkBounds.kt @@ -0,0 +1,3 @@ +class A> +fun > foo() {} +class B> \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/generics/starProjections/checkBounds.txt b/compiler/testData/diagnostics/tests/generics/starProjections/checkBounds.txt new file mode 100644 index 00000000000..dc5d01e41b5 --- /dev/null +++ b/compiler/testData/diagnostics/tests/generics/starProjections/checkBounds.txt @@ -0,0 +1,17 @@ +package + +public fun > foo(): kotlin.Unit + +public final class A> { + public constructor A>() + 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 B> { + public constructor B>() + 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 +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 6ac1173b676..cf0befbc854 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -7439,6 +7439,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/generics/starProjections"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("checkBounds.kt") + public void testCheckBounds() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/generics/starProjections/checkBounds.kt"); + doTest(fileName); + } + @TestMetadata("collectionInheritedFromJava.kt") public void testCollectionInheritedFromJava() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/generics/starProjections/collectionInheritedFromJava.kt"); diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java index eae8d033232..1933750c197 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java @@ -171,6 +171,8 @@ public class TypeUtils { for (int i = 0, parametersSize = parameters.size(); i < parametersSize; i++) { TypeParameterDescriptor parameterDescriptor = parameters.get(i); TypeProjection typeProjection = arguments.get(i); + if (typeProjection.isStarProjection()) return true; + Variance projectionKind = typeProjection.getProjectionKind(); KotlinType argument = typeProjection.getType();