[Test] Reformat AbstractIrSerializeCompileKotlinAgainstInlineKotlinTest
- Extract IrInlineBodiesHandler to separate file
- Replace SerializeSetter environment configurator with SERIALIZE_IR
directive
This commit is contained in:
committed by
teamcityserver
parent
a66f3d26fd
commit
90e06bf403
+61
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.test.backend.handlers
|
||||
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
|
||||
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||
import org.jetbrains.kotlin.ir.util.allUnbound
|
||||
import org.jetbrains.kotlin.ir.util.resolveFakeOverride
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
||||
import org.jetbrains.kotlin.test.model.TestModule
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
|
||||
class IrInlineBodiesHandler(testServices: TestServices) : AbstractIrHandler(testServices) {
|
||||
val declaredInlineFunctionSignatures = mutableSetOf<IdSignature>()
|
||||
|
||||
override fun processModule(module: TestModule, info: IrBackendInput) {
|
||||
val irModule = info.backendInput.irModuleFragment
|
||||
irModule.acceptChildrenVoid(InlineFunctionsCollector())
|
||||
irModule.acceptChildrenVoid(InlineCallBodiesCheck())
|
||||
assertions.assertTrue(info.backendInput.symbolTable.allUnbound.isEmpty())
|
||||
}
|
||||
|
||||
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {
|
||||
// TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
inner class InlineFunctionsCollector : IrElementVisitorVoid {
|
||||
override fun visitElement(element: IrElement) {
|
||||
element.acceptChildrenVoid(this)
|
||||
}
|
||||
|
||||
override fun visitSimpleFunction(declaration: IrSimpleFunction) {
|
||||
if (declaration.isInline) declaration.symbol.signature?.let { declaredInlineFunctionSignatures.add(it) }
|
||||
super.visitSimpleFunction(declaration)
|
||||
}
|
||||
}
|
||||
|
||||
inner class InlineCallBodiesCheck : IrElementVisitorVoid {
|
||||
override fun visitElement(element: IrElement) {
|
||||
element.acceptChildrenVoid(this)
|
||||
}
|
||||
|
||||
override fun visitMemberAccess(expression: IrMemberAccessExpression<*>) {
|
||||
val symbol = expression.symbol
|
||||
assertions.assertTrue(symbol.isBound)
|
||||
val callee = symbol.owner
|
||||
if (callee.symbol.signature in declaredInlineFunctionSignatures) {
|
||||
val trueCallee = (callee as IrSimpleFunction).resolveFakeOverride()!!
|
||||
assertions.assertNotNull(trueCallee.body)
|
||||
}
|
||||
super.visitMemberAccess(expression)
|
||||
}
|
||||
}
|
||||
}
|
||||
+4
@@ -88,4 +88,8 @@ object JvmEnvironmentConfigurationDirectives : SimpleDirectivesContainer() {
|
||||
val USE_OLD_INLINE_CLASSES_MANGLING_SCHEME by directive(
|
||||
description = "Enable old mangling scheme for inline classes"
|
||||
)
|
||||
|
||||
val SERIALIZE_IR by directive(
|
||||
description = "Enable serialization of JVM IR"
|
||||
)
|
||||
}
|
||||
|
||||
+6
-65
@@ -5,38 +5,27 @@
|
||||
|
||||
package org.jetbrains.kotlin.test.runners.codegen
|
||||
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
|
||||
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||
import org.jetbrains.kotlin.ir.util.allUnbound
|
||||
import org.jetbrains.kotlin.ir.util.resolveFakeOverride
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
import org.jetbrains.kotlin.test.Constructor
|
||||
import org.jetbrains.kotlin.test.TargetBackend
|
||||
import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
||||
import org.jetbrains.kotlin.test.backend.BlackBoxCodegenSuppressor
|
||||
import org.jetbrains.kotlin.test.backend.classic.ClassicBackendInput
|
||||
import org.jetbrains.kotlin.test.backend.classic.ClassicJvmBackendFacade
|
||||
import org.jetbrains.kotlin.test.backend.handlers.AbstractIrHandler
|
||||
import org.jetbrains.kotlin.test.backend.handlers.IrInlineBodiesHandler
|
||||
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
||||
import org.jetbrains.kotlin.test.backend.ir.JvmIrBackendFacade
|
||||
import org.jetbrains.kotlin.test.bind
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.builders.configureIrHandlersStep
|
||||
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.IGNORE_BACKEND_MULTI_MODULE
|
||||
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.SERIALIZE_IR
|
||||
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontend2ClassicBackendConverter
|
||||
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontend2IrConverter
|
||||
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade
|
||||
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendOutputArtifact
|
||||
import org.jetbrains.kotlin.test.model.*
|
||||
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerWithTargetBackendTest
|
||||
import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
|
||||
import org.jetbrains.kotlin.test.services.ModuleTransformerForTwoFilesBoxTests
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
|
||||
|
||||
@OptIn(TestInfrastructureInternals::class)
|
||||
@@ -84,61 +73,13 @@ open class AbstractIrSerializeCompileKotlinAgainstInlineKotlinTest : AbstractIrC
|
||||
override fun configure(builder: TestConfigurationBuilder) {
|
||||
super.configure(builder)
|
||||
builder.apply {
|
||||
useConfigurators(::SerializeSetter)
|
||||
defaultDirectives {
|
||||
+SERIALIZE_IR
|
||||
}
|
||||
|
||||
configureIrHandlersStep {
|
||||
useHandlers(::CheckInlineBodies)
|
||||
useHandlers(::IrInlineBodiesHandler)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class SerializeSetter(testServices: TestServices) : EnvironmentConfigurator(testServices) {
|
||||
override fun configureCompilerConfiguration(configuration: CompilerConfiguration, module: TestModule) {
|
||||
configuration.put(JVMConfigurationKeys.SERIALIZE_IR, true)
|
||||
}
|
||||
}
|
||||
|
||||
private class CheckInlineBodies(testServices: TestServices) : AbstractIrHandler(testServices) {
|
||||
val declaredInlineFunctionSignatures = mutableSetOf<IdSignature>()
|
||||
|
||||
override fun processModule(module: TestModule, info: IrBackendInput) {
|
||||
val irModule = info.backendInput.irModuleFragment
|
||||
irModule.acceptChildrenVoid(InlineFunctionsCollector())
|
||||
irModule.acceptChildrenVoid(InlineCallBodiesCheck())
|
||||
assertions.assertTrue(info.backendInput.symbolTable.allUnbound.isEmpty())
|
||||
}
|
||||
|
||||
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {
|
||||
// TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
inner class InlineFunctionsCollector : IrElementVisitorVoid {
|
||||
override fun visitElement(element: IrElement) {
|
||||
element.acceptChildrenVoid(this)
|
||||
}
|
||||
|
||||
override fun visitSimpleFunction(declaration: IrSimpleFunction) {
|
||||
if (declaration.isInline) declaration.symbol.signature?.let { declaredInlineFunctionSignatures.add(it) }
|
||||
super.visitSimpleFunction(declaration)
|
||||
}
|
||||
}
|
||||
|
||||
inner class InlineCallBodiesCheck : IrElementVisitorVoid {
|
||||
override fun visitElement(element: IrElement) {
|
||||
element.acceptChildrenVoid(this)
|
||||
}
|
||||
|
||||
override fun visitMemberAccess(expression: IrMemberAccessExpression<*>) {
|
||||
val symbol = expression.symbol
|
||||
assertions.assertTrue(symbol.isBound)
|
||||
val callee = symbol.owner
|
||||
if (callee.symbol.signature in declaredInlineFunctionSignatures) {
|
||||
val trueCallee = (callee as IrSimpleFunction).resolveFakeOverride()!!
|
||||
assertions.assertNotNull(trueCallee.body)
|
||||
}
|
||||
super.visitMemberAccess(expression)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+2
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirective
|
||||
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.JVM_TARGET
|
||||
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.LAMBDAS
|
||||
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.SAM_CONVERSIONS
|
||||
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.SERIALIZE_IR
|
||||
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.STRING_CONCAT
|
||||
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.USE_OLD_INLINE_CLASSES_MANGLING_SCHEME
|
||||
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives
|
||||
@@ -145,6 +146,7 @@ class JvmEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfig
|
||||
register(NO_UNIFIED_NULL_CHECKS, JVMConfigurationKeys.NO_UNIFIED_NULL_CHECKS)
|
||||
register(PARAMETERS_METADATA, JVMConfigurationKeys.PARAMETERS_METADATA)
|
||||
register(JVM_TARGET, JVMConfigurationKeys.JVM_TARGET)
|
||||
register(SERIALIZE_IR, JVMConfigurationKeys.SERIALIZE_IR)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalPathApi::class, ExperimentalStdlibApi::class)
|
||||
|
||||
Reference in New Issue
Block a user