[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.impl.BaseDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
|
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
|
||||||
import org.jetbrains.kotlin.diagnostics.rendering.RootDiagnosticRendererFactory
|
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.FirParser
|
||||||
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
|
||||||
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives
|
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives
|
||||||
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives
|
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives
|
||||||
import org.jetbrains.kotlin.test.directives.model.singleOrZeroValue
|
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 org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||||
import java.io.File
|
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) {
|
fun BinaryArtifactHandler<*>.reportKtDiagnostics(module: TestModule, ktDiagnosticReporter: BaseDiagnosticsCollector) {
|
||||||
val globalMetadataInfoHandler = testServices.globalMetadataInfoHandler
|
val globalMetadataInfoHandler = testServices.globalMetadataInfoHandler
|
||||||
val firParser = module.directives.singleOrZeroValue(FirDiagnosticsDirectives.FIR_PARSER)
|
val firParser = module.directives.singleOrZeroValue(FirDiagnosticsDirectives.FIR_PARSER)
|
||||||
|
|||||||
+2
-4
@@ -26,10 +26,8 @@ class IrInlineBodiesHandler(testServices: TestServices) : AbstractIrHandler(test
|
|||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
override fun processModule(module: TestModule, info: IrBackendInput) {
|
override fun processModule(module: TestModule, info: IrBackendInput) {
|
||||||
info.processAllIrModuleFragments(module) { irModule, _ ->
|
info.irModuleFragment.acceptChildrenVoid(InlineFunctionsCollector())
|
||||||
irModule.acceptChildrenVoid(InlineFunctionsCollector())
|
info.irModuleFragment.acceptChildrenVoid(InlineCallBodiesCheck(firEnabled = module.frontendKind == FrontendKinds.FIR))
|
||||||
irModule.acceptChildrenVoid(InlineCallBodiesCheck(firEnabled = module.frontendKind == FrontendKinds.FIR))
|
|
||||||
}
|
|
||||||
|
|
||||||
assertions.assertTrue((info as IrBackendInput.JvmIrBackendInput).backendInput.symbolTable.descriptorExtension.allUnboundSymbols.isEmpty())
|
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 processAfterAllModules(someAssertionWasFailed: Boolean) {}
|
||||||
|
|
||||||
override fun processModule(module: TestModule, info: IrBackendInput) {
|
override fun processModule(module: TestModule, info: IrBackendInput) {
|
||||||
info.processAllIrModuleFragments(module) { moduleFragment, _ ->
|
val evaluator = Evaluator(IrInterpreter(info.irModuleFragment.irBuiltins), globalMetadataInfoHandler)
|
||||||
val evaluator = Evaluator(IrInterpreter(moduleFragment.irBuiltins), globalMetadataInfoHandler)
|
for ((irFile, testFile) in matchIrFileWithTestFile(info.irModuleFragment, module)) {
|
||||||
for ((irFile, testFile) in matchIrFileWithTestFile(moduleFragment, module)) {
|
evaluator.evaluate(irFile, testFile)
|
||||||
evaluator.evaluate(irFile, testFile)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-11
@@ -72,16 +72,14 @@ internal fun dumpModuleKotlinLike(
|
|||||||
multiModuleInfoDumper: MultiModuleInfoDumper,
|
multiModuleInfoDumper: MultiModuleInfoDumper,
|
||||||
options: KotlinLikeDumpOptions,
|
options: KotlinLikeDumpOptions,
|
||||||
) {
|
) {
|
||||||
info.processAllIrModuleFragments(module) { irModuleFragment, moduleName ->
|
val irFiles = info.irModuleFragment.files
|
||||||
val irFiles = irModuleFragment.files
|
val builder = multiModuleInfoDumper.builderForModule(module.name)
|
||||||
val builder = multiModuleInfoDumper.builderForModule(moduleName)
|
val filteredIrFiles = irFiles.groupWithTestFiles(module).filterNot { (testFile, _) ->
|
||||||
val filteredIrFiles = irFiles.groupWithTestFiles(module).filterNot { (testFile, _) ->
|
testFile?.let { EXTERNAL_FILE in it.directives || it.isAdditional } ?: false
|
||||||
testFile?.let { EXTERNAL_FILE in it.directives || it.isAdditional } ?: false
|
}.map { it.second }
|
||||||
}.map { it.second }
|
val printFileName = filteredIrFiles.size > 1 || allModules.size > 1
|
||||||
val printFileName = filteredIrFiles.size > 1 || allModules.size > 1
|
val modifiedOptions = options.copy(printFileName = printFileName)
|
||||||
val modifiedOptions = options.copy(printFileName = printFileName)
|
for (irFile in filteredIrFiles) {
|
||||||
for (irFile in filteredIrFiles) {
|
builder.append(irFile.dumpKotlinLike(modifiedOptions))
|
||||||
builder.append(irFile.dumpKotlinLike(modifiedOptions))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-6
@@ -42,12 +42,9 @@ class IrSourceRangesDumpHandler(
|
|||||||
|
|
||||||
override fun processModule(module: TestModule, info: IrBackendInput) {
|
override fun processModule(module: TestModule, info: IrBackendInput) {
|
||||||
if (CodegenTestDirectives.DUMP_SOURCE_RANGES_IR !in module.directives) return
|
if (CodegenTestDirectives.DUMP_SOURCE_RANGES_IR !in module.directives) return
|
||||||
info.processAllIrModuleFragments(module) { irModuleFragment, moduleName ->
|
val builder = baseDumper.builderForModule(module.name)
|
||||||
val builder = baseDumper.builderForModule(moduleName)
|
for (irFile in info.irModuleFragment.files) {
|
||||||
|
builder.append(irFile.dumpWithSourceLocations(irFile.fileEntry))
|
||||||
for (irFile in irModuleFragment.files) {
|
|
||||||
builder.append(irFile.dumpWithSourceLocations(irFile.fileEntry))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
-11
@@ -76,18 +76,15 @@ class IrTextDumpHandler(
|
|||||||
printTypeAbbreviations = false,
|
printTypeAbbreviations = false,
|
||||||
)
|
)
|
||||||
|
|
||||||
info.processAllIrModuleFragments(module) { irModuleFragment, moduleName ->
|
val builder = baseDumper.builderForModule(module.name)
|
||||||
val builder = baseDumper.builderForModule(moduleName)
|
val testFileToIrFile = info.irModuleFragment.files.groupWithTestFiles(module)
|
||||||
val testFileToIrFile = irModuleFragment.files.groupWithTestFiles(module)
|
for ((testFile, irFile) in testFileToIrFile) {
|
||||||
|
if (testFile?.directives?.contains(EXTERNAL_FILE) == true) continue
|
||||||
for ((testFile, irFile) in testFileToIrFile) {
|
var actualDump = irFile.dumpTreesFromLineNumber(lineNumber = 0, dumpOptions)
|
||||||
if (testFile?.directives?.contains(EXTERNAL_FILE) == true) continue
|
if (actualDump.isEmpty()) {
|
||||||
var actualDump = irFile.dumpTreesFromLineNumber(lineNumber = 0, dumpOptions)
|
actualDump = irFile.dumpTreesFromLineNumber(lineNumber = UNDEFINED_OFFSET, dumpOptions)
|
||||||
if (actualDump.isEmpty()) {
|
|
||||||
actualDump = irFile.dumpTreesFromLineNumber(lineNumber = UNDEFINED_OFFSET, dumpOptions)
|
|
||||||
}
|
|
||||||
builder.append(actualDump)
|
|
||||||
}
|
}
|
||||||
|
builder.append(actualDump)
|
||||||
}
|
}
|
||||||
|
|
||||||
compareDumpsOfExternalClasses(module, info)
|
compareDumpsOfExternalClasses(module, info)
|
||||||
|
|||||||
+10
-11
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.test.backend.handlers
|
package org.jetbrains.kotlin.test.backend.handlers
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.IrVerifier
|
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.DumpIrTreeOptions
|
||||||
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
|
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
|
||||||
import org.jetbrains.kotlin.ir.util.dumpTreesFromLineNumber
|
import org.jetbrains.kotlin.ir.util.dumpTreesFromLineNumber
|
||||||
@@ -29,20 +30,18 @@ class IrTreeVerifierHandler(
|
|||||||
override fun processModule(module: TestModule, info: IrBackendInput) {
|
override fun processModule(module: TestModule, info: IrBackendInput) {
|
||||||
if (CodegenTestDirectives.DUMP_IR !in module.directives) return
|
if (CodegenTestDirectives.DUMP_IR !in module.directives) return
|
||||||
|
|
||||||
info.processAllIrModuleFragments(module) { irModuleFragment, _ ->
|
val irFiles = info.irModuleFragment.files
|
||||||
val irFiles = irModuleFragment.files
|
val testFileToIrFile = irFiles.groupWithTestFiles(module)
|
||||||
val testFileToIrFile = irFiles.groupWithTestFiles(module)
|
for ((testFile, irFile) in testFileToIrFile) {
|
||||||
for ((testFile, irFile) in testFileToIrFile) {
|
if (testFile?.directives?.contains(EXTERNAL_FILE) == true) continue
|
||||||
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 irFileCopy = irFile.deepCopyWithSymbols<IrFile>()
|
||||||
val dumpOfCopy = irFileCopy.dumpTreesFromLineNumber(lineNumber = 0, DumpIrTreeOptions(normalizeNames = true))
|
val dumpOfCopy = irFileCopy.dumpTreesFromLineNumber(lineNumber = 0, DumpIrTreeOptions(normalizeNames = true))
|
||||||
assertions.assertEquals(actualDump, dumpOfCopy) { "IR dump mismatch after deep copy with symbols" }
|
assertions.assertEquals(actualDump, dumpOfCopy) { "IR dump mismatch after deep copy with symbols" }
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user