JVM_IR KT-37006: InlineOnly property accessors are private in bytecode
This commit is contained in:
+7
-2
@@ -32,7 +32,6 @@ import org.jetbrains.kotlin.load.java.JavaVisibilities
|
|||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.resolve.checkers.ExpectedActualDeclarationChecker
|
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.inline.*
|
||||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmClassSignature
|
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmClassSignature
|
||||||
import org.jetbrains.kotlin.resolve.source.PsiSourceElement
|
import org.jetbrains.kotlin.resolve.source.PsiSourceElement
|
||||||
@@ -285,7 +284,7 @@ fun IrDeclarationWithVisibility.isInlineOnlyOrReifiable(): Boolean =
|
|||||||
this is IrFunction && (isReifiable() || isInlineOnly())
|
this is IrFunction && (isReifiable() || isInlineOnly())
|
||||||
|
|
||||||
fun IrDeclarationWithVisibility.isEffectivelyInlineOnly(): Boolean =
|
fun IrDeclarationWithVisibility.isEffectivelyInlineOnly(): Boolean =
|
||||||
isInlineOnlyOrReifiable() || isInlineOnlyPrivateInBytecode()
|
isInlineOnlyOrReifiable() || isInlineOnlyPrivateInBytecode() || isInlineOnlyPropertyAccessor()
|
||||||
|
|
||||||
fun IrDeclarationWithVisibility.isInlineOnlyPrivateInBytecode(): Boolean =
|
fun IrDeclarationWithVisibility.isInlineOnlyPrivateInBytecode(): Boolean =
|
||||||
(this is IrFunction && isInlineOnly()) || isPrivateInlineSuspend()
|
(this is IrFunction && isInlineOnly()) || isPrivateInlineSuspend()
|
||||||
@@ -293,6 +292,12 @@ fun IrDeclarationWithVisibility.isInlineOnlyPrivateInBytecode(): Boolean =
|
|||||||
private fun IrDeclarationWithVisibility.isPrivateInlineSuspend(): Boolean =
|
private fun IrDeclarationWithVisibility.isPrivateInlineSuspend(): Boolean =
|
||||||
this is IrFunction && isSuspend && isInline && visibility == Visibilities.PRIVATE
|
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() =
|
fun IrFunction.isInlineOnly() =
|
||||||
isInline && hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME)
|
isInline && hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
// !LANGUAGE: +UseGetterNameForPropertyAnnotationsMethodOnJvm
|
// !LANGUAGE: +UseGetterNameForPropertyAnnotationsMethodOnJvm
|
||||||
// IGNORE_BACKEND: JVM_IR
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
|
|
||||||
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
|
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
|
||||||
|
|||||||
Reference in New Issue
Block a user