From eefa621c560d6d555ebb82345c7e52be2bea18e9 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Mon, 29 Jun 2020 13:27:41 +0300 Subject: [PATCH] JVM_IR KT-37006: InlineOnly property accessors are private in bytecode --- .../kotlin/backend/jvm/codegen/irCodegenUtils.kt | 9 +++++++-- .../codegen/bytecodeListing/inline/inlineOnlyProperty.kt | 1 - 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/irCodegenUtils.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/irCodegenUtils.kt index 0ae1680ad75..b4afa56ba95 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/irCodegenUtils.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/irCodegenUtils.kt @@ -32,7 +32,6 @@ import org.jetbrains.kotlin.load.java.JavaVisibilities import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.checkers.ExpectedActualDeclarationChecker -import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver import org.jetbrains.kotlin.resolve.inline.* import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmClassSignature import org.jetbrains.kotlin.resolve.source.PsiSourceElement @@ -285,7 +284,7 @@ fun IrDeclarationWithVisibility.isInlineOnlyOrReifiable(): Boolean = this is IrFunction && (isReifiable() || isInlineOnly()) fun IrDeclarationWithVisibility.isEffectivelyInlineOnly(): Boolean = - isInlineOnlyOrReifiable() || isInlineOnlyPrivateInBytecode() + isInlineOnlyOrReifiable() || isInlineOnlyPrivateInBytecode() || isInlineOnlyPropertyAccessor() fun IrDeclarationWithVisibility.isInlineOnlyPrivateInBytecode(): Boolean = (this is IrFunction && isInlineOnly()) || isPrivateInlineSuspend() @@ -293,6 +292,12 @@ fun IrDeclarationWithVisibility.isInlineOnlyPrivateInBytecode(): Boolean = private fun IrDeclarationWithVisibility.isPrivateInlineSuspend(): Boolean = this is IrFunction && isSuspend && isInline && visibility == Visibilities.PRIVATE +private fun IrDeclarationWithVisibility.isInlineOnlyPropertyAccessor(): Boolean { + if (this !is IrSimpleFunction) return false + val propertySymbol = correspondingPropertySymbol ?: return false + return propertySymbol.owner.hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME) +} + fun IrFunction.isInlineOnly() = isInline && hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME) diff --git a/compiler/testData/codegen/bytecodeListing/inline/inlineOnlyProperty.kt b/compiler/testData/codegen/bytecodeListing/inline/inlineOnlyProperty.kt index 7ae6fb3d256..cc6ea56387d 100644 --- a/compiler/testData/codegen/bytecodeListing/inline/inlineOnlyProperty.kt +++ b/compiler/testData/codegen/bytecodeListing/inline/inlineOnlyProperty.kt @@ -1,5 +1,4 @@ // !LANGUAGE: +UseGetterNameForPropertyAnnotationsMethodOnJvm -// IGNORE_BACKEND: JVM_IR // WITH_RUNTIME @Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")