diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/reflect/ReflectionTypes.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/reflect/ReflectionTypes.kt index db9926a9ad5..1bb02d50da1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/reflect/ReflectionTypes.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/reflect/ReflectionTypes.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.scopes.JetScope import org.jetbrains.kotlin.types.* +import org.jetbrains.kotlin.types.TypeUtils.makeStarProjection import java.util.ArrayList import kotlin.properties.Delegates @@ -59,8 +60,13 @@ public class ReflectionTypes(private val module: ModuleDescriptor) { public val kMutableTopLevelExtensionProperty: ClassDescriptor by ClassLookup public fun getKClassType(annotations: Annotations, classDescriptor: ClassDescriptor): JetType { - val arguments = listOf(TypeProjectionImpl(Variance.INVARIANT, classDescriptor.getDefaultType())) - return JetTypeImpl(annotations, kClass.getTypeConstructor(), false, arguments, kClass.getMemberScope(arguments)) + val typeConstructor = classDescriptor.getTypeConstructor() + val arguments = typeConstructor.getParameters().map(TypeUtils::makeStarProjection) + val kClassArguments = listOf(TypeProjectionImpl( + Variance.INVARIANT, + JetTypeImpl(Annotations.EMPTY, typeConstructor, false, arguments, classDescriptor.getMemberScope(arguments)) + )) + return JetTypeImpl(annotations, kClass.getTypeConstructor(), false, kClassArguments, kClass.getMemberScope(kClassArguments)) } public fun getKFunctionType( diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/properties/genericClassLiteralPropertyReceiverIsStar.kt b/compiler/testData/codegen/boxWithStdlib/reflection/properties/genericClassLiteralPropertyReceiverIsStar.kt new file mode 100644 index 00000000000..6ee2f3fec80 --- /dev/null +++ b/compiler/testData/codegen/boxWithStdlib/reflection/properties/genericClassLiteralPropertyReceiverIsStar.kt @@ -0,0 +1,11 @@ +import kotlin.reflect.KMemberProperty + +class A { + val result = "OK" +} + +fun box(): String { + val k = A::class.getProperties().single() + k : KMemberProperty, *> + return k.get(A()) as String +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java index 44c79341893..cac4b05dd2d 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java @@ -2848,6 +2848,12 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode doTestWithStdlib(fileName); } + @TestMetadata("genericClassLiteralPropertyReceiverIsStar.kt") + public void testGenericClassLiteralPropertyReceiverIsStar() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/properties/genericClassLiteralPropertyReceiverIsStar.kt"); + doTestWithStdlib(fileName); + } + @TestMetadata("getExtensionPropertiesMutableVsReadonly.kt") public void testGetExtensionPropertiesMutableVsReadonly() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/properties/getExtensionPropertiesMutableVsReadonly.kt");