From edab3e3ba9cda723160dfad72f059a462650252d Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Tue, 21 Jul 2020 16:35:28 +0300 Subject: [PATCH] [PLUGIN API] Add `referenceTypeAlias` API to `IrPluginContext` - attempt to fix KT-40193 --- .../backend/common/extensions/IrPluginContext.kt | 6 ++---- .../backend/common/extensions/IrPluginContextImpl.kt | 10 ++++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/extensions/IrPluginContext.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/extensions/IrPluginContext.kt index e51e39fc902..ea672085ee6 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/extensions/IrPluginContext.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/extensions/IrPluginContext.kt @@ -9,10 +9,7 @@ import org.jetbrains.kotlin.backend.common.ir.BuiltinSymbolsBase import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.ir.builders.IrGeneratorContext -import org.jetbrains.kotlin.ir.symbols.IrClassSymbol -import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol -import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol -import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol +import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.util.ReferenceSymbolTable import org.jetbrains.kotlin.ir.util.TypeTranslator import org.jetbrains.kotlin.name.FqName @@ -40,6 +37,7 @@ interface IrPluginContext : IrGeneratorContext { // The following API is experimental fun referenceClass(fqName: FqName): IrClassSymbol? + fun referenceTypeAlias(fqName: FqName): IrTypeAliasSymbol? fun referenceConstructors(classFqn: FqName): Collection fun referenceFunctions(fqName: FqName): Collection fun referenceProperties(fqName: FqName): Collection diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/extensions/IrPluginContextImpl.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/extensions/IrPluginContextImpl.kt index 1717527f1ca..1d0fcd2c8cd 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/extensions/IrPluginContextImpl.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/extensions/IrPluginContextImpl.kt @@ -85,6 +85,16 @@ open class IrPluginContextImpl( } } + override fun referenceTypeAlias(fqName: FqName): IrTypeAliasSymbol? { + assert(!fqName.isRoot) + return resolveSymbol(fqName.parent()) { scope -> + val aliasDescriptor = scope.getContributedClassifier(fqName.shortName(), NoLookupLocation.FROM_BACKEND) as? TypeAliasDescriptor? + aliasDescriptor?.let { + st.referenceTypeAlias(it) + } + } + } + override fun referenceConstructors(classFqn: FqName): Collection { val classSymbol = referenceClass(classFqn) ?: error("Cannot find class $classFqn") return classSymbol.owner.declarations.filterIsInstance().map { it.symbol }