Refactor: make JvmMemberSignature a sealed class

Use JvmMemberSignature.asString instead of toString
This commit is contained in:
Ilya Gorbunov
2018-05-29 06:50:26 +03:00
parent 2f58539200
commit 1a290d0c73
10 changed files with 65 additions and 59 deletions
@@ -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
}
@@ -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)
}