Do not serialize empty property signature to JVM metadata

This should have no effect on the correct code currently because all
properties have at least a getter, but may help in debugging problems
with serialized metadata for properties
This commit is contained in:
Alexander Udalov
2018-07-04 18:57:34 +02:00
parent bba25042b6
commit 3f32e1cce9
3 changed files with 5 additions and 30 deletions
@@ -178,7 +178,9 @@ class JvmSerializerExtension(private val bindings: JvmSerializationBindings, sta
if (setterMethod != null) signatureSerializer.methodSignature(null, setterMethod) else null
)
proto.setExtension(JvmProtoBuf.propertySignature, signature)
if (signature != null) {
proto.setExtension(JvmProtoBuf.propertySignature, signature)
}
if (descriptor.isJvmFieldPropertyInInterfaceCompanion()) {
proto.setExtension(JvmProtoBuf.flags, JvmFlags.getPropertyFlags(true))
@@ -262,7 +264,7 @@ class JvmSerializerExtension(private val bindings: JvmSerializationBindings, sta
syntheticMethod: JvmProtoBuf.JvmMethodSignature?,
getter: JvmProtoBuf.JvmMethodSignature?,
setter: JvmProtoBuf.JvmMethodSignature?
): JvmProtoBuf.JvmPropertySignature {
): JvmProtoBuf.JvmPropertySignature? {
val signature = JvmProtoBuf.JvmPropertySignature.newBuilder()
if (fieldDesc != null) {
@@ -281,7 +283,7 @@ class JvmSerializerExtension(private val bindings: JvmSerializationBindings, sta
signature.setter = setter
}
return signature.build()
return signature.build().takeIf { it.serializedSize > 0 }
}
fun fieldSignature(
-21
View File
@@ -5,83 +5,63 @@ public final annotation class A : kotlin/Annotation {
// signature: <init>(ZCBSIFJD[Z[C[B[S[I[F[J[DLjava/lang/String;Lkotlin/annotation/AnnotationTarget;Lkotlin/reflect/KClass;LB;)V
public /* primary */ constructor(z: kotlin/Boolean, c: kotlin/Char, b: kotlin/Byte, s: kotlin/Short, i: kotlin/Int, f: kotlin/Float, j: kotlin/Long, d: kotlin/Double, za: kotlin/BooleanArray, ca: kotlin/CharArray, ba: kotlin/ByteArray, sa: kotlin/ShortArray, ia: kotlin/IntArray, fa: kotlin/FloatArray, ja: kotlin/LongArray, da: kotlin/DoubleArray, str: kotlin/String, enum: kotlin/annotation/AnnotationTarget, klass: kotlin/reflect/KClass<*>, anno: B)
// field: anno:LB;
public final val anno: B
public final get
// field: b:B
public final val b: kotlin/Byte
public final get
// field: ba:[B
public final val ba: kotlin/ByteArray
public final get
// field: c:C
public final val c: kotlin/Char
public final get
// field: ca:[C
public final val ca: kotlin/CharArray
public final get
// field: d:D
public final val d: kotlin/Double
public final get
// field: da:[D
public final val da: kotlin/DoubleArray
public final get
// field: enum:Lkotlin/annotation/AnnotationTarget;
public final val enum: kotlin/annotation/AnnotationTarget
public final get
// field: f:F
public final val f: kotlin/Float
public final get
// field: fa:[F
public final val fa: kotlin/FloatArray
public final get
// field: i:I
public final val i: kotlin/Int
public final get
// field: ia:[I
public final val ia: kotlin/IntArray
public final get
// field: j:J
public final val j: kotlin/Long
public final get
// field: ja:[J
public final val ja: kotlin/LongArray
public final get
// field: klass:Lkotlin/reflect/KClass;
public final val klass: kotlin/reflect/KClass<*>
public final get
// field: s:S
public final val s: kotlin/Short
public final get
// field: sa:[S
public final val sa: kotlin/ShortArray
public final get
// field: str:Ljava/lang/String;
public final val str: kotlin/String
public final get
// field: z:Z
public final val z: kotlin/Boolean
public final get
// field: za:[Z
public final val za: kotlin/BooleanArray
public final get
}
@@ -92,7 +72,6 @@ public final annotation class B : kotlin/Annotation {
// signature: <init>(Ljava/lang/String;)V
public /* primary */ constructor(value: kotlin/String)
// field: value:Ljava/lang/String;
public final val value: kotlin/String
public final get
}
@@ -9,17 +9,14 @@ public final class Class : kotlin/Any {
public final fun f(): kotlin/Unit
// local delegated property #0
// field: local4:Lkotlin/Array;
// local final /* delegated */ val local4: kotlin/Array<kotlin/String>
// local final get
// local delegated property #1
// field: local5:Ljava/util/List;
// local final /* delegated */ val local5: kotlin/collections/List<kotlin/Unit>?
// local final get
// local delegated property #2
// field: local6:I
// local final /* delegated */ val local6: kotlin/Int
// local final get
}
@@ -65,17 +62,14 @@ package {
public final /* non-default */ get
// local delegated property #0
// field: local1:D
// local final /* delegated */ val local1: kotlin/Double
// local final get
// local delegated property #1
// field: local2:Ljava/lang/Object;
// local final /* delegated */ val local2: kotlin/Any
// local final get
// local delegated property #2
// field: local3:Ljava/lang/CharSequence;
// local final /* delegated */ val local3: kotlin/CharSequence?
// local final get
}