[FIR] Add createEmptySession to FirSessionFactory for testing purposes

This commit is contained in:
Dmitriy Novozhilov
2020-08-28 16:11:14 +03:00
parent a8d23c36f5
commit cf224b4de9
9 changed files with 51 additions and 19 deletions
@@ -9,7 +9,9 @@ import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElementFinder import com.intellij.psi.PsiElementFinder
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.PrivateSessionConstructor import org.jetbrains.kotlin.fir.PrivateSessionConstructor
import org.jetbrains.kotlin.fir.java.* import org.jetbrains.kotlin.fir.java.*
import org.jetbrains.kotlin.fir.java.deserialization.KotlinDeserializedJvmSymbolsProvider import org.jetbrains.kotlin.fir.java.deserialization.KotlinDeserializedJvmSymbolsProvider
@@ -101,4 +103,9 @@ object FirSessionFactory {
) )
} }
} }
@TestOnly
fun createEmptySession(): FirSession {
return object : FirSession(null) {}
}
} }
@@ -22,7 +22,7 @@ import java.io.File
import java.nio.file.Path import java.nio.file.Path
class LightTree2Fir( class LightTree2Fir(
val session: FirSession = @OptIn(PrivateSessionConstructor::class) object : FirSession(null) {}, val session: FirSession,
private val scopeProvider: FirScopeProvider, private val scopeProvider: FirScopeProvider,
private val stubMode: Boolean = false private val stubMode: Boolean = false
) { ) {
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.lightTree
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.session.FirSessionFactory
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import java.io.File import java.io.File
import java.nio.file.Paths import java.nio.file.Paths
@@ -16,7 +17,11 @@ import java.nio.file.Paths
abstract class AbstractLightTree2FirConverterTestCase : AbstractRawFirBuilderTestCase() { abstract class AbstractLightTree2FirConverterTestCase : AbstractRawFirBuilderTestCase() {
override fun doTest(filePath: String) { 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 firDump = firFile.render()
val expectedFile = File(filePath.replace(".kt", ".txt")) val expectedFile = File(filePath.replace(".kt", ".txt"))
@@ -12,11 +12,10 @@ import com.intellij.psi.impl.PsiManagerEx
import com.intellij.testFramework.LightVirtualFile import com.intellij.testFramework.LightVirtualFile
import com.intellij.testFramework.TestDataPath import com.intellij.testFramework.TestDataPath
import org.jetbrains.kotlin.fir.FirRenderer 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.AbstractRawFirBuilderTestCase
import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider
import org.jetbrains.kotlin.fir.lightTree.converter.DeclarationsConverter 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.idea.KotlinFileType
import org.jetbrains.kotlin.parsing.KotlinParser import org.jetbrains.kotlin.parsing.KotlinParser
import org.jetbrains.kotlin.parsing.KotlinParserDefinition import org.jetbrains.kotlin.parsing.KotlinParserDefinition
@@ -64,7 +63,7 @@ class SimpleTestCase : AbstractRawFirBuilderTestCase() {
println(DebugUtil.nodeTreeToString(builder.treeBuilt, false)) println(DebugUtil.nodeTreeToString(builder.treeBuilt, false))
val firFromLightTreeFile = DeclarationsConverter( val firFromLightTreeFile = DeclarationsConverter(
@OptIn(PrivateSessionConstructor::class) object : FirSession(null) {}, FirSessionFactory.createEmptySession(),
StubFirScopeProvider, StubFirScopeProvider,
true, true,
builder.lightTree builder.lightTree
@@ -13,6 +13,7 @@ import com.intellij.util.PathUtil
import org.jetbrains.kotlin.fir.FirRenderer import org.jetbrains.kotlin.fir.FirRenderer
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider
import org.jetbrains.kotlin.fir.session.FirSessionFactory
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners import org.jetbrains.kotlin.test.JUnit3RunnerWithInners
import org.junit.runner.RunWith import org.junit.runner.RunWith
@@ -47,7 +48,11 @@ class TotalKotlinTest : AbstractRawFirBuilderTestCase() {
var counter = 0 var counter = 0
var time = 0L 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") if (onlyLightTree) println("LightTree generation") else println("Fir from LightTree converter")
println("BASE PATH: $path") println("BASE PATH: $path")
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirRenderer
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir 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.Scope
import org.openjdk.jmh.annotations.State import org.openjdk.jmh.annotations.State
import java.io.File import java.io.File
@@ -17,13 +18,21 @@ import java.io.File
@State(Scope.Benchmark) @State(Scope.Benchmark)
open class LightTree2FirGenerator : TreeGenerator, AbstractRawFirBuilderTestCase() { open class LightTree2FirGenerator : TreeGenerator, AbstractRawFirBuilderTestCase() {
override fun generateBaseTree(text: String, file: File) { 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) val lightTree = lightTreeConverter.buildLightTree(text)
DebugUtil.lightTreeToString(lightTree, false) DebugUtil.lightTreeToString(lightTree, false)
} }
override fun generateFir(text: String, file: File, stubMode: Boolean) { 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) val firFile = lightTreeConverter.buildFirFile(text, file.name)
StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString() StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
} }
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
import org.jetbrains.kotlin.fir.lightTree.walkTopDown import org.jetbrains.kotlin.fir.lightTree.walkTopDown
import org.jetbrains.kotlin.fir.lightTree.walkTopDownWithTestData import org.jetbrains.kotlin.fir.lightTree.walkTopDownWithTestData
import org.jetbrains.kotlin.fir.session.FirSessionFactory
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners import org.jetbrains.kotlin.test.JUnit3RunnerWithInners
import org.junit.runner.RunWith import org.junit.runner.RunWith
@@ -54,7 +55,11 @@ class TreesCompareTest : AbstractRawFirBuilderTestCase() {
} }
private fun compareAll(stubMode: Boolean) { 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 -> compareBase(System.getProperty("user.dir"), withTestData = false) { file ->
val text = FileUtil.loadFile(file, CharsetToolkit.UTF8, true).trim() val text = FileUtil.loadFile(file, CharsetToolkit.UTF8, true).trim()
@@ -72,7 +77,11 @@ class TreesCompareTest : AbstractRawFirBuilderTestCase() {
} }
fun testCompareDiagnostics() { 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 -> compareBase("compiler/testData/diagnostics/tests", withTestData = true) { file ->
if (file.name.endsWith(".fir.kt")) { if (file.name.endsWith(".fir.kt")) {
return@compareBase true return@compareBase true
@@ -6,9 +6,8 @@
package org.jetbrains.kotlin.fir.builder package org.jetbrains.kotlin.fir.builder
import org.jetbrains.kotlin.fir.FirRenderer 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.render
import org.jetbrains.kotlin.fir.session.FirSessionFactory
import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
@@ -25,8 +24,7 @@ abstract class AbstractPartialRawFirBuilderTestCase : AbstractRawFirBuilderTestC
val file = createKtFile(filePath) val file = createKtFile(filePath)
val functionToBuild = file.findDescendantOfType<KtNamedFunction> { it.name == nameToFind }!! val functionToBuild = file.findDescendantOfType<KtNamedFunction> { it.name == nameToFind }!!
@OptIn(PrivateSessionConstructor::class) val session = FirSessionFactory.createEmptySession()
val session = object : FirSession(null) {}
val firFunction = RawFirBuilder(session, StubFirScopeProvider, false) val firFunction = RawFirBuilder(session, StubFirScopeProvider, false)
.buildFunctionWithBody(functionToBuild) .buildFunctionWithBody(functionToBuild)
@@ -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.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirStubStatement import org.jetbrains.kotlin.fir.expressions.impl.FirStubStatement
import org.jetbrains.kotlin.fir.references.impl.FirStubReference 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.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.isExtensionFunctionAnnotationCall import org.jetbrains.kotlin.fir.types.isExtensionFunctionAnnotationCall
@@ -74,8 +75,7 @@ abstract class AbstractRawFirBuilderTestCase : KtParsingTestCase(
} }
protected fun KtFile.toFirFile(stubMode: Boolean): FirFile { protected fun KtFile.toFirFile(stubMode: Boolean): FirFile {
@OptIn(PrivateSessionConstructor::class) val session = FirSessionFactory.createEmptySession()
val session = object : FirSession(null) {}
return RawFirBuilder(session, StubFirScopeProvider, stubMode).buildFirFile(this) return RawFirBuilder(session, StubFirScopeProvider, stubMode).buildFirFile(this)
} }