Refactor: allow to distinguish whether JvmMemberSignature is for field or for method
Introduce a method to create org.jetbrains.kotlin.load.kotlin.MemberSignature directly from JvmMemberSignature. Create JvmFunctionSignature from JvmMemberSignature.
This commit is contained in:
+4
-4
@@ -316,8 +316,8 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader<A : Any, C : Any,
|
||||
val signature = proto.getExtensionOrNull(propertySignature) ?: return null
|
||||
|
||||
if (field) {
|
||||
val (name, desc) = JvmProtoBufUtil.getJvmFieldSignature(proto, nameResolver, typeTable) ?: return null
|
||||
return MemberSignature.fromFieldNameAndDesc(name, desc)
|
||||
val fieldSignature = JvmProtoBufUtil.getJvmFieldSignature(proto, nameResolver, typeTable) ?: return null
|
||||
return MemberSignature.fromJvmMemberSignature(fieldSignature)
|
||||
}
|
||||
else if (synthetic && signature.hasSyntheticMethod()) {
|
||||
return MemberSignature.fromMethod(nameResolver, signature.syntheticMethod)
|
||||
@@ -334,10 +334,10 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader<A : Any, C : Any,
|
||||
): MemberSignature? {
|
||||
return when {
|
||||
proto is ProtoBuf.Constructor -> {
|
||||
MemberSignature.fromMethodNameAndDesc(JvmProtoBufUtil.getJvmConstructorSignature(proto, nameResolver, typeTable)?.toString() ?: return null)
|
||||
MemberSignature.fromJvmMemberSignature(JvmProtoBufUtil.getJvmConstructorSignature(proto, nameResolver, typeTable) ?: return null)
|
||||
}
|
||||
proto is ProtoBuf.Function -> {
|
||||
MemberSignature.fromMethodNameAndDesc(JvmProtoBufUtil.getJvmMethodSignature(proto, nameResolver, typeTable)?.toString() ?: return null)
|
||||
MemberSignature.fromJvmMemberSignature(JvmProtoBufUtil.getJvmMethodSignature(proto, nameResolver, typeTable) ?: return null)
|
||||
}
|
||||
proto is ProtoBuf.Property -> {
|
||||
val signature = proto.getExtensionOrNull(propertySignature) ?: return null
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.load.kotlin
|
||||
|
||||
import org.jetbrains.kotlin.metadata.deserialization.NameResolver
|
||||
import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMemberSignature
|
||||
|
||||
// The purpose of this class is to hold a unique signature of either a method or a field, so that annotations on a member can be put
|
||||
// into a map indexed by these signatures
|
||||
@@ -34,13 +35,14 @@ data class MemberSignature private constructor(internal val signature: String) {
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun fromMethodNameAndDesc(namePlusDesc: String): MemberSignature {
|
||||
return MemberSignature(namePlusDesc)
|
||||
fun fromFieldNameAndDesc(name: String, desc: String): MemberSignature {
|
||||
return MemberSignature(name + "#" + desc)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun fromFieldNameAndDesc(name: String, desc: String): MemberSignature {
|
||||
return MemberSignature(name + "#" + desc)
|
||||
fun fromJvmMemberSignature(signature: JvmMemberSignature): MemberSignature = when {
|
||||
signature.isField -> fromFieldNameAndDesc(signature.name, signature.desc)
|
||||
else -> fromMethodNameAndDesc(signature.name, signature.desc)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
|
||||
Reference in New Issue
Block a user