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
|
import java.nio.file.Path
|
||||||
|
|
||||||
class LightTree2Fir(
|
class LightTree2Fir(
|
||||||
private val session: FirSession = object : FirSessionBase(null) {},
|
val session: FirSession = object : FirSessionBase(null) {},
|
||||||
private val stubMode: Boolean = false
|
private val stubMode: Boolean = false
|
||||||
) {
|
) {
|
||||||
//private val ktDummyFile = KtFile(SingleRootFileViewProvider(PsiManager.getInstance(project), LightVirtualFile()), 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.diagnostics.FirStubDiagnostic
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
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.references.FirErrorNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.firProvider
|
import org.jetbrains.kotlin.fir.resolve.firProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.impl.FirProviderImpl
|
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.KtFile
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.sumByLong
|
import org.jetbrains.kotlin.utils.addToStdlib.sumByLong
|
||||||
|
import java.io.File
|
||||||
import java.io.PrintStream
|
import java.io.PrintStream
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
import kotlin.reflect.KClass
|
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) {
|
private fun recordTime(stageClass: KClass<*>, diff: VMCounters, time: Long) {
|
||||||
timePerTransformer.computeIfAbsent(stageClass) { Measure() }.apply {
|
timePerTransformer.computeIfAbsent(stageClass) { Measure() }.apply {
|
||||||
this.time += time
|
this.time += time
|
||||||
|
|||||||
Reference in New Issue
Block a user