Use proto flag to determine companion field moved to interface

This commit is contained in:
Mikhael Bogdanov
2018-07-16 13:34:55 +02:00
parent e00b7a993f
commit 5b8df2f6f2
3 changed files with 31 additions and 8 deletions
@@ -33,6 +33,7 @@ import kotlin.reflect.KMutableProperty
import kotlin.reflect.KProperty
import kotlin.reflect.full.IllegalPropertyDelegateAccessException
import kotlin.reflect.jvm.internal.JvmPropertySignature.*
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPropertyDescriptor
internal abstract class KPropertyImpl<out R> private constructor(
override val container: KDeclarationContainerImpl,
@@ -192,9 +193,17 @@ private fun KPropertyImpl.Accessor<*, *>.computeCallerForAccessor(isGetter: Bool
!DescriptorUtils.isInterface(possibleCompanionObject.containingDeclaration)
}
fun isInsideInterfaceCompanionObjectWithJvmField(): Boolean {
fun isInsideJvmInterfaceCompanionObject(): Boolean {
val possibleCompanionObject = property.descriptor.containingDeclaration
return JvmAbi.isInterfaceCompanionWithBackingFieldsInOuter(possibleCompanionObject)
return DescriptorUtils.isCompanionObject(possibleCompanionObject) &&
(DescriptorUtils.isInterface(possibleCompanionObject.containingDeclaration) ||
DescriptorUtils.isAnnotationClass(possibleCompanionObject.containingDeclaration))
}
fun isInsideInterfaceCompanionObjectWithJvmField(): Boolean {
val propertyDescriptor = property.descriptor
if (propertyDescriptor !is DeserializedPropertyDescriptor || !isInsideJvmInterfaceCompanionObject()) return false
return JvmProtoBufUtil.isMovedFromInterfaceCompanion(propertyDescriptor.proto)
}
fun isJvmStaticProperty() =