Introduce JvmMemberSignature to represent name and desc of jvm methods and fields
Return member name and desc in a class in order not to parse that information from concatenated string when required.
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package kotlinx.metadata.jvm
|
||||
|
||||
/**
|
||||
* 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;`
|
||||
*/
|
||||
data class JvmMemberSignature(val name: String, val desc: String) {
|
||||
override fun toString() = name + desc
|
||||
}
|
||||
|
||||
internal fun org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMemberSignature.wrapAsPublic() = JvmMemberSignature(name, desc)
|
||||
+17
-22
@@ -30,7 +30,7 @@ internal class JvmMetadataExtensions : MetadataExtensions {
|
||||
|
||||
override fun readFunctionExtensions(v: KmFunctionVisitor, proto: ProtoBuf.Function, strings: NameResolver, types: TypeTable) {
|
||||
val ext = v.visitExtensions(JvmFunctionExtensionVisitor.TYPE) as? JvmFunctionExtensionVisitor ?: return
|
||||
ext.visit(JvmProtoBufUtil.getJvmMethodSignature(proto, strings, types))
|
||||
ext.visit(JvmProtoBufUtil.getJvmMethodSignature(proto, strings, types)?.wrapAsPublic())
|
||||
|
||||
val lambdaClassOriginName = proto.getExtensionOrNull(JvmProtoBuf.lambdaClassOriginName)
|
||||
if (lambdaClassOriginName != null) {
|
||||
@@ -47,22 +47,21 @@ internal class JvmMetadataExtensions : MetadataExtensions {
|
||||
val setterSignature =
|
||||
if (propertySignature != null && propertySignature.hasSetter()) propertySignature.setter else null
|
||||
ext.visit(
|
||||
fieldSignature?.name,
|
||||
fieldSignature?.desc,
|
||||
getterSignature?.run { strings.getString(name) + strings.getString(desc) },
|
||||
setterSignature?.run { strings.getString(name) + strings.getString(desc) }
|
||||
fieldSignature?.wrapAsPublic(),
|
||||
getterSignature?.run { JvmMemberSignature(strings.getString(name), strings.getString(desc)) },
|
||||
setterSignature?.run { JvmMemberSignature(strings.getString(name), strings.getString(desc)) }
|
||||
)
|
||||
|
||||
val syntheticMethod =
|
||||
if (propertySignature != null && propertySignature.hasSyntheticMethod()) propertySignature.syntheticMethod else null
|
||||
ext.visitSyntheticMethodForAnnotations(syntheticMethod?.run { strings.getString(name) + strings.getString(desc) })
|
||||
ext.visitSyntheticMethodForAnnotations(syntheticMethod?.run { JvmMemberSignature(strings.getString(name), strings.getString(desc)) })
|
||||
|
||||
ext.visitEnd()
|
||||
}
|
||||
|
||||
override fun readConstructorExtensions(v: KmConstructorVisitor, proto: ProtoBuf.Constructor, strings: NameResolver, types: TypeTable) {
|
||||
val ext = v.visitExtensions(JvmConstructorExtensionVisitor.TYPE) as? JvmConstructorExtensionVisitor ?: return
|
||||
ext.visit(JvmProtoBufUtil.getJvmConstructorSignature(proto, strings, types))
|
||||
ext.visit(JvmProtoBufUtil.getJvmConstructorSignature(proto, strings, types)?.wrapAsPublic())
|
||||
}
|
||||
|
||||
override fun readTypeParameterExtensions(v: KmTypeParameterVisitor, proto: ProtoBuf.TypeParameter, strings: NameResolver) {
|
||||
@@ -98,7 +97,7 @@ internal class JvmMetadataExtensions : MetadataExtensions {
|
||||
): KmFunctionExtensionVisitor? {
|
||||
if (type != JvmFunctionExtensionVisitor.TYPE) return null
|
||||
return object : JvmFunctionExtensionVisitor() {
|
||||
override fun visit(desc: String?) {
|
||||
override fun visit(desc: JvmMemberSignature?) {
|
||||
if (desc != null) {
|
||||
proto.setExtension(JvmProtoBuf.methodSignature, desc.toJvmMethodSignature(strings))
|
||||
}
|
||||
@@ -117,21 +116,17 @@ internal class JvmMetadataExtensions : MetadataExtensions {
|
||||
return object : JvmPropertyExtensionVisitor() {
|
||||
var signature: JvmProtoBuf.JvmPropertySignature.Builder? = null
|
||||
|
||||
override fun visit(fieldName: String?, fieldTypeDesc: String?, getterDesc: String?, setterDesc: String?) {
|
||||
if (fieldName == null && fieldTypeDesc == null && getterDesc == null && setterDesc == null) return
|
||||
override fun visit(fieldDesc: JvmMemberSignature?, getterDesc: JvmMemberSignature?, setterDesc: JvmMemberSignature?) {
|
||||
if (fieldDesc == null && getterDesc == null && setterDesc == null) return
|
||||
|
||||
if (signature == null) {
|
||||
signature = JvmProtoBuf.JvmPropertySignature.newBuilder()
|
||||
}
|
||||
signature!!.apply {
|
||||
if (fieldName != null || fieldTypeDesc != null) {
|
||||
if (fieldDesc != null) {
|
||||
field = JvmProtoBuf.JvmFieldSignature.newBuilder().also { field ->
|
||||
if (fieldName != null) {
|
||||
field.name = strings.getStringIndex(fieldName)
|
||||
}
|
||||
if (fieldTypeDesc != null) {
|
||||
field.desc = strings.getStringIndex(fieldTypeDesc)
|
||||
}
|
||||
field.name = strings.getStringIndex(fieldDesc.name)
|
||||
field.desc = strings.getStringIndex(fieldDesc.desc)
|
||||
}.build()
|
||||
}
|
||||
if (getterDesc != null) {
|
||||
@@ -143,7 +138,7 @@ internal class JvmMetadataExtensions : MetadataExtensions {
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitSyntheticMethodForAnnotations(desc: String?) {
|
||||
override fun visitSyntheticMethodForAnnotations(desc: JvmMemberSignature?) {
|
||||
if (desc == null) return
|
||||
|
||||
if (signature == null) {
|
||||
@@ -166,7 +161,7 @@ internal class JvmMetadataExtensions : MetadataExtensions {
|
||||
): KmConstructorExtensionVisitor? {
|
||||
if (type != JvmConstructorExtensionVisitor.TYPE) return null
|
||||
return object : JvmConstructorExtensionVisitor() {
|
||||
override fun visit(desc: String?) {
|
||||
override fun visit(desc: JvmMemberSignature?) {
|
||||
if (desc != null) {
|
||||
proto.setExtension(JvmProtoBuf.constructorSignature, desc.toJvmMethodSignature(strings))
|
||||
}
|
||||
@@ -200,9 +195,9 @@ internal class JvmMetadataExtensions : MetadataExtensions {
|
||||
}
|
||||
}
|
||||
|
||||
private fun String.toJvmMethodSignature(strings: StringTable): JvmProtoBuf.JvmMethodSignature =
|
||||
private fun JvmMemberSignature.toJvmMethodSignature(strings: StringTable): JvmProtoBuf.JvmMethodSignature =
|
||||
JvmProtoBuf.JvmMethodSignature.newBuilder().apply {
|
||||
name = strings.getStringIndex(substringBefore('('))
|
||||
desc = strings.getStringIndex("(" + substringAfter('('))
|
||||
name = strings.getStringIndex(this@toJvmMethodSignature.name)
|
||||
desc = strings.getStringIndex(this@toJvmMethodSignature.desc)
|
||||
}.build()
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ open class JvmFunctionExtensionVisitor @JvmOverloads constructor(
|
||||
*
|
||||
* @param desc the signature of the function
|
||||
*/
|
||||
open fun visit(desc: String?) {
|
||||
open fun visit(desc: JvmMemberSignature?) {
|
||||
delegate?.visit(desc)
|
||||
}
|
||||
|
||||
@@ -84,8 +84,8 @@ open class JvmPropertyExtensionVisitor @JvmOverloads constructor(
|
||||
* @param setterDesc the signature of the property setter in the JVM-based format: `"setX(Ljava/lang/Object;)V"`,
|
||||
* or `null` if this property has no setter or its signature is unknown
|
||||
*/
|
||||
open fun visit(fieldName: String?, fieldTypeDesc: String?, getterDesc: String?, setterDesc: String?) {
|
||||
delegate?.visit(fieldName, fieldTypeDesc, getterDesc, setterDesc)
|
||||
open fun visit(fieldDesc: JvmMemberSignature?, getterDesc: JvmMemberSignature?, setterDesc: JvmMemberSignature?) {
|
||||
delegate?.visit(fieldDesc, getterDesc, setterDesc)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -94,7 +94,7 @@ open class JvmPropertyExtensionVisitor @JvmOverloads constructor(
|
||||
*
|
||||
* @param desc the signature of the synthetic method
|
||||
*/
|
||||
open fun visitSyntheticMethodForAnnotations(desc: String?) {
|
||||
open fun visitSyntheticMethodForAnnotations(desc: JvmMemberSignature?) {
|
||||
delegate?.visitSyntheticMethodForAnnotations(desc)
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ open class JvmConstructorExtensionVisitor @JvmOverloads constructor(
|
||||
*
|
||||
* @param desc the signature of the constructor
|
||||
*/
|
||||
open fun visit(desc: String?) {
|
||||
open fun visit(desc: JvmMemberSignature?) {
|
||||
delegate?.visit(desc)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user