JVM IR: do not use origin DEFAULT_IMPLS_WITH_MOVED_RECEIVERS(_SYNTHETIC)
Instead, check that origin of the parent class is DEFAULT_IMPLS.
This commit is contained in:
+3
-13
@@ -158,19 +158,9 @@ class JvmCachedDeclarations(
|
|||||||
// is supposed to allow using `I2.DefaultImpls.f` as if it was inherited from `I1.DefaultImpls`.
|
// is supposed to allow using `I2.DefaultImpls.f` as if it was inherited from `I1.DefaultImpls`.
|
||||||
// The classes are not actually related and `I2.DefaultImpls.f` is not a fake override but a bridge.
|
// The classes are not actually related and `I2.DefaultImpls.f` is not a fake override but a bridge.
|
||||||
val defaultImplsOrigin = when {
|
val defaultImplsOrigin = when {
|
||||||
!forCompatibilityMode && !interfaceFun.isFakeOverride ->
|
!forCompatibilityMode && !interfaceFun.isFakeOverride -> interfaceFun.origin
|
||||||
when {
|
interfaceFun.resolveFakeOverride()!!.origin.isSynthetic -> JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE_TO_SYNTHETIC
|
||||||
interfaceFun.origin == IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER ->
|
else -> JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE
|
||||||
interfaceFun.origin
|
|
||||||
interfaceFun.origin.isSynthetic ->
|
|
||||||
JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_WITH_MOVED_RECEIVERS_SYNTHETIC
|
|
||||||
else ->
|
|
||||||
JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_WITH_MOVED_RECEIVERS
|
|
||||||
}
|
|
||||||
interfaceFun.resolveFakeOverride()!!.origin.isSynthetic ->
|
|
||||||
JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE_TO_SYNTHETIC
|
|
||||||
else ->
|
|
||||||
JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Interface functions are public or private, with one exception: clone in Cloneable, which is protected.
|
// Interface functions are public or private, with one exception: clone in Cloneable, which is protected.
|
||||||
|
|||||||
-3
@@ -11,9 +11,6 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl
|
|||||||
interface JvmLoweredDeclarationOrigin : IrDeclarationOrigin {
|
interface JvmLoweredDeclarationOrigin : IrDeclarationOrigin {
|
||||||
object CLASS_STATIC_INITIALIZER : IrDeclarationOriginImpl("CLASS_STATIC_INITIALIZER")
|
object CLASS_STATIC_INITIALIZER : IrDeclarationOriginImpl("CLASS_STATIC_INITIALIZER")
|
||||||
object DEFAULT_IMPLS : IrDeclarationOriginImpl("DEFAULT_IMPLS")
|
object DEFAULT_IMPLS : IrDeclarationOriginImpl("DEFAULT_IMPLS")
|
||||||
object DEFAULT_IMPLS_WITH_MOVED_RECEIVERS : IrDeclarationOriginImpl("STATIC_WITH_MOVED_RECEIVERS")
|
|
||||||
object DEFAULT_IMPLS_WITH_MOVED_RECEIVERS_SYNTHETIC :
|
|
||||||
IrDeclarationOriginImpl("STATIC_WITH_MOVED_RECEIVERS_SYNTHETIC", isSynthetic = true)
|
|
||||||
object DEFAULT_IMPLS_BRIDGE : IrDeclarationOriginImpl("DEFAULT_IMPLS_BRIDGE")
|
object DEFAULT_IMPLS_BRIDGE : IrDeclarationOriginImpl("DEFAULT_IMPLS_BRIDGE")
|
||||||
object DEFAULT_IMPLS_BRIDGE_TO_SYNTHETIC : IrDeclarationOriginImpl("DEFAULT_IMPLS_BRIDGE_TO_SYNTHETIC", isSynthetic = true)
|
object DEFAULT_IMPLS_BRIDGE_TO_SYNTHETIC : IrDeclarationOriginImpl("DEFAULT_IMPLS_BRIDGE_TO_SYNTHETIC", isSynthetic = true)
|
||||||
object FIELD_FOR_OUTER_THIS : IrDeclarationOriginImpl("FIELD_FOR_OUTER_THIS")
|
object FIELD_FOR_OUTER_THIS : IrDeclarationOriginImpl("FIELD_FOR_OUTER_THIS")
|
||||||
|
|||||||
+1
-12
@@ -341,7 +341,7 @@ internal fun IrFunction.suspendFunctionOriginal(): IrFunction =
|
|||||||
if (this is IrSimpleFunction && isSuspend &&
|
if (this is IrSimpleFunction && isSuspend &&
|
||||||
!isStaticInlineClassReplacement &&
|
!isStaticInlineClassReplacement &&
|
||||||
!isOrOverridesDefaultParameterStub() &&
|
!isOrOverridesDefaultParameterStub() &&
|
||||||
!isDefaultImplsFunction
|
parentAsClass.origin != JvmLoweredDeclarationOrigin.DEFAULT_IMPLS
|
||||||
)
|
)
|
||||||
attributeOwnerId as IrFunction
|
attributeOwnerId as IrFunction
|
||||||
else this
|
else this
|
||||||
@@ -354,17 +354,6 @@ private fun IrSimpleFunction.isOrOverridesDefaultParameterStub(): Boolean =
|
|||||||
{ it.origin == IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER }
|
{ it.origin == IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER }
|
||||||
)
|
)
|
||||||
|
|
||||||
private val defaultImplsOrigins = setOf(
|
|
||||||
IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER,
|
|
||||||
JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_WITH_MOVED_RECEIVERS,
|
|
||||||
JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_WITH_MOVED_RECEIVERS_SYNTHETIC,
|
|
||||||
JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE,
|
|
||||||
JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE_TO_SYNTHETIC,
|
|
||||||
)
|
|
||||||
|
|
||||||
private val IrSimpleFunction.isDefaultImplsFunction: Boolean
|
|
||||||
get() = origin in defaultImplsOrigins
|
|
||||||
|
|
||||||
private fun IrFunction.createSuspendFunctionStub(context: JvmBackendContext): IrFunction {
|
private fun IrFunction.createSuspendFunctionStub(context: JvmBackendContext): IrFunction {
|
||||||
require(this.isSuspend && this is IrSimpleFunction)
|
require(this.isSuspend && this is IrSimpleFunction)
|
||||||
return factory.buildFun {
|
return factory.buildFun {
|
||||||
|
|||||||
Reference in New Issue
Block a user