From 4e6bd33eca0607dc899354755099e210b903c91b Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Sun, 12 Jul 2020 23:24:30 -0700 Subject: [PATCH] FIR: create argument mapping for annotation call in general --- .../kotlin/fir/resolve/ResolveUtils.kt | 21 ++++++++++++------- .../FirExpressionsResolveTransformer.kt | 12 +++++------ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt index 8944ae60605..c48460634d8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt @@ -464,13 +464,18 @@ private fun FirQualifiedAccess.expressionTypeOrUnitForAssignment(): ConeKotlinTy fun FirAnnotationCall.getCorrespondingConstructorReferenceOrNull(session: FirSession): FirResolvedNamedReference? = annotationTypeRef.coneType.classId?.let { - (session.firSymbolProvider.getClassLikeSymbolByFqName(it) as? FirRegularClassSymbol)?.fir - ?.getPrimaryConstructorIfAny() - ?.let { annotationConstructor -> - buildResolvedNamedReference { - source = this@getCorrespondingConstructorReferenceOrNull.source - name = it.shortClassName - resolvedSymbol = annotationConstructor.symbol + if (it.isLocal) { + // TODO: How to retrieve local annotaiton's constructor? + null + } else { + (session.firSymbolProvider.getClassLikeSymbolByFqName(it) as? FirRegularClassSymbol)?.fir + ?.getPrimaryConstructorIfAny() + ?.let { annotationConstructor -> + buildResolvedNamedReference { + source = this@getCorrespondingConstructorReferenceOrNull.source + name = it.shortClassName + resolvedSymbol = annotationConstructor.symbol + } } - } + } } 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 4abc5844d1d..307209d5b2c 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 @@ -691,13 +691,11 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform (annotationCall.transformChildren(transformer, data) as FirAnnotationCall).also { // TODO: it's temporary incorrect solution until we design resolve and completion for annotation calls it.argumentList.transformArguments(integerLiteralTypeApproximator, null) - if (it.arguments.any { arg -> arg is FirNamedArgumentExpression }) { - annotationCall.getCorrespondingConstructorReferenceOrNull(session)?.let { calleeReference -> - val argumentMapping = - mapArguments(it.arguments, calleeReference.resolvedSymbol.fir as FirFunction<*>) - .toArgumentToParameterMapping() - it.replaceArgumentList(buildResolvedArgumentList(argumentMapping)) - } + annotationCall.getCorrespondingConstructorReferenceOrNull(session)?.let { calleeReference -> + val argumentMapping = + mapArguments(it.arguments, calleeReference.resolvedSymbol.fir as FirFunction<*>) + .toArgumentToParameterMapping() + it.replaceArgumentList(buildResolvedArgumentList(argumentMapping)) } it.replaceResolveStatus(status) dataFlowAnalyzer.exitAnnotationCall(it)