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:
+4
-5
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user