Do not write hasAnnotations flag for properties with source-only annotations

This does not break or fix any behavior except the fact that
deserialization will now not try loading annotations on a property which
had no binary- or runtime-retained annotations in the sources
This commit is contained in:
Alexander Udalov
2018-08-16 12:26:07 +02:00
parent 87c0d56618
commit ca3cff9a93
@@ -164,9 +164,7 @@ class DescriptorSerializer private constructor(
val hasConstant = compileTimeConstant != null && compileTimeConstant !is NullValue
val hasAnnotations =
!descriptor.annotations.isEmpty() ||
descriptor.backingField?.annotations?.isEmpty() == false ||
descriptor.delegateField?.annotations?.isEmpty() == false
hasAnnotations(descriptor) || hasAnnotations(descriptor.backingField) || hasAnnotations(descriptor.delegateField)
val propertyFlags = Flags.getAccessorFlags(
hasAnnotations,
@@ -751,8 +749,8 @@ class DescriptorSerializer private constructor(
Variance.OUT_VARIANCE -> ProtoBuf.Type.Argument.Projection.OUT
}
private fun hasAnnotations(descriptor: Annotated): Boolean =
descriptor.nonSourceAnnotations.isNotEmpty()
private fun hasAnnotations(descriptor: Annotated?): Boolean =
descriptor != null && descriptor.nonSourceAnnotations.isNotEmpty()
fun <T : DeclarationDescriptor> sort(descriptors: Collection<T>): List<T> =
ArrayList(descriptors).apply {