[Plugins] Introduce new API for registering compiler plugins
Original `ComponentRegistrar` exposes Project to its registration method, so plugins should manually register extensions to it. To prepare for possible unbound compiler from Project API in future new `K2ComponentRegistrar` introduced which provides registration method without Project at all
This commit is contained in:
committed by
teamcity
parent
bb996c1b27
commit
8b42638afa
@@ -12,6 +12,7 @@ dependencies {
|
||||
api(project(":plugins:parcelize:parcelize-compiler:parcelize.backend"))
|
||||
|
||||
compileOnly(project(":compiler:plugin-api"))
|
||||
compileOnly(project(":compiler:fir:entrypoint"))
|
||||
compileOnly(project(":compiler:backend"))
|
||||
compileOnly(project(":compiler:ir.backend.common"))
|
||||
compileOnly(intellijCore())
|
||||
|
||||
+13
-12
@@ -5,34 +5,35 @@
|
||||
|
||||
package org.jetbrains.kotlin.parcelize
|
||||
|
||||
import com.intellij.mock.MockProject
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
|
||||
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension
|
||||
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
|
||||
import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.container.StorageComponentContainer
|
||||
import org.jetbrains.kotlin.container.useInstance
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor
|
||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
|
||||
import org.jetbrains.kotlin.parcelize.fir.FirParcelizeExtensionRegistrar
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.platform.jvm.isJvm
|
||||
import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension
|
||||
|
||||
class ParcelizeComponentRegistrar : ComponentRegistrar {
|
||||
class ParcelizeComponentRegistrar : CompilerPluginRegistrar() {
|
||||
companion object {
|
||||
fun registerParcelizeComponents(project: Project) {
|
||||
ExpressionCodegenExtension.registerExtension(project, ParcelizeCodegenExtension())
|
||||
IrGenerationExtension.registerExtension(project, ParcelizeIrGeneratorExtension())
|
||||
SyntheticResolveExtension.registerExtension(project, ParcelizeResolveExtension())
|
||||
ClassBuilderInterceptorExtension.registerExtension(project, ParcelizeClinitClassBuilderInterceptorExtension())
|
||||
StorageComponentContainerContributor.registerExtension(project, ParcelizeDeclarationCheckerComponentContainerContributor())
|
||||
fun registerParcelizeComponents(extensionStorage: ExtensionStorage) = with(extensionStorage) {
|
||||
ExpressionCodegenExtension.registerExtension(ParcelizeCodegenExtension())
|
||||
IrGenerationExtension.registerExtension(ParcelizeIrGeneratorExtension())
|
||||
SyntheticResolveExtension.registerExtension(ParcelizeResolveExtension())
|
||||
ClassBuilderInterceptorExtension.registerExtension(ParcelizeClinitClassBuilderInterceptorExtension())
|
||||
StorageComponentContainerContributor.registerExtension(ParcelizeDeclarationCheckerComponentContainerContributor())
|
||||
FirExtensionRegistrarAdapter.registerExtension(FirParcelizeExtensionRegistrar())
|
||||
}
|
||||
}
|
||||
|
||||
override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
|
||||
registerParcelizeComponents(project)
|
||||
override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
|
||||
registerParcelizeComponents(this)
|
||||
}
|
||||
|
||||
override val supportsK2: Boolean
|
||||
|
||||
Reference in New Issue
Block a user