Use different transformers per module in FIR diagnostics tests
Before this commit, we used same transformers for all modules, which provoked using same ScopeSession for all modules. Now we re-create transformers for any new module. This fixes some problems with incorrect caching in ScopeSession. NB: this provokes ambiguities in some old FE tests, mostly they're correct (same as old FE).
This commit is contained in:
+5
-3
@@ -84,7 +84,7 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
|
||||
FirJavaModuleBasedSession(info, sessionProvider, scope)
|
||||
}
|
||||
|
||||
val firFiles = mutableListOf<FirFile>()
|
||||
val firFilesPerSession = mutableMapOf<FirSession, List<FirFile>>()
|
||||
|
||||
// TODO: make module/session/transformer handling like in AbstractFirMultiModuleTest (IDE)
|
||||
for ((testModule, testFilesInModule) in groupedByModule) {
|
||||
@@ -92,10 +92,12 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
|
||||
|
||||
val session = configToSession.getValue(testModule)
|
||||
|
||||
val firFiles = mutableListOf<FirFile>()
|
||||
mapKtFilesToFirFiles(session, ktFiles, firFiles, useLightTree)
|
||||
firFilesPerSession[session] = firFiles
|
||||
}
|
||||
|
||||
runAnalysis(testDataFile, files, firFiles)
|
||||
runAnalysis(testDataFile, files, firFilesPerSession)
|
||||
}
|
||||
|
||||
private fun mapKtFilesToFirFiles(session: FirSession, ktFiles: List<KtFile>, firFiles: MutableList<FirFile>, useLightTree: Boolean) {
|
||||
@@ -116,7 +118,7 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract fun runAnalysis(testDataFile: File, testFiles: List<TestFile>, firFiles: List<FirFile>)
|
||||
protected abstract fun runAnalysis(testDataFile: File, testFiles: List<TestFile>, firFilesPerSession: Map<FirSession, List<FirFile>>)
|
||||
|
||||
private fun createModules(
|
||||
groupedByModule: Map<TestModule?, List<TestFile>>
|
||||
|
||||
@@ -8,22 +8,22 @@ package org.jetbrains.kotlin.fir
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.collectors.AbstractDiagnosticCollector
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.collectors.FirDiagnosticsCollector
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.collectors.ParallelDiagnosticsCollector
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.collectors.registerAllComponents
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirTotalResolveTransformer
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import java.io.File
|
||||
|
||||
abstract class AbstractFirDiagnosticsTest : AbstractFirBaseDiagnosticsTest() {
|
||||
override fun runAnalysis(testDataFile: File, testFiles: List<TestFile>, firFiles: List<FirFile>) {
|
||||
doFirResolveTestBench(
|
||||
firFiles,
|
||||
FirTotalResolveTransformer().transformers,
|
||||
gc = false
|
||||
)
|
||||
checkDiagnostics(testDataFile, testFiles, firFiles)
|
||||
checkFir(testDataFile, firFiles)
|
||||
override fun runAnalysis(testDataFile: File, testFiles: List<TestFile>, firFilesPerSession: Map<FirSession, List<FirFile>>) {
|
||||
for ((_, firFiles) in firFilesPerSession) {
|
||||
doFirResolveTestBench(
|
||||
firFiles,
|
||||
FirTotalResolveTransformer().transformers,
|
||||
gc = false
|
||||
)
|
||||
}
|
||||
val allFirFiles = firFilesPerSession.values.flatten()
|
||||
checkDiagnostics(testDataFile, testFiles, allFirFiles)
|
||||
checkFir(testDataFile, allFirFiles)
|
||||
}
|
||||
|
||||
fun checkFir(testDataFile: File, firFiles: List<FirFile>) {
|
||||
|
||||
+4
-3
@@ -39,9 +39,10 @@ abstract class AbstractFirDiagnosticsWithCfgTest : AbstractFirDiagnosticsTest()
|
||||
return ConfigurationKind.ALL
|
||||
}
|
||||
|
||||
override fun runAnalysis(testDataFile: File, testFiles: List<TestFile>, firFiles: List<FirFile>) {
|
||||
super.runAnalysis(testDataFile, testFiles, firFiles)
|
||||
checkCfg(testDataFile, firFiles)
|
||||
override fun runAnalysis(testDataFile: File, testFiles: List<TestFile>, firFilesPerSession: Map<FirSession, List<FirFile>>) {
|
||||
super.runAnalysis(testDataFile, testFiles, firFilesPerSession)
|
||||
val allFirFiles = firFilesPerSession.values.flatten()
|
||||
checkCfg(testDataFile, allFirFiles)
|
||||
}
|
||||
|
||||
fun checkCfg(testDataFile: File, firFiles: List<FirFile>) {
|
||||
|
||||
+8
-5
@@ -24,21 +24,24 @@ abstract class AbstractFirOldFrontendDiagnosticsTest : AbstractFirDiagnosticsTes
|
||||
}
|
||||
}
|
||||
|
||||
override fun runAnalysis(testDataFile: File, testFiles: List<TestFile>, firFiles: List<FirFile>) {
|
||||
override fun runAnalysis(testDataFile: File, testFiles: List<TestFile>, firFilesPerSession: Map<FirSession, List<FirFile>>) {
|
||||
val failure: AssertionError? = try {
|
||||
doFirResolveTestBench(firFiles, FirTotalResolveTransformer().transformers, gc = false)
|
||||
for ((_, firFiles) in firFilesPerSession) {
|
||||
doFirResolveTestBench(firFiles, FirTotalResolveTransformer().transformers, gc = false)
|
||||
}
|
||||
null
|
||||
} catch (e: AssertionError) {
|
||||
e
|
||||
}
|
||||
val failureFile = File(testDataFile.path.replace(".kt", ".fail"))
|
||||
if (failure == null) {
|
||||
checkResultingFirFiles(firFiles, testDataFile)
|
||||
val allFirFiles = firFilesPerSession.values.flatten()
|
||||
checkResultingFirFiles(allFirFiles, testDataFile)
|
||||
assertFalse("Test is good but there is expected exception", failureFile.exists())
|
||||
checkDiagnostics(testDataFile, testFiles, firFiles)
|
||||
checkDiagnostics(testDataFile, testFiles, allFirFiles)
|
||||
val needDump = testFiles.any { it.directives.containsKey("FIR_DUMP") }
|
||||
if (needDump) {
|
||||
checkFir(testDataFile, firFiles)
|
||||
checkFir(testDataFile, allFirFiles)
|
||||
}
|
||||
} else {
|
||||
if (!failureFile.exists()) {
|
||||
|
||||
+1
-1
@@ -29,6 +29,6 @@ import p.*
|
||||
|
||||
fun <Y, Z> test(b: B<Y, Z>?) {
|
||||
if (b is C<Y, Z>) {
|
||||
b?.foo(null)
|
||||
b?.<!AMBIGUITY!>foo<!>(null)
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -30,8 +30,8 @@ import p.*
|
||||
|
||||
fun test(b: B?, c: C) {
|
||||
b?.foo(1, 1)
|
||||
c.foo(1, 1)
|
||||
c.<!AMBIGUITY!>foo<!>(1, 1)
|
||||
if (b is C) {
|
||||
b?.foo(1, 1)
|
||||
b?.<!AMBIGUITY!>foo<!>(1, 1)
|
||||
}
|
||||
}
|
||||
Vendored
+1
-1
@@ -38,6 +38,6 @@ import p.*
|
||||
|
||||
fun test(b: B?) {
|
||||
if (b is C) {
|
||||
b?.foo(null, null)
|
||||
b?.<!AMBIGUITY!>foo<!>(null, null)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user