FIR resolve bench: make possible building FIR files via light tree
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user