[C-interop] Modality of accessors should be the same as of property

^KT-42412
This commit is contained in:
Dmitriy Dolovov
2020-10-02 21:07:07 +03:00
committed by Dmitriy Dolovov
parent f21c1bffde
commit 0ea834ea1f
@@ -174,12 +174,12 @@ internal class ModuleMetadataEmitter(
element.kind -> element element.kind -> element
else -> element.copy(kind = bridgeSupportedKind) else -> element.copy(kind = bridgeSupportedKind)
} }
val kind = property.kind
val name = getPropertyNameInScope(property, data.container) val name = getPropertyNameInScope(property, data.container)
KmProperty(property.flags, name, kind.getterFlags, kind.setterFlags).also { km -> KmProperty(property.flags, name, property.getterFlags, property.setterFlags).also { km ->
property.annotations.mapTo(km.annotations) { it.map() } property.annotations.mapTo(km.annotations) { it.map() }
km.receiverParameterType = property.receiverType?.map() km.receiverParameterType = property.receiverType?.map()
km.returnType = property.type.map() km.returnType = property.type.map()
val kind = property.kind
if (kind is PropertyStub.Kind.Var) { if (kind is PropertyStub.Kind.Var) {
kind.setter.annotations.mapTo(km.setterAnnotations) { it.map() } kind.setter.annotations.mapTo(km.setterAnnotations) { it.map() }
// TODO: Maybe it's better to explicitly add setter parameter in stub. // TODO: Maybe it's better to explicitly add setter parameter in stub.
@@ -286,11 +286,11 @@ private class MappingExtensions(
} }
) or modality.flags ) or modality.flags
val PropertyStub.Kind.getterFlags: Flags val PropertyStub.getterFlags: Flags
get() = when (this) { get() = when (val kind = kind) {
is PropertyStub.Kind.Val -> getter.flags is PropertyStub.Kind.Val -> kind.getter.flags(modality)
is PropertyStub.Kind.Var -> getter.flags is PropertyStub.Kind.Var -> kind.getter.flags(modality)
is PropertyStub.Kind.Constant -> flags is PropertyStub.Kind.Constant -> kind.flags
} }
val PropertyStub.Kind.Constant.flags: Flags val PropertyStub.Kind.Constant.flags: Flags
@@ -299,27 +299,27 @@ private class MappingExtensions(
Flag.IS_FINAL Flag.IS_FINAL
) )
private val PropertyAccessor.Getter.flags: Flags private fun PropertyAccessor.Getter.flags(propertyModality: MemberStubModality): Flags =
get() = flagsOfNotNull( flagsOfNotNull(
Flag.HAS_ANNOTATIONS.takeIf { annotations.isNotEmpty() }, Flag.HAS_ANNOTATIONS.takeIf { annotations.isNotEmpty() },
Flag.IS_PUBLIC, Flag.IS_PUBLIC,
Flag.IS_FINAL,
Flag.PropertyAccessor.IS_NOT_DEFAULT, Flag.PropertyAccessor.IS_NOT_DEFAULT,
Flag.PropertyAccessor.IS_EXTERNAL.takeIf { this is PropertyAccessor.Getter.ExternalGetter } Flag.PropertyAccessor.IS_EXTERNAL.takeIf { this is PropertyAccessor.Getter.ExternalGetter }
) ) or propertyModality.flags
val PropertyStub.Kind.setterFlags: Flags val PropertyStub.setterFlags: Flags
get() = if (this !is PropertyStub.Kind.Var) flagsOf() get() = when (val kind = kind) {
else setter.flags is PropertyStub.Kind.Var -> kind.setter.flags(modality)
else -> flagsOf()
}
val PropertyAccessor.Setter.flags: Flags private fun PropertyAccessor.Setter.flags(propertyModality: MemberStubModality): Flags =
get() = flagsOfNotNull( flagsOfNotNull(
Flag.HAS_ANNOTATIONS.takeIf { annotations.isNotEmpty() }, Flag.HAS_ANNOTATIONS.takeIf { annotations.isNotEmpty() },
Flag.IS_PUBLIC, Flag.IS_PUBLIC,
Flag.IS_FINAL,
Flag.PropertyAccessor.IS_NOT_DEFAULT, Flag.PropertyAccessor.IS_NOT_DEFAULT,
Flag.PropertyAccessor.IS_EXTERNAL.takeIf { this is PropertyAccessor.Setter.ExternalSetter } Flag.PropertyAccessor.IS_EXTERNAL.takeIf { this is PropertyAccessor.Setter.ExternalSetter }
) ) or propertyModality.flags
val StubType.flags: Flags val StubType.flags: Flags
get() = flagsOfNotNull( get() = flagsOfNotNull(