[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:
committed by
teamcity
parent
a84ece7233
commit
83d0a3e7a3
@@ -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<FirFile> {
|
||||
|
||||
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
|
||||
|
||||
+2
-2
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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}]"
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -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<GeneratedClass>
|
||||
abstract operator fun get(key: GeneratedDeclarationKey): List<GeneratedClass>
|
||||
}
|
||||
|
||||
val FirSession.generatedClassIndex: GeneratedClassIndex by FirSession.sessionComponentAccessor()
|
||||
|
||||
@ThreadSafeMutableState
|
||||
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) {
|
||||
val key = (klass.origin as FirDeclarationOrigin.Plugin).key
|
||||
index.put(key, GeneratedClass(klass, owner))
|
||||
}
|
||||
|
||||
override fun get(key: FirPluginKey): List<GeneratedClass> {
|
||||
override fun get(key: GeneratedDeclarationKey): List<GeneratedClass> {
|
||||
return index.get(key)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
+3
-2
@@ -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"
|
||||
}
|
||||
|
||||
+6
-4
@@ -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"
|
||||
}
|
||||
|
||||
+2
-1
@@ -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"
|
||||
}
|
||||
|
||||
+3
-2
@@ -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()
|
||||
}
|
||||
|
||||
+3
-2
@@ -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)
|
||||
|
||||
+3
-2
@@ -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
|
||||
|
||||
+7
-7
@@ -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)
|
||||
}
|
||||
|
||||
+4
-4
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -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"))
|
||||
}
|
||||
|
||||
+2
-2
@@ -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)
|
||||
|
||||
+3
-2
@@ -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() {
|
||||
|
||||
+2
-2
@@ -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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user