From 4ca757446ad93faa9ff1b40d1c08aae09c3f265f Mon Sep 17 00:00:00 2001 From: Ivan Kochurkin Date: Thu, 16 Sep 2021 20:56:18 +0300 Subject: [PATCH] [FIR] Add getCorrespondingPlatformClass, getCorrespondingKotlinClass methods to FirPlatformClassMapper --- .../kotlin/fir/session/ComponentsContainers.kt | 1 + .../kotlin/fir/resolve/FirJavaClassMapper.kt | 14 +++++++++++++- .../fir/resolve/scopes/JvmMappedScopes.kt | 1 + .../fir/scopes}/FirPlatformClassMapper.kt | 17 +++++++++++++++-- 4 files changed, 30 insertions(+), 3 deletions(-) rename compiler/fir/{resolve/src/org/jetbrains/kotlin/fir/resolve => providers/src/org/jetbrains/kotlin/fir/scopes}/FirPlatformClassMapper.kt (63%) diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt index af100de5570..45ab6c462da 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.fir.resolve.providers.impl.FirQualifierResolverImpl import org.jetbrains.kotlin.fir.resolve.providers.impl.FirTypeResolverImpl import org.jetbrains.kotlin.fir.resolve.transformers.FirPhaseCheckingPhaseManager import org.jetbrains.kotlin.fir.resolve.transformers.plugin.GeneratedClassIndex +import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper import org.jetbrains.kotlin.fir.scopes.impl.FirDeclaredMemberScopeProvider import org.jetbrains.kotlin.fir.scopes.impl.FirIntersectionOverrideStorage import org.jetbrains.kotlin.fir.scopes.impl.FirSubstitutionOverrideStorage diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/FirJavaClassMapper.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/FirJavaClassMapper.kt index ce6b516b240..23f4d262d54 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/FirJavaClassMapper.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/FirJavaClassMapper.kt @@ -11,11 +11,23 @@ import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider +import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper +import org.jetbrains.kotlin.name.ClassId @NoMutableState class FirJavaClassMapper(private val session: FirSession) : FirPlatformClassMapper() { override fun getCorrespondingPlatformClass(declaration: FirClassLikeDeclaration): FirRegularClass? { - val javaClassId = JavaToKotlinClassMap.mapKotlinToJava(declaration.symbol.classId.asSingleFqName().toUnsafe()) + val javaClassId = getCorrespondingPlatformClass(declaration.symbol.classId) return javaClassId?.let { session.symbolProvider.getClassLikeSymbolByClassId(it)?.fir } as? FirRegularClass } + + override fun getCorrespondingPlatformClass(classId: ClassId?): ClassId? { + if (classId == null) return null + return JavaToKotlinClassMap.mapKotlinToJava(classId.asSingleFqName().toUnsafe()) + } + + override fun getCorrespondingKotlinClass(classId: ClassId?): ClassId? { + if (classId == null) return null + return JavaToKotlinClassMap.mapJavaToKotlin(classId.asSingleFqName()) + } } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/scopes/JvmMappedScopes.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/scopes/JvmMappedScopes.kt index 06623fcaf7c..5aacf562a4d 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/scopes/JvmMappedScopes.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/scopes/JvmMappedScopes.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope import org.jetbrains.kotlin.fir.scopes.FirTypeScope import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope import org.jetbrains.kotlin.fir.scopes.jvm.JvmMappedScope +import org.jetbrains.kotlin.fir.scopes.platformClassMapper import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirPlatformClassMapper.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirPlatformClassMapper.kt similarity index 63% rename from compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirPlatformClassMapper.kt rename to compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirPlatformClassMapper.kt index 4dd13c29bc9..94730f3a79a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirPlatformClassMapper.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirPlatformClassMapper.kt @@ -1,15 +1,16 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.fir.resolve +package org.jetbrains.kotlin.fir.scopes import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSessionComponent import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration import org.jetbrains.kotlin.fir.declarations.FirRegularClass +import org.jetbrains.kotlin.name.ClassId abstract class FirPlatformClassMapper : FirSessionComponent { @NoMutableState @@ -17,9 +18,21 @@ abstract class FirPlatformClassMapper : FirSessionComponent { override fun getCorrespondingPlatformClass(declaration: FirClassLikeDeclaration): FirRegularClass? { return null } + + override fun getCorrespondingPlatformClass(classId: ClassId?): ClassId? { + return null + } + + override fun getCorrespondingKotlinClass(classId: ClassId?): ClassId? { + return null + } } abstract fun getCorrespondingPlatformClass(declaration: FirClassLikeDeclaration): FirRegularClass? + + abstract fun getCorrespondingPlatformClass(classId: ClassId?): ClassId? + + abstract fun getCorrespondingKotlinClass(classId: ClassId?): ClassId? } val FirSession.platformClassMapper: FirPlatformClassMapper by FirSession.sessionComponentAccessor()