diff --git a/compiler/cli/cli-common/resources/META-INF/extensions/compiler.xml b/compiler/cli/cli-common/resources/META-INF/extensions/compiler.xml index 5f59ff5b434..3f0f1f336e0 100644 --- a/compiler/cli/cli-common/resources/META-INF/extensions/compiler.xml +++ b/compiler/cli/cli-common/resources/META-INF/extensions/compiler.xml @@ -66,8 +66,8 @@ - + ( - name = "org.jetbrains.kotlin.fir.extensions.firExtensionRegistrar", - extensionClass = FirExtensionRegistrar::class.java - ) { +abstract class FirExtensionRegistrar : FirExtensionRegistrarAdapter() { + companion object { + fun getInstances(project: Project): List { + @Suppress("UNCHECKED_CAST") + return FirExtensionRegistrarAdapter.getInstances(project) as List + } + + fun registerExtension(project: Project, extension: FirExtensionRegistrar) { + FirExtensionRegistrarAdapter.registerExtension(project, extension) + } + internal val AVAILABLE_EXTENSIONS = listOf( FirStatusTransformerExtension::class, FirDeclarationGenerationExtension::class, diff --git a/compiler/frontend.common/src/org/jetbrains/kotlin/fir/extensions/FirExtensionRegistrarAdapter.kt b/compiler/frontend.common/src/org/jetbrains/kotlin/fir/extensions/FirExtensionRegistrarAdapter.kt new file mode 100644 index 00000000000..7c515ed5294 --- /dev/null +++ b/compiler/frontend.common/src/org/jetbrains/kotlin/fir/extensions/FirExtensionRegistrarAdapter.kt @@ -0,0 +1,23 @@ +/* + * 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.extensions + +import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor + +/* + * This is needed to prevent ClassNotFoundExceptions in IDE plugin built on FE 1.0 + * + * Actual FirExtensionRegistrar uses some specific classes from FIR, so if we reference + * it in KotlinCoreEnvironment (where all extension points are registered) then we + * need to have all FIR compiler on classpath. And in IDE plugin we don't depend + * on FIR to reduce plugin size. + */ +abstract class FirExtensionRegistrarAdapter { + companion object : ProjectExtensionDescriptor( + name = "org.jetbrains.kotlin.fir.extensions.firExtensionRegistrar", + extensionClass = FirExtensionRegistrarAdapter::class.java + ) +}