[FIR] Make creating of resolve processors type safe
Also get rid of `CompilerMode` enum
This commit is contained in:
+2
-2
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.dump.MultiModuleHtmlFirDump
|
||||
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
|
||||
import org.jetbrains.kotlin.fir.resolve.firProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.createAllResolveProcessors
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.createAllCompilerResolveProcessors
|
||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
@@ -55,7 +55,7 @@ class FirResolveModularizedTotalKotlinTest : AbstractModularizedTest() {
|
||||
.uniteWith(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(project))
|
||||
val librariesScope = ProjectScope.getLibrariesScope(project)
|
||||
val session = createSession(environment, scope, librariesScope, moduleData.qualifiedName)
|
||||
val processors = createAllResolveProcessors(session)
|
||||
val processors = createAllCompilerResolveProcessors(session)
|
||||
|
||||
val firProvider = session.firProvider as FirProviderImpl
|
||||
val firFiles = if (useLightTree) {
|
||||
|
||||
+20
-11
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
class FirTotalResolveProcessor(session: FirSession) {
|
||||
val scopeSession: ScopeSession = ScopeSession()
|
||||
|
||||
private val processors: List<FirResolveProcessor> = createAllResolveProcessors(session, scopeSession)
|
||||
private val processors: List<FirResolveProcessor> = createAllCompilerResolveProcessors(session, scopeSession)
|
||||
|
||||
fun process(files: List<FirFile>) {
|
||||
for (processor in processors) {
|
||||
@@ -31,22 +31,31 @@ class FirTotalResolveProcessor(session: FirSession) {
|
||||
}
|
||||
}
|
||||
|
||||
fun createAllResolveProcessors(
|
||||
fun createAllCompilerResolveProcessors(
|
||||
session: FirSession,
|
||||
scopeSession: ScopeSession? = null,
|
||||
mode: CompilerMode = CompilerMode.CLI
|
||||
scopeSession: ScopeSession? = null
|
||||
): List<FirResolveProcessor> {
|
||||
@Suppress("NAME_SHADOWING")
|
||||
val scopeSession = scopeSession ?: ScopeSession()
|
||||
return FirResolvePhase.values()
|
||||
.drop(1) // to remove RAW_FIR phase
|
||||
.map { it.createProcessorByPhase(session, scopeSession, mode) }
|
||||
return createAllResolveProcessors(scopeSession) {
|
||||
createCompilerProcessorByPhase(session, it)
|
||||
}
|
||||
}
|
||||
|
||||
fun createAllTransformerBasedResolveProcessors(
|
||||
session: FirSession,
|
||||
scopeSession: ScopeSession? = null,
|
||||
): List<FirTransformerBasedResolveProcessor> {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return createAllResolveProcessors(session, scopeSession, CompilerMode.IDE) as List<FirTransformerBasedResolveProcessor>
|
||||
return createAllResolveProcessors(scopeSession) {
|
||||
createTransformerBasedProcessorByPhase(session, it)
|
||||
}
|
||||
}
|
||||
|
||||
private inline fun <T : FirResolveProcessor> createAllResolveProcessors(
|
||||
scopeSession: ScopeSession? = null,
|
||||
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) }
|
||||
}
|
||||
+16
-12
@@ -16,10 +16,9 @@ import org.jetbrains.kotlin.fir.resolve.transformers.plugin.FirGlobalExtensionSt
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.FirPluginAnnotationsResolveProcessor
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.FirTransformerBasedExtensionStatusProcessor
|
||||
|
||||
fun FirResolvePhase.createProcessorByPhase(
|
||||
fun FirResolvePhase.createCompilerProcessorByPhase(
|
||||
session: FirSession,
|
||||
scopeSession: ScopeSession,
|
||||
compilerMode: CompilerMode = CompilerMode.CLI
|
||||
scopeSession: ScopeSession
|
||||
): FirResolveProcessor {
|
||||
return when (this) {
|
||||
RAW_FIR -> throw IllegalStateException("Raw FIR building phase does not have a transformer")
|
||||
@@ -29,10 +28,7 @@ fun FirResolvePhase.createProcessorByPhase(
|
||||
SUPER_TYPES -> FirSupertypeResolverProcessor(session, scopeSession)
|
||||
SEALED_CLASS_INHERITORS -> FirSealedClassInheritorsProcessor(session, scopeSession)
|
||||
TYPES -> FirTypeResolveProcessor(session, scopeSession)
|
||||
EXTENSION_STATUS_UPDATE -> when (compilerMode) {
|
||||
CompilerMode.CLI -> FirGlobalExtensionStatusProcessor(session, scopeSession)
|
||||
CompilerMode.IDE -> FirTransformerBasedExtensionStatusProcessor(session, scopeSession)
|
||||
}
|
||||
EXTENSION_STATUS_UPDATE -> FirGlobalExtensionStatusProcessor(session, scopeSession)
|
||||
STATUS -> FirStatusResolveProcessor(session, scopeSession)
|
||||
CONTRACTS -> FirContractResolveProcessor(session, scopeSession)
|
||||
IMPLICIT_TYPES_BODY_RESOLVE -> FirImplicitTypeBodyResolveProcessor(session, scopeSession)
|
||||
@@ -41,9 +37,17 @@ fun FirResolvePhase.createProcessorByPhase(
|
||||
}
|
||||
|
||||
fun FirResolvePhase.createTransformerBasedProcessorByPhase(session: FirSession, scopeSession: ScopeSession): FirTransformerBasedResolveProcessor {
|
||||
return createProcessorByPhase(session, scopeSession, CompilerMode.IDE) as FirTransformerBasedResolveProcessor
|
||||
return when (this) {
|
||||
RAW_FIR -> throw IllegalStateException("Raw FIR building phase does not have a transformer")
|
||||
ANNOTATIONS_FOR_PLUGINS -> FirPluginAnnotationsResolveProcessor(session, scopeSession)
|
||||
IMPORTS -> FirImportResolveProcessor(session, scopeSession)
|
||||
SUPER_TYPES -> FirSupertypeResolverProcessor(session, scopeSession)
|
||||
SEALED_CLASS_INHERITORS -> FirSealedClassInheritorsProcessor(session, scopeSession)
|
||||
TYPES -> FirTypeResolveProcessor(session, scopeSession)
|
||||
EXTENSION_STATUS_UPDATE -> FirTransformerBasedExtensionStatusProcessor(session, scopeSession)
|
||||
STATUS -> FirStatusResolveProcessor(session, scopeSession)
|
||||
CONTRACTS -> FirContractResolveProcessor(session, scopeSession)
|
||||
IMPLICIT_TYPES_BODY_RESOLVE -> FirImplicitTypeBodyResolveProcessor(session, scopeSession)
|
||||
BODY_RESOLVE -> FirBodyResolveProcessor(session, scopeSession)
|
||||
}
|
||||
}
|
||||
|
||||
enum class CompilerMode {
|
||||
CLI, IDE
|
||||
}
|
||||
@@ -28,8 +28,7 @@ import org.jetbrains.kotlin.fir.resolve.dfa.cfg.CFGNode
|
||||
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.ControlFlowGraph
|
||||
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.EdgeKind
|
||||
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.FirControlFlowGraphRenderVisitor
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirTotalResolveProcessor
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.createAllResolveProcessors
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.createAllCompilerResolveProcessors
|
||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||
@@ -77,7 +76,7 @@ abstract class AbstractFirDiagnosticsTest : AbstractFirBaseDiagnosticsTest() {
|
||||
for ((session, firFiles) in firFilesPerSession) {
|
||||
doFirResolveTestBench(
|
||||
firFiles,
|
||||
createAllResolveProcessors(session),
|
||||
createAllCompilerResolveProcessors(session),
|
||||
gc = false
|
||||
)
|
||||
}
|
||||
|
||||
+2
-3
@@ -6,8 +6,7 @@
|
||||
package org.jetbrains.kotlin.fir
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirTotalResolveProcessor
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.createAllResolveProcessors
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.createAllCompilerResolveProcessors
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import java.io.File
|
||||
|
||||
@@ -33,7 +32,7 @@ abstract class AbstractFirOldFrontendDiagnosticsTest : AbstractFirDiagnosticsTes
|
||||
override fun runAnalysis(testDataFile: File, testFiles: List<TestFile>, firFilesPerSession: Map<FirSession, List<FirFile>>) {
|
||||
val failure: FirRuntimeException? = try {
|
||||
for ((session, firFiles) in firFilesPerSession) {
|
||||
doFirResolveTestBench(firFiles, createAllResolveProcessors(session), gc = false)
|
||||
doFirResolveTestBench(firFiles, createAllCompilerResolveProcessors(session), gc = false)
|
||||
}
|
||||
null
|
||||
} catch (e: FirRuntimeException) {
|
||||
|
||||
Reference in New Issue
Block a user