diff --git a/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/totalKotlin/AbstractTotalKotlinTest.kt b/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/totalKotlin/AbstractTotalKotlinTest.kt new file mode 100644 index 00000000000..0d573336070 --- /dev/null +++ b/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/totalKotlin/AbstractTotalKotlinTest.kt @@ -0,0 +1,46 @@ +/* + * 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.totalKotlin + +import com.intellij.openapi.util.io.FileUtil +import com.intellij.openapi.vfs.CharsetToolkit +import com.intellij.testFramework.TestDataPath +import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase +import org.jetbrains.kotlin.test.JUnit3RunnerWithInners +import org.junit.runner.RunWith +import java.io.File +import kotlin.system.measureNanoTime + +@TestDataPath("/") +@RunWith(JUnit3RunnerWithInners::class) +abstract class AbstractTotalKotlinTest(private val treeName: String) : AbstractRawFirBuilderTestCase() { + protected abstract fun generateTree(onlyBaseTree: Boolean, text: String, file: File) + + fun totalKotlinTest(onlyBaseTree: Boolean) { + val path = System.getProperty("user.dir") + val root = File(path) + var counter = 0 + var time = 0L + + if (onlyBaseTree) println("$treeName generation") else println("Fir from $treeName converter") + 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 + + val text = FileUtil.loadFile(file, CharsetToolkit.UTF8, true).trim() + time += measureNanoTime { + generateTree(onlyBaseTree, text, file) + } + + counter++ + } + println("SUCCESS!") + println("TIME PER FILE: ${(time / counter) * 1e-6} ms, COUNTER: $counter") + } +} + diff --git a/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/totalKotlin/LightTree2FirConverterTotalTest.kt b/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/totalKotlin/LightTree2FirConverterTotalTest.kt new file mode 100644 index 00000000000..08b4b4fb7cb --- /dev/null +++ b/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/totalKotlin/LightTree2FirConverterTotalTest.kt @@ -0,0 +1,48 @@ +/* + * 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.totalKotlin + +import com.intellij.psi.impl.DebugUtil +import com.intellij.testFramework.TestDataPath +import org.jetbrains.kotlin.fir.FirRenderer +import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase +import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir +import org.jetbrains.kotlin.parsing.KotlinParserDefinition +import org.jetbrains.kotlin.test.JUnit3RunnerWithInners +import org.junit.runner.RunWith +import java.io.File + +@TestDataPath("/") +@RunWith(JUnit3RunnerWithInners::class) +class LightTree2FirConverterTotalTest : AbstractTotalKotlinTest("LightTree") { + private var lightTreeConverter: LightTree2Fir? = null + + override fun generateTree(onlyBaseTree: Boolean, text: String, file: File) { + if (onlyBaseTree) { + val lightTree = lightTreeConverter!!.buildLightTree(text) + DebugUtil.lightTreeToString(lightTree, false) + } else { + val firFile = lightTreeConverter!!.buildFirFile(text, file.name) + StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString() + } + } + + private fun createConverter() { + val parserDefinition = KotlinParserDefinition() + val lexer = parserDefinition.createLexer(myProject) + lightTreeConverter = LightTree2Fir(true, parserDefinition, lexer) + } + + fun testTotalKotlinOnlyLightTree() { + createConverter() + totalKotlinTest(true) + } + + fun testTotalKotlinFirFromLightTree() { + createConverter() + totalKotlinTest(false) + } +} \ No newline at end of file diff --git a/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/totalKotlin/Psi2FirConverterTotalTest.kt b/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/totalKotlin/Psi2FirConverterTotalTest.kt new file mode 100644 index 00000000000..e87d0a7d271 --- /dev/null +++ b/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/totalKotlin/Psi2FirConverterTotalTest.kt @@ -0,0 +1,38 @@ +/* + * 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.totalKotlin + +import com.intellij.openapi.util.io.FileUtil +import com.intellij.psi.impl.DebugUtil +import com.intellij.testFramework.TestDataPath +import com.intellij.util.PathUtil +import org.jetbrains.kotlin.fir.FirRenderer +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.test.JUnit3RunnerWithInners +import org.junit.runner.RunWith +import java.io.File + +@TestDataPath("/") +@RunWith(JUnit3RunnerWithInners::class) +class Psi2FirConverterTotalTest : AbstractTotalKotlinTest("Psi") { + override fun generateTree(onlyBaseTree: Boolean, text: String, file: File) { + val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.path)), text) as KtFile + if (onlyBaseTree) { + DebugUtil.psiTreeToString(ktFile, false) + } else { + val firFile = ktFile.toFirFile(stubMode = true) + StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString() + } + } + + fun testTotalKotlinOnlyPsi() { + totalKotlinTest(true) + } + + fun testTotalKotlinFirFromPsi() { + totalKotlinTest(false) + } +} \ No newline at end of file diff --git a/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/LightTree2FirConverterTotalKotlin.kt b/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/totalKotlin/TotalKotlinTest.kt similarity index 69% rename from compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/LightTree2FirConverterTotalKotlin.kt rename to compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/totalKotlin/TotalKotlinTest.kt index 5b1fb3b228e..6f9b9f4a53c 100644 --- a/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/LightTree2FirConverterTotalKotlin.kt +++ b/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/totalKotlin/TotalKotlinTest.kt @@ -1,9 +1,9 @@ /* - * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * 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 +package org.jetbrains.kotlin.fir.lightTree.totalKotlin import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.vfs.CharsetToolkit @@ -12,6 +12,7 @@ import com.intellij.testFramework.TestDataPath import com.intellij.util.PathUtil import org.jetbrains.kotlin.fir.FirRenderer import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase +import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir import org.jetbrains.kotlin.parsing.KotlinParserDefinition import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.JUnit3RunnerWithInners @@ -19,9 +20,29 @@ import org.junit.runner.RunWith import java.io.File import kotlin.system.measureNanoTime -@TestDataPath("\$PROJECT_ROOT") +@TestDataPath("/") @RunWith(JUnit3RunnerWithInners::class) -class LightTree2FirConverterTotalKotlin : AbstractRawFirBuilderTestCase() { +class TotalKotlinTest : AbstractRawFirBuilderTestCase() { + private fun generateFirFromPsi(onlyPsi: Boolean, text: String, path: String) { + val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(path)), text) as KtFile + if (onlyPsi) { + DebugUtil.psiTreeToString(ktFile, false) + } else { + val firFile = ktFile.toFirFile(stubMode = true) + StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString() + } + } + + private fun generateFirFromLightTree(onlyLightTree: Boolean, converter: LightTree2Fir, text: String, fileName: String) { + if (onlyLightTree) { + val lightTree = converter.buildLightTree(text) + DebugUtil.lightTreeToString(lightTree, false) + } else { + val firFile = converter.buildFirFile(text, fileName) + StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString() + } + } + private fun totalKotlinLight(onlyLightTree: Boolean) { val path = System.getProperty("user.dir") val root = File(path) @@ -41,13 +62,7 @@ class LightTree2FirConverterTotalKotlin : AbstractRawFirBuilderTestCase() { val text = FileUtil.loadFile(file, CharsetToolkit.UTF8, true).trim() time += measureNanoTime { - if (onlyLightTree) { - val lightTree = lightTreeConverter.buildLightTree(text) - DebugUtil.lightTreeToString(lightTree, false) - } else { - val firFile = lightTreeConverter.buildFirFile(text, file.name) - StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString() - } + generateFirFromLightTree(onlyLightTree, lightTreeConverter, text, file.name) } counter++ @@ -72,13 +87,7 @@ class LightTree2FirConverterTotalKotlin : AbstractRawFirBuilderTestCase() { val text = FileUtil.loadFile(file, CharsetToolkit.UTF8, true).trim() time += measureNanoTime { - val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.path)), text) as KtFile - if (onlyPsi) { - DebugUtil.psiTreeToString(ktFile, false) - } else { - val firFile = ktFile.toFirFile(stubMode = true) - StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString() - } + generateFirFromPsi(onlyPsi, text, file.path) } counter++