Refactor: make JvmMemberSignature a sealed class
Use JvmMemberSignature.asString instead of toString
This commit is contained in:
+3
-2
@@ -9,6 +9,7 @@ import org.objectweb.asm.*
|
||||
import org.objectweb.asm.tree.*
|
||||
import java.io.InputStream
|
||||
import java.util.jar.JarFile
|
||||
import kotlinx.metadata.jvm.JvmMemberSignature as MemberSignature
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val src = args[0]
|
||||
@@ -43,8 +44,8 @@ fun getBinaryAPI(classStreams: Sequence<InputStream>, visibilityFilter: (String)
|
||||
val supertypes = listOf(superName) - "java/lang/Object" + interfaces.sorted()
|
||||
|
||||
val memberSignatures = (
|
||||
fields.map { with(it) { FieldBinarySignature(name, desc, isPublishedApi(), AccessFlags(access)) } } +
|
||||
methods.map { with(it) { MethodBinarySignature(name, desc, isPublishedApi(), AccessFlags(access)) } }
|
||||
fields.map { with(it) { FieldBinarySignature(MemberSignature.Field(name, desc), isPublishedApi(), AccessFlags(access)) } } +
|
||||
methods.map { with(it) { MethodBinarySignature(MemberSignature.Method(name, desc), isPublishedApi(), AccessFlags(access)) } }
|
||||
).filter {
|
||||
it.isEffectivelyPublic(classAccess, mVisibility)
|
||||
}
|
||||
|
||||
+9
-9
@@ -9,6 +9,7 @@ import kotlinx.metadata.jvm.KotlinClassMetadata
|
||||
import org.objectweb.asm.Opcodes
|
||||
import org.objectweb.asm.tree.*
|
||||
import kotlin.comparisons.*
|
||||
import kotlinx.metadata.jvm.JvmMemberSignature as MemberSignature
|
||||
|
||||
val ACCESS_NAMES = mapOf(
|
||||
Opcodes.ACC_PUBLIC to "public",
|
||||
@@ -38,8 +39,9 @@ data class ClassBinarySignature(
|
||||
|
||||
|
||||
interface MemberBinarySignature {
|
||||
val name: String
|
||||
val desc: String
|
||||
val jvmMember: MemberSignature
|
||||
val name: String get() = jvmMember.name
|
||||
val desc: String get() = jvmMember.desc
|
||||
val access: AccessFlags
|
||||
val isPublishedApi: Boolean
|
||||
|
||||
@@ -48,15 +50,14 @@ interface MemberBinarySignature {
|
||||
&& (findMemberVisibility(classVisibility)?.isPublic(isPublishedApi) ?: true)
|
||||
|
||||
fun findMemberVisibility(classVisibility: ClassVisibility?): MemberVisibility? {
|
||||
return classVisibility?.findMember(MemberSignature(name, desc))
|
||||
return classVisibility?.findMember(jvmMember)
|
||||
}
|
||||
|
||||
val signature: String
|
||||
}
|
||||
|
||||
data class MethodBinarySignature(
|
||||
override val name: String,
|
||||
override val desc: String,
|
||||
override val jvmMember: MemberSignature,
|
||||
override val isPublishedApi: Boolean,
|
||||
override val access: AccessFlags
|
||||
) : MemberBinarySignature {
|
||||
@@ -87,17 +88,16 @@ data class MethodBinarySignature(
|
||||
return when {
|
||||
!access.isSynthetic -> null
|
||||
name == "<init>" && "ILkotlin/jvm/internal/DefaultConstructorMarker;" in desc ->
|
||||
MemberSignature(name, desc.replace("ILkotlin/jvm/internal/DefaultConstructorMarker;", ""))
|
||||
MemberSignature.Method(name, desc.replace("ILkotlin/jvm/internal/DefaultConstructorMarker;", ""))
|
||||
name.endsWith("\$default") && "ILjava/lang/Object;)" in desc ->
|
||||
MemberSignature(name.removeSuffix("\$default"), desc.replace("ILjava/lang/Object;)", ")").replace("(L$className;", "("))
|
||||
MemberSignature.Method(name.removeSuffix("\$default"), desc.replace("ILjava/lang/Object;)", ")").replace("(L$className;", "("))
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data class FieldBinarySignature(
|
||||
override val name: String,
|
||||
override val desc: String,
|
||||
override val jvmMember: MemberSignature,
|
||||
override val isPublishedApi: Boolean,
|
||||
override val access: AccessFlags
|
||||
) : MemberBinarySignature {
|
||||
|
||||
Reference in New Issue
Block a user