Do not return field signature if there's none in the metadata

Otherwise this code behaves incorrectly on getter-only properties: it
returns a meaningless field signature whereas the property has no field.
It's hard to come up with an example of when this could matter in
compiler code, but it's very noticeable in kotlinx-metadata-jvm

 #KT-26188 Fixed
This commit is contained in:
Alexander Udalov
2018-08-10 17:19:08 +02:00
parent 3f32e1cce9
commit 3345dc81fd
5 changed files with 63 additions and 5 deletions
@@ -104,13 +104,12 @@ object JvmProtoBufUtil {
typeTable: TypeTable
): JvmMemberSignature.Field? {
val signature = proto.getExtensionOrNull(JvmProtoBuf.propertySignature) ?: return null
val field =
if (signature.hasField()) signature.field else null
val field = if (signature.hasField()) signature.field else return null
val name = if (field != null && field.hasName()) field.name else proto.name
val name = if (field.hasName()) field.name else proto.name
val desc =
if (field != null && field.hasDesc()) nameResolver.getString(field.desc)
else mapTypeDefault(proto.returnType(typeTable), nameResolver) ?: return null
if (field.hasDesc()) nameResolver.getString(field.desc)
else mapTypeDefault(proto.returnType(typeTable), nameResolver) ?: return null
return JvmMemberSignature.Field(nameResolver.getString(name), desc)
}