[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:
Dmitriy Novozhilov
2022-06-07 10:23:09 +03:00
committed by teamcity
parent bb996c1b27
commit 8b42638afa
56 changed files with 392 additions and 191 deletions
@@ -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())
@@ -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