[FIR] Add flag to disable transformers required only for plugins

This commit is contained in:
Dmitriy Novozhilov
2020-08-14 15:37:05 +03:00
parent 53ad502d2a
commit 41ba9b0a2d
4 changed files with 26 additions and 16 deletions
@@ -33,9 +33,10 @@ class FirTotalResolveProcessor(session: FirSession) {
fun createAllCompilerResolveProcessors( fun createAllCompilerResolveProcessors(
session: FirSession, session: FirSession,
scopeSession: ScopeSession? = null scopeSession: ScopeSession? = null,
pluginPhasesEnabled: Boolean = false
): List<FirResolveProcessor> { ): List<FirResolveProcessor> {
return createAllResolveProcessors(scopeSession) { return createAllResolveProcessors(scopeSession, pluginPhasesEnabled) {
createCompilerProcessorByPhase(session, it) createCompilerProcessorByPhase(session, it)
} }
} }
@@ -43,19 +44,22 @@ fun createAllCompilerResolveProcessors(
fun createAllTransformerBasedResolveProcessors( fun createAllTransformerBasedResolveProcessors(
session: FirSession, session: FirSession,
scopeSession: ScopeSession? = null, scopeSession: ScopeSession? = null,
pluginPhasesEnabled: Boolean = false,
): List<FirTransformerBasedResolveProcessor> { ): List<FirTransformerBasedResolveProcessor> {
return createAllResolveProcessors(scopeSession) { return createAllResolveProcessors(scopeSession, pluginPhasesEnabled) {
createTransformerBasedProcessorByPhase(session, it) createTransformerBasedProcessorByPhase(session, it)
} }
} }
private inline fun <T : FirResolveProcessor> createAllResolveProcessors( private inline fun <T : FirResolveProcessor> createAllResolveProcessors(
scopeSession: ScopeSession? = null, scopeSession: ScopeSession? = null,
pluginPhasesEnabled: Boolean,
creator: FirResolvePhase.(ScopeSession) -> T creator: FirResolvePhase.(ScopeSession) -> T
): List<T> { ): List<T> {
@Suppress("NAME_SHADOWING") @Suppress("NAME_SHADOWING")
val scopeSession = scopeSession ?: ScopeSession() val scopeSession = scopeSession ?: ScopeSession()
return FirResolvePhase.values() val phases = FirResolvePhase.values().filter {
.drop(1) // to remove RAW_FIR phase !it.noProcessor && if (!pluginPhasesEnabled) !it.pluginPhase else true
.map { it.creator(scopeSession) } }
} return phases.map { it.creator(scopeSession) }
}
@@ -5,19 +5,19 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
enum class FirResolvePhase { enum class FirResolvePhase(val pluginPhase: Boolean = false, val noProcessor: Boolean = false) {
RAW_FIR, RAW_FIR(noProcessor = true),
ANNOTATIONS_FOR_PLUGINS, // plugin phase ANNOTATIONS_FOR_PLUGINS(pluginPhase = true),
CLASS_GENERATION, // plugin phase CLASS_GENERATION(pluginPhase = true),
IMPORTS, IMPORTS,
SUPER_TYPES, SUPER_TYPES,
SEALED_CLASS_INHERITORS, SEALED_CLASS_INHERITORS,
TYPES, TYPES,
ARGUMENTS_OF_PLUGIN_ANNOTATIONS, // plugin phase ARGUMENTS_OF_PLUGIN_ANNOTATIONS(pluginPhase = true),
EXTENSION_STATUS_UPDATE, // plugin phase EXTENSION_STATUS_UPDATE(pluginPhase = true),
STATUS, STATUS,
CONTRACTS, CONTRACTS,
NEW_MEMBERS_GENERATION, // plugin phase NEW_MEMBERS_GENERATION(pluginPhase = true),
IMPLICIT_TYPES_BODY_RESOLVE, IMPLICIT_TYPES_BODY_RESOLVE,
BODY_RESOLVE; BODY_RESOLVE;
@@ -76,11 +76,14 @@ abstract class AbstractFirDiagnosticsTest : AbstractFirBaseDiagnosticsTest() {
get() = File(absolutePath.replace(".kt", ".dot")) get() = File(absolutePath.replace(".kt", ".dot"))
} }
protected open val pluginPhasesEnabled: Boolean
get() = false
override fun runAnalysis(testDataFile: File, testFiles: List<TestFile>, firFilesPerSession: Map<FirSession, List<FirFile>>) { override fun runAnalysis(testDataFile: File, testFiles: List<TestFile>, firFilesPerSession: Map<FirSession, List<FirFile>>) {
for ((session, firFiles) in firFilesPerSession) { for ((session, firFiles) in firFilesPerSession) {
doFirResolveTestBench( doFirResolveTestBench(
firFiles, firFiles,
createAllCompilerResolveProcessors(session), createAllCompilerResolveProcessors(session, pluginPhasesEnabled = pluginPhasesEnabled),
gc = false gc = false
) )
} }
@@ -13,6 +13,9 @@ import org.jetbrains.kotlin.fir.extensions.registerExtensions
import java.io.File import java.io.File
abstract class AbstractFirAllOpenDiagnosticTest : AbstractFirDiagnosticsTest() { abstract class AbstractFirAllOpenDiagnosticTest : AbstractFirDiagnosticsTest() {
override val pluginPhasesEnabled: Boolean
get() = true
override fun registerFirExtensions(service: FirExtensionService) { override fun registerFirExtensions(service: FirExtensionService) {
service.registerExtensions(FirAllOpenComponentRegistrar().configure()) service.registerExtensions(FirAllOpenComponentRegistrar().configure())
} }
@@ -25,4 +28,4 @@ abstract class AbstractFirAllOpenDiagnosticTest : AbstractFirDiagnosticsTest() {
} }
configuration.addJvmClasspathRoot(jar) configuration.addJvmClasspathRoot(jar)
} }
} }