From cf224b4de9323b8355f9ae6779ad58fecbea2541 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Fri, 28 Aug 2020 16:11:14 +0300 Subject: [PATCH] [FIR] Add `createEmptySession` to `FirSessionFactory` for testing purposes --- .../kotlin/fir/session/FirSessionFactory.kt | 7 +++++++ .../kotlin/fir/lightTree/LightTree2Fir.kt | 2 +- .../AbstractLightTree2FirConverterTestCase.kt | 9 +++++++-- .../kotlin/fir/lightTree/SimpleTestCase.kt | 5 ++--- .../kotlin/fir/lightTree/TotalKotlinTest.kt | 9 +++++++-- .../generators/LightTree2FirGenerator.kt | 15 ++++++++++++--- .../fir/lightTree/compare/TreesCompareTest.kt | 13 +++++++++++-- .../AbstractPartialRawFirBuilderTestCase.kt | 6 ++---- .../fir/builder/AbstractRawFirBuilderTestCase.kt | 4 ++-- 9 files changed, 51 insertions(+), 19 deletions(-) diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt index 84d3ad30c2a..7abefefa914 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt @@ -9,7 +9,9 @@ import com.intellij.openapi.extensions.Extensions import com.intellij.openapi.project.Project import com.intellij.psi.PsiElementFinder import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.analyzer.ModuleInfo +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.PrivateSessionConstructor import org.jetbrains.kotlin.fir.java.* import org.jetbrains.kotlin.fir.java.deserialization.KotlinDeserializedJvmSymbolsProvider @@ -101,4 +103,9 @@ object FirSessionFactory { ) } } + + @TestOnly + fun createEmptySession(): FirSession { + return object : FirSession(null) {} + } } diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/LightTree2Fir.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/LightTree2Fir.kt index 4ec1a0fb923..4b41bd3f883 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/LightTree2Fir.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/LightTree2Fir.kt @@ -22,7 +22,7 @@ import java.io.File import java.nio.file.Path class LightTree2Fir( - val session: FirSession = @OptIn(PrivateSessionConstructor::class) object : FirSession(null) {}, + val session: FirSession, private val scopeProvider: FirScopeProvider, private val stubMode: Boolean = false ) { diff --git a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/AbstractLightTree2FirConverterTestCase.kt b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/AbstractLightTree2FirConverterTestCase.kt index 839473a4cce..bbd7208e544 100644 --- a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/AbstractLightTree2FirConverterTestCase.kt +++ b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/AbstractLightTree2FirConverterTestCase.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.lightTree import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider import org.jetbrains.kotlin.fir.render +import org.jetbrains.kotlin.fir.session.FirSessionFactory import org.jetbrains.kotlin.test.KotlinTestUtils import java.io.File import java.nio.file.Paths @@ -16,10 +17,14 @@ import java.nio.file.Paths abstract class AbstractLightTree2FirConverterTestCase : AbstractRawFirBuilderTestCase() { override fun doTest(filePath: String) { - val firFile = LightTree2Fir(scopeProvider = StubFirScopeProvider, stubMode = false).buildFirFile(Paths.get(filePath)) + val firFile = LightTree2Fir( + session = FirSessionFactory.createEmptySession(), + scopeProvider = StubFirScopeProvider, + stubMode = false + ).buildFirFile(Paths.get(filePath)) val firDump = firFile.render() val expectedFile = File(filePath.replace(".kt", ".txt")) KotlinTestUtils.assertEqualsToFile(expectedFile, firDump) } -} \ No newline at end of file +} diff --git a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/SimpleTestCase.kt b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/SimpleTestCase.kt index 3dc03eb5f7c..a975189bc27 100644 --- a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/SimpleTestCase.kt +++ b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/SimpleTestCase.kt @@ -12,11 +12,10 @@ import com.intellij.psi.impl.PsiManagerEx import com.intellij.testFramework.LightVirtualFile import com.intellij.testFramework.TestDataPath import org.jetbrains.kotlin.fir.FirRenderer -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.PrivateSessionConstructor import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider import org.jetbrains.kotlin.fir.lightTree.converter.DeclarationsConverter +import org.jetbrains.kotlin.fir.session.FirSessionFactory import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.parsing.KotlinParser import org.jetbrains.kotlin.parsing.KotlinParserDefinition @@ -64,7 +63,7 @@ class SimpleTestCase : AbstractRawFirBuilderTestCase() { println(DebugUtil.nodeTreeToString(builder.treeBuilt, false)) val firFromLightTreeFile = DeclarationsConverter( - @OptIn(PrivateSessionConstructor::class) object : FirSession(null) {}, + FirSessionFactory.createEmptySession(), StubFirScopeProvider, true, builder.lightTree diff --git a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/TotalKotlinTest.kt b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/TotalKotlinTest.kt index 8794434c076..c38391aae0c 100644 --- a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/TotalKotlinTest.kt +++ b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/TotalKotlinTest.kt @@ -13,6 +13,7 @@ import com.intellij.util.PathUtil import org.jetbrains.kotlin.fir.FirRenderer import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider +import org.jetbrains.kotlin.fir.session.FirSessionFactory import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.JUnit3RunnerWithInners import org.junit.runner.RunWith @@ -47,7 +48,11 @@ class TotalKotlinTest : AbstractRawFirBuilderTestCase() { var counter = 0 var time = 0L - val lightTreeConverter = LightTree2Fir(scopeProvider = StubFirScopeProvider, stubMode = true) + val lightTreeConverter = LightTree2Fir( + session = FirSessionFactory.createEmptySession(), + scopeProvider = StubFirScopeProvider, + stubMode = true + ) if (onlyLightTree) println("LightTree generation") else println("Fir from LightTree converter") println("BASE PATH: $path") @@ -104,4 +109,4 @@ class TotalKotlinTest : AbstractRawFirBuilderTestCase() { fun testTotalKotlinFirFromPsi() { totalKotlinPsi(false) } -} \ No newline at end of file +} diff --git a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/benchmark/generators/LightTree2FirGenerator.kt b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/benchmark/generators/LightTree2FirGenerator.kt index de9c28d113d..d74b8454d0e 100644 --- a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/benchmark/generators/LightTree2FirGenerator.kt +++ b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/benchmark/generators/LightTree2FirGenerator.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirRenderer import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir +import org.jetbrains.kotlin.fir.session.FirSessionFactory import org.openjdk.jmh.annotations.Scope import org.openjdk.jmh.annotations.State import java.io.File @@ -17,13 +18,21 @@ import java.io.File @State(Scope.Benchmark) open class LightTree2FirGenerator : TreeGenerator, AbstractRawFirBuilderTestCase() { override fun generateBaseTree(text: String, file: File) { - val lightTreeConverter = LightTree2Fir(scopeProvider = StubFirScopeProvider, stubMode = false) + val lightTreeConverter = LightTree2Fir( + session = FirSessionFactory.createEmptySession(), + scopeProvider = StubFirScopeProvider, + stubMode = false + ) val lightTree = lightTreeConverter.buildLightTree(text) DebugUtil.lightTreeToString(lightTree, false) } override fun generateFir(text: String, file: File, stubMode: Boolean) { - val lightTreeConverter = LightTree2Fir(scopeProvider = StubFirScopeProvider, stubMode = stubMode) + val lightTreeConverter = LightTree2Fir( + session = FirSessionFactory.createEmptySession(), + scopeProvider = StubFirScopeProvider, + stubMode = stubMode + ) val firFile = lightTreeConverter.buildFirFile(text, file.name) StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString() } @@ -35,4 +44,4 @@ open class LightTree2FirGenerator : TreeGenerator, AbstractRawFirBuilderTestCase override fun tearDown() { super.tearDown() } -} \ No newline at end of file +} diff --git a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/compare/TreesCompareTest.kt b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/compare/TreesCompareTest.kt index bd55d42030b..14e05385606 100644 --- a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/compare/TreesCompareTest.kt +++ b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/compare/TreesCompareTest.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir import org.jetbrains.kotlin.fir.lightTree.walkTopDown import org.jetbrains.kotlin.fir.lightTree.walkTopDownWithTestData +import org.jetbrains.kotlin.fir.session.FirSessionFactory import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.test.JUnit3RunnerWithInners import org.junit.runner.RunWith @@ -54,7 +55,11 @@ class TreesCompareTest : AbstractRawFirBuilderTestCase() { } private fun compareAll(stubMode: Boolean) { - val lightTreeConverter = LightTree2Fir(scopeProvider = StubFirScopeProvider, stubMode = stubMode) + val lightTreeConverter = LightTree2Fir( + session = FirSessionFactory.createEmptySession(), + scopeProvider = StubFirScopeProvider, + stubMode = stubMode + ) compareBase(System.getProperty("user.dir"), withTestData = false) { file -> val text = FileUtil.loadFile(file, CharsetToolkit.UTF8, true).trim() @@ -72,7 +77,11 @@ class TreesCompareTest : AbstractRawFirBuilderTestCase() { } fun testCompareDiagnostics() { - val lightTreeConverter = LightTree2Fir(scopeProvider = StubFirScopeProvider, stubMode = false) + val lightTreeConverter = LightTree2Fir( + session = FirSessionFactory.createEmptySession(), + scopeProvider = StubFirScopeProvider, + stubMode = false + ) compareBase("compiler/testData/diagnostics/tests", withTestData = true) { file -> if (file.name.endsWith(".fir.kt")) { return@compareBase true diff --git a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractPartialRawFirBuilderTestCase.kt b/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractPartialRawFirBuilderTestCase.kt index b3a97984af1..e2d05f276e9 100644 --- a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractPartialRawFirBuilderTestCase.kt +++ b/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractPartialRawFirBuilderTestCase.kt @@ -6,9 +6,8 @@ package org.jetbrains.kotlin.fir.builder import org.jetbrains.kotlin.fir.FirRenderer -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.PrivateSessionConstructor import org.jetbrains.kotlin.fir.render +import org.jetbrains.kotlin.fir.session.FirSessionFactory import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType import org.jetbrains.kotlin.test.KotlinTestUtils @@ -25,8 +24,7 @@ abstract class AbstractPartialRawFirBuilderTestCase : AbstractRawFirBuilderTestC val file = createKtFile(filePath) val functionToBuild = file.findDescendantOfType { it.name == nameToFind }!! - @OptIn(PrivateSessionConstructor::class) - val session = object : FirSession(null) {} + val session = FirSessionFactory.createEmptySession() val firFunction = RawFirBuilder(session, StubFirScopeProvider, false) .buildFunctionWithBody(functionToBuild) diff --git a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt b/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt index 364a509df56..ceea5da3033 100644 --- a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt +++ b/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.fir.expressions.FirEmptyArgumentList import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression import org.jetbrains.kotlin.fir.expressions.impl.FirStubStatement import org.jetbrains.kotlin.fir.references.impl.FirStubReference +import org.jetbrains.kotlin.fir.session.FirSessionFactory import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.isExtensionFunctionAnnotationCall @@ -74,8 +75,7 @@ abstract class AbstractRawFirBuilderTestCase : KtParsingTestCase( } protected fun KtFile.toFirFile(stubMode: Boolean): FirFile { - @OptIn(PrivateSessionConstructor::class) - val session = object : FirSession(null) {} + val session = FirSessionFactory.createEmptySession() return RawFirBuilder(session, StubFirScopeProvider, stubMode).buildFirFile(this) }