From 535aa1e9e0dd50d6f58a2f483d7dd0ec510c4343 Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Mon, 23 Nov 2020 23:32:05 +0300 Subject: [PATCH] [FIR IDE] LC expand typealiases for applied annotations --- .../asJava/ultraLightClasses/typeAliases.kt | 2 ++ .../idea/frontend/api/fir/utils/firUtils.kt | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/compiler/testData/asJava/ultraLightClasses/typeAliases.kt b/compiler/testData/asJava/ultraLightClasses/typeAliases.kt index e4ce877d6de..ea215c1dcdb 100644 --- a/compiler/testData/asJava/ultraLightClasses/typeAliases.kt +++ b/compiler/testData/asJava/ultraLightClasses/typeAliases.kt @@ -3,3 +3,5 @@ typealias JO = JvmOverloads object O { @JO fun foo(a: Int = 1, b: String = "") {} } + +// FIR_COMPARISON \ No newline at end of file diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/firUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/firUtils.kt index 66eb41e600b..b939bb0e58b 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/firUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/firUtils.kt @@ -8,7 +8,9 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.psi +import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.toSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.classId import org.jetbrains.kotlin.fir.types.coneType @@ -16,6 +18,8 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirAnnotationCall import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.* import org.jetbrains.kotlin.psi.KtCallElement +import org.jetbrains.kotlin.fir.resolve.toSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol internal fun mapAnnotationParameters(annotationCall: FirAnnotationCall, session: FirSession): Map { @@ -53,13 +57,21 @@ private fun FirExpression.convertConstantExpression(): KtConstantValue = else -> KtUnsupportedConstantValue } +private fun ConeClassLikeType.expandTypeAliasIfNeeded(session: FirSession): ConeClassLikeType { + val firTypeAlias = lookupTag.toSymbol(session) as? FirTypeAliasSymbol ?: return this + val expandedType = firTypeAlias.fir.expandedTypeRef.coneType + return expandedType.fullyExpandedType(session) as? ConeClassLikeType + ?: return this +} + private fun convertAnnotation( annotationCall: FirAnnotationCall, session: FirSession ): KtFirAnnotationCall? { - val annotationCone = annotationCall.annotationTypeRef.coneType as? ConeClassLikeType ?: return null - val classId = annotationCone.classId ?: return null + val declaredCone = annotationCall.annotationTypeRef.coneType as? ConeClassLikeType ?: return null + + val classId = declaredCone.expandTypeAliasIfNeeded(session).classId ?: return null val resultList = mapAnnotationParameters(annotationCall, session).map { KtNamedConstantValue(it.key, it.value.convertConstantExpression())