[FIR] Introduce FirResolveProcessors

This commit is contained in:
Dmitriy Novozhilov
2020-05-20 12:30:12 +03:00
parent 96802dde04
commit 8d686226c7
24 changed files with 260 additions and 125 deletions
@@ -16,9 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.dependenciesWithoutSelf
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.extensions.extensionService
import org.jetbrains.kotlin.fir.extensions.oldExtensionsService
import org.jetbrains.kotlin.fir.extensions.registerExtensions
import org.jetbrains.kotlin.fir.java.FirJavaModuleBasedSession
import org.jetbrains.kotlin.fir.java.FirLibrarySession
@@ -34,7 +32,10 @@ import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.impl.FirCompositeSymbolProvider
import org.jetbrains.kotlin.fir.resolve.impl.FirProviderImpl
import org.jetbrains.kotlin.fir.resolve.transformers.FirTotalResolveTransformer
import org.jetbrains.kotlin.fir.resolve.transformers.FirTotalResolveProcessor
import org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveProcessor
import org.jetbrains.kotlin.fir.resolve.transformers.FirGlobalResolveProcessor
import org.jetbrains.kotlin.fir.resolve.transformers.createAllTransformerBasedResolveProcessors
import org.jetbrains.kotlin.fir.scopes.impl.FirCompositeScope
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
@@ -84,7 +85,7 @@ abstract class AbstractFirMultiModuleResolveTest : AbstractMultiModuleTest() {
private fun doFirResolveTest(dirPath: String) {
val firFilesPerSession = mutableMapOf<FirJavaModuleBasedSession, List<FirFile>>()
val totalTransformerPerSession = mutableMapOf<FirJavaModuleBasedSession, FirTotalResolveTransformer>()
val processorsPerSession = mutableMapOf<FirJavaModuleBasedSession, List<FirTransformerBasedResolveProcessor>>()
val sessions = mutableListOf<FirJavaModuleBasedSession>()
val provider = FirProjectSessionProvider(project)
for (module in project.allModules().drop(1)) {
@@ -116,7 +117,7 @@ abstract class AbstractFirMultiModuleResolveTest : AbstractMultiModuleTest() {
firFiles += firFile
}
firFilesPerSession[session] = firFiles
totalTransformerPerSession[session] = FirTotalResolveTransformer(session)
processorsPerSession[session] = createAllTransformerBasedResolveProcessors(session)
}
println("Raw fir up, files: ${firFilesPerSession.values.flatten().size}")
@@ -136,9 +137,10 @@ abstract class AbstractFirMultiModuleResolveTest : AbstractMultiModuleTest() {
for (phaseIndex in 1 until FirResolvePhase.values().size) {
for (session in sessions) {
val firFiles = firFilesPerSession[session]!!
val transformer = totalTransformerPerSession[session]!!
val processors = processorsPerSession[session]!!
for (file in firFiles) {
transformer.transformers[phaseIndex - 1].visitFile(file, null)
val processor = processors[phaseIndex - 1]
processor.processFile(file)
}
}
}