- Render IrModule.
- Dump IR for box tests to .txt.
This commit is contained in:
committed by
Dmitry Petrov
parent
15ed21ebae
commit
993c3fe51e
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
|||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.codegen.CodegenTestCase
|
import org.jetbrains.kotlin.codegen.CodegenTestCase
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
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.Psi2IrConfiguration
|
||||||
import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator
|
import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator
|
||||||
import org.jetbrains.kotlin.resolve.AnalyzingUtils
|
import org.jetbrains.kotlin.resolve.AnalyzingUtils
|
||||||
@@ -76,7 +77,7 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
|
|||||||
|
|
||||||
protected abstract fun doTest(wholeFile: File, testFiles: List<TestFile>)
|
protected abstract fun doTest(wholeFile: File, testFiles: List<TestFile>)
|
||||||
|
|
||||||
protected fun generateIrFilesAsSingleModule(testFiles: List<TestFile>, ignoreErrors: Boolean = false): Map<TestFile, IrFile> {
|
protected fun generateIrModule(ignoreErrors: Boolean = false): IrModule {
|
||||||
assert(myFiles != null) { "myFiles not initialized" }
|
assert(myFiles != null) { "myFiles not initialized" }
|
||||||
assert(myEnvironment != null) { "myEnvironment not initialized" }
|
assert(myEnvironment != null) { "myEnvironment not initialized" }
|
||||||
val analysisResult = JvmResolveUtil.analyze(myFiles.psiFiles, myEnvironment)
|
val analysisResult = JvmResolveUtil.analyze(myFiles.psiFiles, myEnvironment)
|
||||||
@@ -86,6 +87,11 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
|
|||||||
}
|
}
|
||||||
val psi2ir = Psi2IrTranslator(Psi2IrConfiguration(ignoreErrors))
|
val psi2ir = Psi2IrTranslator(Psi2IrConfiguration(ignoreErrors))
|
||||||
val irModule = psi2ir.generateModule(analysisResult.moduleDescriptor, myFiles.psiFiles, analysisResult.bindingContext)
|
val irModule = psi2ir.generateModule(analysisResult.moduleDescriptor, myFiles.psiFiles, analysisResult.bindingContext)
|
||||||
|
return irModule
|
||||||
|
}
|
||||||
|
|
||||||
|
protected fun generateIrFilesAsSingleModule(testFiles: List<TestFile>, ignoreErrors: Boolean = false): Map<TestFile, IrFile> {
|
||||||
|
val irModule = generateIrModule(ignoreErrors)
|
||||||
val ktFiles = testFiles.filter { it.name.endsWith(".kt") }
|
val ktFiles = testFiles.filter { it.name.endsWith(".kt") }
|
||||||
return ktFiles.zip(irModule.files).toMap()
|
return ktFiles.zip(irModule.files).toMap()
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-2
@@ -16,11 +16,18 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir
|
package org.jetbrains.kotlin.ir
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.ir.util.dump
|
||||||
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
abstract class AbstractPsi2IrAcceptanceTestCase : AbstractIrGeneratorTestCase() {
|
abstract class AbstractPsi2IrAcceptanceTestCase : AbstractIrGeneratorTestCase() {
|
||||||
override fun doTest(wholeFile: File, testFiles: List<TestFile>) {
|
override fun doTest(wholeFile: File, testFiles: List<TestFile>) {
|
||||||
// Just make sure that nothing interesting happens - e.g., no exceptions thrown
|
val irModule = generateIrModule(false)
|
||||||
generateIrFilesAsSingleModule(testFiles, 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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
|
|||||||
override fun visitDeclaration(declaration: IrDeclaration, data: Nothing?): String =
|
override fun visitDeclaration(declaration: IrDeclaration, data: Nothing?): String =
|
||||||
"? ${declaration.javaClass.simpleName} ${declaration.descriptor.name}"
|
"? ${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 =
|
override fun visitFile(declaration: IrFile, data: Nothing?): String =
|
||||||
"FILE ${declaration.name}"
|
"FILE ${declaration.name}"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user