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
+ )
+}