From 89c87f941fcb5587178964ec6ff0a9015e49671d Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Thu, 4 Jun 2020 11:33:47 -0700 Subject: [PATCH] FIR: consider the absence of type arguments when constructing GetClassCall type --- .../body/resolve/FirExpressionsResolveTransformer.kt | 12 +++++++++++- .../testData/codegen/box/classLiteral/bareArray.kt | 1 - .../box/reflection/classLiterals/bareArray.kt | 1 - 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index c03a6a200c3..a8e132bed0a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -548,7 +548,17 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform val typeOfExpression = when (val lhs = transformedGetClassCall.argument) { is FirResolvedQualifier -> { val symbol = lhs.symbol - val typeRef = symbol?.constructType(lhs.typeArguments.map { it.toConeTypeProjection() }.toTypedArray(), isNullable = false) + val typeArguments: Array = + if (lhs.typeArguments.isNotEmpty()) { + // If type arguments exist, use them to construct the type of the expression. + lhs.typeArguments.map { it.toConeTypeProjection() }.toTypedArray() + } else { + // Otherwise, prepare the star projections as many as the size of type parameters. + Array((symbol?.phasedFir as? FirTypeParameterRefsOwner)?.typeParameters?.size ?: 0) { + ConeStarProjection + } + } + val typeRef = symbol?.constructType(typeArguments, isNullable = false) if (typeRef != null) { lhs.replaceTypeRef(buildResolvedTypeRef { type = typeRef }) typeRef diff --git a/compiler/testData/codegen/box/classLiteral/bareArray.kt b/compiler/testData/codegen/box/classLiteral/bareArray.kt index d3dfd5da58e..8342abf6b90 100644 --- a/compiler/testData/codegen/box/classLiteral/bareArray.kt +++ b/compiler/testData/codegen/box/classLiteral/bareArray.kt @@ -1,5 +1,4 @@ // !LANGUAGE: +BareArrayClassLiteral -// IGNORE_BACKEND_FIR: JVM_IR fun box(): String { val x = Array(1) { Any() } diff --git a/compiler/testData/codegen/box/reflection/classLiterals/bareArray.kt b/compiler/testData/codegen/box/reflection/classLiterals/bareArray.kt index d23f4dfe06d..e7b4229df87 100644 --- a/compiler/testData/codegen/box/reflection/classLiterals/bareArray.kt +++ b/compiler/testData/codegen/box/reflection/classLiterals/bareArray.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // !LANGUAGE: +BareArrayClassLiteral // TARGET_BACKEND: JVM // WITH_REFLECT