diff --git a/compiler/fir/lightTree/build.gradle.kts b/compiler/fir/lightTree/build.gradle.kts new file mode 100644 index 00000000000..ba0cf79460a --- /dev/null +++ b/compiler/fir/lightTree/build.gradle.kts @@ -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 +} diff --git a/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/BaseTestCase.kt b/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/BaseTestCase.kt new file mode 100644 index 00000000000..e02890f1d30 --- /dev/null +++ b/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/BaseTestCase.kt @@ -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") + + } +} + diff --git a/settings.gradle b/settings.gradle index 96df33ec4d9..e45928b4df7 100644 --- a/settings.gradle +++ b/settings.gradle @@ -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",