diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTotalResolveProcessor.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTotalResolveProcessor.kt index d10798379b2..17ec0cd3524 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTotalResolveProcessor.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTotalResolveProcessor.kt @@ -33,9 +33,10 @@ class FirTotalResolveProcessor(session: FirSession) { fun createAllCompilerResolveProcessors( session: FirSession, - scopeSession: ScopeSession? = null + scopeSession: ScopeSession? = null, + pluginPhasesEnabled: Boolean = false ): List { - return createAllResolveProcessors(scopeSession) { + return createAllResolveProcessors(scopeSession, pluginPhasesEnabled) { createCompilerProcessorByPhase(session, it) } } @@ -43,19 +44,22 @@ fun createAllCompilerResolveProcessors( fun createAllTransformerBasedResolveProcessors( session: FirSession, scopeSession: ScopeSession? = null, + pluginPhasesEnabled: Boolean = false, ): List { - return createAllResolveProcessors(scopeSession) { + return createAllResolveProcessors(scopeSession, pluginPhasesEnabled) { createTransformerBasedProcessorByPhase(session, it) } } private inline fun createAllResolveProcessors( scopeSession: ScopeSession? = null, + pluginPhasesEnabled: Boolean, creator: FirResolvePhase.(ScopeSession) -> T ): List { @Suppress("NAME_SHADOWING") val scopeSession = scopeSession ?: ScopeSession() - return FirResolvePhase.values() - .drop(1) // to remove RAW_FIR phase - .map { it.creator(scopeSession) } -} \ No newline at end of file + val phases = FirResolvePhase.values().filter { + !it.noProcessor && if (!pluginPhasesEnabled) !it.pluginPhase else true + } + return phases.map { it.creator(scopeSession) } +} diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirResolvePhase.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirResolvePhase.kt index 52239a0c64a..85a28870865 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirResolvePhase.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirResolvePhase.kt @@ -5,19 +5,19 @@ package org.jetbrains.kotlin.fir.declarations -enum class FirResolvePhase { - RAW_FIR, - ANNOTATIONS_FOR_PLUGINS, // plugin phase - CLASS_GENERATION, // plugin phase +enum class FirResolvePhase(val pluginPhase: Boolean = false, val noProcessor: Boolean = false) { + RAW_FIR(noProcessor = true), + ANNOTATIONS_FOR_PLUGINS(pluginPhase = true), + CLASS_GENERATION(pluginPhase = true), IMPORTS, SUPER_TYPES, SEALED_CLASS_INHERITORS, TYPES, - ARGUMENTS_OF_PLUGIN_ANNOTATIONS, // plugin phase - EXTENSION_STATUS_UPDATE, // plugin phase + ARGUMENTS_OF_PLUGIN_ANNOTATIONS(pluginPhase = true), + EXTENSION_STATUS_UPDATE(pluginPhase = true), STATUS, CONTRACTS, - NEW_MEMBERS_GENERATION, // plugin phase + NEW_MEMBERS_GENERATION(pluginPhase = true), IMPLICIT_TYPES_BODY_RESOLVE, BODY_RESOLVE; diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticTest.kt index 86ce57e37d9..360ab3c613f 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticTest.kt @@ -76,11 +76,14 @@ abstract class AbstractFirDiagnosticsTest : AbstractFirBaseDiagnosticsTest() { get() = File(absolutePath.replace(".kt", ".dot")) } + protected open val pluginPhasesEnabled: Boolean + get() = false + override fun runAnalysis(testDataFile: File, testFiles: List, firFilesPerSession: Map>) { for ((session, firFiles) in firFilesPerSession) { doFirResolveTestBench( firFiles, - createAllCompilerResolveProcessors(session), + createAllCompilerResolveProcessors(session, pluginPhasesEnabled = pluginPhasesEnabled), gc = false ) } diff --git a/plugins/fir/fir-plugin-prototype/tests/org/jetbrains/kotlin/fir/plugin/AbstractFirAllOpenDiagnosticTest.kt b/plugins/fir/fir-plugin-prototype/tests/org/jetbrains/kotlin/fir/plugin/AbstractFirAllOpenDiagnosticTest.kt index 8db039d68bd..20d0d48321a 100644 --- a/plugins/fir/fir-plugin-prototype/tests/org/jetbrains/kotlin/fir/plugin/AbstractFirAllOpenDiagnosticTest.kt +++ b/plugins/fir/fir-plugin-prototype/tests/org/jetbrains/kotlin/fir/plugin/AbstractFirAllOpenDiagnosticTest.kt @@ -13,6 +13,9 @@ import org.jetbrains.kotlin.fir.extensions.registerExtensions import java.io.File abstract class AbstractFirAllOpenDiagnosticTest : AbstractFirDiagnosticsTest() { + override val pluginPhasesEnabled: Boolean + get() = true + override fun registerFirExtensions(service: FirExtensionService) { service.registerExtensions(FirAllOpenComponentRegistrar().configure()) } @@ -25,4 +28,4 @@ abstract class AbstractFirAllOpenDiagnosticTest : AbstractFirDiagnosticsTest() { } configuration.addJvmClasspathRoot(jar) } -} \ No newline at end of file +}