[FIR] Add flag to disable transformers required only for plugins
This commit is contained in:
+11
-7
@@ -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
|
||||
)
|
||||
}
|
||||
|
||||
+4
-1
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user