[Test] Inline processAllIrModuleFragments utility
After previous changes IR output artifact contains only one IrModuleFragment
This commit is contained in:
committed by
Space Team
parent
06af6adf4f
commit
48c3313e67
-10
@@ -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)
|
||||
|
||||
+2
-4
@@ -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())
|
||||
}
|
||||
|
||||
+3
-5
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+9
-11
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
+3
-6
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+8
-11
@@ -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)
|
||||
|
||||
+10
-11
@@ -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" }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user