[JVM IR] Move SYNTHETIC_ACCESSOR origin to IrDeclarationOrigin.Companion

We want to generate synthetic accessors not only on JVM (KT-64865),
so this is one of the prerequisites.
This commit is contained in:
Sergej Jaskiewicz
2024-02-02 21:18:35 +01:00
committed by Space Team
parent 86587a3bf2
commit 4325803262
7 changed files with 22 additions and 18 deletions
@@ -400,7 +400,7 @@ abstract class AnnotationCodegen(
annotated: IrAnnotationContainer,
type: IrType?
) {
if ((annotated as? IrDeclaration)?.origin == JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR ||
if ((annotated as? IrDeclaration)?.origin == IrDeclarationOrigin.SYNTHETIC_ACCESSOR ||
type == null || !context.config.emitJvmTypeAnnotations
) {
return
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.backend.jvm.mapping.mapType
import org.jetbrains.kotlin.backend.jvm.mapping.mapTypeAsDeclaration
import org.jetbrains.kotlin.codegen.AsmUtil
import org.jetbrains.kotlin.codegen.inline.*
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.codegen.state.JvmBackendConfig
import org.jetbrains.kotlin.codegen.visitAnnotableParameterCount
import org.jetbrains.kotlin.config.LanguageFeature
@@ -312,7 +311,7 @@ class FunctionCodegen(private val irFunction: IrFunction, private val classCodeg
// Not generating parameter annotations for default stubs fixes KT-7892, though
// this certainly looks like a workaround for a javac bug.
IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER,
JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR,
IrDeclarationOrigin.SYNTHETIC_ACCESSOR,
IrDeclarationOrigin.GENERATED_SINGLE_FIELD_VALUE_CLASS_MEMBER,
IrDeclarationOrigin.BRIDGE,
IrDeclarationOrigin.BRIDGE_SPECIAL,
@@ -215,7 +215,7 @@ private fun IrSimpleFunction.createMultifileDelegateIfNeeded(
if (DescriptorVisibilities.isPrivate(originalVisibility) ||
name == StaticInitializersLowering.clinitName ||
origin == JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR ||
origin == IrDeclarationOrigin.SYNTHETIC_ACCESSOR ||
origin == JvmLoweredDeclarationOrigin.INLINE_LAMBDA ||
origin == IrDeclarationOrigin.LOCAL_FUNCTION_FOR_LAMBDA ||
origin == IrDeclarationOrigin.PROPERTY_DELEGATE ||
@@ -147,7 +147,7 @@ class CachedSyntheticDeclarations(private val context: JvmBackendContext) {
private fun IrConstructor.makeConstructorAccessor(
originForConstructorAccessor: IrDeclarationOrigin =
JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR
IrDeclarationOrigin.SYNTHETIC_ACCESSOR
): IrConstructor {
val source = this
@@ -158,8 +158,8 @@ class CachedSyntheticDeclarations(private val context: JvmBackendContext) {
}.also { accessor ->
accessor.parent = source.parent
accessor.copyTypeParametersFrom(source, JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR)
accessor.copyValueParametersToStatic(source, JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR)
accessor.copyTypeParametersFrom(source, IrDeclarationOrigin.SYNTHETIC_ACCESSOR)
accessor.copyValueParametersToStatic(source, IrDeclarationOrigin.SYNTHETIC_ACCESSOR)
if (source.constructedClass.modality == Modality.SEALED) {
for (accessorValueParameter in accessor.valueParameters) {
accessorValueParameter.annotations = emptyList()
@@ -198,7 +198,7 @@ class CachedSyntheticDeclarations(private val context: JvmBackendContext) {
return factory.buildFun {
startOffset = parent.startOffset
endOffset = parent.startOffset
origin = JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR
origin = IrDeclarationOrigin.SYNTHETIC_ACCESSOR
name = source.accessorName(superQualifierSymbol, scopes)
visibility = DescriptorVisibilities.PUBLIC
modality = if (parent is IrClass && parent.isJvmInterface) Modality.OPEN else Modality.FINAL
@@ -206,8 +206,8 @@ class CachedSyntheticDeclarations(private val context: JvmBackendContext) {
}.also { accessor ->
accessor.parent = parent
accessor.copyAttributes(source)
accessor.copyTypeParametersFrom(source, JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR)
accessor.copyValueParametersToStatic(source, JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR, dispatchReceiverType)
accessor.copyTypeParametersFrom(source, IrDeclarationOrigin.SYNTHETIC_ACCESSOR)
accessor.copyValueParametersToStatic(source, IrDeclarationOrigin.SYNTHETIC_ACCESSOR, dispatchReceiverType)
accessor.returnType = source.returnType.remapTypeParameters(source, accessor)
accessor.body = context.irFactory.createExpressionBody(
@@ -246,7 +246,7 @@ class CachedSyntheticDeclarations(private val context: JvmBackendContext) {
context.irFactory.buildFun {
startOffset = parent.startOffset
endOffset = parent.startOffset
origin = JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR
origin = IrDeclarationOrigin.SYNTHETIC_ACCESSOR
name = fieldSymbol.owner.accessorNameForGetter(superQualifierSymbol)
visibility = DescriptorVisibilities.PUBLIC
modality = Modality.FINAL
@@ -257,7 +257,7 @@ class CachedSyntheticDeclarations(private val context: JvmBackendContext) {
if (!fieldSymbol.owner.isStatic) {
// Accessors are always to one's own fields.
accessor.addValueParameter(
"\$this", parent.defaultType, JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR
"\$this", parent.defaultType, IrDeclarationOrigin.SYNTHETIC_ACCESSOR
)
}
@@ -302,7 +302,7 @@ class CachedSyntheticDeclarations(private val context: JvmBackendContext) {
context.irFactory.buildFun {
startOffset = parent.startOffset
endOffset = parent.startOffset
origin = JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR
origin = IrDeclarationOrigin.SYNTHETIC_ACCESSOR
name = fieldSymbol.owner.accessorNameForSetter(superQualifierSymbol)
visibility = DescriptorVisibilities.PUBLIC
modality = Modality.FINAL
@@ -313,11 +313,11 @@ class CachedSyntheticDeclarations(private val context: JvmBackendContext) {
if (!fieldSymbol.owner.isStatic) {
// Accessors are always to one's own fields.
accessor.addValueParameter(
"\$this", parent.defaultType, JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR
"\$this", parent.defaultType, IrDeclarationOrigin.SYNTHETIC_ACCESSOR
)
}
accessor.addValueParameter("<set-?>", fieldSymbol.owner.type, JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR)
accessor.addValueParameter("<set-?>", fieldSymbol.owner.type, IrDeclarationOrigin.SYNTHETIC_ACCESSOR)
accessor.body = createAccessorBodyForSetter(fieldSymbol.owner, accessor, superQualifierSymbol)
}.symbol
@@ -471,7 +471,7 @@ class CachedSyntheticDeclarations(private val context: JvmBackendContext) {
private val IrConstructor.isOrShouldBeHiddenDueToOrigin: Boolean
get() = !(origin == IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER ||
origin == JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR ||
origin == IrDeclarationOrigin.SYNTHETIC_ACCESSOR ||
origin == JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR_FOR_HIDDEN_CONSTRUCTOR ||
origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB)
@@ -14,7 +14,6 @@ object JvmLoweredDeclarationOrigin {
val FIELD_FOR_OUTER_THIS by IrDeclarationOriginImpl
val LAMBDA_IMPL by IrDeclarationOriginImpl
val FUNCTION_REFERENCE_IMPL by IrDeclarationOriginImpl.Synthetic
val SYNTHETIC_ACCESSOR by IrDeclarationOriginImpl.Synthetic
val SYNTHETIC_ACCESSOR_FOR_HIDDEN_CONSTRUCTOR by IrDeclarationOriginImpl.Synthetic
val SYNTHETIC_MARKER_PARAMETER by IrDeclarationOriginImpl.Synthetic
val TO_ARRAY by IrDeclarationOriginImpl
@@ -62,7 +62,7 @@ private val BRIDGE_ORIGINS = setOf(
IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER,
JvmLoweredDeclarationOrigin.JVM_STATIC_WRAPPER,
JvmLoweredDeclarationOrigin.JVM_OVERLOADS_WRAPPER,
JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR,
IrDeclarationOrigin.SYNTHETIC_ACCESSOR,
JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR_FOR_HIDDEN_CONSTRUCTOR,
JvmLoweredDeclarationOrigin.SUPER_INTERFACE_METHOD_BRIDGE,
IrDeclarationOrigin.BRIDGE,
@@ -95,6 +95,12 @@ interface IrDeclarationOrigin {
val LOWERED_SUSPEND_FUNCTION by IrDeclarationOriginImpl.Synthetic
val SHARED_VARIABLE_IN_EVALUATOR_FRAGMENT by IrDeclarationOriginImpl.Synthetic
/**
* Used on synthetic accessor functions generated in place of references to e.g. private symbols in non-private inline functions,
* or `super` calls from lambdas and inline functions.
*/
val SYNTHETIC_ACCESSOR by IrDeclarationOriginImpl.Synthetic
}
/**