[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
@@ -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"
}
@@ -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<FirNamedFunctionSymbol> {
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"
}
@@ -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"
}
@@ -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()
}
@@ -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)
@@ -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
@@ -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)
}
@@ -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)
}
}
@@ -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)
}
}
@@ -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)
}
}
@@ -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() ?: "<error>"
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
}
}
@@ -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"))
}
@@ -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)
@@ -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() {
@@ -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"
}