[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
This commit is contained in:
Dmitriy Novozhilov
2022-06-01 18:02:26 +03:00
committed by teamcity
parent a84ece7233
commit 83d0a3e7a3
23 changed files with 92 additions and 75 deletions
@@ -9,13 +9,11 @@ import com.intellij.psi.PsiCompiledElement
import org.jetbrains.kotlin.* import org.jetbrains.kotlin.*
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.fir.* 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.builder.buildPackageDirective
import org.jetbrains.kotlin.fir.caches.getValue import org.jetbrains.kotlin.fir.caches.getValue
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.buildFile import org.jetbrains.kotlin.fir.declarations.builder.buildFile
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty 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.isInline
import org.jetbrains.kotlin.fir.declarations.utils.isJava import org.jetbrains.kotlin.fir.declarations.utils.isJava
import org.jetbrains.kotlin.fir.declarations.utils.visibility 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.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
import org.jetbrains.kotlin.ir.declarations.* 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.IrConst
import org.jetbrains.kotlin.ir.expressions.IrConstKind import org.jetbrains.kotlin.ir.expressions.IrConstKind
import org.jetbrains.kotlin.ir.expressions.IrExpression 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.symbols.impl.IrValueParameterSymbolImpl
import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.types.impl.IrErrorTypeImpl 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.ir.util.functions
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.name.SpecialNames
@@ -544,7 +542,7 @@ fun FirClass.irOrigin(firProvider: FirProvider): IrDeclarationOrigin = when {
firProvider.getFirClassifierContainerFileIfAny(symbol) != null -> IrDeclarationOrigin.DEFINED firProvider.getFirClassifierContainerFileIfAny(symbol) != null -> IrDeclarationOrigin.DEFINED
isJava -> IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB isJava -> IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB
else -> when (val origin = origin) { else -> when (val origin = origin) {
is FirDeclarationOrigin.Plugin -> IrPluginDeclarationOrigin(origin.key) is FirDeclarationOrigin.Plugin -> GeneratedByPlugin(origin.key)
else -> IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB else -> IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB
} }
} }
@@ -654,7 +652,7 @@ fun FirSession.createFilesWithGeneratedDeclarations(): List<FirFile> {
fun FirDeclaration?.computeIrOrigin(predefinedOrigin: IrDeclarationOrigin? = null): IrDeclarationOrigin { fun FirDeclaration?.computeIrOrigin(predefinedOrigin: IrDeclarationOrigin? = null): IrDeclarationOrigin {
return predefinedOrigin 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 { ?: (this as? FirValueParameter)?.name?.let {
when (it) { when (it) {
SpecialNames.UNDERSCORE_FOR_UNUSED_VAR -> IrDeclarationOrigin.UNDERSCORE_PARAMETER SpecialNames.UNDERSCORE_FOR_UNUSED_VAR -> IrDeclarationOrigin.UNDERSCORE_PARAMETER
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.backend package org.jetbrains.kotlin.fir.backend
import org.jetbrains.kotlin.KtFakeSourceElementKind 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.builtins.StandardNames.BUILT_INS_PACKAGE_FQ_NAMES
import org.jetbrains.kotlin.descriptors.DescriptorVisibility import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Modality 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.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
import org.jetbrains.kotlin.ir.declarations.* 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.impl.IrVariableImpl
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyClass import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyClass
import org.jetbrains.kotlin.ir.expressions.IrExpression 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) -> { (symbol.fir.origin is FirDeclarationOrigin.Enhancement || symbol.fir.origin is FirDeclarationOrigin.Java) -> {
IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB 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 else -> parentOrigin
} }
@@ -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}]"
}
}
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.FirSessionComponent
import org.jetbrains.kotlin.fir.ThreadSafeMutableState import org.jetbrains.kotlin.fir.ThreadSafeMutableState
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin 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 import org.jetbrains.kotlin.fir.declarations.FirRegularClass
data class GeneratedClass(val klass: FirRegularClass, val owner: FirDeclaration) 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 fun registerClass(klass: FirRegularClass, owner: FirDeclaration)
abstract operator fun get(key: FirPluginKey): List<GeneratedClass> abstract operator fun get(key: GeneratedDeclarationKey): List<GeneratedClass>
} }
val FirSession.generatedClassIndex: GeneratedClassIndex by FirSession.sessionComponentAccessor() val FirSession.generatedClassIndex: GeneratedClassIndex by FirSession.sessionComponentAccessor()
@ThreadSafeMutableState @ThreadSafeMutableState
private class GeneratedClassIndexImpl : GeneratedClassIndex() { private class GeneratedClassIndexImpl : GeneratedClassIndex() {
private val index: ArrayListMultimap<FirPluginKey, GeneratedClass> = ArrayListMultimap.create() private val index: ArrayListMultimap<GeneratedDeclarationKey, GeneratedClass> = ArrayListMultimap.create()
override fun registerClass(klass: FirRegularClass, owner: FirDeclaration) { override fun registerClass(klass: FirRegularClass, owner: FirDeclaration) {
val key = (klass.origin as FirDeclarationOrigin.Plugin).key val key = (klass.origin as FirDeclarationOrigin.Plugin).key
index.put(key, GeneratedClass(klass, owner)) index.put(key, GeneratedClass(klass, owner))
} }
override fun get(key: FirPluginKey): List<GeneratedClass> { override fun get(key: GeneratedDeclarationKey): List<GeneratedClass> {
return index.get(key) return index.get(key)
} }
} }
@@ -5,6 +5,8 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.GeneratedDeclarationKey
sealed class FirDeclarationOrigin( sealed class FirDeclarationOrigin(
private val displayName: String? = null, private val displayName: String? = null,
val fromSupertypes: Boolean = false, val fromSupertypes: Boolean = false,
@@ -31,13 +33,12 @@ sealed class FirDeclarationOrigin(
object RenamedForOverride : FirDeclarationOrigin() object RenamedForOverride : FirDeclarationOrigin()
object WrappedIntegerOperator : 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 { override fun toString(): String {
return displayName ?: this::class.simpleName!! return displayName ?: this::class.simpleName!!
} }
} }
abstract class FirPluginKey { val GeneratedDeclarationKey.origin: FirDeclarationOrigin
val origin: FirDeclarationOrigin = FirDeclarationOrigin.Plugin(this) get() = FirDeclarationOrigin.Plugin(this)
}
@@ -5,6 +5,8 @@
package org.jetbrains.kotlin.ir.declarations package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.GeneratedDeclarationKey
interface IrDeclarationOrigin { interface IrDeclarationOrigin {
object DEFINED : IrDeclarationOriginImpl("DEFINED") object DEFINED : IrDeclarationOriginImpl("DEFINED")
object FAKE_OVERRIDE : IrDeclarationOriginImpl("FAKE_OVERRIDE") 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) 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 val isSynthetic: Boolean get() = false
} }
@@ -771,7 +771,7 @@ class IrDeclarationDeserializer(
companion object { companion object {
private val allKnownDeclarationOrigins = IrDeclarationOrigin::class.nestedClasses.toList() private val allKnownDeclarationOrigins = IrDeclarationOrigin::class.nestedClasses.toList()
private val declarationOriginIndex = 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 { private fun deserializeIrDeclarationOrigin(protoName: Int): IrDeclarationOriginImpl {
@@ -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
@@ -10,10 +10,11 @@ import org.jetbrains.kotlin.descriptors.EffectiveVisibility
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession 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.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl 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.FirDeclarationGenerationExtension
import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar
import org.jetbrains.kotlin.fir.extensions.MemberGenerationContext 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() return if (classSymbol in matchedClasses) setOf(NESTED_NAME) else emptySet()
} }
object Key : FirPluginKey() { object Key : GeneratedDeclarationKey() {
override fun toString(): String { override fun toString(): String {
return "AllOpenMembersGeneratorKey" return "AllOpenMembersGeneratorKey"
} }
@@ -11,11 +11,12 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin 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.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl 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.FirDeclarationGenerationExtension
import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar
import org.jetbrains.kotlin.fir.extensions.MemberGenerationContext import org.jetbrains.kotlin.fir.extensions.MemberGenerationContext
@@ -71,8 +72,9 @@ class CompanionGenerator(session: FirSession) : FirDeclarationGenerationExtensio
} }
override fun generateFunctions(callableId: CallableId, context: MemberGenerationContext?): List<FirNamedFunctionSymbol> { override fun generateFunctions(callableId: CallableId, context: MemberGenerationContext?): List<FirNamedFunctionSymbol> {
val owner = context?.owner val owner = context?.owner ?: return emptyList()
if (owner == null || owner.origin != Key.origin) return emptyList() val ownerKey = (owner.origin as? FirDeclarationOrigin.Plugin)?.key ?: return emptyList()
if (ownerKey != Key) return emptyList()
if (callableId.callableName != FOO_NAME) return emptyList() if (callableId.callableName != FOO_NAME) return emptyList()
val function = buildSimpleFunction { val function = buildSimpleFunction {
resolvePhase = FirResolvePhase.BODY_RESOLVE resolvePhase = FirResolvePhase.BODY_RESOLVE
@@ -118,7 +120,7 @@ class CompanionGenerator(session: FirSession) : FirDeclarationGenerationExtensio
} }
} }
object Key : FirPluginKey() { object Key : GeneratedDeclarationKey() {
override fun toString(): String { override fun toString(): String {
return "CompanionGeneratorKey" return "CompanionGeneratorKey"
} }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir.plugin.generators package org.jetbrains.kotlin.fir.plugin.generators
import org.jetbrains.kotlin.GeneratedDeclarationKey
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.EffectiveVisibility import org.jetbrains.kotlin.descriptors.EffectiveVisibility
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
@@ -45,7 +46,7 @@ class ExternalClassGenerator(session: FirSession) : FirDeclarationGenerationExte
private val PREDICATE: DeclarationPredicate = annotated("ExternalClassWithNested".fqn()) private val PREDICATE: DeclarationPredicate = annotated("ExternalClassWithNested".fqn())
} }
object Key : FirPluginKey() { object Key : GeneratedDeclarationKey() {
override fun toString(): String { override fun toString(): String {
return "AllOpenClassGeneratorKey" return "AllOpenClassGeneratorKey"
} }
@@ -9,11 +9,12 @@ import org.jetbrains.kotlin.descriptors.EffectiveVisibility
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession 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.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl 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.expressions.builder.buildBlock
import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension
import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar
@@ -100,5 +101,5 @@ class MembersOfSerializerGenerator(session: FirSession) : FirDeclarationGenerati
register(SERIALIZABLE_PREDICATE, CORE_SERIALIZER_PREDICATE) register(SERIALIZABLE_PREDICATE, CORE_SERIALIZER_PREDICATE)
} }
object Key : FirPluginKey() object Key : GeneratedDeclarationKey()
} }
@@ -9,11 +9,12 @@ import org.jetbrains.kotlin.descriptors.EffectiveVisibility
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession 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.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl 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.FirDeclarationGenerationExtension
import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar
import org.jetbrains.kotlin.fir.extensions.MemberGenerationContext 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() { override fun FirDeclarationPredicateRegistrar.registerPredicates() {
register(PREDICATE) register(PREDICATE)
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir.plugin.generators package org.jetbrains.kotlin.fir.plugin.generators
import org.jetbrains.kotlin.GeneratedDeclarationKey
import org.jetbrains.kotlin.descriptors.EffectiveVisibility import org.jetbrains.kotlin.descriptors.EffectiveVisibility
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
@@ -33,7 +34,7 @@ import org.jetbrains.kotlin.name.ClassId
fun FirDeclarationGenerationExtension.buildMaterializeFunction( fun FirDeclarationGenerationExtension.buildMaterializeFunction(
matchedClassSymbol: FirClassLikeSymbol<*>, matchedClassSymbol: FirClassLikeSymbol<*>,
callableId: CallableId, callableId: CallableId,
key: FirPluginKey key: GeneratedDeclarationKey
): FirSimpleFunction { ): FirSimpleFunction {
return buildSimpleFunction { return buildSimpleFunction {
resolvePhase = FirResolvePhase.BODY_RESOLVE resolvePhase = FirResolvePhase.BODY_RESOLVE
@@ -61,7 +62,7 @@ fun FirDeclarationGenerationExtension.buildMaterializeFunction(
} }
@OptIn(SymbolInternals::class) @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) val lookupTag = ConeClassLikeLookupTagImpl(classId)
return buildPrimaryConstructor { return buildPrimaryConstructor {
resolvePhase = FirResolvePhase.BODY_RESOLVE resolvePhase = FirResolvePhase.BODY_RESOLVE
@@ -6,10 +6,10 @@
package org.jetbrains.kotlin.ir.plugin package org.jetbrains.kotlin.ir.plugin
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
import org.jetbrains.kotlin.fir.backend.IrPluginDeclarationOrigin import org.jetbrains.kotlin.GeneratedDeclarationKey
import org.jetbrains.kotlin.fir.declarations.FirPluginKey
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.* 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.IrBody
import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl 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 irFactory = context.irFactory
protected val irBuiltIns = context.irBuiltIns protected val irBuiltIns = context.irBuiltIns
abstract fun interestedIn(key: FirPluginKey): Boolean abstract fun interestedIn(key: GeneratedDeclarationKey): Boolean
abstract fun generateBodyForFunction(function: IrSimpleFunction, key: FirPluginKey): IrBody? abstract fun generateBodyForFunction(function: IrSimpleFunction, key: GeneratedDeclarationKey): IrBody?
abstract fun generateBodyForConstructor(constructor: IrConstructor, key: FirPluginKey): IrBody? abstract fun generateBodyForConstructor(constructor: IrConstructor, key: GeneratedDeclarationKey): IrBody?
final override fun visitElement(element: IrElement) { final override fun visitElement(element: IrElement) {
when (element) { when (element) {
@@ -39,14 +39,14 @@ abstract class AbstractTransformerForGenerator(protected val context: IrPluginCo
final override fun visitSimpleFunction(declaration: IrSimpleFunction) { final override fun visitSimpleFunction(declaration: IrSimpleFunction) {
val origin = declaration.origin val origin = declaration.origin
if (origin !is IrPluginDeclarationOrigin || !interestedIn(origin.pluginKey)) return if (origin !is GeneratedByPlugin || !interestedIn(origin.pluginKey)) return
require(declaration.body == null) require(declaration.body == null)
declaration.body = generateBodyForFunction(declaration, origin.pluginKey) declaration.body = generateBodyForFunction(declaration, origin.pluginKey)
} }
final override fun visitConstructor(declaration: IrConstructor) { final override fun visitConstructor(declaration: IrConstructor) {
val origin = declaration.origin val origin = declaration.origin
if (origin !is IrPluginDeclarationOrigin || !interestedIn(origin.pluginKey)) return if (origin !is GeneratedByPlugin || !interestedIn(origin.pluginKey)) return
require(declaration.body == null) require(declaration.body == null)
declaration.body = generateBodyForConstructor(declaration, origin.pluginKey) declaration.body = generateBodyForConstructor(declaration, origin.pluginKey)
} }
@@ -6,22 +6,22 @@
package org.jetbrains.kotlin.ir.plugin package org.jetbrains.kotlin.ir.plugin
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext 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.fir.plugin.generators.AdditionalMembersGenerator
import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrBody
class TransformerForAdditionalMembersGenerator(context: IrPluginContext) : AbstractTransformerForGenerator(context) { class TransformerForAdditionalMembersGenerator(context: IrPluginContext) : AbstractTransformerForGenerator(context) {
override fun interestedIn(key: FirPluginKey): Boolean { override fun interestedIn(key: GeneratedDeclarationKey): Boolean {
return key == AdditionalMembersGenerator.Key return key == AdditionalMembersGenerator.Key
} }
override fun generateBodyForFunction(function: IrSimpleFunction, key: FirPluginKey): IrBody? { override fun generateBodyForFunction(function: IrSimpleFunction, key: GeneratedDeclarationKey): IrBody? {
return generateDefaultBodyForMaterializeFunction(function) return generateDefaultBodyForMaterializeFunction(function)
} }
override fun generateBodyForConstructor(constructor: IrConstructor, key: FirPluginKey): IrBody? { override fun generateBodyForConstructor(constructor: IrConstructor, key: GeneratedDeclarationKey): IrBody? {
return generateBodyForDefaultConstructor(constructor) return generateBodyForDefaultConstructor(constructor)
} }
} }
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.ir.plugin package org.jetbrains.kotlin.ir.plugin
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext 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.fir.plugin.generators.CompanionGenerator
import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction 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 import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl
class TransformerForCompanionGenerator(context: IrPluginContext) : AbstractTransformerForGenerator(context) { class TransformerForCompanionGenerator(context: IrPluginContext) : AbstractTransformerForGenerator(context) {
override fun interestedIn(key: FirPluginKey): Boolean { override fun interestedIn(key: GeneratedDeclarationKey): Boolean {
return key == CompanionGenerator.Key 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 const = IrConstImpl(-1, -1, irBuiltIns.intType, IrConstKind.Int, value = 10)
val returnStatement = IrReturnImpl(-1, -1, irBuiltIns.nothingType, function.symbol, const) val returnStatement = IrReturnImpl(-1, -1, irBuiltIns.nothingType, function.symbol, const)
return irFactory.createBlockBody(-1, -1, listOf(returnStatement)) 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) return generateBodyForDefaultConstructor(constructor)
} }
} }
@@ -6,22 +6,22 @@
package org.jetbrains.kotlin.ir.plugin package org.jetbrains.kotlin.ir.plugin
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext 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.fir.plugin.generators.ExternalClassGenerator
import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrBody
class TransformerForExternalClassGenerator(context: IrPluginContext) : AbstractTransformerForGenerator(context) { class TransformerForExternalClassGenerator(context: IrPluginContext) : AbstractTransformerForGenerator(context) {
override fun interestedIn(key: FirPluginKey): Boolean { override fun interestedIn(key: GeneratedDeclarationKey): Boolean {
return key == ExternalClassGenerator.Key return key == ExternalClassGenerator.Key
} }
override fun generateBodyForFunction(function: IrSimpleFunction, key: FirPluginKey): IrBody? { override fun generateBodyForFunction(function: IrSimpleFunction, key: GeneratedDeclarationKey): IrBody? {
return generateDefaultBodyForMaterializeFunction(function) return generateDefaultBodyForMaterializeFunction(function)
} }
override fun generateBodyForConstructor(constructor: IrConstructor, key: FirPluginKey): IrBody? { override fun generateBodyForConstructor(constructor: IrConstructor, key: GeneratedDeclarationKey): IrBody? {
return generateBodyForDefaultConstructor(constructor) return generateBodyForDefaultConstructor(constructor)
} }
} }
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.ir.plugin package org.jetbrains.kotlin.ir.plugin
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext 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.fir.plugin.generators.TopLevelDeclarationsGenerator
import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction 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 import org.jetbrains.kotlin.ir.types.classFqName
class TransformerForTopLevelDeclarationsGenerator(context: IrPluginContext) : AbstractTransformerForGenerator(context) { class TransformerForTopLevelDeclarationsGenerator(context: IrPluginContext) : AbstractTransformerForGenerator(context) {
override fun interestedIn(key: FirPluginKey): Boolean { override fun interestedIn(key: GeneratedDeclarationKey): Boolean {
return key == TopLevelDeclarationsGenerator.Key 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() ?: "<error>" val className = function.valueParameters.single().type.classFqName?.asString() ?: "<error>"
val const = IrConstImpl(-1, -1, irBuiltIns.stringType, IrConstKind.String, className) val const = IrConstImpl(-1, -1, irBuiltIns.stringType, IrConstKind.String, className)
val returnExpression = IrReturnImpl(-1, -1, irBuiltIns.nothingType, function.symbol, const) val returnExpression = IrReturnImpl(-1, -1, irBuiltIns.nothingType, function.symbol, const)
return irFactory.createBlockBody(-1, -1, listOf(returnExpression)) 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 return null
} }
} }
@@ -15,7 +15,6 @@ dependencies {
compileOnly(project(":compiler:backend.jvm")) compileOnly(project(":compiler:backend.jvm"))
compileOnly(project(":compiler:ir.tree.impl")) compileOnly(project(":compiler:ir.tree.impl"))
compileOnly(project(":compiler:fir:tree")) compileOnly(project(":compiler:fir:tree"))
compileOnly(project(":compiler:fir:fir2ir"))
compileOnly(intellijCore()) compileOnly(intellijCore())
compileOnly(commonDependency("org.jetbrains.intellij.deps:asm-all")) compileOnly(commonDependency("org.jetbrains.intellij.deps:asm-all"))
} }
@@ -7,9 +7,9 @@ package org.jetbrains.kotlin.parcelize.ir
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.fir.backend.IrPluginDeclarationOrigin
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrClass 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.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.util.companionObject import org.jetbrains.kotlin.ir.util.companionObject
import org.jetbrains.kotlin.ir.util.functions import org.jetbrains.kotlin.ir.util.functions
@@ -47,7 +47,7 @@ class ParcelizeFirIrTransformer(
for (function in declaration.functions) { for (function in declaration.functions) {
val origin = function.origin val origin = function.origin
if (origin !is IrPluginDeclarationOrigin || origin.pluginKey != FirParcelizePluginKey) continue if (origin !is GeneratedByPlugin || origin.pluginKey != FirParcelizePluginKey) continue
when (function.name.identifier) { when (function.name.identifier) {
ParcelizeSyntheticComponent.ComponentKind.DESCRIBE_CONTENTS.methodName -> { ParcelizeSyntheticComponent.ComponentKind.DESCRIBE_CONTENTS.methodName -> {
function.generateDescribeContentsBody(parcelableProperties) function.generateDescribeContentsBody(parcelableProperties)
@@ -9,11 +9,12 @@ import org.jetbrains.kotlin.descriptors.EffectiveVisibility
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession 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.FirSimpleFunctionBuilder
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl 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.declarations.utils.modality
import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension
import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar 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 get() = FirParcelizePluginKey
override fun FirDeclarationPredicateRegistrar.registerPredicates() { override fun FirDeclarationPredicateRegistrar.registerPredicates() {
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.parcelize.fir 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 { override fun toString(): String {
return "FirParcelize" return "FirParcelize"
} }