From 83d0a3e7a3d4edc6a62a757e0a051ec43a94a95c Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 1 Jun 2022 18:02:26 +0300 Subject: [PATCH] [FIR] Extract FirPluginKey into :core:compiler.common and rename it to GeneratedDeclarationKey This is needed to avoid dependency on :compiler:fir:fir2ir module in backend parts of compiler plugins. It will allow to publish those parts into jars for IDE, where they are needed for working of debugger and bytecode toolwindow --- .../kotlin/fir/backend/ConversionUtils.kt | 8 +++----- .../fir/backend/Fir2IrDeclarationStorage.kt | 4 ++-- .../fir/backend/IrPluginDeclarationOrigin.kt | 15 --------------- .../transformers/plugin/GeneratedClassIndex.kt | 8 ++++---- .../fir/declarations/FirDeclarationOrigin.kt | 9 +++++---- .../ir/declarations/IrDeclarationOrigin.kt | 18 ++++++++++++++++++ .../serialization/IrDeclarationDeserializer.kt | 4 ++-- .../kotlin/GeneratedDeclarationKey.kt | 8 ++++++++ .../generators/AdditionalMembersGenerator.kt | 5 +++-- .../plugin/generators/CompanionGenerator.kt | 10 ++++++---- .../generators/ExternalClassGenerator.kt | 3 ++- .../generators/MembersOfSerializerGenerator.kt | 5 +++-- .../TopLevelDeclarationsGenerator.kt | 5 +++-- .../fir/plugin/generators/generationUtils.kt | 5 +++-- .../plugin/AbstractTransformerForGenerator.kt | 14 +++++++------- ...TransformerForAdditionalMembersGenerator.kt | 8 ++++---- .../plugin/TransformerForCompanionGenerator.kt | 8 ++++---- .../TransformerForExternalClassGenerator.kt | 8 ++++---- ...nsformerForTopLevelDeclarationsGenerator.kt | 8 ++++---- .../parcelize.backend/build.gradle.kts | 1 - .../parcelize/ir/ParcelizeFirIrTransformer.kt | 4 ++-- .../fir/FirParcelizeDeclarationGenerator.kt | 5 +++-- .../parcelize/fir/FirParcelizePluginKey.kt | 4 ++-- 23 files changed, 92 insertions(+), 75 deletions(-) delete mode 100644 compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrPluginDeclarationOrigin.kt create mode 100644 core/compiler.common/src/org/jetbrains/kotlin/GeneratedDeclarationKey.kt diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index 4d4942944a7..a7ca7fbb5e2 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -9,13 +9,11 @@ import com.intellij.psi.PsiCompiledElement import org.jetbrains.kotlin.* import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.fir.* -import org.jetbrains.kotlin.fir.backend.generators.FakeOverrideGenerator import org.jetbrains.kotlin.fir.builder.buildPackageDirective import org.jetbrains.kotlin.fir.caches.getValue import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.builder.buildFile import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty -import org.jetbrains.kotlin.fir.declarations.utils.isExpect import org.jetbrains.kotlin.fir.declarations.utils.isInline import org.jetbrains.kotlin.fir.declarations.utils.isJava import org.jetbrains.kotlin.fir.declarations.utils.visibility @@ -44,6 +42,7 @@ import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin.GeneratedByPlugin import org.jetbrains.kotlin.ir.expressions.IrConst import org.jetbrains.kotlin.ir.expressions.IrConstKind import org.jetbrains.kotlin.ir.expressions.IrExpression @@ -53,7 +52,6 @@ import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.impl.IrErrorTypeImpl -import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.functions import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.SpecialNames @@ -544,7 +542,7 @@ fun FirClass.irOrigin(firProvider: FirProvider): IrDeclarationOrigin = when { firProvider.getFirClassifierContainerFileIfAny(symbol) != null -> IrDeclarationOrigin.DEFINED isJava -> IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB else -> when (val origin = origin) { - is FirDeclarationOrigin.Plugin -> IrPluginDeclarationOrigin(origin.key) + is FirDeclarationOrigin.Plugin -> GeneratedByPlugin(origin.key) else -> IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB } } @@ -654,7 +652,7 @@ fun FirSession.createFilesWithGeneratedDeclarations(): List { fun FirDeclaration?.computeIrOrigin(predefinedOrigin: IrDeclarationOrigin? = null): IrDeclarationOrigin { return predefinedOrigin - ?: (this?.origin as? FirDeclarationOrigin.Plugin)?.let { IrPluginDeclarationOrigin(it.key) } + ?: (this?.origin as? FirDeclarationOrigin.Plugin)?.let { GeneratedByPlugin(it.key) } ?: (this as? FirValueParameter)?.name?.let { when (it) { SpecialNames.UNDERSCORE_FOR_UNUSED_VAR -> IrDeclarationOrigin.UNDERSCORE_PARAMETER diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 18474914d31..e0cb3c61db6 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.fir.backend import org.jetbrains.kotlin.KtFakeSourceElementKind -import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.builtins.StandardNames.BUILT_INS_PACKAGE_FQ_NAMES import org.jetbrains.kotlin.descriptors.DescriptorVisibility import org.jetbrains.kotlin.descriptors.Modality @@ -39,6 +38,7 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin.GeneratedByPlugin import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyClass import org.jetbrains.kotlin.ir.expressions.IrExpression @@ -1484,7 +1484,7 @@ class Fir2IrDeclarationStorage( (symbol.fir.origin is FirDeclarationOrigin.Enhancement || symbol.fir.origin is FirDeclarationOrigin.Java) -> { IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB } - symbol.origin is FirDeclarationOrigin.Plugin -> IrPluginDeclarationOrigin((symbol.origin as FirDeclarationOrigin.Plugin).key) + symbol.origin is FirDeclarationOrigin.Plugin -> GeneratedByPlugin((symbol.origin as FirDeclarationOrigin.Plugin).key) else -> parentOrigin } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrPluginDeclarationOrigin.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrPluginDeclarationOrigin.kt deleted file mode 100644 index ea267d0b528..00000000000 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrPluginDeclarationOrigin.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * 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.backend - -import org.jetbrains.kotlin.fir.declarations.FirPluginKey -import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin - -class IrPluginDeclarationOrigin(val pluginKey: FirPluginKey) : IrDeclarationOrigin { - override fun toString(): String { - return "GENERATED[${pluginKey}]" - } -} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/GeneratedClassIndex.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/GeneratedClassIndex.kt index 8b2bc92d25e..96173218155 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/GeneratedClassIndex.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/GeneratedClassIndex.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.FirSessionComponent import org.jetbrains.kotlin.fir.ThreadSafeMutableState import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin -import org.jetbrains.kotlin.fir.declarations.FirPluginKey +import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.fir.declarations.FirRegularClass data class GeneratedClass(val klass: FirRegularClass, val owner: FirDeclaration) @@ -24,21 +24,21 @@ abstract class GeneratedClassIndex : FirSessionComponent { } abstract fun registerClass(klass: FirRegularClass, owner: FirDeclaration) - abstract operator fun get(key: FirPluginKey): List + abstract operator fun get(key: GeneratedDeclarationKey): List } val FirSession.generatedClassIndex: GeneratedClassIndex by FirSession.sessionComponentAccessor() @ThreadSafeMutableState private class GeneratedClassIndexImpl : GeneratedClassIndex() { - private val index: ArrayListMultimap = ArrayListMultimap.create() + private val index: ArrayListMultimap = ArrayListMultimap.create() override fun registerClass(klass: FirRegularClass, owner: FirDeclaration) { val key = (klass.origin as FirDeclarationOrigin.Plugin).key index.put(key, GeneratedClass(klass, owner)) } - override fun get(key: FirPluginKey): List { + override fun get(key: GeneratedDeclarationKey): List { return index.get(key) } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt index 1ac1fb43110..ad85db4c3b2 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.fir.declarations +import org.jetbrains.kotlin.GeneratedDeclarationKey + sealed class FirDeclarationOrigin( private val displayName: String? = null, val fromSupertypes: Boolean = false, @@ -31,13 +33,12 @@ sealed class FirDeclarationOrigin( object RenamedForOverride : FirDeclarationOrigin() object WrappedIntegerOperator : FirDeclarationOrigin() - class Plugin(val key: FirPluginKey) : FirDeclarationOrigin(displayName = "Plugin[$key]", generated = true) + class Plugin(val key: GeneratedDeclarationKey) : FirDeclarationOrigin(displayName = "Plugin[$key]", generated = true) override fun toString(): String { return displayName ?: this::class.simpleName!! } } -abstract class FirPluginKey { - val origin: FirDeclarationOrigin = FirDeclarationOrigin.Plugin(this) -} +val GeneratedDeclarationKey.origin: FirDeclarationOrigin + get() = FirDeclarationOrigin.Plugin(this) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt index c64b71f36d3..b305fda4116 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.ir.declarations +import org.jetbrains.kotlin.GeneratedDeclarationKey + interface IrDeclarationOrigin { object DEFINED : IrDeclarationOriginImpl("DEFINED") object FAKE_OVERRIDE : IrDeclarationOriginImpl("FAKE_OVERRIDE") @@ -78,6 +80,22 @@ interface IrDeclarationOrigin { object SHARED_VARIABLE_IN_EVALUATOR_FRAGMENT : IrDeclarationOriginImpl("SHARED_VARIABLE_IN_EVALUATOR_FRAGMENT", isSynthetic = true) + class GeneratedByPlugin(val pluginKey: GeneratedDeclarationKey) : IrDeclarationOrigin { + override fun toString(): String { + return "GENERATED[${pluginKey}]" + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is GeneratedByPlugin) return false + return pluginKey == other.pluginKey + } + + override fun hashCode(): Int { + return pluginKey.hashCode() + } + } + val isSynthetic: Boolean get() = false } diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt index ab607fda168..ad3c12d7413 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt @@ -771,7 +771,7 @@ class IrDeclarationDeserializer( companion object { private val allKnownDeclarationOrigins = IrDeclarationOrigin::class.nestedClasses.toList() private val declarationOriginIndex = - allKnownDeclarationOrigins.map { it.objectInstance as IrDeclarationOriginImpl }.associateBy { it.name } + allKnownDeclarationOrigins.mapNotNull { it.objectInstance as? IrDeclarationOriginImpl }.associateBy { it.name } } private fun deserializeIrDeclarationOrigin(protoName: Int): IrDeclarationOriginImpl { @@ -821,4 +821,4 @@ class IrDeclarationDeserializer( else -> false } } -} \ No newline at end of file +} diff --git a/core/compiler.common/src/org/jetbrains/kotlin/GeneratedDeclarationKey.kt b/core/compiler.common/src/org/jetbrains/kotlin/GeneratedDeclarationKey.kt new file mode 100644 index 00000000000..e181c1f81ff --- /dev/null +++ b/core/compiler.common/src/org/jetbrains/kotlin/GeneratedDeclarationKey.kt @@ -0,0 +1,8 @@ +/* + * Copyright 2010-2022 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 + +abstract class GeneratedDeclarationKey diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AdditionalMembersGenerator.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AdditionalMembersGenerator.kt index c6935c017d4..c888850304a 100644 --- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AdditionalMembersGenerator.kt +++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AdditionalMembersGenerator.kt @@ -10,10 +10,11 @@ import org.jetbrains.kotlin.descriptors.EffectiveVisibility import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirPluginKey +import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl +import org.jetbrains.kotlin.fir.declarations.origin import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar import org.jetbrains.kotlin.fir.extensions.MemberGenerationContext @@ -93,7 +94,7 @@ class AdditionalMembersGenerator(session: FirSession) : FirDeclarationGeneration return if (classSymbol in matchedClasses) setOf(NESTED_NAME) else emptySet() } - object Key : FirPluginKey() { + object Key : GeneratedDeclarationKey() { override fun toString(): String { return "AllOpenMembersGeneratorKey" } diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/CompanionGenerator.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/CompanionGenerator.kt index bd2974fe96c..0c4a20e73ba 100644 --- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/CompanionGenerator.kt +++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/CompanionGenerator.kt @@ -11,11 +11,12 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin -import org.jetbrains.kotlin.fir.declarations.FirPluginKey +import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl +import org.jetbrains.kotlin.fir.declarations.origin import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar import org.jetbrains.kotlin.fir.extensions.MemberGenerationContext @@ -71,8 +72,9 @@ class CompanionGenerator(session: FirSession) : FirDeclarationGenerationExtensio } override fun generateFunctions(callableId: CallableId, context: MemberGenerationContext?): List { - val owner = context?.owner - if (owner == null || owner.origin != Key.origin) return emptyList() + val owner = context?.owner ?: return emptyList() + val ownerKey = (owner.origin as? FirDeclarationOrigin.Plugin)?.key ?: return emptyList() + if (ownerKey != Key) return emptyList() if (callableId.callableName != FOO_NAME) return emptyList() val function = buildSimpleFunction { resolvePhase = FirResolvePhase.BODY_RESOLVE @@ -118,7 +120,7 @@ class CompanionGenerator(session: FirSession) : FirDeclarationGenerationExtensio } } - object Key : FirPluginKey() { + object Key : GeneratedDeclarationKey() { override fun toString(): String { return "CompanionGeneratorKey" } diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/ExternalClassGenerator.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/ExternalClassGenerator.kt index d4a6cb28a48..7fee784900b 100644 --- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/ExternalClassGenerator.kt +++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/ExternalClassGenerator.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.plugin.generators +import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.EffectiveVisibility import org.jetbrains.kotlin.descriptors.Modality @@ -45,7 +46,7 @@ class ExternalClassGenerator(session: FirSession) : FirDeclarationGenerationExte private val PREDICATE: DeclarationPredicate = annotated("ExternalClassWithNested".fqn()) } - object Key : FirPluginKey() { + object Key : GeneratedDeclarationKey() { override fun toString(): String { return "AllOpenClassGeneratorKey" } diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/MembersOfSerializerGenerator.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/MembersOfSerializerGenerator.kt index 95d766a8d4f..7c43014a331 100644 --- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/MembersOfSerializerGenerator.kt +++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/MembersOfSerializerGenerator.kt @@ -9,11 +9,12 @@ import org.jetbrains.kotlin.descriptors.EffectiveVisibility import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirPluginKey +import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl +import org.jetbrains.kotlin.fir.declarations.origin import org.jetbrains.kotlin.fir.expressions.builder.buildBlock import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar @@ -100,5 +101,5 @@ class MembersOfSerializerGenerator(session: FirSession) : FirDeclarationGenerati register(SERIALIZABLE_PREDICATE, CORE_SERIALIZER_PREDICATE) } - object Key : FirPluginKey() + object Key : GeneratedDeclarationKey() } diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/TopLevelDeclarationsGenerator.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/TopLevelDeclarationsGenerator.kt index 47ad0b5ad8f..a08552aedb6 100644 --- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/TopLevelDeclarationsGenerator.kt +++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/TopLevelDeclarationsGenerator.kt @@ -9,11 +9,12 @@ import org.jetbrains.kotlin.descriptors.EffectiveVisibility import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirPluginKey +import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl +import org.jetbrains.kotlin.fir.declarations.origin import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar import org.jetbrains.kotlin.fir.extensions.MemberGenerationContext @@ -93,7 +94,7 @@ class TopLevelDeclarationsGenerator(session: FirSession) : FirDeclarationGenerat } } - object Key : FirPluginKey() + object Key : GeneratedDeclarationKey() override fun FirDeclarationPredicateRegistrar.registerPredicates() { register(PREDICATE) diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/generationUtils.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/generationUtils.kt index 76134080680..824ebdce297 100644 --- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/generationUtils.kt +++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/generationUtils.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.plugin.generators +import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.descriptors.EffectiveVisibility import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities @@ -33,7 +34,7 @@ import org.jetbrains.kotlin.name.ClassId fun FirDeclarationGenerationExtension.buildMaterializeFunction( matchedClassSymbol: FirClassLikeSymbol<*>, callableId: CallableId, - key: FirPluginKey + key: GeneratedDeclarationKey ): FirSimpleFunction { return buildSimpleFunction { resolvePhase = FirResolvePhase.BODY_RESOLVE @@ -61,7 +62,7 @@ fun FirDeclarationGenerationExtension.buildMaterializeFunction( } @OptIn(SymbolInternals::class) -fun FirDeclarationGenerationExtension.buildConstructor(classId: ClassId, isInner: Boolean, key: FirPluginKey): FirConstructor { +fun FirDeclarationGenerationExtension.buildConstructor(classId: ClassId, isInner: Boolean, key: GeneratedDeclarationKey): FirConstructor { val lookupTag = ConeClassLikeLookupTagImpl(classId) return buildPrimaryConstructor { resolvePhase = FirResolvePhase.BODY_RESOLVE diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/AbstractTransformerForGenerator.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/AbstractTransformerForGenerator.kt index 2ccd14b63eb..57a6a1a8874 100644 --- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/AbstractTransformerForGenerator.kt +++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/AbstractTransformerForGenerator.kt @@ -6,10 +6,10 @@ package org.jetbrains.kotlin.ir.plugin import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext -import org.jetbrains.kotlin.fir.backend.IrPluginDeclarationOrigin -import org.jetbrains.kotlin.fir.declarations.FirPluginKey +import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin.GeneratedByPlugin import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl @@ -24,9 +24,9 @@ abstract class AbstractTransformerForGenerator(protected val context: IrPluginCo protected val irFactory = context.irFactory protected val irBuiltIns = context.irBuiltIns - abstract fun interestedIn(key: FirPluginKey): Boolean - abstract fun generateBodyForFunction(function: IrSimpleFunction, key: FirPluginKey): IrBody? - abstract fun generateBodyForConstructor(constructor: IrConstructor, key: FirPluginKey): IrBody? + abstract fun interestedIn(key: GeneratedDeclarationKey): Boolean + abstract fun generateBodyForFunction(function: IrSimpleFunction, key: GeneratedDeclarationKey): IrBody? + abstract fun generateBodyForConstructor(constructor: IrConstructor, key: GeneratedDeclarationKey): IrBody? final override fun visitElement(element: IrElement) { when (element) { @@ -39,14 +39,14 @@ abstract class AbstractTransformerForGenerator(protected val context: IrPluginCo final override fun visitSimpleFunction(declaration: IrSimpleFunction) { val origin = declaration.origin - if (origin !is IrPluginDeclarationOrigin || !interestedIn(origin.pluginKey)) return + if (origin !is GeneratedByPlugin || !interestedIn(origin.pluginKey)) return require(declaration.body == null) declaration.body = generateBodyForFunction(declaration, origin.pluginKey) } final override fun visitConstructor(declaration: IrConstructor) { val origin = declaration.origin - if (origin !is IrPluginDeclarationOrigin || !interestedIn(origin.pluginKey)) return + if (origin !is GeneratedByPlugin || !interestedIn(origin.pluginKey)) return require(declaration.body == null) declaration.body = generateBodyForConstructor(declaration, origin.pluginKey) } diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForAdditionalMembersGenerator.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForAdditionalMembersGenerator.kt index e244e0bfb06..7f415d3e246 100644 --- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForAdditionalMembersGenerator.kt +++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForAdditionalMembersGenerator.kt @@ -6,22 +6,22 @@ package org.jetbrains.kotlin.ir.plugin import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext -import org.jetbrains.kotlin.fir.declarations.FirPluginKey +import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.fir.plugin.generators.AdditionalMembersGenerator import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.expressions.IrBody class TransformerForAdditionalMembersGenerator(context: IrPluginContext) : AbstractTransformerForGenerator(context) { - override fun interestedIn(key: FirPluginKey): Boolean { + override fun interestedIn(key: GeneratedDeclarationKey): Boolean { return key == AdditionalMembersGenerator.Key } - override fun generateBodyForFunction(function: IrSimpleFunction, key: FirPluginKey): IrBody? { + override fun generateBodyForFunction(function: IrSimpleFunction, key: GeneratedDeclarationKey): IrBody? { return generateDefaultBodyForMaterializeFunction(function) } - override fun generateBodyForConstructor(constructor: IrConstructor, key: FirPluginKey): IrBody? { + override fun generateBodyForConstructor(constructor: IrConstructor, key: GeneratedDeclarationKey): IrBody? { return generateBodyForDefaultConstructor(constructor) } } diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForCompanionGenerator.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForCompanionGenerator.kt index 687ed419916..cb0ddf937d6 100644 --- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForCompanionGenerator.kt +++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForCompanionGenerator.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.ir.plugin import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext -import org.jetbrains.kotlin.fir.declarations.FirPluginKey +import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.fir.plugin.generators.CompanionGenerator import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction @@ -16,17 +16,17 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl class TransformerForCompanionGenerator(context: IrPluginContext) : AbstractTransformerForGenerator(context) { - override fun interestedIn(key: FirPluginKey): Boolean { + override fun interestedIn(key: GeneratedDeclarationKey): Boolean { return key == CompanionGenerator.Key } - override fun generateBodyForFunction(function: IrSimpleFunction, key: FirPluginKey): IrBody { + override fun generateBodyForFunction(function: IrSimpleFunction, key: GeneratedDeclarationKey): IrBody { val const = IrConstImpl(-1, -1, irBuiltIns.intType, IrConstKind.Int, value = 10) val returnStatement = IrReturnImpl(-1, -1, irBuiltIns.nothingType, function.symbol, const) return irFactory.createBlockBody(-1, -1, listOf(returnStatement)) } - override fun generateBodyForConstructor(constructor: IrConstructor, key: FirPluginKey): IrBody? { + override fun generateBodyForConstructor(constructor: IrConstructor, key: GeneratedDeclarationKey): IrBody? { return generateBodyForDefaultConstructor(constructor) } } diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForExternalClassGenerator.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForExternalClassGenerator.kt index a8e1cf28dcc..32c970bd343 100644 --- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForExternalClassGenerator.kt +++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForExternalClassGenerator.kt @@ -6,22 +6,22 @@ package org.jetbrains.kotlin.ir.plugin import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext -import org.jetbrains.kotlin.fir.declarations.FirPluginKey +import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.fir.plugin.generators.ExternalClassGenerator import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.expressions.IrBody class TransformerForExternalClassGenerator(context: IrPluginContext) : AbstractTransformerForGenerator(context) { - override fun interestedIn(key: FirPluginKey): Boolean { + override fun interestedIn(key: GeneratedDeclarationKey): Boolean { return key == ExternalClassGenerator.Key } - override fun generateBodyForFunction(function: IrSimpleFunction, key: FirPluginKey): IrBody? { + override fun generateBodyForFunction(function: IrSimpleFunction, key: GeneratedDeclarationKey): IrBody? { return generateDefaultBodyForMaterializeFunction(function) } - override fun generateBodyForConstructor(constructor: IrConstructor, key: FirPluginKey): IrBody? { + override fun generateBodyForConstructor(constructor: IrConstructor, key: GeneratedDeclarationKey): IrBody? { return generateBodyForDefaultConstructor(constructor) } } diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForTopLevelDeclarationsGenerator.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForTopLevelDeclarationsGenerator.kt index 620d4dad649..5838cd34871 100644 --- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForTopLevelDeclarationsGenerator.kt +++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/TransformerForTopLevelDeclarationsGenerator.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.ir.plugin import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext -import org.jetbrains.kotlin.fir.declarations.FirPluginKey +import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.fir.plugin.generators.TopLevelDeclarationsGenerator import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction @@ -17,18 +17,18 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl import org.jetbrains.kotlin.ir.types.classFqName class TransformerForTopLevelDeclarationsGenerator(context: IrPluginContext) : AbstractTransformerForGenerator(context) { - override fun interestedIn(key: FirPluginKey): Boolean { + override fun interestedIn(key: GeneratedDeclarationKey): Boolean { return key == TopLevelDeclarationsGenerator.Key } - override fun generateBodyForFunction(function: IrSimpleFunction, key: FirPluginKey): IrBody { + override fun generateBodyForFunction(function: IrSimpleFunction, key: GeneratedDeclarationKey): IrBody { val className = function.valueParameters.single().type.classFqName?.asString() ?: "" val const = IrConstImpl(-1, -1, irBuiltIns.stringType, IrConstKind.String, className) val returnExpression = IrReturnImpl(-1, -1, irBuiltIns.nothingType, function.symbol, const) return irFactory.createBlockBody(-1, -1, listOf(returnExpression)) } - override fun generateBodyForConstructor(constructor: IrConstructor, key: FirPluginKey): IrBody? { + override fun generateBodyForConstructor(constructor: IrConstructor, key: GeneratedDeclarationKey): IrBody? { return null } } diff --git a/plugins/parcelize/parcelize-compiler/parcelize.backend/build.gradle.kts b/plugins/parcelize/parcelize-compiler/parcelize.backend/build.gradle.kts index b3b140e76db..8ee691fa134 100644 --- a/plugins/parcelize/parcelize-compiler/parcelize.backend/build.gradle.kts +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/build.gradle.kts @@ -15,7 +15,6 @@ dependencies { compileOnly(project(":compiler:backend.jvm")) compileOnly(project(":compiler:ir.tree.impl")) compileOnly(project(":compiler:fir:tree")) - compileOnly(project(":compiler:fir:fir2ir")) compileOnly(intellijCore()) compileOnly(commonDependency("org.jetbrains.intellij.deps:asm-all")) } diff --git a/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeFirIrTransformer.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeFirIrTransformer.kt index e831f2918e1..e577d2e433d 100644 --- a/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeFirIrTransformer.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeFirIrTransformer.kt @@ -7,9 +7,9 @@ package org.jetbrains.kotlin.parcelize.ir import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.fir.backend.IrPluginDeclarationOrigin import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin.GeneratedByPlugin import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.util.companionObject import org.jetbrains.kotlin.ir.util.functions @@ -47,7 +47,7 @@ class ParcelizeFirIrTransformer( for (function in declaration.functions) { val origin = function.origin - if (origin !is IrPluginDeclarationOrigin || origin.pluginKey != FirParcelizePluginKey) continue + if (origin !is GeneratedByPlugin || origin.pluginKey != FirParcelizePluginKey) continue when (function.name.identifier) { ParcelizeSyntheticComponent.ComponentKind.DESCRIBE_CONTENTS.methodName -> { function.generateDescribeContentsBody(parcelableProperties) diff --git a/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt index 698b53b0aec..3a86692efec 100644 --- a/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt @@ -9,11 +9,12 @@ import org.jetbrains.kotlin.descriptors.EffectiveVisibility import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirPluginKey +import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl +import org.jetbrains.kotlin.fir.declarations.origin import org.jetbrains.kotlin.fir.declarations.utils.modality import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar @@ -177,7 +178,7 @@ class FirParcelizeDeclarationGenerator(session: FirSession) : FirDeclarationGene } } - private val key: FirPluginKey + private val key: GeneratedDeclarationKey get() = FirParcelizePluginKey override fun FirDeclarationPredicateRegistrar.registerPredicates() { diff --git a/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizePluginKey.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizePluginKey.kt index f7e023b2ffc..6deb75259b0 100644 --- a/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizePluginKey.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizePluginKey.kt @@ -5,9 +5,9 @@ package org.jetbrains.kotlin.parcelize.fir -import org.jetbrains.kotlin.fir.declarations.FirPluginKey +import org.jetbrains.kotlin.GeneratedDeclarationKey -object FirParcelizePluginKey : FirPluginKey() { +object FirParcelizePluginKey : GeneratedDeclarationKey() { override fun toString(): String { return "FirParcelize" }