[Test] Inline processAllIrModuleFragments utility

After previous changes IR output artifact contains only one IrModuleFragment
This commit is contained in:
Dmitriy Novozhilov
2023-11-21 14:29:12 +02:00
committed by Space Team
parent 06af6adf4f
commit 48c3313e67
7 changed files with 35 additions and 58 deletions
@@ -14,9 +14,7 @@ import org.jetbrains.kotlin.diagnostics.Severity
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
import org.jetbrains.kotlin.diagnostics.rendering.RootDiagnosticRendererFactory
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.test.FirParser
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives
import org.jetbrains.kotlin.test.directives.model.singleOrZeroValue
@@ -28,14 +26,6 @@ import org.jetbrains.kotlin.test.services.*
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
import java.io.File
// TODO: inline this function
inline fun IrBackendInput.processAllIrModuleFragments(
module: TestModule,
processor: (irModuleFragment: IrModuleFragment, moduleName: String) -> Unit
) {
processor(irModuleFragment, module.name)
}
fun BinaryArtifactHandler<*>.reportKtDiagnostics(module: TestModule, ktDiagnosticReporter: BaseDiagnosticsCollector) {
val globalMetadataInfoHandler = testServices.globalMetadataInfoHandler
val firParser = module.directives.singleOrZeroValue(FirDiagnosticsDirectives.FIR_PARSER)
@@ -26,10 +26,8 @@ class IrInlineBodiesHandler(testServices: TestServices) : AbstractIrHandler(test
@OptIn(ObsoleteDescriptorBasedAPI::class)
override fun processModule(module: TestModule, info: IrBackendInput) {
info.processAllIrModuleFragments(module) { irModule, _ ->
irModule.acceptChildrenVoid(InlineFunctionsCollector())
irModule.acceptChildrenVoid(InlineCallBodiesCheck(firEnabled = module.frontendKind == FrontendKinds.FIR))
}
info.irModuleFragment.acceptChildrenVoid(InlineFunctionsCollector())
info.irModuleFragment.acceptChildrenVoid(InlineCallBodiesCheck(firEnabled = module.frontendKind == FrontendKinds.FIR))
assertions.assertTrue((info as IrBackendInput.JvmIrBackendInput).backendInput.symbolTable.descriptorExtension.allUnboundSymbols.isEmpty())
}
@@ -37,11 +37,9 @@ open class IrInterpreterBackendHandler(testServices: TestServices) : AbstractIrH
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {}
override fun processModule(module: TestModule, info: IrBackendInput) {
info.processAllIrModuleFragments(module) { moduleFragment, _ ->
val evaluator = Evaluator(IrInterpreter(moduleFragment.irBuiltins), globalMetadataInfoHandler)
for ((irFile, testFile) in matchIrFileWithTestFile(moduleFragment, module)) {
evaluator.evaluate(irFile, testFile)
}
val evaluator = Evaluator(IrInterpreter(info.irModuleFragment.irBuiltins), globalMetadataInfoHandler)
for ((irFile, testFile) in matchIrFileWithTestFile(info.irModuleFragment, module)) {
evaluator.evaluate(irFile, testFile)
}
}
}
@@ -72,16 +72,14 @@ internal fun dumpModuleKotlinLike(
multiModuleInfoDumper: MultiModuleInfoDumper,
options: KotlinLikeDumpOptions,
) {
info.processAllIrModuleFragments(module) { irModuleFragment, moduleName ->
val irFiles = irModuleFragment.files
val builder = multiModuleInfoDumper.builderForModule(moduleName)
val filteredIrFiles = irFiles.groupWithTestFiles(module).filterNot { (testFile, _) ->
testFile?.let { EXTERNAL_FILE in it.directives || it.isAdditional } ?: false
}.map { it.second }
val printFileName = filteredIrFiles.size > 1 || allModules.size > 1
val modifiedOptions = options.copy(printFileName = printFileName)
for (irFile in filteredIrFiles) {
builder.append(irFile.dumpKotlinLike(modifiedOptions))
}
val irFiles = info.irModuleFragment.files
val builder = multiModuleInfoDumper.builderForModule(module.name)
val filteredIrFiles = irFiles.groupWithTestFiles(module).filterNot { (testFile, _) ->
testFile?.let { EXTERNAL_FILE in it.directives || it.isAdditional } ?: false
}.map { it.second }
val printFileName = filteredIrFiles.size > 1 || allModules.size > 1
val modifiedOptions = options.copy(printFileName = printFileName)
for (irFile in filteredIrFiles) {
builder.append(irFile.dumpKotlinLike(modifiedOptions))
}
}
@@ -42,12 +42,9 @@ class IrSourceRangesDumpHandler(
override fun processModule(module: TestModule, info: IrBackendInput) {
if (CodegenTestDirectives.DUMP_SOURCE_RANGES_IR !in module.directives) return
info.processAllIrModuleFragments(module) { irModuleFragment, moduleName ->
val builder = baseDumper.builderForModule(moduleName)
for (irFile in irModuleFragment.files) {
builder.append(irFile.dumpWithSourceLocations(irFile.fileEntry))
}
val builder = baseDumper.builderForModule(module.name)
for (irFile in info.irModuleFragment.files) {
builder.append(irFile.dumpWithSourceLocations(irFile.fileEntry))
}
}
@@ -76,18 +76,15 @@ class IrTextDumpHandler(
printTypeAbbreviations = false,
)
info.processAllIrModuleFragments(module) { irModuleFragment, moduleName ->
val builder = baseDumper.builderForModule(moduleName)
val testFileToIrFile = irModuleFragment.files.groupWithTestFiles(module)
for ((testFile, irFile) in testFileToIrFile) {
if (testFile?.directives?.contains(EXTERNAL_FILE) == true) continue
var actualDump = irFile.dumpTreesFromLineNumber(lineNumber = 0, dumpOptions)
if (actualDump.isEmpty()) {
actualDump = irFile.dumpTreesFromLineNumber(lineNumber = UNDEFINED_OFFSET, dumpOptions)
}
builder.append(actualDump)
val builder = baseDumper.builderForModule(module.name)
val testFileToIrFile = info.irModuleFragment.files.groupWithTestFiles(module)
for ((testFile, irFile) in testFileToIrFile) {
if (testFile?.directives?.contains(EXTERNAL_FILE) == true) continue
var actualDump = irFile.dumpTreesFromLineNumber(lineNumber = 0, dumpOptions)
if (actualDump.isEmpty()) {
actualDump = irFile.dumpTreesFromLineNumber(lineNumber = UNDEFINED_OFFSET, dumpOptions)
}
builder.append(actualDump)
}
compareDumpsOfExternalClasses(module, info)
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.test.backend.handlers
import org.jetbrains.kotlin.ir.IrVerifier
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.util.DumpIrTreeOptions
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
import org.jetbrains.kotlin.ir.util.dumpTreesFromLineNumber
@@ -29,20 +30,18 @@ class IrTreeVerifierHandler(
override fun processModule(module: TestModule, info: IrBackendInput) {
if (CodegenTestDirectives.DUMP_IR !in module.directives) return
info.processAllIrModuleFragments(module) { irModuleFragment, _ ->
val irFiles = irModuleFragment.files
val testFileToIrFile = irFiles.groupWithTestFiles(module)
for ((testFile, irFile) in testFileToIrFile) {
if (testFile?.directives?.contains(EXTERNAL_FILE) == true) continue
val irFiles = info.irModuleFragment.files
val testFileToIrFile = irFiles.groupWithTestFiles(module)
for ((testFile, irFile) in testFileToIrFile) {
if (testFile?.directives?.contains(EXTERNAL_FILE) == true) continue
IrVerifier(assertions, module.frontendKind == FrontendKinds.FIR).verifyWithAssert(irFile)
IrVerifier(assertions, module.frontendKind == FrontendKinds.FIR).verifyWithAssert(irFile)
val actualDump = irFile.dumpTreesFromLineNumber(lineNumber = 0, DumpIrTreeOptions(normalizeNames = true))
val actualDump = irFile.dumpTreesFromLineNumber(lineNumber = 0, DumpIrTreeOptions(normalizeNames = true))
val irFileCopy = irFile.deepCopyWithSymbols()
val dumpOfCopy = irFileCopy.dumpTreesFromLineNumber(lineNumber = 0, DumpIrTreeOptions(normalizeNames = true))
assertions.assertEquals(actualDump, dumpOfCopy) { "IR dump mismatch after deep copy with symbols" }
}
val irFileCopy = irFile.deepCopyWithSymbols<IrFile>()
val dumpOfCopy = irFileCopy.dumpTreesFromLineNumber(lineNumber = 0, DumpIrTreeOptions(normalizeNames = true))
assertions.assertEquals(actualDump, dumpOfCopy) { "IR dump mismatch after deep copy with symbols" }
}
}