From fe8d68ecc7159fde5076c2849db11c56d934a8e9 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 19 Dec 2019 16:24:45 +0300 Subject: [PATCH] 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). --- .../fir/AbstractFirBaseDiagnosticsTest.kt | 8 ++++--- .../kotlin/fir/AbstractFirDiagnosticTest.kt | 22 +++++++++---------- .../fir/AbstractFirDiagnosticsWithCfgTest.kt | 7 +++--- .../AbstractFirOldFrontendDiagnosticsTest.kt | 13 ++++++----- .../classGenericsInParamsIndexMismatch.fir.kt | 2 +- ...sVsFunctionGenericsInParamsMismatch.fir.kt | 4 ++-- .../differentGenericsInParams.fir.kt | 2 +- 7 files changed, 32 insertions(+), 26 deletions(-) diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirBaseDiagnosticsTest.kt b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirBaseDiagnosticsTest.kt index 7f17e36ed10..12f7ed39ed8 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirBaseDiagnosticsTest.kt +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirBaseDiagnosticsTest.kt @@ -84,7 +84,7 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() { FirJavaModuleBasedSession(info, sessionProvider, scope) } - val firFiles = mutableListOf() + val firFilesPerSession = mutableMapOf>() // 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() mapKtFilesToFirFiles(session, ktFiles, firFiles, useLightTree) + firFilesPerSession[session] = firFiles } - runAnalysis(testDataFile, files, firFiles) + runAnalysis(testDataFile, files, firFilesPerSession) } private fun mapKtFilesToFirFiles(session: FirSession, ktFiles: List, firFiles: MutableList, useLightTree: Boolean) { @@ -116,7 +118,7 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() { } } - protected abstract fun runAnalysis(testDataFile: File, testFiles: List, firFiles: List) + protected abstract fun runAnalysis(testDataFile: File, testFiles: List, firFilesPerSession: Map>) private fun createModules( groupedByModule: Map> diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticTest.kt b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticTest.kt index 81af82b8861..a2f6ba4dfca 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticTest.kt +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticTest.kt @@ -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, firFiles: List) { - doFirResolveTestBench( - firFiles, - FirTotalResolveTransformer().transformers, - gc = false - ) - checkDiagnostics(testDataFile, testFiles, firFiles) - checkFir(testDataFile, firFiles) + override fun runAnalysis(testDataFile: File, testFiles: List, firFilesPerSession: Map>) { + 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) { diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticsWithCfgTest.kt b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticsWithCfgTest.kt index 108fd750b22..82aa553246e 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticsWithCfgTest.kt +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticsWithCfgTest.kt @@ -39,9 +39,10 @@ abstract class AbstractFirDiagnosticsWithCfgTest : AbstractFirDiagnosticsTest() return ConfigurationKind.ALL } - override fun runAnalysis(testDataFile: File, testFiles: List, firFiles: List) { - super.runAnalysis(testDataFile, testFiles, firFiles) - checkCfg(testDataFile, firFiles) + override fun runAnalysis(testDataFile: File, testFiles: List, firFilesPerSession: Map>) { + super.runAnalysis(testDataFile, testFiles, firFilesPerSession) + val allFirFiles = firFilesPerSession.values.flatten() + checkCfg(testDataFile, allFirFiles) } fun checkCfg(testDataFile: File, firFiles: List) { diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirOldFrontendDiagnosticsTest.kt b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirOldFrontendDiagnosticsTest.kt index e22c1d6747e..7567c9c067b 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirOldFrontendDiagnosticsTest.kt +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirOldFrontendDiagnosticsTest.kt @@ -24,21 +24,24 @@ abstract class AbstractFirOldFrontendDiagnosticsTest : AbstractFirDiagnosticsTes } } - override fun runAnalysis(testDataFile: File, testFiles: List, firFiles: List) { + override fun runAnalysis(testDataFile: File, testFiles: List, firFilesPerSession: Map>) { 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()) { diff --git a/compiler/testData/diagnostics/tests/multimodule/duplicateMethod/classGenericsInParamsIndexMismatch.fir.kt b/compiler/testData/diagnostics/tests/multimodule/duplicateMethod/classGenericsInParamsIndexMismatch.fir.kt index 00da81c4009..0cd1fe3fde3 100644 --- a/compiler/testData/diagnostics/tests/multimodule/duplicateMethod/classGenericsInParamsIndexMismatch.fir.kt +++ b/compiler/testData/diagnostics/tests/multimodule/duplicateMethod/classGenericsInParamsIndexMismatch.fir.kt @@ -29,6 +29,6 @@ import p.* fun test(b: B?) { if (b is C) { - b?.foo(null) + b?.foo(null) } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/multimodule/duplicateMethod/classVsFunctionGenericsInParamsMismatch.fir.kt b/compiler/testData/diagnostics/tests/multimodule/duplicateMethod/classVsFunctionGenericsInParamsMismatch.fir.kt index 0afb87446e1..a17bb8153f9 100644 --- a/compiler/testData/diagnostics/tests/multimodule/duplicateMethod/classVsFunctionGenericsInParamsMismatch.fir.kt +++ b/compiler/testData/diagnostics/tests/multimodule/duplicateMethod/classVsFunctionGenericsInParamsMismatch.fir.kt @@ -30,8 +30,8 @@ import p.* fun test(b: B?, c: C) { b?.foo(1, 1) - c.foo(1, 1) + c.foo(1, 1) if (b is C) { - b?.foo(1, 1) + b?.foo(1, 1) } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/multimodule/duplicateMethod/differentGenericsInParams.fir.kt b/compiler/testData/diagnostics/tests/multimodule/duplicateMethod/differentGenericsInParams.fir.kt index 8dbd7151a07..e98bcaaa473 100644 --- a/compiler/testData/diagnostics/tests/multimodule/duplicateMethod/differentGenericsInParams.fir.kt +++ b/compiler/testData/diagnostics/tests/multimodule/duplicateMethod/differentGenericsInParams.fir.kt @@ -38,6 +38,6 @@ import p.* fun test(b: B?) { if (b is C) { - b?.foo(null, null) + b?.foo(null, null) } } \ No newline at end of file