Implement basic class to test light tree builder performance

This commit is contained in:
Ivan Kylchik
2019-03-26 22:16:27 +03:00
committed by Mikhail Glukhikh
parent 14d6f8009d
commit 200fe63fca
3 changed files with 124 additions and 0 deletions
+32
View File
@@ -0,0 +1,32 @@
plugins {
kotlin("jvm")
id("org.jetbrains.intellij") version "0.4.5"
}
group = "org.jetbrains.kotlin.fir"
repositories {
mavenCentral()
mavenLocal()
maven { setUrl("https://www.jetbrains.com/intellij-repository/releases") }
maven { setUrl("https://jetbrains.bintray.com/intellij-third-party-dependencies") }
}
dependencies {
compile("com.jetbrains.intellij.java:java-psi-impl:183.5912.17")
compile("com.jetbrains.intellij.java:java-psi:183.5912.17")
compile(project(":compiler:psi"))
compile("junit", "junit", "4.4")
compile(projectTests(":compiler:fir:psi2fir"))
}
sourceSets {
"main" { projectDefault() }
"test" { projectDefault() }
}
projectTest {
workingDir = rootDir
}
@@ -0,0 +1,91 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.lightTree
import com.intellij.lang.impl.PsiBuilderFactoryImpl
import com.intellij.psi.PsiManager
import com.intellij.psi.impl.DebugUtil
import com.intellij.psi.impl.PsiManagerEx
import com.intellij.testFramework.LightVirtualFile
import com.intellij.testFramework.TestDataPath
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.parsing.KotlinParser
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners
import org.jetbrains.kotlin.test.testFramework.KtParsingTestCase
import org.junit.runner.RunWith
import java.io.File
import kotlin.system.measureNanoTime
/*
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
@TestDataPath("\$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners::class)
class BaseTestCase: KtParsingTestCase(
"",
"kt",
KotlinParserDefinition()
) {
fun test() {
val file = KtFile((PsiManager.getInstance(myProject) as PsiManagerEx).fileManager.createFileViewProvider(
LightVirtualFile(
"foo",
KotlinFileType.INSTANCE,
""
), true
), false)
val parserDefinition = KotlinParserDefinition()
val lexer = parserDefinition.createLexer(myProject)
val builder = PsiBuilderFactoryImpl().createBuilder(parserDefinition, lexer, "class Base { val x: Int = 1 }")
val ktParsing = parserDefinition.createParser(myProject) as KotlinParser
ktParsing.parse(null, builder, file)
println(DebugUtil.lightTreeToString(builder.lightTree, false))
println(DebugUtil.nodeTreeToString(builder.treeBuilt, false))
}
fun testTotalKotlinWithGivenMode() {
val path = System.getProperty("user.dir")
val root = File(path)
var counter = 0
var time = 0L
val ktFile = KtFile((PsiManager.getInstance(myProject) as PsiManagerEx).fileManager.createFileViewProvider(
LightVirtualFile(
"foo",
KotlinFileType.INSTANCE,
""
), true
), false)
val parserDefinition = KotlinParserDefinition()
val lexer = parserDefinition.createLexer(myProject)
val parser = parserDefinition.createParser(myProject) as KotlinParser
println("BASE PATH: $path")
for (file in root.walkTopDown()) {
if (file.isDirectory) continue
if (file.path.contains("testData") || file.path.contains("resources")) continue
if (file.extension != "kt") continue
time += measureNanoTime {
val builder = PsiBuilderFactoryImpl().createBuilder(parserDefinition, lexer, file.readText())
parser.parse(null, builder, ktFile)
DebugUtil.lightTreeToString(builder.lightTree, false)
}
counter++
}
println("SUCCESS!")
println("TIME PER FILE: ${(time / counter) * 1e-6} ms, COUNTER: $counter")
}
}
+1
View File
@@ -39,6 +39,7 @@ include ":kotlin-build-common",
":compiler:fir:tree",
":compiler:fir:tree:visitors-generator",
":compiler:fir:psi2fir",
":compiler:fir:lightTree",
":compiler:fir:fir2ir",
":compiler:fir:resolve",
":compiler:fir:java",