[FIR] Remove BodyBuildingMode.STUBS from RawFirBuilder

This commit is contained in:
Dmitriy Novozhilov
2021-09-03 17:49:21 +03:00
committed by teamcityserver
parent 116a1c1e46
commit 8904d6fde9
10 changed files with 17 additions and 41 deletions
@@ -29,7 +29,7 @@ class TotalKotlinTest : AbstractRawFirBuilderTestCase() {
if (onlyPsi) { if (onlyPsi) {
DebugUtil.psiTreeToString(ktFile, false) DebugUtil.psiTreeToString(ktFile, false)
} else { } else {
val firFile = ktFile.toFirFile(BodyBuildingMode.STUBS) val firFile = ktFile.toFirFile()
StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString() StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
} }
} }
@@ -31,9 +31,6 @@ abstract class AbstractBenchmark {
private val files = mutableMapOf<File, String>() private val files = mutableMapOf<File, String>()
abstract val generator: TreeGenerator abstract val generator: TreeGenerator
@Param("true", "false")
var stubMode: Boolean = false
protected fun readFiles(ignoreTestData: Boolean, path: String) { protected fun readFiles(ignoreTestData: Boolean, path: String) {
println("BASE PATH: $path") println("BASE PATH: $path")
val saveText: (File) -> Unit = { file -> val saveText: (File) -> Unit = { file ->
@@ -56,4 +53,4 @@ abstract class AbstractBenchmark {
protected fun getFilesCount(): Int { protected fun getFilesCount(): Int {
return files.size return files.size
} }
} }
@@ -30,6 +30,6 @@ abstract class AbstractBenchmarkForGivenPath(
@Benchmark @Benchmark
fun testBuildFirForGivenPath() { fun testBuildFirForGivenPath() {
forEachFile { text, file -> generator.generateFir(text, file, stubMode) } forEachFile { text, file -> generator.generateFir(text, file) }
} }
} }
@@ -53,7 +53,7 @@ abstract class AbstractKotlinBenchmark : AbstractBenchmark() {
@Benchmark @Benchmark
fun testCreatedFiles() { fun testCreatedFiles() {
generator.generateFir(text, file, stubMode) generator.generateFir(text, file)
} }
} }
@@ -61,4 +61,4 @@ open class LightTree2FirKotlinBenchmark(override val generator: TreeGenerator =
AbstractKotlinBenchmark() AbstractKotlinBenchmark()
open class Psi2FirKotlinBenchmark(override val generator: TreeGenerator = Psi2FirGenerator()) : open class Psi2FirKotlinBenchmark(override val generator: TreeGenerator = Psi2FirGenerator()) :
AbstractKotlinBenchmark() AbstractKotlinBenchmark()
@@ -26,7 +26,7 @@ open class LightTree2FirGenerator : TreeGenerator, AbstractRawFirBuilderTestCase
DebugUtil.lightTreeToString(lightTree, false) DebugUtil.lightTreeToString(lightTree, false)
} }
override fun generateFir(text: String, file: File, stubMode: Boolean) { override fun generateFir(text: String, file: File) {
val lightTreeConverter = LightTree2Fir( val lightTreeConverter = LightTree2Fir(
session = FirSessionFactory.createEmptySession(), session = FirSessionFactory.createEmptySession(),
scopeProvider = StubFirScopeProvider scopeProvider = StubFirScopeProvider
@@ -10,7 +10,6 @@ import com.intellij.psi.impl.DebugUtil
import com.intellij.util.PathUtil 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.BodyBuildingMode
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.openjdk.jmh.annotations.Scope import org.openjdk.jmh.annotations.Scope
import org.openjdk.jmh.annotations.State import org.openjdk.jmh.annotations.State
@@ -23,9 +22,9 @@ open class Psi2FirGenerator : TreeGenerator, AbstractRawFirBuilderTestCase() {
DebugUtil.psiTreeToString(ktFile, false) DebugUtil.psiTreeToString(ktFile, false)
} }
override fun generateFir(text: String, file: File, stubMode: Boolean) { override fun generateFir(text: String, file: File) {
val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.path)), text) as KtFile val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.path)), text) as KtFile
val firFile = ktFile.toFirFile(BodyBuildingMode.stubs(stubMode)) val firFile = ktFile.toFirFile()
StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString() StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
} }
@@ -36,4 +35,4 @@ open class Psi2FirGenerator : TreeGenerator, AbstractRawFirBuilderTestCase() {
override fun tearDown() { override fun tearDown() {
super.tearDown() super.tearDown()
} }
} }
@@ -9,7 +9,7 @@ import java.io.File
interface TreeGenerator { interface TreeGenerator {
fun generateBaseTree(text: String, file: File) fun generateBaseTree(text: String, file: File)
fun generateFir(text: String, file: File, stubMode: Boolean) fun generateFir(text: String, file: File)
fun setUp() fun setUp()
fun tearDown() fun tearDown()
} }
@@ -474,7 +474,6 @@ open class RawFirBuilder(
mode == BodyBuildingMode.LAZY_BODIES -> buildLazyExpression { mode == BodyBuildingMode.LAZY_BODIES -> buildLazyExpression {
source = this@toFirBackingField?.initializer?.toFirSourceElement() source = this@toFirBackingField?.initializer?.toFirSourceElement()
} }
mode == BodyBuildingMode.STUBS -> buildExpressionStub()
else -> this@toFirBackingField?.initializer.toFirExpression("Should have initializer") else -> this@toFirBackingField?.initializer.toFirExpression("Should have initializer")
} }
val returnType = this?.returnTypeReference.toFirOrImplicitType() val returnType = this?.returnTypeReference.toFirOrImplicitType()
@@ -1450,7 +1449,6 @@ open class RawFirBuilder(
mode == BodyBuildingMode.LAZY_BODIES -> buildLazyExpression { mode == BodyBuildingMode.LAZY_BODIES -> buildLazyExpression {
source = initializer?.toFirSourceElement() source = initializer?.toFirSourceElement()
} }
mode == BodyBuildingMode.STUBS -> buildExpressionStub()
else -> initializer.toFirExpression("Should have initializer") else -> initializer.toFirExpression("Should have initializer")
} }
@@ -1538,7 +1536,6 @@ open class RawFirBuilder(
if (hasDelegate()) { if (hasDelegate()) {
fun extractDelegateExpression() = when (mode) { fun extractDelegateExpression() = when (mode) {
BodyBuildingMode.NORMAL -> this@toFirProperty.delegate?.expression.toFirExpression("Should have delegate") BodyBuildingMode.NORMAL -> this@toFirProperty.delegate?.expression.toFirExpression("Should have delegate")
BodyBuildingMode.STUBS -> buildExpressionStub()
BodyBuildingMode.LAZY_BODIES -> this@toFirProperty.delegate?.expression?.let { BodyBuildingMode.LAZY_BODIES -> this@toFirProperty.delegate?.expression?.let {
buildLazyExpression { source = it.toFirSourceElement() } buildLazyExpression { source = it.toFirSourceElement() }
} ?: buildErrorExpression { } ?: buildErrorExpression {
@@ -2442,11 +2439,6 @@ enum class BodyBuildingMode {
*/ */
NORMAL, NORMAL,
/**
* Build [org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub] for expressions
*/
STUBS,
/** /**
* Build [org.jetbrains.kotlin.fir.expressions.impl.FirLazyBlock] for function bodies, constructors & getters/setters * Build [org.jetbrains.kotlin.fir.expressions.impl.FirLazyBlock] for function bodies, constructors & getters/setters
* Build [org.jetbrains.kotlin.fir.expressions.impl.FirLazyExpression] for property initializers * Build [org.jetbrains.kotlin.fir.expressions.impl.FirLazyExpression] for property initializers
@@ -32,7 +32,7 @@ import kotlin.system.measureNanoTime
@RunWith(JUnit3RunnerWithInners::class) @RunWith(JUnit3RunnerWithInners::class)
class RawFirBuilderTotalKotlinTestCase : AbstractRawFirBuilderTestCase() { class RawFirBuilderTotalKotlinTestCase : AbstractRawFirBuilderTestCase() {
private fun testTotalKotlinWithGivenMode(stubMode: Boolean) { fun testTotalKotlinWithExpressionTrees() {
val root = File(testDataPath) val root = File(testDataPath)
var counter = 0 var counter = 0
var time = 0L var time = 0L
@@ -63,7 +63,7 @@ class RawFirBuilderTotalKotlinTestCase : AbstractRawFirBuilderTestCase() {
val ktFile = createKtFile(file.toRelativeString(root)) val ktFile = createKtFile(file.toRelativeString(root))
val firFile: FirFile val firFile: FirFile
time += measureNanoTime { time += measureNanoTime {
firFile = ktFile.toFirFile(BodyBuildingMode.stubs(stubMode)) firFile = ktFile.toFirFile()
} }
totalLength += StringBuilder().also { FirRenderer(it).visitFile(firFile) }.length totalLength += StringBuilder().also { FirRenderer(it).visitFile(firFile) }.length
counter++ counter++
@@ -93,9 +93,7 @@ class RawFirBuilderTotalKotlinTestCase : AbstractRawFirBuilderTestCase() {
when (expression) { when (expression) {
is FirExpressionStub -> { is FirExpressionStub -> {
expressionStubs++ expressionStubs++
if (!stubMode) { println(expression.psi?.text)
println(expression.psi?.text)
}
} }
else -> normalExpressions++ else -> normalExpressions++
} }
@@ -160,22 +158,12 @@ class RawFirBuilderTotalKotlinTestCase : AbstractRawFirBuilderTestCase() {
println("KT EXPRESSIONS: $ktExpressions") println("KT EXPRESSIONS: $ktExpressions")
println("KT DECLARATIONS: $ktDeclarations") println("KT DECLARATIONS: $ktDeclarations")
println("KT REFERENCES: $ktReferences") println("KT REFERENCES: $ktReferences")
if (!stubMode) { assertEquals("# of expression stubs", 0, expressionStubs)
assertEquals("# of expression stubs", 0, expressionStubs)
}
assertEquals("# of error expressions", 0, errorExpressions) assertEquals("# of error expressions", 0, errorExpressions)
assertEquals("# of error declarations", 0, errorDeclarations) assertEquals("# of error declarations", 0, errorDeclarations)
assertEquals("# of error references", 0, errorReferences) assertEquals("# of error references", 0, errorReferences)
} }
fun testTotalKotlinWithExpressionTrees() {
testTotalKotlinWithGivenMode(stubMode = false)
}
fun testTotalKotlinWithDeclarationsOnly() {
testTotalKotlinWithGivenMode(stubMode = true)
}
private fun testConsistency(checkConsistency: FirFile.() -> Unit) { private fun testConsistency(checkConsistency: FirFile.() -> Unit) {
val root = File(testDataPath) val root = File(testDataPath)
for (file in root.walkTopDown()) { for (file in root.walkTopDown()) {
@@ -137,7 +137,7 @@ object KtDeclarationAndFirDeclarationEqualityChecker {
createEmptySession(), createEmptySession(),
DummyScopeProvider, DummyScopeProvider,
psiMode = PsiHandlingMode.IDE, psiMode = PsiHandlingMode.IDE,
bodyBuildingMode = BodyBuildingMode.STUBS bodyBuildingMode = BodyBuildingMode.NORMAL
).buildTypeReference(this) ).buildTypeReference(this)
} }