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:
+12
-17
@@ -45,17 +45,14 @@ private val VISIBILITY_FLAGS_MAP = mapOf(
|
||||
)
|
||||
|
||||
private fun Flags.toVisibility() = VISIBILITY_FLAGS_MAP.entries.firstOrNull { (modifier) -> modifier(this) }?.value
|
||||
private fun String.toMemberSignature() = indexOf("(").let { i ->
|
||||
if (i < 0) MemberSignature("", this) else MemberSignature(substring(0, i), substring(i))
|
||||
}
|
||||
|
||||
private fun visitFunction(flags: Flags, name: String, addMember: (MemberVisibility) -> Unit) =
|
||||
object : KmFunctionVisitor() {
|
||||
var jvmDesc: String? = null
|
||||
var jvmDesc: JvmMemberSignature? = null
|
||||
override fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor? {
|
||||
if (type != JvmFunctionExtensionVisitor.TYPE) return null
|
||||
return object : JvmFunctionExtensionVisitor() {
|
||||
override fun visit(desc: String?) {
|
||||
override fun visit(desc: JvmMemberSignature?) {
|
||||
jvmDesc = desc
|
||||
}
|
||||
}
|
||||
@@ -63,25 +60,25 @@ private fun visitFunction(flags: Flags, name: String, addMember: (MemberVisibili
|
||||
|
||||
override fun visitEnd() {
|
||||
jvmDesc?.let { jvmDesc ->
|
||||
addMember(MemberVisibility(jvmDesc.toMemberSignature(), flags))
|
||||
addMember(MemberVisibility(jvmDesc, flags))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun visitConstructor(flags: Flags, addMember: (MemberVisibility) -> Unit) =
|
||||
object : KmConstructorVisitor() {
|
||||
var jvmDesc: String? = null
|
||||
var jvmDesc: JvmMemberSignature? = null
|
||||
override fun visitExtensions(type: KmExtensionType): KmConstructorExtensionVisitor? {
|
||||
if (type != JvmConstructorExtensionVisitor.TYPE) return null
|
||||
return object : JvmConstructorExtensionVisitor() {
|
||||
override fun visit(desc: String?) {
|
||||
override fun visit(desc: JvmMemberSignature?) {
|
||||
jvmDesc = desc
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitEnd() {
|
||||
jvmDesc?.toMemberSignature()?.let { signature ->
|
||||
jvmDesc?.let { signature ->
|
||||
addMember(MemberVisibility(signature, flags))
|
||||
}
|
||||
}
|
||||
@@ -89,19 +86,17 @@ private fun visitConstructor(flags: Flags, addMember: (MemberVisibility) -> Unit
|
||||
|
||||
private fun visitProperty(flags: Flags, name: String, getterFlags: Flags, setterFlags: Flags, addMember: (MemberVisibility) -> Unit) =
|
||||
object : KmPropertyVisitor() {
|
||||
var fieldDesc: MemberSignature? = null
|
||||
var _fieldDesc: MemberSignature? = null
|
||||
var _getterDesc: MemberSignature? = null
|
||||
var _setterDesc: MemberSignature? = null
|
||||
|
||||
override fun visitExtensions(type: KmExtensionType): KmPropertyExtensionVisitor? {
|
||||
if (type != JvmPropertyExtensionVisitor.TYPE) return null
|
||||
return object : JvmPropertyExtensionVisitor() {
|
||||
override fun visit(fieldName: String?, fieldTypeDesc: String?, getterDesc: String?, setterDesc: String?) {
|
||||
if (fieldName != null && fieldTypeDesc != null)
|
||||
fieldDesc = MemberSignature(fieldName, fieldTypeDesc)
|
||||
|
||||
_getterDesc = getterDesc?.toMemberSignature()
|
||||
_setterDesc = setterDesc?.toMemberSignature()
|
||||
override fun visit(fieldDesc: JvmMemberSignature?, getterDesc: JvmMemberSignature?, setterDesc: JvmMemberSignature?) {
|
||||
_fieldDesc = fieldDesc
|
||||
_getterDesc = getterDesc
|
||||
_setterDesc = setterDesc
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -109,7 +104,7 @@ private fun visitProperty(flags: Flags, name: String, getterFlags: Flags, setter
|
||||
override fun visitEnd() {
|
||||
_getterDesc?.let { addMember(MemberVisibility(it, getterFlags)) }
|
||||
_setterDesc?.let { addMember(MemberVisibility(it, setterFlags)) }
|
||||
fieldDesc?.let {
|
||||
_fieldDesc?.let {
|
||||
val fieldVisibility = when {
|
||||
Flag.Property.IS_LATEINIT(flags) -> setterFlags
|
||||
_getterDesc == null && _setterDesc == null -> flags // JvmField or const case
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ fun ClassVisibility.findMember(signature: MemberSignature): MemberVisibility? =
|
||||
|
||||
|
||||
data class MemberVisibility(val member: MemberSignature, val visibility: Flags?)
|
||||
data class MemberSignature(val name: String, val desc: String)
|
||||
typealias MemberSignature = kotlinx.metadata.jvm.JvmMemberSignature
|
||||
|
||||
private fun isPublic(visibility: Flags?, isPublishedApi: Boolean) =
|
||||
visibility == null
|
||||
|
||||
@@ -19,7 +19,7 @@ private fun visitFunction(settings: KotlinpSettings, sb: StringBuilder, flags: F
|
||||
var receiverParameterType: String? = null
|
||||
var returnType: String? = null
|
||||
var versionRequirement: String? = null
|
||||
var jvmDesc: String? = null
|
||||
var jvmDesc: JvmMemberSignature? = null
|
||||
var lambdaClassOriginName: String? = null
|
||||
|
||||
override fun visitReceiverParameterType(flags: Flags): KmTypeVisitor? =
|
||||
@@ -42,7 +42,7 @@ private fun visitFunction(settings: KotlinpSettings, sb: StringBuilder, flags: F
|
||||
override fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor? {
|
||||
if (type != JvmFunctionExtensionVisitor.TYPE) return null
|
||||
return object : JvmFunctionExtensionVisitor() {
|
||||
override fun visit(desc: String?) {
|
||||
override fun visit(desc: JvmMemberSignature?) {
|
||||
jvmDesc = desc
|
||||
}
|
||||
|
||||
@@ -91,11 +91,10 @@ private fun visitProperty(
|
||||
var returnType: String? = null
|
||||
var setterParameter: String? = null
|
||||
var versionRequirement: String? = null
|
||||
var jvmFieldName: String? = null
|
||||
var jvmFieldTypeDesc: String? = null
|
||||
var jvmGetterDesc: String? = null
|
||||
var jvmSetterDesc: String? = null
|
||||
var jvmSyntheticMethodForAnnotationsDesc: String? = null
|
||||
var jvmFieldDesc: JvmMemberSignature? = null
|
||||
var jvmGetterDesc: JvmMemberSignature? = null
|
||||
var jvmSetterDesc: JvmMemberSignature? = null
|
||||
var jvmSyntheticMethodForAnnotationsDesc: JvmMemberSignature? = null
|
||||
|
||||
override fun visitReceiverParameterType(flags: Flags): KmTypeVisitor? =
|
||||
printType(flags) { receiverParameterType = it }
|
||||
@@ -115,14 +114,13 @@ private fun visitProperty(
|
||||
override fun visitExtensions(type: KmExtensionType): KmPropertyExtensionVisitor? {
|
||||
if (type != JvmPropertyExtensionVisitor.TYPE) return null
|
||||
return object : JvmPropertyExtensionVisitor() {
|
||||
override fun visit(fieldName: String?, fieldTypeDesc: String?, getterDesc: String?, setterDesc: String?) {
|
||||
jvmFieldName = fieldName
|
||||
jvmFieldTypeDesc = fieldTypeDesc
|
||||
override fun visit(fieldDesc: JvmMemberSignature?, getterDesc: JvmMemberSignature?, setterDesc: JvmMemberSignature?) {
|
||||
jvmFieldDesc = fieldDesc
|
||||
jvmGetterDesc = getterDesc
|
||||
jvmSetterDesc = setterDesc
|
||||
}
|
||||
|
||||
override fun visitSyntheticMethodForAnnotations(desc: String?) {
|
||||
override fun visitSyntheticMethodForAnnotations(desc: JvmMemberSignature?) {
|
||||
jvmSyntheticMethodForAnnotationsDesc = desc
|
||||
}
|
||||
}
|
||||
@@ -133,11 +131,10 @@ private fun visitProperty(
|
||||
if (versionRequirement != null) {
|
||||
sb.appendln(" // $versionRequirement")
|
||||
}
|
||||
if (jvmFieldName != null || jvmFieldTypeDesc != null) {
|
||||
sb.append(" // field: ${jvmFieldName ?: "<null>"}")
|
||||
if (jvmFieldTypeDesc != null) {
|
||||
sb.append(":$jvmFieldTypeDesc")
|
||||
}
|
||||
if (jvmFieldDesc != null) {
|
||||
// TODO: support that case in jvmFieldDesc.toString()
|
||||
sb.append(" // field: ${jvmFieldDesc!!.name}")
|
||||
sb.append(":").append(jvmFieldDesc!!.desc)
|
||||
sb.appendln()
|
||||
}
|
||||
if (jvmGetterDesc != null) {
|
||||
@@ -188,7 +185,7 @@ private fun visitConstructor(sb: StringBuilder, flags: Flags): KmConstructorVisi
|
||||
object : KmConstructorVisitor() {
|
||||
val params = mutableListOf<String>()
|
||||
var versionRequirement: String? = null
|
||||
var jvmDesc: String? = null
|
||||
var jvmDesc: JvmMemberSignature? = null
|
||||
|
||||
override fun visitValueParameter(flags: Flags, name: String): KmValueParameterVisitor? =
|
||||
printValueParameter(flags, name) { params.add(it) }
|
||||
@@ -199,7 +196,7 @@ private fun visitConstructor(sb: StringBuilder, flags: Flags): KmConstructorVisi
|
||||
override fun visitExtensions(type: KmExtensionType): KmConstructorExtensionVisitor? {
|
||||
if (type != JvmConstructorExtensionVisitor.TYPE) return null
|
||||
return object : JvmConstructorExtensionVisitor() {
|
||||
override fun visit(desc: String?) {
|
||||
override fun visit(desc: JvmMemberSignature?) {
|
||||
jvmDesc = desc
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user