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