Extract subclasses of JvmMemberSignature sealed class to top-level

Use more specific subtypes of sealed class in visitors.
This commit is contained in:
Ilya Gorbunov
2018-05-29 19:27:47 +03:00
parent 1a290d0c73
commit f8217ef28f
10 changed files with 93 additions and 67 deletions
+1 -1
View File
@@ -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)
@@ -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()
} }
@@ -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)
} }
@@ -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 {
@@ -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
@@ -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
} }
} }