[Test] Reuse buildFir... methods from firUtils.kt

This commit is contained in:
Ivan Kylchik
2023-07-14 16:12:52 +02:00
committed by Space Team
parent 34f8228441
commit 3c9eb87c8d
3 changed files with 11 additions and 52 deletions
@@ -10,14 +10,10 @@ import com.intellij.openapi.vfs.StandardFileSystems
import com.intellij.psi.PsiManager
import org.jetbrains.kotlin.KtInMemoryTextSourceFile
import org.jetbrains.kotlin.KtSourceFile
import org.jetbrains.kotlin.fir.lightTree.LightTreeParsingErrorListener
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.sourceFiles.LightTreeFile
import org.jetbrains.kotlin.test.model.TestFile
import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.util.KtTestUtil
import org.jetbrains.kotlin.toSourceLinesMapping
import java.io.File
abstract class SourceFilePreprocessor(val testServices: TestServices) {
@@ -112,26 +108,16 @@ fun SourceFileProvider.getKtFilesForSourceFiles(testFiles: Collection<TestFile>,
}.toMap()
}
fun SourceFileProvider.getLightTreeKtFileForSourceFile(
testFile: TestFile,
errorListener: (KtSourceFile) -> LightTreeParsingErrorListener?
): LightTreeFile {
val shortName = testFile.toLightTreeShortName()
val sourceFile = KtInMemoryTextSourceFile(shortName, "/$shortName", getContentOfSourceFile(testFile))
val linesMapping = sourceFile.text.toSourceLinesMapping()
val lightTree = LightTree2Fir.buildLightTree(sourceFile.text, errorListener(sourceFile))
return LightTreeFile(lightTree, sourceFile, linesMapping)
}
fun TestFile.toLightTreeShortName() = name.substringAfterLast('/').substringAfterLast('\\')
fun SourceFileProvider.getLightTreeFilesForSourceFiles(
fun SourceFileProvider.getKtSourceFilesForSourceFiles(
testFiles: Collection<TestFile>,
errorListener: (KtSourceFile) -> LightTreeParsingErrorListener?
): Map<TestFile, LightTreeFile> {
): Map<TestFile, KtSourceFile> {
return testFiles.mapNotNull {
if (!it.isKtFile) return@mapNotNull null
it to getLightTreeKtFileForSourceFile(it, errorListener)
val shortName = it.toLightTreeShortName()
val ktSourceFile = KtInMemoryTextSourceFile(shortName, "/$shortName", getContentOfSourceFile(it))
it to ktSourceFile
}.toMap()
}
@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.fir.lightTree.toKotlinParsingErrorListener
import org.jetbrains.kotlin.fir.session.FirCommonSessionFactory
import org.jetbrains.kotlin.fir.session.FirJvmSessionFactory
import org.jetbrains.kotlin.fir.session.FirNativeSessionFactory
@@ -279,12 +278,7 @@ open class FirFrontendFacade(
val (ktFiles, lightTreeFiles) = when (parser) {
FirParser.LightTree -> {
emptyList<KtFile>() to testServices.sourceFileProvider.getLightTreeFilesForSourceFiles(module.files) {
testServices.lightTreeSyntaxDiagnosticsReporterHolder?.reporter?.toKotlinParsingErrorListener(
it,
module.languageVersionSettings
)
}.values
emptyList<KtFile>() to testServices.sourceFileProvider.getKtSourceFilesForSourceFiles(module.files).values
}
FirParser.Psi -> testServices.sourceFileProvider.getKtFilesForSourceFiles(module.files, project).values to emptyList()
}
@@ -5,24 +5,18 @@
package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.KtSourceFile
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.diagnostics.KtDiagnostic
import org.jetbrains.kotlin.fir.backend.*
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter
import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
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.pipeline.*
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.sourceFiles.LightTreeFile
import org.jetbrains.kotlin.test.FirParser
abstract class AbstractFirAnalyzerFacade {
@@ -42,7 +36,7 @@ class FirAnalyzerFacade(
val session: FirSession,
val fir2IrConfiguration: Fir2IrConfiguration,
val ktFiles: Collection<KtFile> = emptyList(), // may be empty if light tree mode enabled
val lightTreeFiles: Collection<LightTreeFile> = emptyList(), // may be empty if light tree mode disabled
val lightTreeFiles: Collection<KtSourceFile> = emptyList(), // may be empty if light tree mode disabled
val parser: FirParser,
val diagnosticReporterForLightTree: DiagnosticReporter? = null
) : AbstractFirAnalyzerFacade() {
@@ -55,24 +49,9 @@ class FirAnalyzerFacade(
private fun buildRawFir() {
if (firFiles != null) return
val firProvider = (session.firProvider as FirProviderImpl)
firFiles = when (parser) {
FirParser.LightTree -> {
val builder = LightTree2Fir(session, firProvider.kotlinScopeProvider, diagnosticReporterForLightTree)
lightTreeFiles.map {
builder.buildFirFile(it.lightTree, it.sourceFile, it.linesMapping).also { firFile ->
firProvider.recordFile(firFile)
}
}
}
FirParser.Psi -> {
val builder = PsiRawFirBuilder(session, firProvider.kotlinScopeProvider)
ktFiles.map {
builder.buildFirFile(it).also { firFile ->
firProvider.recordFile(firFile)
}
}
}
FirParser.LightTree -> session.buildFirViaLightTree(lightTreeFiles, diagnosticReporterForLightTree)
FirParser.Psi -> session.buildFirFromKtFiles(ktFiles)
}
}