[Test] Reuse buildFir... methods from firUtils.kt
This commit is contained in:
+5
-19
@@ -10,14 +10,10 @@ import com.intellij.openapi.vfs.StandardFileSystems
|
|||||||
import com.intellij.psi.PsiManager
|
import com.intellij.psi.PsiManager
|
||||||
import org.jetbrains.kotlin.KtInMemoryTextSourceFile
|
import org.jetbrains.kotlin.KtInMemoryTextSourceFile
|
||||||
import org.jetbrains.kotlin.KtSourceFile
|
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.psi.KtFile
|
||||||
import org.jetbrains.kotlin.sourceFiles.LightTreeFile
|
|
||||||
import org.jetbrains.kotlin.test.model.TestFile
|
import org.jetbrains.kotlin.test.model.TestFile
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.util.KtTestUtil
|
import org.jetbrains.kotlin.test.util.KtTestUtil
|
||||||
import org.jetbrains.kotlin.toSourceLinesMapping
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
abstract class SourceFilePreprocessor(val testServices: TestServices) {
|
abstract class SourceFilePreprocessor(val testServices: TestServices) {
|
||||||
@@ -112,26 +108,16 @@ fun SourceFileProvider.getKtFilesForSourceFiles(testFiles: Collection<TestFile>,
|
|||||||
}.toMap()
|
}.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 TestFile.toLightTreeShortName() = name.substringAfterLast('/').substringAfterLast('\\')
|
||||||
|
|
||||||
fun SourceFileProvider.getLightTreeFilesForSourceFiles(
|
fun SourceFileProvider.getKtSourceFilesForSourceFiles(
|
||||||
testFiles: Collection<TestFile>,
|
testFiles: Collection<TestFile>,
|
||||||
errorListener: (KtSourceFile) -> LightTreeParsingErrorListener?
|
): Map<TestFile, KtSourceFile> {
|
||||||
): Map<TestFile, LightTreeFile> {
|
|
||||||
return testFiles.mapNotNull {
|
return testFiles.mapNotNull {
|
||||||
if (!it.isKtFile) return@mapNotNull null
|
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()
|
}.toMap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-7
@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
|
|||||||
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
|
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
|
||||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
||||||
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
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.FirCommonSessionFactory
|
||||||
import org.jetbrains.kotlin.fir.session.FirJvmSessionFactory
|
import org.jetbrains.kotlin.fir.session.FirJvmSessionFactory
|
||||||
import org.jetbrains.kotlin.fir.session.FirNativeSessionFactory
|
import org.jetbrains.kotlin.fir.session.FirNativeSessionFactory
|
||||||
@@ -279,12 +278,7 @@ open class FirFrontendFacade(
|
|||||||
|
|
||||||
val (ktFiles, lightTreeFiles) = when (parser) {
|
val (ktFiles, lightTreeFiles) = when (parser) {
|
||||||
FirParser.LightTree -> {
|
FirParser.LightTree -> {
|
||||||
emptyList<KtFile>() to testServices.sourceFileProvider.getLightTreeFilesForSourceFiles(module.files) {
|
emptyList<KtFile>() to testServices.sourceFileProvider.getKtSourceFilesForSourceFiles(module.files).values
|
||||||
testServices.lightTreeSyntaxDiagnosticsReporterHolder?.reporter?.toKotlinParsingErrorListener(
|
|
||||||
it,
|
|
||||||
module.languageVersionSettings
|
|
||||||
)
|
|
||||||
}.values
|
|
||||||
}
|
}
|
||||||
FirParser.Psi -> testServices.sourceFileProvider.getKtFilesForSourceFiles(module.files, project).values to emptyList()
|
FirParser.Psi -> testServices.sourceFileProvider.getKtFilesForSourceFiles(module.files, project).values to emptyList()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,24 +5,18 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir
|
package org.jetbrains.kotlin.fir
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.KtSourceFile
|
||||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
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.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.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
|
import org.jetbrains.kotlin.fir.pipeline.*
|
||||||
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.impl.FirProviderImpl
|
|
||||||
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.test.FirParser
|
import org.jetbrains.kotlin.test.FirParser
|
||||||
|
|
||||||
abstract class AbstractFirAnalyzerFacade {
|
abstract class AbstractFirAnalyzerFacade {
|
||||||
@@ -42,7 +36,7 @@ class FirAnalyzerFacade(
|
|||||||
val session: FirSession,
|
val session: FirSession,
|
||||||
val fir2IrConfiguration: Fir2IrConfiguration,
|
val fir2IrConfiguration: Fir2IrConfiguration,
|
||||||
val ktFiles: Collection<KtFile> = emptyList(), // may be empty if light tree mode enabled
|
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 parser: FirParser,
|
||||||
val diagnosticReporterForLightTree: DiagnosticReporter? = null
|
val diagnosticReporterForLightTree: DiagnosticReporter? = null
|
||||||
) : AbstractFirAnalyzerFacade() {
|
) : AbstractFirAnalyzerFacade() {
|
||||||
@@ -55,24 +49,9 @@ class FirAnalyzerFacade(
|
|||||||
|
|
||||||
private fun buildRawFir() {
|
private fun buildRawFir() {
|
||||||
if (firFiles != null) return
|
if (firFiles != null) return
|
||||||
val firProvider = (session.firProvider as FirProviderImpl)
|
|
||||||
firFiles = when (parser) {
|
firFiles = when (parser) {
|
||||||
FirParser.LightTree -> {
|
FirParser.LightTree -> session.buildFirViaLightTree(lightTreeFiles, diagnosticReporterForLightTree)
|
||||||
val builder = LightTree2Fir(session, firProvider.kotlinScopeProvider, diagnosticReporterForLightTree)
|
FirParser.Psi -> session.buildFirFromKtFiles(ktFiles)
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user