From 4325803262080a8d4810aa4ee2cd115297bd516b Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Fri, 2 Feb 2024 21:18:35 +0100 Subject: [PATCH] [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. --- .../backend/jvm/codegen/AnnotationCodegen.kt | 2 +- .../backend/jvm/codegen/FunctionCodegen.kt | 3 +-- .../jvm/lower/GenerateMultifileFacades.kt | 2 +- .../jvm/CachedSyntheticDeclarations.kt | 24 +++++++++---------- .../jvm/JvmLoweredDeclarationOrigin.kt | 1 - .../backend/jvm/ir/JvmIrCoroutineUtils.kt | 2 +- .../ir/declarations/IrDeclarationOrigin.kt | 6 +++++ 7 files changed, 22 insertions(+), 18 deletions(-) diff --git a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt index 2d42fd8d4c7..2c869cc93d7 100644 --- a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt +++ b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt @@ -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 diff --git a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt index c2f95aed97b..ad2e07b586b 100644 --- a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt +++ b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt @@ -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, diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/GenerateMultifileFacades.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/GenerateMultifileFacades.kt index bec84946b6e..afc560416fb 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/GenerateMultifileFacades.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/GenerateMultifileFacades.kt @@ -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 || diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/CachedSyntheticDeclarations.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/CachedSyntheticDeclarations.kt index 2b7e24564c0..bb80cc9f163 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/CachedSyntheticDeclarations.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/CachedSyntheticDeclarations.kt @@ -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("", fieldSymbol.owner.type, JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR) + accessor.addValueParameter("", 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) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLoweredDeclarationOrigin.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLoweredDeclarationOrigin.kt index 2755867201f..0d9d2fbbe82 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLoweredDeclarationOrigin.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLoweredDeclarationOrigin.kt @@ -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 diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrCoroutineUtils.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrCoroutineUtils.kt index 48d059260a8..2e996f52a6f 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrCoroutineUtils.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrCoroutineUtils.kt @@ -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, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt index c1007ee2f6a..35a9b33fcae 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt @@ -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 } /**