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