Modify previously added test

This commit is contained in:
Ivan Kylchik
2019-04-03 18:41:07 +03:00
committed by Mikhail Glukhikh
parent 200fe63fca
commit f0a5408eb6
2 changed files with 64 additions and 21 deletions
@@ -6,15 +6,19 @@
package org.jetbrains.kotlin.fir.lightTree
import com.intellij.lang.impl.PsiBuilderFactoryImpl
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.vfs.CharsetToolkit
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 com.intellij.util.PathUtil
import org.jetbrains.kotlin.KtNodeTypes
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.parsing.KotlinParser
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
import org.jetbrains.kotlin.parsing.*
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtPsiFactory
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners
import org.jetbrains.kotlin.test.testFramework.KtParsingTestCase
import org.junit.runner.RunWith
@@ -27,19 +31,21 @@ import kotlin.system.measureNanoTime
*/
@TestDataPath("\$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners::class)
class BaseTestCase: KtParsingTestCase(
class BaseTestCase : KtParsingTestCase(
"",
"kt",
KotlinParserDefinition()
) {
fun test() {
val file = KtFile((PsiManager.getInstance(myProject) as PsiManagerEx).fileManager.createFileViewProvider(
LightVirtualFile(
"foo",
KotlinFileType.INSTANCE,
""
), true
), false)
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 }")
@@ -51,22 +57,14 @@ class BaseTestCase: KtParsingTestCase(
println(DebugUtil.nodeTreeToString(builder.treeBuilt, false))
}
fun testTotalKotlinWithGivenMode() {
fun testTotalKotlinLight() {
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()) {
@@ -75,8 +73,9 @@ class BaseTestCase: KtParsingTestCase(
if (file.extension != "kt") continue
time += measureNanoTime {
val builder = PsiBuilderFactoryImpl().createBuilder(parserDefinition, lexer, file.readText())
parser.parse(null, builder, ktFile)
val text = FileUtil.loadFile(file, CharsetToolkit.UTF8, true).trim()
val builder = PsiBuilderFactoryImpl().createBuilder(parserDefinition, lexer, text)
MyKotlinParser.parse(builder)
DebugUtil.lightTreeToString(builder.lightTree, false)
}
@@ -87,5 +86,30 @@ class BaseTestCase: KtParsingTestCase(
println("TIME PER FILE: ${(time / counter) * 1e-6} ms, COUNTER: $counter")
}
fun testTotalKotlinPsi() {
val path = System.getProperty("user.dir")
val root = File(path)
var counter = 0
var time = 0L
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 text = FileUtil.loadFile(file, CharsetToolkit.UTF8, true).trim()
val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.path)), text) as KtFile
ktFile.toString()
}
counter++
}
println("SUCCESS!")
println("TIME PER FILE: ${(time / counter) * 1e-6} ms, COUNTER: $counter")
}
}
@@ -0,0 +1,19 @@
/*
* 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.parsing;
import com.intellij.lang.LighterASTNode;
import com.intellij.lang.PsiBuilder;
import com.intellij.util.diff.FlyweightCapableTreeStructure;
public class MyKotlinParser {
public static FlyweightCapableTreeStructure<LighterASTNode> parse(PsiBuilder builder) {
KotlinParsing ktParsing = KotlinParsing.createForTopLevel(new SemanticWhitespaceAwarePsiBuilderImpl(builder));
ktParsing.parseFile();
return builder.getLightTree();
}
}