From 993c3fe51ef6c5685b79426274f7aaf8f51d8a11 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Mon, 5 Sep 2016 17:39:17 +0300 Subject: [PATCH] - Render IrModule. - Dump IR for box tests to .txt. --- .../kotlin/ir/AbstractIrGeneratorTestCase.kt | 8 +++++++- .../kotlin/ir/AbstractPsi2IrAcceptanceTestCase.kt | 11 +++++++++-- .../org/jetbrains/kotlin/ir/util/RenderIrElement.kt | 3 +++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt b/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt index 03c06ad89d4..0f41f8e1c1b 100644 --- a/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt +++ b/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.codegen.CodegenTestCase import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.declarations.IrModule import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator import org.jetbrains.kotlin.resolve.AnalyzingUtils @@ -76,7 +77,7 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() { protected abstract fun doTest(wholeFile: File, testFiles: List) - protected fun generateIrFilesAsSingleModule(testFiles: List, ignoreErrors: Boolean = false): Map { + protected fun generateIrModule(ignoreErrors: Boolean = false): IrModule { assert(myFiles != null) { "myFiles not initialized" } assert(myEnvironment != null) { "myEnvironment not initialized" } val analysisResult = JvmResolveUtil.analyze(myFiles.psiFiles, myEnvironment) @@ -86,6 +87,11 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() { } val psi2ir = Psi2IrTranslator(Psi2IrConfiguration(ignoreErrors)) val irModule = psi2ir.generateModule(analysisResult.moduleDescriptor, myFiles.psiFiles, analysisResult.bindingContext) + return irModule + } + + protected fun generateIrFilesAsSingleModule(testFiles: List, ignoreErrors: Boolean = false): Map { + val irModule = generateIrModule(ignoreErrors) val ktFiles = testFiles.filter { it.name.endsWith(".kt") } return ktFiles.zip(irModule.files).toMap() } diff --git a/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractPsi2IrAcceptanceTestCase.kt b/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractPsi2IrAcceptanceTestCase.kt index c98774643d7..5581226217b 100644 --- a/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractPsi2IrAcceptanceTestCase.kt +++ b/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractPsi2IrAcceptanceTestCase.kt @@ -16,11 +16,18 @@ package org.jetbrains.kotlin.ir +import org.jetbrains.kotlin.ir.util.dump +import org.jetbrains.kotlin.test.KotlinTestUtils import java.io.File abstract class AbstractPsi2IrAcceptanceTestCase : AbstractIrGeneratorTestCase() { override fun doTest(wholeFile: File, testFiles: List) { - // Just make sure that nothing interesting happens - e.g., no exceptions thrown - generateIrFilesAsSingleModule(testFiles, false) + val irModule = generateIrModule(false) + val irModuleDump = irModule.dump() + val expectedPath = wholeFile.canonicalPath + // .replace("/codegen/box/", "/ir/irTextBox/") + .replace(".kt", ".txt") + val expectedFile = File(expectedPath) + KotlinTestUtils.assertEqualsToFile(expectedFile, irModuleDump) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt index 7daff01742e..826cc54b6fe 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt @@ -36,6 +36,9 @@ class RenderIrElementVisitor : IrElementVisitor { override fun visitDeclaration(declaration: IrDeclaration, data: Nothing?): String = "? ${declaration.javaClass.simpleName} ${declaration.descriptor.name}" + override fun visitModule(declaration: IrModule, data: Nothing?): String = + "MODULE ${declaration.descriptor.name}" + override fun visitFile(declaration: IrFile, data: Nothing?): String = "FILE ${declaration.name}"