[Test] Reuse runResolution and runCheckers from analyze.kt
This commit is contained in:
@@ -41,14 +41,16 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
|
|||||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
|
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
||||||
|
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.fir.backend.Fir2IrConfiguration
|
import org.jetbrains.kotlin.fir.backend.Fir2IrConfiguration
|
||||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver
|
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver
|
||||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension
|
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension
|
||||||
import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions
|
import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions
|
||||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
||||||
import org.jetbrains.kotlin.fir.pipeline.*
|
import org.jetbrains.kotlin.fir.pipeline.FirResult
|
||||||
|
import org.jetbrains.kotlin.fir.pipeline.buildResolveAndCheckFirViaLightTree
|
||||||
|
import org.jetbrains.kotlin.fir.pipeline.convertToIrAndActualizeForJvm
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.session.IncrementalCompilationContext
|
import org.jetbrains.kotlin.fir.session.IncrementalCompilationContext
|
||||||
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
|
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
|
||||||
@@ -256,7 +258,7 @@ fun compileModuleToAnalyzedFir(
|
|||||||
environment: ModuleCompilerEnvironment,
|
environment: ModuleCompilerEnvironment,
|
||||||
previousStepsSymbolProviders: List<FirSymbolProvider>,
|
previousStepsSymbolProviders: List<FirSymbolProvider>,
|
||||||
incrementalExcludesScope: AbstractProjectFileSearchScope?,
|
incrementalExcludesScope: AbstractProjectFileSearchScope?,
|
||||||
diagnosticsReporter: DiagnosticReporter,
|
diagnosticsReporter: BaseDiagnosticsCollector,
|
||||||
performanceManager: CommonCompilerPerformanceManager?
|
performanceManager: CommonCompilerPerformanceManager?
|
||||||
): FirResult {
|
): FirResult {
|
||||||
val projectEnvironment = environment.projectEnvironment
|
val projectEnvironment = environment.projectEnvironment
|
||||||
|
|||||||
@@ -5,7 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.pipeline
|
package org.jetbrains.kotlin.fir.pipeline
|
||||||
|
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.diagnostics.KtDiagnostic
|
||||||
|
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector
|
import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
@@ -19,7 +20,11 @@ fun FirSession.runResolution(firFiles: List<FirFile>): Pair<ScopeSession, List<F
|
|||||||
return resolveProcessor.scopeSession to firFiles
|
return resolveProcessor.scopeSession to firFiles
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirSession.runCheckers(scopeSession: ScopeSession, firFiles: List<FirFile>, reporter: DiagnosticReporter) {
|
fun FirSession.runCheckers(
|
||||||
|
scopeSession: ScopeSession,
|
||||||
|
firFiles: List<FirFile>,
|
||||||
|
reporter: BaseDiagnosticsCollector
|
||||||
|
): Map<FirFile, List<KtDiagnostic>> {
|
||||||
val collector = FirDiagnosticsCollector.create(this, scopeSession)
|
val collector = FirDiagnosticsCollector.create(this, scopeSession)
|
||||||
collector.collectDiagnosticsInSettings(reporter)
|
collector.collectDiagnosticsInSettings(reporter)
|
||||||
for (file in firFiles) {
|
for (file in firFiles) {
|
||||||
@@ -27,4 +32,8 @@ fun FirSession.runCheckers(scopeSession: ScopeSession, firFiles: List<FirFile>,
|
|||||||
collector.collectDiagnostics(file, reporter)
|
collector.collectDiagnostics(file, reporter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return firFiles.associateWith {
|
||||||
|
val path = it.sourceFile?.path ?: return@associateWith emptyList()
|
||||||
|
reporter.diagnosticsByFilePath[path] ?: emptyList()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ fun buildResolveAndCheckFirFromKtFiles(
|
|||||||
fun resolveAndCheckFir(
|
fun resolveAndCheckFir(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
firFiles: List<FirFile>,
|
firFiles: List<FirFile>,
|
||||||
diagnosticsReporter: DiagnosticReporter
|
diagnosticsReporter: BaseDiagnosticsCollector
|
||||||
): ModuleCompilerAnalyzedOutput {
|
): ModuleCompilerAnalyzedOutput {
|
||||||
val (scopeSession, fir) = session.runResolution(firFiles)
|
val (scopeSession, fir) = session.runResolution(firFiles)
|
||||||
session.runCheckers(scopeSession, fir, diagnosticsReporter)
|
session.runCheckers(scopeSession, fir, diagnosticsReporter)
|
||||||
@@ -76,7 +76,7 @@ fun resolveAndCheckFir(
|
|||||||
fun buildResolveAndCheckFirViaLightTree(
|
fun buildResolveAndCheckFirViaLightTree(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
ktFiles: Collection<KtSourceFile>,
|
ktFiles: Collection<KtSourceFile>,
|
||||||
diagnosticsReporter: DiagnosticReporter,
|
diagnosticsReporter: BaseDiagnosticsCollector,
|
||||||
countFilesAndLines: KFunction2<Int, Int, Unit>?
|
countFilesAndLines: KFunction2<Int, Int, Unit>?
|
||||||
): ModuleCompilerAnalyzedOutput {
|
): ModuleCompilerAnalyzedOutput {
|
||||||
val firFiles = session.buildFirViaLightTree(ktFiles, diagnosticsReporter, countFilesAndLines)
|
val firFiles = session.buildFirViaLightTree(ktFiles, diagnosticsReporter, countFilesAndLines)
|
||||||
|
|||||||
+2
-2
@@ -30,11 +30,11 @@ abstract class FirLazyDeclarationResolver : FirSessionComponent {
|
|||||||
lazyResolveContractChecksEnabled = false
|
lazyResolveContractChecksEnabled = false
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fun disableLazyResolveContractChecksInside(action: () -> Unit) {
|
inline fun <T> disableLazyResolveContractChecksInside(action: () -> T): T {
|
||||||
val current = lazyResolveContractChecksEnabled
|
val current = lazyResolveContractChecksEnabled
|
||||||
lazyResolveContractChecksEnabled = false
|
lazyResolveContractChecksEnabled = false
|
||||||
try {
|
try {
|
||||||
action()
|
return action()
|
||||||
} finally {
|
} finally {
|
||||||
lazyResolveContractChecksEnabled = current
|
lazyResolveContractChecksEnabled = current
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-2
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
|||||||
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
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.lazyDeclarationResolver
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitorVoid
|
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitorVoid
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||||
@@ -80,9 +81,11 @@ class FirDiagnosticsHandler(testServices: TestServices) : FirAnalysisHandler(tes
|
|||||||
|
|
||||||
override fun processModule(module: TestModule, info: FirOutputArtifact) {
|
override fun processModule(module: TestModule, info: FirOutputArtifact) {
|
||||||
for (part in info.partsForDependsOnModules) {
|
for (part in info.partsForDependsOnModules) {
|
||||||
val diagnosticsPerFile = part.firAnalyzerFacade.runCheckers()
|
val firAnalyzerFacade = part.firAnalyzerFacade
|
||||||
val currentModule = part.module
|
val lazyDeclarationResolver = firAnalyzerFacade.result.outputs.single().session.lazyDeclarationResolver
|
||||||
|
val diagnosticsPerFile = lazyDeclarationResolver.disableLazyResolveContractChecksInside { firAnalyzerFacade.runCheckers() }
|
||||||
|
|
||||||
|
val currentModule = part.module
|
||||||
val lightTreeComparingModeEnabled = FirDiagnosticsDirectives.COMPARE_WITH_LIGHT_TREE in currentModule.directives
|
val lightTreeComparingModeEnabled = FirDiagnosticsDirectives.COMPARE_WITH_LIGHT_TREE in currentModule.directives
|
||||||
val lightTreeEnabled = currentModule.directives.singleValue(FirDiagnosticsDirectives.FIR_PARSER) == FirParser.LightTree
|
val lightTreeEnabled = currentModule.directives.singleValue(FirDiagnosticsDirectives.FIR_PARSER) == FirParser.LightTree
|
||||||
val forceRenderArguments = FirDiagnosticsDirectives.RENDER_DIAGNOSTICS_MESSAGES in currentModule.directives
|
val forceRenderArguments = FirDiagnosticsDirectives.RENDER_DIAGNOSTICS_MESSAGES in currentModule.directives
|
||||||
|
|||||||
@@ -9,17 +9,17 @@ import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
|||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
||||||
import org.jetbrains.kotlin.diagnostics.KtDiagnostic
|
import org.jetbrains.kotlin.diagnostics.KtDiagnostic
|
||||||
import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector
|
|
||||||
import org.jetbrains.kotlin.fir.backend.*
|
import org.jetbrains.kotlin.fir.backend.*
|
||||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter
|
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter
|
||||||
import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
|
import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
|
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
|
||||||
import org.jetbrains.kotlin.fir.pipeline.ModuleCompilerAnalyzedOutput
|
import org.jetbrains.kotlin.fir.pipeline.ModuleCompilerAnalyzedOutput
|
||||||
|
import org.jetbrains.kotlin.fir.pipeline.runCheckers
|
||||||
|
import org.jetbrains.kotlin.fir.pipeline.runResolution
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.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.FirTotalResolveProcessor
|
|
||||||
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
|
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.sourceFiles.LightTreeFile
|
import org.jetbrains.kotlin.sourceFiles.LightTreeFile
|
||||||
@@ -79,25 +79,14 @@ class FirAnalyzerFacade(
|
|||||||
override fun runResolution(): List<FirFile> {
|
override fun runResolution(): List<FirFile> {
|
||||||
if (firFiles == null) buildRawFir()
|
if (firFiles == null) buildRawFir()
|
||||||
if (_scopeSession != null) return firFiles!!
|
if (_scopeSession != null) return firFiles!!
|
||||||
val resolveProcessor = FirTotalResolveProcessor(session)
|
_scopeSession = session.runResolution(firFiles!!).first
|
||||||
resolveProcessor.process(firFiles!!)
|
|
||||||
_scopeSession = resolveProcessor.scopeSession
|
|
||||||
return firFiles!!
|
return firFiles!!
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun runCheckers(): Map<FirFile, List<KtDiagnostic>> {
|
override fun runCheckers(): Map<FirFile, List<KtDiagnostic>> {
|
||||||
if (_scopeSession == null) runResolution()
|
if (_scopeSession == null) runResolution()
|
||||||
if (collectedDiagnostics != null) return collectedDiagnostics!!
|
if (collectedDiagnostics != null) return collectedDiagnostics!!
|
||||||
val collector = FirDiagnosticsCollector.create(session, scopeSession)
|
collectedDiagnostics = session.runCheckers(scopeSession, firFiles!!, DiagnosticReporterFactory.createPendingReporter())
|
||||||
collectedDiagnostics = buildMap {
|
|
||||||
for (file in firFiles!!) {
|
|
||||||
withFileAnalysisExceptionWrapping(file) {
|
|
||||||
val reporter = DiagnosticReporterFactory.createPendingReporter()
|
|
||||||
collector.collectDiagnostics(file, reporter)
|
|
||||||
put(file, reporter.diagnostics)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return collectedDiagnostics!!
|
return collectedDiagnostics!!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user