Refactor: make JvmMemberSignature a sealed class
Use JvmMemberSignature.asString instead of toString
This commit is contained in:
@@ -40,9 +40,9 @@ data class MemberSignature private constructor(internal val signature: String) {
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun fromJvmMemberSignature(signature: JvmMemberSignature): MemberSignature = when {
|
||||
signature.isField -> fromFieldNameAndDesc(signature.name, signature.desc)
|
||||
else -> fromMethodNameAndDesc(signature.name, signature.desc)
|
||||
fun fromJvmMemberSignature(signature: JvmMemberSignature): MemberSignature = when (signature) {
|
||||
is JvmMemberSignature.Method -> fromMethodNameAndDesc(signature.name, signature.desc)
|
||||
is JvmMemberSignature.Field -> fromFieldNameAndDesc(signature.name, signature.desc)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
|
||||
+18
-10
@@ -5,17 +5,25 @@
|
||||
|
||||
package org.jetbrains.kotlin.metadata.jvm.deserialization
|
||||
|
||||
data class JvmMemberSignature(val name: String, val desc: String) {
|
||||
/**
|
||||
* A signature of JVM method or field
|
||||
*
|
||||
* @property name name of method or field
|
||||
* @property desc JVM descriptor of a method, e.g. `(Ljava/lang/Object;)Z`, or a field type, e.g. `Ljava/lang/String;`
|
||||
*/
|
||||
sealed class JvmMemberSignature {
|
||||
|
||||
/**
|
||||
* Returns `true` when this signature represents a field.
|
||||
*/
|
||||
val isField: Boolean = desc.indexOf(")") < 0
|
||||
abstract val name: String
|
||||
abstract val desc: String
|
||||
|
||||
/**
|
||||
* Returns `true` when this signature represents a method.
|
||||
*/
|
||||
val isMethod: Boolean get() = !isField
|
||||
data class Method(override val name: String, override val desc: String) : JvmMemberSignature() {
|
||||
override fun asString() = name + desc
|
||||
}
|
||||
|
||||
override fun toString() = if (isField) name + ":" + desc else name + desc
|
||||
data class Field(override val name: String, override val desc: String) : JvmMemberSignature() {
|
||||
override fun asString() = name + ":" + desc
|
||||
}
|
||||
|
||||
final override fun toString() = asString()
|
||||
abstract fun asString(): String
|
||||
}
|
||||
+6
-6
@@ -64,7 +64,7 @@ object JvmProtoBufUtil {
|
||||
proto: ProtoBuf.Function,
|
||||
nameResolver: NameResolver,
|
||||
typeTable: TypeTable
|
||||
): JvmMemberSignature? {
|
||||
): JvmMemberSignature.Method? {
|
||||
val signature = proto.getExtensionOrNull(JvmProtoBuf.methodSignature)
|
||||
val name = if (signature != null && signature.hasName()) signature.name else proto.name
|
||||
val desc = if (signature != null && signature.hasDesc()) {
|
||||
@@ -78,14 +78,14 @@ object JvmProtoBufUtil {
|
||||
|
||||
parametersDesc.joinToString(separator = "", prefix = "(", postfix = ")") + returnTypeDesc
|
||||
}
|
||||
return JvmMemberSignature(nameResolver.getString(name), desc)
|
||||
return JvmMemberSignature.Method(nameResolver.getString(name), desc)
|
||||
}
|
||||
|
||||
fun getJvmConstructorSignature(
|
||||
proto: ProtoBuf.Constructor,
|
||||
nameResolver: NameResolver,
|
||||
typeTable: TypeTable
|
||||
): JvmMemberSignature? {
|
||||
): JvmMemberSignature.Method? {
|
||||
val signature = proto.getExtensionOrNull(JvmProtoBuf.constructorSignature)
|
||||
val desc = if (signature != null && signature.hasDesc()) {
|
||||
nameResolver.getString(signature.desc)
|
||||
@@ -95,14 +95,14 @@ object JvmProtoBufUtil {
|
||||
mapTypeDefault(it.type(typeTable), nameResolver) ?: return null
|
||||
}.joinToString(separator = "", prefix = "(", postfix = ")V")
|
||||
}
|
||||
return JvmMemberSignature("<init>", desc)
|
||||
return JvmMemberSignature.Method("<init>", desc)
|
||||
}
|
||||
|
||||
fun getJvmFieldSignature(
|
||||
proto: ProtoBuf.Property,
|
||||
nameResolver: NameResolver,
|
||||
typeTable: TypeTable
|
||||
): JvmMemberSignature? {
|
||||
): JvmMemberSignature.Field? {
|
||||
val signature = proto.getExtensionOrNull(JvmProtoBuf.propertySignature) ?: return null
|
||||
val field =
|
||||
if (signature.hasField()) signature.field else null
|
||||
@@ -112,7 +112,7 @@ object JvmProtoBufUtil {
|
||||
if (field != null && field.hasDesc()) nameResolver.getString(field.desc)
|
||||
else mapTypeDefault(proto.returnType(typeTable), nameResolver) ?: return null
|
||||
|
||||
return JvmMemberSignature(nameResolver.getString(name), desc)
|
||||
return JvmMemberSignature.Field(nameResolver.getString(name), desc)
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -53,13 +53,8 @@ import kotlin.reflect.jvm.internal.structure.*
|
||||
internal sealed class JvmFunctionSignature {
|
||||
abstract fun asString(): String
|
||||
|
||||
class KotlinFunction(val signature: JvmMemberSignature) : JvmFunctionSignature() {
|
||||
private val _signature = signature.toString()
|
||||
|
||||
init {
|
||||
require(signature.isMethod)
|
||||
}
|
||||
|
||||
class KotlinFunction(val signature: JvmMemberSignature.Method) : JvmFunctionSignature() {
|
||||
private val _signature = signature.asString()
|
||||
|
||||
val methodName: String get() = signature.name
|
||||
val methodDesc: String get() = signature.desc
|
||||
@@ -67,12 +62,8 @@ internal sealed class JvmFunctionSignature {
|
||||
override fun asString(): String = _signature
|
||||
}
|
||||
|
||||
class KotlinConstructor(val signature: JvmMemberSignature) : JvmFunctionSignature() {
|
||||
private val _signature = signature.toString()
|
||||
|
||||
init {
|
||||
require(signature.isMethod)
|
||||
}
|
||||
class KotlinConstructor(val signature: JvmMemberSignature.Method) : JvmFunctionSignature() {
|
||||
private val _signature = signature.asString()
|
||||
|
||||
val constructorDesc: String get() = signature.desc
|
||||
|
||||
|
||||
Reference in New Issue
Block a user