Extract subclasses of JvmMemberSignature sealed class to top-level
Use more specific subtypes of sealed class in visitors.
This commit is contained in:
@@ -99,7 +99,7 @@ val header = KotlinClassMetadata.Class.Writer().run {
|
|||||||
visitConstructor(flagsOf(Flag.IS_PUBLIC, Flag.Constructor.IS_PRIMARY))!!.run {
|
visitConstructor(flagsOf(Flag.IS_PUBLIC, Flag.Constructor.IS_PRIMARY))!!.run {
|
||||||
// Visiting JVM signature (for example, to be used by kotlin-reflect)
|
// Visiting JVM signature (for example, to be used by kotlin-reflect)
|
||||||
(visitExtensions(JvmConstructorExtensionVisitor.TYPE) as JvmConstructorExtensionVisitor).run {
|
(visitExtensions(JvmConstructorExtensionVisitor.TYPE) as JvmConstructorExtensionVisitor).run {
|
||||||
visit("<init>()V")
|
visit(JvmMethodSignature("<init>", "()V"))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not forgetting to call visitEnd at the end of visit of the declaration
|
// Not forgetting to call visitEnd at the end of visit of the declaration
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ package kotlinx.metadata.jvm
|
|||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMemberSignature as JvmMemberSignatureImpl
|
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMemberSignature as JvmMemberSignatureImpl
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A signature of JVM method or field
|
* A signature of a JVM method or field.
|
||||||
*
|
*
|
||||||
* @property name name of 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;`
|
* @property desc JVM descriptor of a method, e.g. `(Ljava/lang/Object;)Z`, or a field type, e.g. `Ljava/lang/String;`
|
||||||
@@ -17,19 +17,36 @@ sealed class JvmMemberSignature {
|
|||||||
abstract val name: String
|
abstract val name: String
|
||||||
abstract val desc: String
|
abstract val desc: String
|
||||||
|
|
||||||
data class Method(override val name: String, override val desc: String) : JvmMemberSignature() {
|
/**
|
||||||
override fun asString() = name + desc
|
* Returns a string representation of the signature.
|
||||||
}
|
*
|
||||||
|
* In case of a method it's just [name] and [desc] concatenated together, e.g. `equals(Ljava/lang/Object;)Z`
|
||||||
data class Field(override val name: String, override val desc: String) : JvmMemberSignature() {
|
*
|
||||||
override fun asString() = name + ":" + desc
|
* In case of a field [name] and [desc] are concatenated with `:` separator, e.g. `value:Ljava/lang/String;`
|
||||||
}
|
*/
|
||||||
|
abstract fun asString(): String
|
||||||
|
|
||||||
final override fun toString() = asString()
|
final override fun toString() = asString()
|
||||||
abstract fun asString(): String
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun JvmMemberSignatureImpl.wrapAsPublic() = when (this) {
|
/**
|
||||||
is JvmMemberSignatureImpl.Method -> JvmMemberSignature.Method(name, desc)
|
* A signature of a JVM method.
|
||||||
is JvmMemberSignatureImpl.Field -> JvmMemberSignature.Field(name, desc)
|
*
|
||||||
}
|
* @see JvmMemberSignature
|
||||||
|
*/
|
||||||
|
data class JvmMethodSignature(override val name: String, override val desc: String) : JvmMemberSignature() {
|
||||||
|
override fun asString() = name + desc
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A signature of a JVM field.
|
||||||
|
*
|
||||||
|
* @see JvmMemberSignature
|
||||||
|
*/
|
||||||
|
data class JvmFieldSignature(override val name: String, override val desc: String) : JvmMemberSignature() {
|
||||||
|
override fun asString() = name + ":" + desc
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
internal fun JvmMemberSignatureImpl.Method.wrapAsPublic() = JvmMethodSignature(name, desc)
|
||||||
|
internal fun JvmMemberSignatureImpl.Field.wrapAsPublic() = JvmFieldSignature(name, desc)
|
||||||
+7
-7
@@ -48,13 +48,13 @@ internal class JvmMetadataExtensions : MetadataExtensions {
|
|||||||
if (propertySignature != null && propertySignature.hasSetter()) propertySignature.setter else null
|
if (propertySignature != null && propertySignature.hasSetter()) propertySignature.setter else null
|
||||||
ext.visit(
|
ext.visit(
|
||||||
fieldSignature?.wrapAsPublic(),
|
fieldSignature?.wrapAsPublic(),
|
||||||
getterSignature?.run { JvmMemberSignature.Method(strings.getString(name), strings.getString(desc)) },
|
getterSignature?.run { JvmMethodSignature(strings.getString(name), strings.getString(desc)) },
|
||||||
setterSignature?.run { JvmMemberSignature.Method(strings.getString(name), strings.getString(desc)) }
|
setterSignature?.run { JvmMethodSignature(strings.getString(name), strings.getString(desc)) }
|
||||||
)
|
)
|
||||||
|
|
||||||
val syntheticMethod =
|
val syntheticMethod =
|
||||||
if (propertySignature != null && propertySignature.hasSyntheticMethod()) propertySignature.syntheticMethod else null
|
if (propertySignature != null && propertySignature.hasSyntheticMethod()) propertySignature.syntheticMethod else null
|
||||||
ext.visitSyntheticMethodForAnnotations(syntheticMethod?.run { JvmMemberSignature.Method(strings.getString(name), strings.getString(desc)) })
|
ext.visitSyntheticMethodForAnnotations(syntheticMethod?.run { JvmMethodSignature(strings.getString(name), strings.getString(desc)) })
|
||||||
|
|
||||||
ext.visitEnd()
|
ext.visitEnd()
|
||||||
}
|
}
|
||||||
@@ -97,7 +97,7 @@ internal class JvmMetadataExtensions : MetadataExtensions {
|
|||||||
): KmFunctionExtensionVisitor? {
|
): KmFunctionExtensionVisitor? {
|
||||||
if (type != JvmFunctionExtensionVisitor.TYPE) return null
|
if (type != JvmFunctionExtensionVisitor.TYPE) return null
|
||||||
return object : JvmFunctionExtensionVisitor() {
|
return object : JvmFunctionExtensionVisitor() {
|
||||||
override fun visit(desc: JvmMemberSignature?) {
|
override fun visit(desc: JvmMethodSignature?) {
|
||||||
if (desc != null) {
|
if (desc != null) {
|
||||||
proto.setExtension(JvmProtoBuf.methodSignature, desc.toJvmMethodSignature(strings))
|
proto.setExtension(JvmProtoBuf.methodSignature, desc.toJvmMethodSignature(strings))
|
||||||
}
|
}
|
||||||
@@ -116,7 +116,7 @@ internal class JvmMetadataExtensions : MetadataExtensions {
|
|||||||
return object : JvmPropertyExtensionVisitor() {
|
return object : JvmPropertyExtensionVisitor() {
|
||||||
var signature: JvmProtoBuf.JvmPropertySignature.Builder? = null
|
var signature: JvmProtoBuf.JvmPropertySignature.Builder? = null
|
||||||
|
|
||||||
override fun visit(fieldDesc: JvmMemberSignature?, getterDesc: JvmMemberSignature?, setterDesc: JvmMemberSignature?) {
|
override fun visit(fieldDesc: JvmFieldSignature?, getterDesc: JvmMethodSignature?, setterDesc: JvmMethodSignature?) {
|
||||||
if (fieldDesc == null && getterDesc == null && setterDesc == null) return
|
if (fieldDesc == null && getterDesc == null && setterDesc == null) return
|
||||||
|
|
||||||
if (signature == null) {
|
if (signature == null) {
|
||||||
@@ -138,7 +138,7 @@ internal class JvmMetadataExtensions : MetadataExtensions {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitSyntheticMethodForAnnotations(desc: JvmMemberSignature?) {
|
override fun visitSyntheticMethodForAnnotations(desc: JvmMethodSignature?) {
|
||||||
if (desc == null) return
|
if (desc == null) return
|
||||||
|
|
||||||
if (signature == null) {
|
if (signature == null) {
|
||||||
@@ -161,7 +161,7 @@ internal class JvmMetadataExtensions : MetadataExtensions {
|
|||||||
): KmConstructorExtensionVisitor? {
|
): KmConstructorExtensionVisitor? {
|
||||||
if (type != JvmConstructorExtensionVisitor.TYPE) return null
|
if (type != JvmConstructorExtensionVisitor.TYPE) return null
|
||||||
return object : JvmConstructorExtensionVisitor() {
|
return object : JvmConstructorExtensionVisitor() {
|
||||||
override fun visit(desc: JvmMemberSignature?) {
|
override fun visit(desc: JvmMethodSignature?) {
|
||||||
if (desc != null) {
|
if (desc != null) {
|
||||||
proto.setExtension(JvmProtoBuf.constructorSignature, desc.toJvmMethodSignature(strings))
|
proto.setExtension(JvmProtoBuf.constructorSignature, desc.toJvmMethodSignature(strings))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,12 +40,14 @@ open class JvmFunctionExtensionVisitor @JvmOverloads constructor(
|
|||||||
private val delegate: JvmFunctionExtensionVisitor? = null
|
private val delegate: JvmFunctionExtensionVisitor? = null
|
||||||
) : KmFunctionExtensionVisitor {
|
) : KmFunctionExtensionVisitor {
|
||||||
/**
|
/**
|
||||||
* Visits the JVM signature of the function, in the JVM-based format: `"equals(Ljava/lang/Object;)Z"`,
|
* Visits the JVM signature of the function in the JVM-based format,
|
||||||
* or null if the JVM signature of this function is unknown.
|
* or null if the JVM signature of this function is unknown.
|
||||||
*
|
*
|
||||||
|
* Example: `JvmMethodSignature("equals", "(Ljava/lang/Object;)Z")`
|
||||||
|
*
|
||||||
* @param desc the signature of the function
|
* @param desc the signature of the function
|
||||||
*/
|
*/
|
||||||
open fun visit(desc: JvmMemberSignature?) {
|
open fun visit(desc: JvmMethodSignature?) {
|
||||||
delegate?.visit(desc)
|
delegate?.visit(desc)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,24 +79,29 @@ open class JvmPropertyExtensionVisitor @JvmOverloads constructor(
|
|||||||
/**
|
/**
|
||||||
* Visits JVM signatures of field and accessors generated for the property.
|
* Visits JVM signatures of field and accessors generated for the property.
|
||||||
*
|
*
|
||||||
* @param fieldName the name of the field, or `null` if this property has no field
|
* @param fieldDesc the name and the type of the field in the JVM-based format, or `null` if this property has no field.
|
||||||
* @param fieldTypeDesc the type of the field in the JVM-based format (`"Ljava/lang/Object;"`), or `null` if this property has no field
|
* Example: `JvmFieldSignature("X", "Ljava/lang/Object;")`
|
||||||
* @param getterDesc the signature of the property getter in the JVM-based format: `"getX()Ljava/lang/Object;"`,
|
*
|
||||||
* or `null` if this property has no getter or its signature is unknown
|
* @param getterDesc the signature of the property getter in the JVM-based format,
|
||||||
* @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 getter or its signature is unknown.
|
||||||
|
* Example: `JvmMethodSignature("getX()", "Ljava/lang/Object;")`
|
||||||
|
*
|
||||||
|
* @param setterDesc the signature of the property setter in the JVM-based format,
|
||||||
* or `null` if this property has no setter or its signature is unknown
|
* or `null` if this property has no setter or its signature is unknown
|
||||||
|
* Example: `JvmMethodSignature("setX", "(Ljava/lang/Object;)V")`,
|
||||||
*/
|
*/
|
||||||
open fun visit(fieldDesc: JvmMemberSignature?, getterDesc: JvmMemberSignature?, setterDesc: JvmMemberSignature?) {
|
open fun visit(fieldDesc: JvmFieldSignature?, getterDesc: JvmMethodSignature?, setterDesc: JvmMethodSignature?) {
|
||||||
delegate?.visit(fieldDesc, getterDesc, setterDesc)
|
delegate?.visit(fieldDesc, getterDesc, setterDesc)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Visits the JVM signature of a synthetic method which is generated to store annotations on a property in the bytecode,
|
* Visits the JVM signature of a synthetic method which is generated to store annotations on a property in the bytecode.
|
||||||
* in the JVM-based format: `"getX$annotations()V"`
|
*
|
||||||
|
* Example: `JvmMethodSignature("getX$annotations", "()V")`
|
||||||
*
|
*
|
||||||
* @param desc the signature of the synthetic method
|
* @param desc the signature of the synthetic method
|
||||||
*/
|
*/
|
||||||
open fun visitSyntheticMethodForAnnotations(desc: JvmMemberSignature?) {
|
open fun visitSyntheticMethodForAnnotations(desc: JvmMethodSignature?) {
|
||||||
delegate?.visitSyntheticMethodForAnnotations(desc)
|
delegate?.visitSyntheticMethodForAnnotations(desc)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,12 +130,14 @@ open class JvmConstructorExtensionVisitor @JvmOverloads constructor(
|
|||||||
private val delegate: JvmConstructorExtensionVisitor? = null
|
private val delegate: JvmConstructorExtensionVisitor? = null
|
||||||
) : KmConstructorExtensionVisitor {
|
) : KmConstructorExtensionVisitor {
|
||||||
/**
|
/**
|
||||||
* Visits the JVM signature of the constructor, in the JVM-based format: `"<init>(Ljava/lang/Object;)V"`,
|
* Visits the JVM signature of the constructor in the JVM-based format,
|
||||||
* or null if the JVM signature of this constructor is unknown.
|
* or null if the JVM signature of this constructor is unknown.
|
||||||
*
|
*
|
||||||
|
* Example: `JvmMethodSignature("<init>", "(Ljava/lang/Object;)V")`
|
||||||
|
*
|
||||||
* @param desc the signature of the constructor
|
* @param desc the signature of the constructor
|
||||||
*/
|
*/
|
||||||
open fun visit(desc: JvmMemberSignature?) {
|
open fun visit(desc: JvmMethodSignature?) {
|
||||||
delegate?.visit(desc)
|
delegate?.visit(desc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,10 +6,7 @@
|
|||||||
package kotlinx.metadata.test
|
package kotlinx.metadata.test
|
||||||
|
|
||||||
import kotlinx.metadata.*
|
import kotlinx.metadata.*
|
||||||
import kotlinx.metadata.jvm.JvmConstructorExtensionVisitor
|
import kotlinx.metadata.jvm.*
|
||||||
import kotlinx.metadata.jvm.JvmFunctionExtensionVisitor
|
|
||||||
import kotlinx.metadata.jvm.KotlinClassHeader
|
|
||||||
import kotlinx.metadata.jvm.KotlinClassMetadata
|
|
||||||
import org.jetbrains.org.objectweb.asm.ClassWriter
|
import org.jetbrains.org.objectweb.asm.ClassWriter
|
||||||
import org.jetbrains.org.objectweb.asm.Opcodes
|
import org.jetbrains.org.objectweb.asm.Opcodes
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
@@ -44,9 +41,9 @@ class MetadataSmokeTest {
|
|||||||
if (type != JvmFunctionExtensionVisitor.TYPE) return null
|
if (type != JvmFunctionExtensionVisitor.TYPE) return null
|
||||||
|
|
||||||
return object : JvmFunctionExtensionVisitor() {
|
return object : JvmFunctionExtensionVisitor() {
|
||||||
override fun visit(desc: String?) {
|
override fun visit(desc: JvmMethodSignature?) {
|
||||||
if (Flag.Function.IS_INLINE(flags) && desc != null) {
|
if (Flag.Function.IS_INLINE(flags) && desc != null) {
|
||||||
inlineFunctions += desc
|
inlineFunctions += desc.asString()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -72,7 +69,7 @@ class MetadataSmokeTest {
|
|||||||
visit(flagsOf(Flag.IS_PUBLIC), "Hello")
|
visit(flagsOf(Flag.IS_PUBLIC), "Hello")
|
||||||
visitConstructor(flagsOf(Flag.IS_PUBLIC, Flag.Constructor.IS_PRIMARY))!!.run {
|
visitConstructor(flagsOf(Flag.IS_PUBLIC, Flag.Constructor.IS_PRIMARY))!!.run {
|
||||||
(visitExtensions(JvmConstructorExtensionVisitor.TYPE) as JvmConstructorExtensionVisitor).run {
|
(visitExtensions(JvmConstructorExtensionVisitor.TYPE) as JvmConstructorExtensionVisitor).run {
|
||||||
visit("<init>()V")
|
visit(JvmMethodSignature("<init>", "()V"))
|
||||||
}
|
}
|
||||||
visitEnd()
|
visitEnd()
|
||||||
}
|
}
|
||||||
@@ -82,7 +79,7 @@ class MetadataSmokeTest {
|
|||||||
visitEnd()
|
visitEnd()
|
||||||
}
|
}
|
||||||
(visitExtensions(JvmFunctionExtensionVisitor.TYPE) as JvmFunctionExtensionVisitor).run {
|
(visitExtensions(JvmFunctionExtensionVisitor.TYPE) as JvmFunctionExtensionVisitor).run {
|
||||||
visit("hello()Ljava/lang/String;")
|
visit(JvmMethodSignature("hello", "()Ljava/lang/String;"))
|
||||||
}
|
}
|
||||||
visitEnd()
|
visitEnd()
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-3
@@ -5,11 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.tools
|
package org.jetbrains.kotlin.tools
|
||||||
|
|
||||||
|
import kotlinx.metadata.jvm.JvmFieldSignature
|
||||||
|
import kotlinx.metadata.jvm.JvmMethodSignature
|
||||||
import org.objectweb.asm.*
|
import org.objectweb.asm.*
|
||||||
import org.objectweb.asm.tree.*
|
import org.objectweb.asm.tree.*
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
import java.util.jar.JarFile
|
import java.util.jar.JarFile
|
||||||
import kotlinx.metadata.jvm.JvmMemberSignature as MemberSignature
|
|
||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
val src = args[0]
|
val src = args[0]
|
||||||
@@ -44,8 +45,8 @@ fun getBinaryAPI(classStreams: Sequence<InputStream>, visibilityFilter: (String)
|
|||||||
val supertypes = listOf(superName) - "java/lang/Object" + interfaces.sorted()
|
val supertypes = listOf(superName) - "java/lang/Object" + interfaces.sorted()
|
||||||
|
|
||||||
val memberSignatures = (
|
val memberSignatures = (
|
||||||
fields.map { with(it) { FieldBinarySignature(MemberSignature.Field(name, desc), isPublishedApi(), AccessFlags(access)) } } +
|
fields.map { with(it) { FieldBinarySignature(JvmFieldSignature(name, desc), isPublishedApi(), AccessFlags(access)) } } +
|
||||||
methods.map { with(it) { MethodBinarySignature(MemberSignature.Method(name, desc), isPublishedApi(), AccessFlags(access)) } }
|
methods.map { with(it) { MethodBinarySignature(JvmMethodSignature(name, desc), isPublishedApi(), AccessFlags(access)) } }
|
||||||
).filter {
|
).filter {
|
||||||
it.isEffectivelyPublic(classAccess, mVisibility)
|
it.isEffectivelyPublic(classAccess, mVisibility)
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-8
@@ -5,11 +5,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.tools
|
package org.jetbrains.kotlin.tools
|
||||||
|
|
||||||
import kotlinx.metadata.jvm.KotlinClassMetadata
|
import kotlinx.metadata.jvm.*
|
||||||
import org.objectweb.asm.Opcodes
|
import org.objectweb.asm.Opcodes
|
||||||
import org.objectweb.asm.tree.*
|
import org.objectweb.asm.tree.*
|
||||||
import kotlin.comparisons.*
|
import kotlin.comparisons.*
|
||||||
import kotlinx.metadata.jvm.JvmMemberSignature as MemberSignature
|
|
||||||
|
|
||||||
val ACCESS_NAMES = mapOf(
|
val ACCESS_NAMES = mapOf(
|
||||||
Opcodes.ACC_PUBLIC to "public",
|
Opcodes.ACC_PUBLIC to "public",
|
||||||
@@ -39,7 +38,7 @@ data class ClassBinarySignature(
|
|||||||
|
|
||||||
|
|
||||||
interface MemberBinarySignature {
|
interface MemberBinarySignature {
|
||||||
val jvmMember: MemberSignature
|
val jvmMember: JvmMemberSignature
|
||||||
val name: String get() = jvmMember.name
|
val name: String get() = jvmMember.name
|
||||||
val desc: String get() = jvmMember.desc
|
val desc: String get() = jvmMember.desc
|
||||||
val access: AccessFlags
|
val access: AccessFlags
|
||||||
@@ -57,7 +56,7 @@ interface MemberBinarySignature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data class MethodBinarySignature(
|
data class MethodBinarySignature(
|
||||||
override val jvmMember: MemberSignature,
|
override val jvmMember: JvmMethodSignature,
|
||||||
override val isPublishedApi: Boolean,
|
override val isPublishedApi: Boolean,
|
||||||
override val access: AccessFlags
|
override val access: AccessFlags
|
||||||
) : MemberBinarySignature {
|
) : MemberBinarySignature {
|
||||||
@@ -84,20 +83,23 @@ data class MethodBinarySignature(
|
|||||||
* or a constructor with default parameters.
|
* or a constructor with default parameters.
|
||||||
* Returns an incorrect result, if there are more than 31 default parameters.
|
* Returns an incorrect result, if there are more than 31 default parameters.
|
||||||
*/
|
*/
|
||||||
private fun alternateDefaultSignature(className: String): MemberSignature? {
|
private fun alternateDefaultSignature(className: String): JvmMethodSignature? {
|
||||||
return when {
|
return when {
|
||||||
!access.isSynthetic -> null
|
!access.isSynthetic -> null
|
||||||
name == "<init>" && "ILkotlin/jvm/internal/DefaultConstructorMarker;" in desc ->
|
name == "<init>" && "ILkotlin/jvm/internal/DefaultConstructorMarker;" in desc ->
|
||||||
MemberSignature.Method(name, desc.replace("ILkotlin/jvm/internal/DefaultConstructorMarker;", ""))
|
JvmMethodSignature(name, desc.replace("ILkotlin/jvm/internal/DefaultConstructorMarker;", ""))
|
||||||
name.endsWith("\$default") && "ILjava/lang/Object;)" in desc ->
|
name.endsWith("\$default") && "ILjava/lang/Object;)" in desc ->
|
||||||
MemberSignature.Method(name.removeSuffix("\$default"), desc.replace("ILjava/lang/Object;)", ")").replace("(L$className;", "("))
|
JvmMethodSignature(
|
||||||
|
name.removeSuffix("\$default"),
|
||||||
|
desc.replace("ILjava/lang/Object;)", ")").replace("(L$className;", "(")
|
||||||
|
)
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data class FieldBinarySignature(
|
data class FieldBinarySignature(
|
||||||
override val jvmMember: MemberSignature,
|
override val jvmMember: JvmFieldSignature,
|
||||||
override val isPublishedApi: Boolean,
|
override val isPublishedApi: Boolean,
|
||||||
override val access: AccessFlags
|
override val access: AccessFlags
|
||||||
) : MemberBinarySignature {
|
) : MemberBinarySignature {
|
||||||
|
|||||||
+6
-6
@@ -52,7 +52,7 @@ private fun visitFunction(flags: Flags, name: String, addMember: (MemberVisibili
|
|||||||
override fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor? {
|
override fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor? {
|
||||||
if (type != JvmFunctionExtensionVisitor.TYPE) return null
|
if (type != JvmFunctionExtensionVisitor.TYPE) return null
|
||||||
return object : JvmFunctionExtensionVisitor() {
|
return object : JvmFunctionExtensionVisitor() {
|
||||||
override fun visit(desc: JvmMemberSignature?) {
|
override fun visit(desc: JvmMethodSignature?) {
|
||||||
jvmDesc = desc
|
jvmDesc = desc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -71,7 +71,7 @@ private fun visitConstructor(flags: Flags, addMember: (MemberVisibility) -> Unit
|
|||||||
override fun visitExtensions(type: KmExtensionType): KmConstructorExtensionVisitor? {
|
override fun visitExtensions(type: KmExtensionType): KmConstructorExtensionVisitor? {
|
||||||
if (type != JvmConstructorExtensionVisitor.TYPE) return null
|
if (type != JvmConstructorExtensionVisitor.TYPE) return null
|
||||||
return object : JvmConstructorExtensionVisitor() {
|
return object : JvmConstructorExtensionVisitor() {
|
||||||
override fun visit(desc: JvmMemberSignature?) {
|
override fun visit(desc: JvmMethodSignature?) {
|
||||||
jvmDesc = desc
|
jvmDesc = desc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -86,14 +86,14 @@ private fun visitConstructor(flags: Flags, addMember: (MemberVisibility) -> Unit
|
|||||||
|
|
||||||
private fun visitProperty(flags: Flags, name: String, getterFlags: Flags, setterFlags: Flags, addMember: (MemberVisibility) -> Unit) =
|
private fun visitProperty(flags: Flags, name: String, getterFlags: Flags, setterFlags: Flags, addMember: (MemberVisibility) -> Unit) =
|
||||||
object : KmPropertyVisitor() {
|
object : KmPropertyVisitor() {
|
||||||
var _fieldDesc: MemberSignature? = null
|
var _fieldDesc: JvmMemberSignature? = null
|
||||||
var _getterDesc: MemberSignature? = null
|
var _getterDesc: JvmMemberSignature? = null
|
||||||
var _setterDesc: MemberSignature? = null
|
var _setterDesc: JvmMemberSignature? = null
|
||||||
|
|
||||||
override fun visitExtensions(type: KmExtensionType): KmPropertyExtensionVisitor? {
|
override fun visitExtensions(type: KmExtensionType): KmPropertyExtensionVisitor? {
|
||||||
if (type != JvmPropertyExtensionVisitor.TYPE) return null
|
if (type != JvmPropertyExtensionVisitor.TYPE) return null
|
||||||
return object : JvmPropertyExtensionVisitor() {
|
return object : JvmPropertyExtensionVisitor() {
|
||||||
override fun visit(fieldDesc: JvmMemberSignature?, getterDesc: JvmMemberSignature?, setterDesc: JvmMemberSignature?) {
|
override fun visit(fieldDesc: JvmFieldSignature?, getterDesc: JvmMethodSignature?, setterDesc: JvmMethodSignature?) {
|
||||||
_fieldDesc = fieldDesc
|
_fieldDesc = fieldDesc
|
||||||
_getterDesc = getterDesc
|
_getterDesc = getterDesc
|
||||||
_setterDesc = setterDesc
|
_setterDesc = setterDesc
|
||||||
|
|||||||
+4
-4
@@ -7,11 +7,12 @@ package org.jetbrains.kotlin.tools
|
|||||||
|
|
||||||
import kotlinx.metadata.Flag
|
import kotlinx.metadata.Flag
|
||||||
import kotlinx.metadata.Flags
|
import kotlinx.metadata.Flags
|
||||||
|
import kotlinx.metadata.jvm.JvmMemberSignature
|
||||||
|
|
||||||
class ClassVisibility(
|
class ClassVisibility(
|
||||||
val name: String,
|
val name: String,
|
||||||
val flags: Flags?,
|
val flags: Flags?,
|
||||||
val members: Map<MemberSignature, MemberVisibility>,
|
val members: Map<JvmMemberSignature, MemberVisibility>,
|
||||||
val facadeClassName: String? = null
|
val facadeClassName: String? = null
|
||||||
) {
|
) {
|
||||||
val visibility get() = flags
|
val visibility get() = flags
|
||||||
@@ -21,12 +22,11 @@ class ClassVisibility(
|
|||||||
val partVisibilities = mutableListOf<ClassVisibility>()
|
val partVisibilities = mutableListOf<ClassVisibility>()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ClassVisibility.findMember(signature: MemberSignature): MemberVisibility? =
|
fun ClassVisibility.findMember(signature: JvmMemberSignature): MemberVisibility? =
|
||||||
members[signature] ?: partVisibilities.mapNotNull { it.members[signature] }.firstOrNull()
|
members[signature] ?: partVisibilities.mapNotNull { it.members[signature] }.firstOrNull()
|
||||||
|
|
||||||
|
|
||||||
data class MemberVisibility(val member: MemberSignature, val visibility: Flags?)
|
data class MemberVisibility(val member: JvmMemberSignature, val visibility: Flags?)
|
||||||
typealias MemberSignature = kotlinx.metadata.jvm.JvmMemberSignature
|
|
||||||
|
|
||||||
private fun isPublic(visibility: Flags?, isPublishedApi: Boolean) =
|
private fun isPublic(visibility: Flags?, isPublishedApi: Boolean) =
|
||||||
visibility == null
|
visibility == null
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ private fun visitFunction(settings: KotlinpSettings, sb: StringBuilder, flags: F
|
|||||||
override fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor? {
|
override fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor? {
|
||||||
if (type != JvmFunctionExtensionVisitor.TYPE) return null
|
if (type != JvmFunctionExtensionVisitor.TYPE) return null
|
||||||
return object : JvmFunctionExtensionVisitor() {
|
return object : JvmFunctionExtensionVisitor() {
|
||||||
override fun visit(desc: JvmMemberSignature?) {
|
override fun visit(desc: JvmMethodSignature?) {
|
||||||
jvmDesc = desc
|
jvmDesc = desc
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,13 +114,13 @@ private fun visitProperty(
|
|||||||
override fun visitExtensions(type: KmExtensionType): KmPropertyExtensionVisitor? {
|
override fun visitExtensions(type: KmExtensionType): KmPropertyExtensionVisitor? {
|
||||||
if (type != JvmPropertyExtensionVisitor.TYPE) return null
|
if (type != JvmPropertyExtensionVisitor.TYPE) return null
|
||||||
return object : JvmPropertyExtensionVisitor() {
|
return object : JvmPropertyExtensionVisitor() {
|
||||||
override fun visit(fieldDesc: JvmMemberSignature?, getterDesc: JvmMemberSignature?, setterDesc: JvmMemberSignature?) {
|
override fun visit(fieldDesc: JvmFieldSignature?, getterDesc: JvmMethodSignature?, setterDesc: JvmMethodSignature?) {
|
||||||
jvmFieldDesc = fieldDesc
|
jvmFieldDesc = fieldDesc
|
||||||
jvmGetterDesc = getterDesc
|
jvmGetterDesc = getterDesc
|
||||||
jvmSetterDesc = setterDesc
|
jvmSetterDesc = setterDesc
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitSyntheticMethodForAnnotations(desc: JvmMemberSignature?) {
|
override fun visitSyntheticMethodForAnnotations(desc: JvmMethodSignature?) {
|
||||||
jvmSyntheticMethodForAnnotationsDesc = desc
|
jvmSyntheticMethodForAnnotationsDesc = desc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -193,7 +193,7 @@ private fun visitConstructor(sb: StringBuilder, flags: Flags): KmConstructorVisi
|
|||||||
override fun visitExtensions(type: KmExtensionType): KmConstructorExtensionVisitor? {
|
override fun visitExtensions(type: KmExtensionType): KmConstructorExtensionVisitor? {
|
||||||
if (type != JvmConstructorExtensionVisitor.TYPE) return null
|
if (type != JvmConstructorExtensionVisitor.TYPE) return null
|
||||||
return object : JvmConstructorExtensionVisitor() {
|
return object : JvmConstructorExtensionVisitor() {
|
||||||
override fun visit(desc: JvmMemberSignature?) {
|
override fun visit(desc: JvmMethodSignature?) {
|
||||||
jvmDesc = desc
|
jvmDesc = desc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user