[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(
session: FirSession,
scopeSession: ScopeSession? = null
scopeSession: ScopeSession? = null,
pluginPhasesEnabled: Boolean = false
): List<FirResolveProcessor> {
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<FirTransformerBasedResolveProcessor> {
return createAllResolveProcessors(scopeSession) {
return createAllResolveProcessors(scopeSession, pluginPhasesEnabled) {
createTransformerBasedProcessorByPhase(session, it)
}
}
private inline fun <T : FirResolveProcessor> createAllResolveProcessors(
scopeSession: ScopeSession? = null,
pluginPhasesEnabled: Boolean,
creator: FirResolvePhase.(ScopeSession) -> T
): List<T> {
@Suppress("NAME_SHADOWING")
val scopeSession = scopeSession ?: ScopeSession()
return FirResolvePhase.values()
.drop(1) // to remove RAW_FIR phase
.map { it.creator(scopeSession) }
}
val phases = FirResolvePhase.values().filter {
!it.noProcessor && if (!pluginPhasesEnabled) !it.pluginPhase else true
}
return phases.map { it.creator(scopeSession) }
}
@@ -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;
@@ -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<TestFile>, firFilesPerSession: Map<FirSession, List<FirFile>>) {
for ((session, firFiles) in firFilesPerSession) {
doFirResolveTestBench(
firFiles,
createAllCompilerResolveProcessors(session),
createAllCompilerResolveProcessors(session, pluginPhasesEnabled = pluginPhasesEnabled),
gc = false
)
}
@@ -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)
}
}
}