mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-04-23 15:52:40 +00:00
JVM_IR: Generate private suspend functions as synthetic package-private
Do not generate accessors for them. #KT-37086 Fixed
This commit is contained in:
@@ -173,7 +173,9 @@ open class FunctionCodegen(
|
||||
}
|
||||
val nativeFlag = if (irFunction.isExternal) Opcodes.ACC_NATIVE else 0
|
||||
val syntheticFlag =
|
||||
if (irFunction.origin.isSynthetic || irFunction.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME)) Opcodes.ACC_SYNTHETIC
|
||||
if (irFunction.origin.isSynthetic || irFunction.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME) ||
|
||||
(irFunction.isSuspend && irFunction.visibility == Visibilities.PRIVATE && !irFunction.isInline)
|
||||
) Opcodes.ACC_SYNTHETIC
|
||||
else 0
|
||||
val strictFpFlag = if (irFunction.hasAnnotation(STRICTFP_ANNOTATION_FQ_NAME)) Opcodes.ACC_STRICT else 0
|
||||
val synchronizedFlag = if (irFunction.hasAnnotation(SYNCHRONIZED_ANNOTATION_FQ_NAME)) Opcodes.ACC_SYNCHRONIZED else 0
|
||||
|
||||
@@ -576,6 +576,8 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
|
||||
((thisObjReference == null || contextDeclarationContainer.symbol.isSubtypeOfClass(thisObjReference)) &&
|
||||
(contextDeclarationContainer.isSubclassOf(symbolDeclarationContainer)))
|
||||
return when {
|
||||
// private suspend functions are generated as synthetic package private
|
||||
declaration is IrFunction && declaration.isSuspend && declaration.visibility.isPrivate && samePackage -> true
|
||||
declaration.visibility.isPrivate && symbolDeclarationContainer != contextDeclarationContainer -> false
|
||||
declaration.visibility.isProtected && !samePackage && !fromSubclassOfReceiversClass -> false
|
||||
withSuper && !fromSubclassOfReceiversClass -> false
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
// TODO: KT-37086
|
||||
// WITH_RUNTIME
|
||||
// COMMON_COROUTINES_TEST
|
||||
import COROUTINES_PACKAGE.*
|
||||
|
||||
6
compiler/testData/codegen/bytecodeListing/coroutines/privateAccessor_ir.txt
vendored
Normal file
6
compiler/testData/codegen/bytecodeListing/coroutines/privateAccessor_ir.txt
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
@kotlin.Metadata
|
||||
public final class PrivateAccessorKt {
|
||||
public synthetic final static method access$foo(): void
|
||||
synthetic final static method bar(p0: kotlin.coroutines.Continuation): java.lang.Object
|
||||
private final static method foo(): void
|
||||
}
|
||||
Reference in New Issue
Block a user