From 7bcd3c79486402626ecb62158607b5f51b0bc535 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Mon, 6 Dec 2021 12:52:40 +0300 Subject: [PATCH] [FIR] Add FirExtensionRegistrarAdapter to fix extension points in FE 1.0 IDE plugin FirExtensionRegistrar is FIR specific extension which requires FIR classes to work, which are missing in dependencies of FE 1.0 IDE plugin. To fix this issue FirExtensionRegistrarAdapter is introduced. This class is a base class for FirExtensionRegistrar and it does not have any FIR specific classes in it's API, so it can be safely registered in IDE --- .../META-INF/extensions/compiler.xml | 4 ++-- .../cli/jvm/compiler/KotlinCoreEnvironment.kt | 4 ++-- .../fir/extensions/FirExtensionRegistrar.kt | 18 ++++++++++----- .../FirExtensionRegistrarAdapter.kt | 23 +++++++++++++++++++ 4 files changed, 39 insertions(+), 10 deletions(-) create mode 100644 compiler/frontend.common/src/org/jetbrains/kotlin/fir/extensions/FirExtensionRegistrarAdapter.kt 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 + ) +}