IR: Add an extension point after IR construction
The existing IrGenerationExtension is in the middle of IR construction and basically requires plugins to work with the (deprecated) descriptors. Since there are plans to change the IR extension point it makes sense to introduce a temporary work-around to allow pure IR plugins to be developed now, which could be ported to a more permanent API later.
This commit is contained in:
committed by
Alexander Udalov
parent
6ae7d53a93
commit
7cad2be329
@@ -57,6 +57,7 @@ import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||
import org.jetbrains.kotlin.asJava.classes.FacadeCache
|
||||
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||
import org.jetbrains.kotlin.backend.common.extensions.PureIrGenerationExtension
|
||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||
import org.jetbrains.kotlin.cli.common.CliModuleVisibilityManagerImpl
|
||||
import org.jetbrains.kotlin.cli.common.KOTLIN_COMPILER_ENVIRONMENT_KEEPALIVE_PROPERTY
|
||||
@@ -556,6 +557,7 @@ class KotlinCoreEnvironment private constructor(
|
||||
CollectAdditionalSourcesExtension.registerExtensionPoint(project)
|
||||
ExtraImportsProviderExtension.registerExtensionPoint(project)
|
||||
IrGenerationExtension.registerExtensionPoint(project)
|
||||
PureIrGenerationExtension.registerExtensionPoint(project)
|
||||
ScriptEvaluationExtension.registerExtensionPoint(project)
|
||||
ShellExtension.registerExtensionPoint(project)
|
||||
TypeResolutionInterceptor.registerExtensionPoint(project)
|
||||
|
||||
+13
-1
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.backend.common.extensions
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.CommonBackendContext
|
||||
import org.jetbrains.kotlin.backend.common.ir.BuiltinSymbolsBase
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
@@ -37,4 +38,15 @@ interface IrGenerationExtension : IrExtensionGenerator {
|
||||
moduleFragment: IrModuleFragment,
|
||||
pluginContext: IrPluginContext
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Extension point for plugins which run before any lowerings, but after the Ir has been constructed.
|
||||
interface PureIrGenerationExtension {
|
||||
companion object :
|
||||
ProjectExtensionDescriptor<PureIrGenerationExtension>("org.jetbrains.kotlin.pureIrGenerationExtension", PureIrGenerationExtension::class.java)
|
||||
|
||||
fun generate(
|
||||
moduleFragment: IrModuleFragment,
|
||||
context: CommonBackendContext
|
||||
)
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.backend.jvm
|
||||
import org.jetbrains.kotlin.backend.common.CodegenUtil
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
|
||||
import org.jetbrains.kotlin.backend.common.extensions.PureIrGenerationExtension
|
||||
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
||||
import org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.MultifileFacadeFileEntry
|
||||
@@ -105,6 +106,10 @@ object JvmBackendFacade {
|
||||
context.typeMapper.mapType(context.referenceClass(descriptor).defaultType)
|
||||
}
|
||||
|
||||
for (extension in PureIrGenerationExtension.getInstances(state.project)) {
|
||||
extension.generate(irModuleFragment, context)
|
||||
}
|
||||
|
||||
JvmLower(context).lower(irModuleFragment)
|
||||
|
||||
for (generateMultifileFacade in listOf(true, false)) {
|
||||
|
||||
Reference in New Issue
Block a user