Refactor: make JvmMemberSignature a sealed class
Use JvmMemberSignature.asString instead of toString
This commit is contained in:
@@ -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)
|
||||
}
|
||||
+3
-3
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user