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
@@ -4,6 +4,7 @@
*/
package kotlinx.metadata.jvm
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMemberSignature as JvmMemberSignatureImpl
/**
* A signature of JVM method or field
@@ -11,19 +12,24 @@ package kotlinx.metadata.jvm
* @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;`
*/
data class JvmMemberSignature(val name: String, val desc: String) {
sealed class JvmMemberSignature {
/**
* Returns `true` when this signature represents a field.
*/
val isField: Boolean get() = desc.indexOf("(") < 0
abstract val name: String
abstract val desc: String
/**
* Returns `true` when this signature represents a method.
*/
val isMethod: Boolean get() = desc.indexOf("(") >= 0
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
}
internal fun org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMemberSignature.wrapAsPublic() = JvmMemberSignature(name, desc)
internal fun JvmMemberSignatureImpl.wrapAsPublic() = when (this) {
is JvmMemberSignatureImpl.Method -> JvmMemberSignature.Method(name, desc)
is JvmMemberSignatureImpl.Field -> JvmMemberSignature.Field(name, desc)
}
@@ -48,13 +48,13 @@ internal class JvmMetadataExtensions : MetadataExtensions {
if (propertySignature != null && propertySignature.hasSetter()) propertySignature.setter else null
ext.visit(
fieldSignature?.wrapAsPublic(),
getterSignature?.run { JvmMemberSignature(strings.getString(name), strings.getString(desc)) },
setterSignature?.run { JvmMemberSignature(strings.getString(name), strings.getString(desc)) }
getterSignature?.run { JvmMemberSignature.Method(strings.getString(name), strings.getString(desc)) },
setterSignature?.run { JvmMemberSignature.Method(strings.getString(name), strings.getString(desc)) }
)
val syntheticMethod =
if (propertySignature != null && propertySignature.hasSyntheticMethod()) propertySignature.syntheticMethod else null
ext.visitSyntheticMethodForAnnotations(syntheticMethod?.run { JvmMemberSignature(strings.getString(name), strings.getString(desc)) })
ext.visitSyntheticMethodForAnnotations(syntheticMethod?.run { JvmMemberSignature.Method(strings.getString(name), strings.getString(desc)) })
ext.visitEnd()
}