diff --git a/compiler/testData/diagnostics/tests/typealias/starProjection.kt b/compiler/testData/diagnostics/tests/typealias/starProjection.kt new file mode 100644 index 00000000000..098f5e4a02c --- /dev/null +++ b/compiler/testData/diagnostics/tests/typealias/starProjection.kt @@ -0,0 +1,14 @@ +typealias A = Map +typealias B = A<*> + +fun check(x: B) = x + +fun test1(x: Map) = check(x) + +fun test2(x: Map) = check(x) + +fun test3(x: Map) = check(x).size + +fun test4(x: Map) = check(x)["42"] + +fun test5(x: Map) = check(x)[42] \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/typealias/starProjection.txt b/compiler/testData/diagnostics/tests/typealias/starProjection.txt new file mode 100644 index 00000000000..e597bae9e8a --- /dev/null +++ b/compiler/testData/diagnostics/tests/typealias/starProjection.txt @@ -0,0 +1,10 @@ +package + +public fun check(/*0*/ x: B /* = kotlin.collections.Map<*, *> */): B /* = kotlin.collections.Map<*, *> */ +public fun test1(/*0*/ x: kotlin.collections.Map): B /* = kotlin.collections.Map<*, *> */ +public fun test2(/*0*/ x: kotlin.collections.Map): B /* = kotlin.collections.Map<*, *> */ +public fun test3(/*0*/ x: kotlin.collections.Map): kotlin.Int +public fun test4(/*0*/ x: kotlin.collections.Map): kotlin.Any? +public fun test5(/*0*/ x: kotlin.collections.Map): kotlin.Any? +public typealias A = kotlin.collections.Map +public typealias B = A<*> diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index fc9cab64dbe..6bd1aa925cc 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -20262,6 +20262,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("starProjection.kt") + public void testStarProjection() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/starProjection.kt"); + doTest(fileName); + } + @TestMetadata("starProjectionInTypeAliasArgument.kt") public void testStarProjectionInTypeAliasArgument() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/starProjectionInTypeAliasArgument.kt"); diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/StarProjectionImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/types/StarProjectionImpl.kt index 1693478b8b6..c9b0a256468 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/StarProjectionImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/StarProjectionImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.types import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.ClassifierDescriptorWithTypeParameters import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns @@ -36,7 +37,7 @@ class StarProjectionImpl( } fun TypeParameterDescriptor.starProjectionType(): KotlinType { - val classDescriptor = this.containingDeclaration as ClassDescriptor + val classDescriptor = this.containingDeclaration as ClassifierDescriptorWithTypeParameters val typeParameters = classDescriptor.typeConstructor.parameters.map { it.typeConstructor } return TypeSubstitutor.create( object : TypeConstructorSubstitution() {