FIR resolve bench: make possible building FIR files via light tree

This commit is contained in:
Mikhail Glukhikh
2019-12-17 18:12:25 +03:00
parent d702dc862a
commit 774eb62118
2 changed files with 23 additions and 1 deletions
@@ -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)
@@ -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<File>
): List<FirFile> {
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