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 package org.jetbrains.kotlin.fir.lightTree
import com.intellij.lang.impl.PsiBuilderFactoryImpl 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.PsiManager
import com.intellij.psi.impl.DebugUtil import com.intellij.psi.impl.DebugUtil
import com.intellij.psi.impl.PsiManagerEx import com.intellij.psi.impl.PsiManagerEx
import com.intellij.testFramework.LightVirtualFile import com.intellij.testFramework.LightVirtualFile
import com.intellij.testFramework.TestDataPath 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.idea.KotlinFileType
import org.jetbrains.kotlin.parsing.KotlinParser import org.jetbrains.kotlin.parsing.*
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtPsiFactory
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners import org.jetbrains.kotlin.test.JUnit3RunnerWithInners
import org.jetbrains.kotlin.test.testFramework.KtParsingTestCase import org.jetbrains.kotlin.test.testFramework.KtParsingTestCase
import org.junit.runner.RunWith import org.junit.runner.RunWith
@@ -27,19 +31,21 @@ import kotlin.system.measureNanoTime
*/ */
@TestDataPath("\$PROJECT_ROOT") @TestDataPath("\$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners::class) @RunWith(JUnit3RunnerWithInners::class)
class BaseTestCase: KtParsingTestCase( class BaseTestCase : KtParsingTestCase(
"", "",
"kt", "kt",
KotlinParserDefinition() KotlinParserDefinition()
) { ) {
fun test() { fun test() {
val file = KtFile((PsiManager.getInstance(myProject) as PsiManagerEx).fileManager.createFileViewProvider( val file = KtFile(
LightVirtualFile( (PsiManager.getInstance(myProject) as PsiManagerEx).fileManager.createFileViewProvider(
"foo", LightVirtualFile(
KotlinFileType.INSTANCE, "foo",
"" KotlinFileType.INSTANCE,
), true ""
), false) ), true
), false
)
val parserDefinition = KotlinParserDefinition() val parserDefinition = KotlinParserDefinition()
val lexer = parserDefinition.createLexer(myProject) val lexer = parserDefinition.createLexer(myProject)
val builder = PsiBuilderFactoryImpl().createBuilder(parserDefinition, lexer, "class Base { val x: Int = 1 }") 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)) println(DebugUtil.nodeTreeToString(builder.treeBuilt, false))
} }
fun testTotalKotlinWithGivenMode() { fun testTotalKotlinLight() {
val path = System.getProperty("user.dir") val path = System.getProperty("user.dir")
val root = File(path) val root = File(path)
var counter = 0 var counter = 0
var time = 0L var time = 0L
val ktFile = KtFile((PsiManager.getInstance(myProject) as PsiManagerEx).fileManager.createFileViewProvider(
LightVirtualFile(
"foo",
KotlinFileType.INSTANCE,
""
), true
), false)
val parserDefinition = KotlinParserDefinition() val parserDefinition = KotlinParserDefinition()
val lexer = parserDefinition.createLexer(myProject) val lexer = parserDefinition.createLexer(myProject)
val parser = parserDefinition.createParser(myProject) as KotlinParser
println("BASE PATH: $path") println("BASE PATH: $path")
for (file in root.walkTopDown()) { for (file in root.walkTopDown()) {
@@ -75,8 +73,9 @@ class BaseTestCase: KtParsingTestCase(
if (file.extension != "kt") continue if (file.extension != "kt") continue
time += measureNanoTime { time += measureNanoTime {
val builder = PsiBuilderFactoryImpl().createBuilder(parserDefinition, lexer, file.readText()) val text = FileUtil.loadFile(file, CharsetToolkit.UTF8, true).trim()
parser.parse(null, builder, ktFile) val builder = PsiBuilderFactoryImpl().createBuilder(parserDefinition, lexer, text)
MyKotlinParser.parse(builder)
DebugUtil.lightTreeToString(builder.lightTree, false) DebugUtil.lightTreeToString(builder.lightTree, false)
} }
@@ -87,5 +86,30 @@ class BaseTestCase: KtParsingTestCase(
println("TIME PER FILE: ${(time / counter) * 1e-6} ms, COUNTER: $counter") 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();
}
}