From ca3cff9a9385e97ff16e35ae826c31a15a272a26 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 16 Aug 2018 12:26:07 +0200 Subject: [PATCH] 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 --- .../kotlin/serialization/DescriptorSerializer.kt | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt index 5c3d89eef56..89fac9e4f7b 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt @@ -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 sort(descriptors: Collection): List = ArrayList(descriptors).apply {