diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/LightTree2Fir.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/LightTree2Fir.kt index 90df824e822..f3adeb94800 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/LightTree2Fir.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/LightTree2Fir.kt @@ -21,7 +21,7 @@ import java.io.File import java.nio.file.Path class LightTree2Fir( - private val session: FirSession = object : FirSessionBase(null) {}, + val session: FirSession = object : FirSessionBase(null) {}, private val stubMode: Boolean = false ) { //private val ktDummyFile = KtFile(SingleRootFileViewProvider(PsiManager.getInstance(project), LightVirtualFile()), false) diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt index 260cd381c80..0a572c8bed8 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.diagnostics.FirStubDiagnostic import org.jetbrains.kotlin.fir.expressions.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression +import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.resolve.impl.FirProviderImpl @@ -20,6 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.utils.addToStdlib.sumByLong +import java.io.File import java.io.PrintStream import kotlin.math.max import kotlin.reflect.KClass @@ -111,6 +113,26 @@ class FirResolveBench(val withProgress: Boolean) { } } + fun buildFiles( + builder: LightTree2Fir, + files: List + ): List { + return files.map { file -> + val before = vmStateSnapshot() + var firFile: FirFile? = null + val time = measureNanoTime { + firFile = builder.buildFirFile(file) + (builder.session.firProvider as FirProviderImpl).recordFile(firFile!!) + } + val after = vmStateSnapshot() + val diff = after - before + recordTime(builder::class, diff, time) + firFile!! + }.also { + totalTime = timePerTransformer.values.sumByLong { it.time } + } + } + private fun recordTime(stageClass: KClass<*>, diff: VMCounters, time: Long) { timePerTransformer.computeIfAbsent(stageClass) { Measure() }.apply { this.time += time