Refactor MetadataExtensions.kt to remove extension visitors
This helps to completely get rid of Visitors API during reading and writing of the JVM metadata. Note: Klib writers still use .accept and left for future refactorings. See also #KT-59442
This commit is contained in:
committed by
Space Team
parent
b8e4b44b04
commit
f450122d63
@@ -2,7 +2,7 @@
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
@file:Suppress("DEPRECATION_ERROR")
|
||||
@file:Suppress("DEPRECATION_ERROR") // delegate implementation
|
||||
|
||||
package kotlinx.metadata.jvm
|
||||
|
||||
|
||||
@@ -2,7 +2,10 @@
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
@file:Suppress("DEPRECATION_ERROR", "UNUSED_PARAMETER")
|
||||
@file:Suppress(
|
||||
"DEPRECATION_ERROR", // Deprecated .accept implementation
|
||||
"UNUSED_PARAMETER" // For deprecated Writer.write
|
||||
)
|
||||
|
||||
package kotlinx.metadata.jvm
|
||||
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
|
||||
@file:Suppress(
|
||||
"MemberVisibilityCanBePrivate",
|
||||
"DEPRECATION",
|
||||
"DEPRECATION_ERROR",
|
||||
"DEPRECATION", // For KmModule.annotations — remove reading when deprecation is raised to error
|
||||
"DEPRECATION_ERROR", // deprecated .accept implementation
|
||||
"INVISIBLE_MEMBER", // InconsistentKotlinMetadataException
|
||||
"INVISIBLE_REFERENCE",
|
||||
"UNUSED_PARAMETER"
|
||||
"UNUSED_PARAMETER" // For deprecated Writer.write
|
||||
)
|
||||
|
||||
package kotlinx.metadata.jvm
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
@file:Suppress("DEPRECATION","DEPRECATION_ERROR")
|
||||
@file:Suppress("DEPRECATION","DEPRECATION_ERROR") // inheritance of deprecated visitors will be removed with visitors
|
||||
|
||||
package kotlinx.metadata.jvm.internal
|
||||
|
||||
|
||||
+107
-167
@@ -15,272 +15,212 @@ import org.jetbrains.kotlin.metadata.deserialization.getExtensionOrNull
|
||||
import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
|
||||
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
internal class JvmMetadataExtensions : MetadataExtensions {
|
||||
override fun readClassExtensions(v: KmClassVisitor, proto: ProtoBuf.Class, c: ReadContext) {
|
||||
val ext = v.visitExtensions(JvmClassExtensionVisitor.TYPE) as? JvmClassExtensionVisitor ?: return
|
||||
ext as JvmClassExtension
|
||||
override fun readClassExtensions(kmClass: KmClass, proto: ProtoBuf.Class, c: ReadContext) {
|
||||
val ext = kmClass.jvm
|
||||
|
||||
val anonymousObjectOriginName = proto.getExtensionOrNull(JvmProtoBuf.anonymousObjectOriginName)
|
||||
if (anonymousObjectOriginName != null) {
|
||||
ext.visitAnonymousObjectOriginName(c[anonymousObjectOriginName])
|
||||
ext.anonymousObjectOriginName = c[anonymousObjectOriginName]
|
||||
}
|
||||
|
||||
for (property in proto.getExtension(JvmProtoBuf.classLocalVariable)) {
|
||||
ext.localDelegatedProperties.add(property.toKmProperty(c))
|
||||
}
|
||||
|
||||
ext.visitModuleName(proto.getExtensionOrNull(JvmProtoBuf.classModuleName)?.let(c::get) ?: JvmProtoBufUtil.DEFAULT_MODULE_NAME)
|
||||
ext.moduleName = proto.getExtensionOrNull(JvmProtoBuf.classModuleName)?.let(c::get) ?: JvmProtoBufUtil.DEFAULT_MODULE_NAME
|
||||
|
||||
proto.getExtensionOrNull(JvmProtoBuf.jvmClassFlags)?.let(ext::visitJvmFlags)
|
||||
|
||||
ext.visitEnd()
|
||||
proto.getExtensionOrNull(JvmProtoBuf.jvmClassFlags)?.let {
|
||||
ext.jvmFlags = it
|
||||
}
|
||||
}
|
||||
|
||||
override fun readPackageExtensions(v: KmPackageVisitor, proto: ProtoBuf.Package, c: ReadContext) {
|
||||
val ext = v.visitExtensions(JvmPackageExtensionVisitor.TYPE) as? JvmPackageExtensionVisitor ?: return
|
||||
ext as JvmPackageExtension
|
||||
override fun readPackageExtensions(kmPackage: KmPackage, proto: ProtoBuf.Package, c: ReadContext) {
|
||||
val ext = kmPackage.jvm
|
||||
|
||||
for (property in proto.getExtension(JvmProtoBuf.packageLocalVariable)) {
|
||||
ext.localDelegatedProperties.add(property.toKmProperty(c))
|
||||
}
|
||||
|
||||
ext.visitModuleName(proto.getExtensionOrNull(JvmProtoBuf.packageModuleName)?.let(c::get) ?: JvmProtoBufUtil.DEFAULT_MODULE_NAME)
|
||||
|
||||
ext.visitEnd()
|
||||
ext.moduleName = proto.getExtensionOrNull(JvmProtoBuf.packageModuleName)?.let(c::get) ?: JvmProtoBufUtil.DEFAULT_MODULE_NAME
|
||||
}
|
||||
|
||||
// ModuleFragment is not used by JVM backend.
|
||||
override fun readModuleFragmentExtensions(v: KmModuleFragmentVisitor, proto: ProtoBuf.PackageFragment, c: ReadContext) {}
|
||||
override fun readModuleFragmentExtensions(kmModuleFragment: KmModuleFragment, proto: ProtoBuf.PackageFragment, c: ReadContext) {}
|
||||
|
||||
override fun readFunctionExtensions(v: KmFunctionVisitor, proto: ProtoBuf.Function, c: ReadContext) {
|
||||
val ext = v.visitExtensions(JvmFunctionExtensionVisitor.TYPE) as? JvmFunctionExtensionVisitor ?: return
|
||||
ext.visit(JvmProtoBufUtil.getJvmMethodSignature(proto, c.strings, c.types)?.wrapAsPublic())
|
||||
override fun readFunctionExtensions(kmFunction: KmFunction, proto: ProtoBuf.Function, c: ReadContext) {
|
||||
val ext = kmFunction.jvm
|
||||
ext.signature = JvmProtoBufUtil.getJvmMethodSignature(proto, c.strings, c.types)?.wrapAsPublic()
|
||||
|
||||
val lambdaClassOriginName = proto.getExtensionOrNull(JvmProtoBuf.lambdaClassOriginName)
|
||||
if (lambdaClassOriginName != null) {
|
||||
ext.visitLambdaClassOriginName(c[lambdaClassOriginName])
|
||||
ext.lambdaClassOriginName = c[lambdaClassOriginName]
|
||||
}
|
||||
|
||||
ext.visitEnd()
|
||||
}
|
||||
|
||||
override fun readPropertyExtensions(v: KmPropertyVisitor, proto: ProtoBuf.Property, c: ReadContext) {
|
||||
val ext = v.visitExtensions(JvmPropertyExtensionVisitor.TYPE) as? JvmPropertyExtensionVisitor ?: return
|
||||
override fun readPropertyExtensions(kmProperty: KmProperty, proto: ProtoBuf.Property, c: ReadContext) {
|
||||
val ext = kmProperty.jvm
|
||||
val fieldSignature = JvmProtoBufUtil.getJvmFieldSignature(proto, c.strings, c.types)
|
||||
val propertySignature = proto.getExtensionOrNull(JvmProtoBuf.propertySignature)
|
||||
val getterSignature =
|
||||
if (propertySignature != null && propertySignature.hasGetter()) propertySignature.getter else null
|
||||
val setterSignature =
|
||||
if (propertySignature != null && propertySignature.hasSetter()) propertySignature.setter else null
|
||||
ext.visit(
|
||||
proto.getExtension(JvmProtoBuf.flags),
|
||||
fieldSignature?.wrapAsPublic(),
|
||||
getterSignature?.run { JvmMethodSignature(c[name], c[desc]) },
|
||||
setterSignature?.run { JvmMethodSignature(c[name], c[desc]) }
|
||||
)
|
||||
ext.jvmFlags = proto.getExtension(JvmProtoBuf.flags)
|
||||
ext.fieldSignature = fieldSignature?.wrapAsPublic()
|
||||
ext.getterSignature = getterSignature?.run { JvmMethodSignature(c[name], c[desc]) }
|
||||
ext.setterSignature = setterSignature?.run { JvmMethodSignature(c[name], c[desc]) }
|
||||
|
||||
val syntheticMethod =
|
||||
if (propertySignature != null && propertySignature.hasSyntheticMethod()) propertySignature.syntheticMethod else null
|
||||
ext.visitSyntheticMethodForAnnotations(syntheticMethod?.run { JvmMethodSignature(c[name], c[desc]) })
|
||||
ext.syntheticMethodForAnnotations = syntheticMethod?.run { JvmMethodSignature(c[name], c[desc]) }
|
||||
|
||||
val delegateMethod =
|
||||
if (propertySignature != null && propertySignature.hasDelegateMethod()) propertySignature.delegateMethod else null
|
||||
ext.visitSyntheticMethodForDelegate(delegateMethod?.run { JvmMethodSignature(c[name], c[desc]) })
|
||||
|
||||
ext.visitEnd()
|
||||
ext.syntheticMethodForDelegate = delegateMethod?.run { JvmMethodSignature(c[name], c[desc]) }
|
||||
}
|
||||
|
||||
override fun readConstructorExtensions(v: KmConstructorVisitor, proto: ProtoBuf.Constructor, c: ReadContext) {
|
||||
val ext = v.visitExtensions(JvmConstructorExtensionVisitor.TYPE) as? JvmConstructorExtensionVisitor ?: return
|
||||
ext.visit(JvmProtoBufUtil.getJvmConstructorSignature(proto, c.strings, c.types)?.wrapAsPublic())
|
||||
override fun readConstructorExtensions(kmConstructor: KmConstructor, proto: ProtoBuf.Constructor, c: ReadContext) {
|
||||
val ext = kmConstructor.jvm
|
||||
ext.signature = JvmProtoBufUtil.getJvmConstructorSignature(proto, c.strings, c.types)?.wrapAsPublic()
|
||||
}
|
||||
|
||||
override fun readTypeParameterExtensions(v: KmTypeParameterVisitor, proto: ProtoBuf.TypeParameter, c: ReadContext) {
|
||||
val ext = v.visitExtensions(JvmTypeParameterExtensionVisitor.TYPE) as? JvmTypeParameterExtensionVisitor ?: return
|
||||
override fun readTypeParameterExtensions(kmTypeParameter: KmTypeParameter, proto: ProtoBuf.TypeParameter, c: ReadContext) {
|
||||
val ext = kmTypeParameter.jvm
|
||||
for (annotation in proto.getExtension(JvmProtoBuf.typeParameterAnnotation)) {
|
||||
ext.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||
ext.annotations.add(annotation.readAnnotation(c.strings))
|
||||
}
|
||||
ext.visitEnd()
|
||||
}
|
||||
|
||||
override fun readTypeExtensions(v: KmTypeVisitor, proto: ProtoBuf.Type, c: ReadContext) {
|
||||
val ext = v.visitExtensions(JvmTypeExtensionVisitor.TYPE) as? JvmTypeExtensionVisitor ?: return
|
||||
ext.visit(proto.getExtension(JvmProtoBuf.isRaw))
|
||||
override fun readTypeExtensions(kmType: KmType, proto: ProtoBuf.Type, c: ReadContext) {
|
||||
val ext = kmType.jvm
|
||||
ext.isRaw = proto.getExtension(JvmProtoBuf.isRaw)
|
||||
for (annotation in proto.getExtension(JvmProtoBuf.typeAnnotation)) {
|
||||
ext.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||
ext.annotations.add(annotation.readAnnotation(c.strings))
|
||||
}
|
||||
ext.visitEnd()
|
||||
}
|
||||
|
||||
override fun readTypeAliasExtensions(v: KmTypeAliasVisitor, proto: ProtoBuf.TypeAlias, c: ReadContext) {}
|
||||
override fun readTypeAliasExtensions(kmTypeAlias: KmTypeAlias, proto: ProtoBuf.TypeAlias, c: ReadContext) {}
|
||||
|
||||
override fun readValueParameterExtensions(v: KmValueParameterVisitor, proto: ProtoBuf.ValueParameter, c: ReadContext) {}
|
||||
override fun readValueParameterExtensions(kmValueParameter: KmValueParameter, proto: ProtoBuf.ValueParameter, c: ReadContext) {}
|
||||
|
||||
override fun writeClassExtensions(extension: KmClassExtension, proto: ProtoBuf.Class.Builder, c: WriteContext): Boolean {
|
||||
if (extension.type != JvmClassExtensionVisitor.TYPE) return false
|
||||
extension as JvmClassExtension
|
||||
extension.anonymousObjectOriginName?.let { proto.setExtension(JvmProtoBuf.anonymousObjectOriginName, c[it]) }
|
||||
extension.localDelegatedProperties.forEach {
|
||||
proto.addExtension(JvmProtoBuf.classLocalVariable, c.writeProperty(it).build())
|
||||
override fun writeClassExtensions(kmClass: KmClass, proto: ProtoBuf.Class.Builder, c: WriteContext) =
|
||||
with(kmClass.jvm) {
|
||||
anonymousObjectOriginName?.let {
|
||||
proto.setExtension(JvmProtoBuf.anonymousObjectOriginName, c[it])
|
||||
}
|
||||
localDelegatedProperties.forEach {
|
||||
proto.addExtension(JvmProtoBuf.classLocalVariable, c.writeProperty(it).build())
|
||||
}
|
||||
moduleName?.let { moduleName ->
|
||||
if (moduleName != JvmProtoBufUtil.DEFAULT_MODULE_NAME) proto.setExtension(JvmProtoBuf.classModuleName, c[moduleName])
|
||||
}
|
||||
if (jvmFlags != 0) proto.setExtension(JvmProtoBuf.jvmClassFlags, jvmFlags)
|
||||
}
|
||||
extension.moduleName?.let { moduleName ->
|
||||
if (moduleName != JvmProtoBufUtil.DEFAULT_MODULE_NAME) proto.setExtension(JvmProtoBuf.classModuleName, c[moduleName])
|
||||
}
|
||||
if (extension.jvmFlags != 0) proto.setExtension(JvmProtoBuf.jvmClassFlags, extension.jvmFlags)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun writePackageExtensions(
|
||||
extension: KmPackageExtension, proto: ProtoBuf.Package.Builder, c: WriteContext
|
||||
): Boolean {
|
||||
if (extension.type != JvmPackageExtensionVisitor.TYPE) return false
|
||||
extension as JvmPackageExtension
|
||||
extension.localDelegatedProperties.forEach {
|
||||
kmPackage: KmPackage, proto: ProtoBuf.Package.Builder, c: WriteContext,
|
||||
): Unit = with(kmPackage.jvm) {
|
||||
localDelegatedProperties.forEach {
|
||||
proto.addExtension(JvmProtoBuf.packageLocalVariable, c.writeProperty(it).build())
|
||||
}
|
||||
extension.moduleName?.let { name ->
|
||||
moduleName?.let { name ->
|
||||
if (name != JvmProtoBufUtil.DEFAULT_MODULE_NAME) {
|
||||
proto.setExtension(JvmProtoBuf.packageModuleName, c[name])
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// PackageFragment is not used by JVM backend.
|
||||
override fun writeModuleFragmentExtensions(
|
||||
type: KmExtensionType,
|
||||
kmModuleFragment: KmModuleFragment,
|
||||
proto: ProtoBuf.PackageFragment.Builder,
|
||||
c: WriteContext
|
||||
): KmModuleFragmentExtensionVisitor? = null
|
||||
c: WriteContext,
|
||||
) = Unit
|
||||
|
||||
override fun writeFunctionExtensions(
|
||||
type: KmExtensionType, proto: ProtoBuf.Function.Builder, c: WriteContext
|
||||
): KmFunctionExtensionVisitor? {
|
||||
if (type != JvmFunctionExtensionVisitor.TYPE) return null
|
||||
return object : JvmFunctionExtensionVisitor() {
|
||||
override fun visit(signature: JvmMethodSignature?) {
|
||||
if (signature != null) {
|
||||
proto.setExtension(JvmProtoBuf.methodSignature, signature.toJvmMethodSignature(c))
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitLambdaClassOriginName(internalName: String) {
|
||||
proto.setExtension(JvmProtoBuf.lambdaClassOriginName, c[internalName])
|
||||
}
|
||||
kmFunction: KmFunction, proto: ProtoBuf.Function.Builder, c: WriteContext,
|
||||
) {
|
||||
with(kmFunction.jvm) {
|
||||
signature?.let { proto.setExtension(JvmProtoBuf.methodSignature, it.toJvmMethodSignature(c)) }
|
||||
lambdaClassOriginName?.let { proto.setExtension(JvmProtoBuf.lambdaClassOriginName, c[it]) }
|
||||
}
|
||||
}
|
||||
|
||||
override fun writePropertyExtensions(
|
||||
type: KmExtensionType, proto: ProtoBuf.Property.Builder, c: WriteContext
|
||||
): KmPropertyExtensionVisitor? {
|
||||
if (type != JvmPropertyExtensionVisitor.TYPE) return null
|
||||
return object : JvmPropertyExtensionVisitor() {
|
||||
private var jvmFlags: Int = ProtoBuf.Property.getDefaultInstance().getExtension(JvmProtoBuf.flags)
|
||||
private var signatureOrNull: JvmProtoBuf.JvmPropertySignature.Builder? = null
|
||||
kmProperty: KmProperty, proto: ProtoBuf.Property.Builder, c: WriteContext,
|
||||
) = with(kmProperty.jvm) {
|
||||
val composedSignature: JvmProtoBuf.JvmPropertySignature.Builder = JvmProtoBuf.JvmPropertySignature.newBuilder()
|
||||
var hasSignature = false
|
||||
|
||||
private val signature: JvmProtoBuf.JvmPropertySignature.Builder
|
||||
get() = signatureOrNull ?: JvmProtoBuf.JvmPropertySignature.newBuilder().also { signatureOrNull = it }
|
||||
|
||||
override fun visit(
|
||||
jvmFlags: Int,
|
||||
fieldSignature: JvmFieldSignature?,
|
||||
getterSignature: JvmMethodSignature?,
|
||||
setterSignature: JvmMethodSignature?
|
||||
) {
|
||||
this.jvmFlags = jvmFlags
|
||||
if (fieldSignature != null) {
|
||||
signature.field = JvmProtoBuf.JvmFieldSignature.newBuilder().also { field ->
|
||||
field.name = c[fieldSignature.name]
|
||||
field.desc = c[fieldSignature.descriptor]
|
||||
}.build()
|
||||
}
|
||||
if (getterSignature != null) {
|
||||
signature.getter = getterSignature.toJvmMethodSignature(c)
|
||||
}
|
||||
if (setterSignature != null) {
|
||||
signature.setter = setterSignature.toJvmMethodSignature(c)
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitSyntheticMethodForAnnotations(signature: JvmMethodSignature?) {
|
||||
if (signature == null) return
|
||||
|
||||
this.signature.syntheticMethod = signature.toJvmMethodSignature(c)
|
||||
}
|
||||
|
||||
override fun visitSyntheticMethodForDelegate(signature: JvmMethodSignature?) {
|
||||
if (signature == null) return
|
||||
|
||||
this.signature.delegateMethod = signature.toJvmMethodSignature(c)
|
||||
}
|
||||
|
||||
override fun visitEnd() {
|
||||
if (jvmFlags != ProtoBuf.Property.getDefaultInstance().getExtension(JvmProtoBuf.flags)) {
|
||||
proto.setExtension(JvmProtoBuf.flags, jvmFlags)
|
||||
}
|
||||
if (signatureOrNull != null) {
|
||||
proto.setExtension(JvmProtoBuf.propertySignature, signature.build())
|
||||
}
|
||||
}
|
||||
if (fieldSignature != null) {
|
||||
hasSignature = true
|
||||
composedSignature.field = JvmProtoBuf.JvmFieldSignature.newBuilder().also { field ->
|
||||
field.name = c[fieldSignature!!.name]
|
||||
field.desc = c[fieldSignature!!.descriptor]
|
||||
}.build()
|
||||
}
|
||||
if (getterSignature != null) {
|
||||
hasSignature = true
|
||||
composedSignature.getter = getterSignature!!.toJvmMethodSignature(c)
|
||||
}
|
||||
if (setterSignature != null) {
|
||||
hasSignature = true
|
||||
composedSignature.setter = setterSignature!!.toJvmMethodSignature(c)
|
||||
}
|
||||
if (hasSignature && syntheticMethodForAnnotations != null) {
|
||||
composedSignature.syntheticMethod = syntheticMethodForAnnotations!!.toJvmMethodSignature(c)
|
||||
}
|
||||
if (hasSignature && syntheticMethodForDelegate != null) {
|
||||
composedSignature.delegateMethod = syntheticMethodForDelegate!!.toJvmMethodSignature(c)
|
||||
}
|
||||
if (jvmFlags != ProtoBuf.Property.getDefaultInstance().getExtension(JvmProtoBuf.flags)) {
|
||||
proto.setExtension(JvmProtoBuf.flags, jvmFlags)
|
||||
}
|
||||
if (hasSignature) {
|
||||
proto.setExtension(JvmProtoBuf.propertySignature, composedSignature.build())
|
||||
}
|
||||
}
|
||||
|
||||
override fun writeConstructorExtensions(
|
||||
type: KmExtensionType, proto: ProtoBuf.Constructor.Builder, c: WriteContext
|
||||
): KmConstructorExtensionVisitor? {
|
||||
if (type != JvmConstructorExtensionVisitor.TYPE) return null
|
||||
return object : JvmConstructorExtensionVisitor() {
|
||||
override fun visit(signature: JvmMethodSignature?) {
|
||||
if (signature != null) {
|
||||
proto.setExtension(JvmProtoBuf.constructorSignature, signature.toJvmMethodSignature(c))
|
||||
}
|
||||
}
|
||||
}
|
||||
kmConstructor: KmConstructor, proto: ProtoBuf.Constructor.Builder, c: WriteContext,
|
||||
): Unit = with(kmConstructor.jvm) {
|
||||
signature?.let { proto.setExtension(JvmProtoBuf.constructorSignature, it.toJvmMethodSignature(c)) }
|
||||
}
|
||||
|
||||
override fun writeTypeParameterExtensions(
|
||||
type: KmExtensionType, proto: ProtoBuf.TypeParameter.Builder, c: WriteContext
|
||||
): KmTypeParameterExtensionVisitor? {
|
||||
if (type != JvmTypeParameterExtensionVisitor.TYPE) return null
|
||||
return object : JvmTypeParameterExtensionVisitor() {
|
||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
||||
proto.addExtension(JvmProtoBuf.typeParameterAnnotation, annotation.writeAnnotation(c.strings).build())
|
||||
}
|
||||
kmTypeParameter: KmTypeParameter, proto: ProtoBuf.TypeParameter.Builder, c: WriteContext,
|
||||
) = with(kmTypeParameter.jvm) {
|
||||
annotations.forEach { annotation ->
|
||||
proto.addExtension(JvmProtoBuf.typeParameterAnnotation, annotation.writeAnnotation(c.strings).build())
|
||||
}
|
||||
}
|
||||
|
||||
override fun writeTypeExtensions(type: KmExtensionType, proto: ProtoBuf.Type.Builder, c: WriteContext): KmTypeExtensionVisitor? {
|
||||
if (type != JvmTypeExtensionVisitor.TYPE) return null
|
||||
return object : JvmTypeExtensionVisitor() {
|
||||
override fun visit(isRaw: Boolean) {
|
||||
if (isRaw) {
|
||||
proto.setExtension(JvmProtoBuf.isRaw, true)
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
||||
override fun writeTypeExtensions(type: KmType, proto: ProtoBuf.Type.Builder, c: WriteContext) =
|
||||
with(type.jvm) {
|
||||
if (isRaw) proto.setExtension(JvmProtoBuf.isRaw, true)
|
||||
annotations.forEach { annotation ->
|
||||
proto.addExtension(JvmProtoBuf.typeAnnotation, annotation.writeAnnotation(c.strings).build())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun writeTypeAliasExtensions(
|
||||
type: KmExtensionType,
|
||||
typeAlias: KmTypeAlias,
|
||||
proto: ProtoBuf.TypeAlias.Builder,
|
||||
c: WriteContext
|
||||
): KmTypeAliasExtensionVisitor? = null
|
||||
c: WriteContext,
|
||||
) = Unit
|
||||
|
||||
override fun writeValueParameterExtensions(
|
||||
type: KmExtensionType,
|
||||
valueParameter: KmValueParameter,
|
||||
proto: ProtoBuf.ValueParameter.Builder,
|
||||
c: WriteContext
|
||||
): KmValueParameterExtensionVisitor? = null
|
||||
c: WriteContext,
|
||||
) = Unit
|
||||
|
||||
override fun createClassExtension(): KmClassExtension = JvmClassExtension()
|
||||
|
||||
override fun createPackageExtension(): KmPackageExtension = JvmPackageExtension()
|
||||
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
override fun createModuleFragmentExtensions(): KmModuleFragmentExtension =
|
||||
object : KmModuleFragmentExtension {
|
||||
override val type: KmExtensionType = KmExtensionType(KmModuleFragmentExtension::class)
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
@file:Suppress("DEPRECATION_ERROR")
|
||||
|
||||
package kotlinx.metadata.klib
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
@file:Suppress("DEPRECATION_ERROR")
|
||||
@file:Suppress("DEPRECATION_ERROR") // Extension visitors
|
||||
|
||||
package kotlinx.metadata.klib.impl
|
||||
|
||||
|
||||
+57
-69
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.serialization.StringTableImpl
|
||||
|
||||
@Suppress("DEPRECATION", "DEPRECATION_ERROR")
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
|
||||
private fun ReadContext.getSourceFile(index: Int) =
|
||||
@@ -27,8 +27,8 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
private fun WriteContext.getIndexOf(file: KlibSourceFile) =
|
||||
strings.getStringIndex(file.name)
|
||||
|
||||
override fun readClassExtensions(v: KmClassVisitor, proto: ProtoBuf.Class, c: ReadContext) {
|
||||
val extension = v.visitExtensions(KlibClassExtensionVisitor.TYPE) as? KlibClassExtensionVisitor ?: return
|
||||
override fun readClassExtensions(kmClass: KmClass, proto: ProtoBuf.Class, c: ReadContext) {
|
||||
val extension = kmClass.visitExtensions(KlibClassExtensionVisitor.TYPE) as? KlibClassExtensionVisitor ?: return
|
||||
|
||||
proto.getExtension(KlibMetadataProtoBuf.classAnnotation).forEach { annotation ->
|
||||
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||
@@ -48,8 +48,8 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
}
|
||||
}
|
||||
|
||||
override fun readPackageExtensions(v: KmPackageVisitor, proto: ProtoBuf.Package, c: ReadContext) {
|
||||
val extension = v.visitExtensions(KlibPackageExtensionVisitor.TYPE) as? KlibPackageExtensionVisitor ?: return
|
||||
override fun readPackageExtensions(kmPackage: KmPackage, proto: ProtoBuf.Package, c: ReadContext) {
|
||||
val extension = kmPackage.visitExtensions(KlibPackageExtensionVisitor.TYPE) as? KlibPackageExtensionVisitor ?: return
|
||||
|
||||
proto.getExtensionOrNull(KlibMetadataProtoBuf.packageFqName)?.let {
|
||||
val fqName = (c.strings as NameResolverImpl).getPackageFqName(it)
|
||||
@@ -57,8 +57,8 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
}
|
||||
}
|
||||
|
||||
override fun readModuleFragmentExtensions(v: KmModuleFragmentVisitor, proto: ProtoBuf.PackageFragment, c: ReadContext) {
|
||||
val extension = v.visitExtensions(KlibModuleFragmentExtensionVisitor.TYPE) as? KlibModuleFragmentExtensionVisitor ?: return
|
||||
override fun readModuleFragmentExtensions(kmModuleFragment: KmModuleFragment, proto: ProtoBuf.PackageFragment, c: ReadContext) {
|
||||
val extension = kmModuleFragment.visitExtensions(KlibModuleFragmentExtensionVisitor.TYPE) as? KlibModuleFragmentExtensionVisitor ?: return
|
||||
|
||||
proto.getExtension(KlibMetadataProtoBuf.packageFragmentFiles)
|
||||
.map { c.getSourceFile(it) }
|
||||
@@ -69,8 +69,8 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
.forEach(extension::visitClassName)
|
||||
}
|
||||
|
||||
override fun readFunctionExtensions(v: KmFunctionVisitor, proto: ProtoBuf.Function, c: ReadContext) {
|
||||
val extension = v.visitExtensions(KlibFunctionExtensionVisitor.TYPE) as? KlibFunctionExtensionVisitor ?: return
|
||||
override fun readFunctionExtensions(kmFunction: KmFunction, proto: ProtoBuf.Function, c: ReadContext) {
|
||||
val extension = kmFunction.visitExtensions(KlibFunctionExtensionVisitor.TYPE) as? KlibFunctionExtensionVisitor ?: return
|
||||
|
||||
proto.getExtension(KlibMetadataProtoBuf.functionAnnotation).forEach { annotation ->
|
||||
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||
@@ -84,8 +84,8 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
}
|
||||
}
|
||||
|
||||
override fun readPropertyExtensions(v: KmPropertyVisitor, proto: ProtoBuf.Property, c: ReadContext) {
|
||||
val extension = v.visitExtensions(KlibPropertyExtensionVisitor.TYPE) as? KlibPropertyExtensionVisitor ?: return
|
||||
override fun readPropertyExtensions(kmProperty: KmProperty, proto: ProtoBuf.Property, c: ReadContext) {
|
||||
val extension = kmProperty.visitExtensions(KlibPropertyExtensionVisitor.TYPE) as? KlibPropertyExtensionVisitor ?: return
|
||||
|
||||
proto.getExtension(KlibMetadataProtoBuf.propertyAnnotation).forEach { annotation ->
|
||||
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||
@@ -105,8 +105,8 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
}
|
||||
}
|
||||
|
||||
override fun readConstructorExtensions(v: KmConstructorVisitor, proto: ProtoBuf.Constructor, c: ReadContext) {
|
||||
val extension = v.visitExtensions(KlibConstructorExtensionVisitor.TYPE) as? KlibConstructorExtensionVisitor ?: return
|
||||
override fun readConstructorExtensions(kmConstructor: KmConstructor, proto: ProtoBuf.Constructor, c: ReadContext) {
|
||||
val extension = kmConstructor.visitExtensions(KlibConstructorExtensionVisitor.TYPE) as? KlibConstructorExtensionVisitor ?: return
|
||||
|
||||
proto.getExtension(KlibMetadataProtoBuf.constructorAnnotation).forEach { annotation ->
|
||||
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||
@@ -116,8 +116,8 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
}
|
||||
}
|
||||
|
||||
override fun readTypeParameterExtensions(v: KmTypeParameterVisitor, proto: ProtoBuf.TypeParameter, c: ReadContext) {
|
||||
val extension = v.visitExtensions(KlibTypeParameterExtensionVisitor.TYPE) as? KlibTypeParameterExtensionVisitor ?: return
|
||||
override fun readTypeParameterExtensions(kmTypeParameter: KmTypeParameter, proto: ProtoBuf.TypeParameter, c: ReadContext) {
|
||||
val extension = kmTypeParameter.visitExtensions(KlibTypeParameterExtensionVisitor.TYPE) as? KlibTypeParameterExtensionVisitor ?: return
|
||||
|
||||
proto.getExtension(KlibMetadataProtoBuf.typeParameterAnnotation).forEach { annotation ->
|
||||
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||
@@ -127,33 +127,32 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
}
|
||||
}
|
||||
|
||||
override fun readTypeExtensions(v: KmTypeVisitor, proto: ProtoBuf.Type, c: ReadContext) {
|
||||
val extension = v.visitExtensions(KlibTypeExtensionVisitor.TYPE) as? KlibTypeExtensionVisitor ?: return
|
||||
override fun readTypeExtensions(kmType: KmType, proto: ProtoBuf.Type, c: ReadContext) {
|
||||
val extension = kmType.visitExtensions(KlibTypeExtensionVisitor.TYPE) as? KlibTypeExtensionVisitor ?: return
|
||||
|
||||
proto.getExtension(KlibMetadataProtoBuf.typeAnnotation).forEach { annotation ->
|
||||
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||
}
|
||||
}
|
||||
|
||||
override fun readTypeAliasExtensions(v: KmTypeAliasVisitor, proto: ProtoBuf.TypeAlias, c: ReadContext) {
|
||||
val extension = v.visitExtensions(KlibTypeAliasExtensionVisitor.TYPE) as? KlibTypeAliasExtensionVisitor ?: return
|
||||
override fun readTypeAliasExtensions(kmTypeAlias: KmTypeAlias, proto: ProtoBuf.TypeAlias, c: ReadContext) {
|
||||
val extension = kmTypeAlias.visitExtensions(KlibTypeAliasExtensionVisitor.TYPE) as? KlibTypeAliasExtensionVisitor ?: return
|
||||
|
||||
proto.getExtension(KlibMetadataProtoBuf.typeAliasUniqId).let { descriptorUniqId ->
|
||||
extension.visitUniqId(descriptorUniqId.readUniqId())
|
||||
}
|
||||
}
|
||||
|
||||
override fun readValueParameterExtensions(v: KmValueParameterVisitor, proto: ProtoBuf.ValueParameter, c: ReadContext) {
|
||||
val extension = v.visitExtensions(KlibValueParameterExtensionVisitor.TYPE) as? KlibValueParameterExtensionVisitor ?: return
|
||||
override fun readValueParameterExtensions(kmValueParameter: KmValueParameter, proto: ProtoBuf.ValueParameter, c: ReadContext) {
|
||||
val extension = kmValueParameter.visitExtensions(KlibValueParameterExtensionVisitor.TYPE) as? KlibValueParameterExtensionVisitor ?: return
|
||||
|
||||
proto.getExtension(KlibMetadataProtoBuf.parameterAnnotation).forEach { annotation ->
|
||||
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||
}
|
||||
}
|
||||
|
||||
override fun writeClassExtensions(extension: KmClassExtension, proto: ProtoBuf.Class.Builder, c: WriteContext): Boolean {
|
||||
if (extension.type != KlibClassExtensionVisitor.TYPE) return false
|
||||
extension.accept(object : KlibClassExtensionVisitor() {
|
||||
override fun writeClassExtensions(kmClass: KmClass, proto: ProtoBuf.Class.Builder, c: WriteContext) {
|
||||
kmClass.klibExtensions.accept(object : KlibClassExtensionVisitor() {
|
||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
||||
proto.addExtension(
|
||||
KlibMetadataProtoBuf.classAnnotation,
|
||||
@@ -192,31 +191,27 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
}
|
||||
}
|
||||
})
|
||||
return true
|
||||
}
|
||||
|
||||
override fun writePackageExtensions(
|
||||
extension: KmPackageExtension,
|
||||
kmPackage: KmPackage,
|
||||
proto: ProtoBuf.Package.Builder,
|
||||
c: WriteContext
|
||||
): Boolean {
|
||||
if (extension.type != KlibPackageExtensionVisitor.TYPE) return false
|
||||
extension.accept(object : KlibPackageExtensionVisitor() {
|
||||
) {
|
||||
kmPackage.klibExtensions.accept(object : KlibPackageExtensionVisitor() {
|
||||
override fun visitFqName(name: String) {
|
||||
val nameIdx = (c.strings as StringTableImpl).getPackageFqNameIndex(FqName(name))
|
||||
proto.setExtension(KlibMetadataProtoBuf.packageFqName, nameIdx)
|
||||
}
|
||||
})
|
||||
return true
|
||||
}
|
||||
|
||||
override fun writeModuleFragmentExtensions(
|
||||
type: KmExtensionType,
|
||||
kmModuleFragment: KmModuleFragment,
|
||||
proto: ProtoBuf.PackageFragment.Builder,
|
||||
c: WriteContext
|
||||
): KmModuleFragmentExtensionVisitor? {
|
||||
if (type != KlibModuleFragmentExtensionVisitor.TYPE) return null
|
||||
return object : KlibModuleFragmentExtensionVisitor() {
|
||||
) {
|
||||
kmModuleFragment.klibExtensions.accept(object : KlibModuleFragmentExtensionVisitor() {
|
||||
override fun visitFile(file: KlibSourceFile) {
|
||||
val fileIdx = c.getIndexOf(file)
|
||||
proto.addExtension(KlibMetadataProtoBuf.packageFragmentFiles, fileIdx)
|
||||
@@ -230,16 +225,15 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
val classNameIdx = (c.strings as StringTableImpl).getQualifiedClassNameIndex(ClassId.fromString(className))
|
||||
proto.addExtension(KlibMetadataProtoBuf.className, classNameIdx)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun writeFunctionExtensions(
|
||||
type: KmExtensionType,
|
||||
kmFunction: KmFunction,
|
||||
proto: ProtoBuf.Function.Builder,
|
||||
c: WriteContext
|
||||
): KmFunctionExtensionVisitor? {
|
||||
if (type != KlibFunctionExtensionVisitor.TYPE) return null
|
||||
return object : KlibFunctionExtensionVisitor() {
|
||||
) {
|
||||
kmFunction.klibExtensions.accept(object : KlibFunctionExtensionVisitor() {
|
||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
||||
proto.addExtension(
|
||||
KlibMetadataProtoBuf.functionAnnotation,
|
||||
@@ -258,16 +252,15 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
val index = c.getIndexOf(file)
|
||||
proto.setExtension(KlibMetadataProtoBuf.functionFile, index)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun writePropertyExtensions(
|
||||
type: KmExtensionType,
|
||||
kmProperty: KmProperty,
|
||||
proto: ProtoBuf.Property.Builder,
|
||||
c: WriteContext
|
||||
): KmPropertyExtensionVisitor? {
|
||||
if (type != KlibPropertyExtensionVisitor.TYPE) return null
|
||||
return object : KlibPropertyExtensionVisitor() {
|
||||
) {
|
||||
kmProperty.klibExtensions.accept(object : KlibPropertyExtensionVisitor() {
|
||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
||||
proto.addExtension(
|
||||
KlibMetadataProtoBuf.propertyAnnotation,
|
||||
@@ -309,16 +302,15 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
value.writeAnnotationArgument(c.strings).build()
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun writeConstructorExtensions(
|
||||
type: KmExtensionType,
|
||||
kmConstructor: KmConstructor,
|
||||
proto: ProtoBuf.Constructor.Builder,
|
||||
c: WriteContext
|
||||
): KmConstructorExtensionVisitor? {
|
||||
if (type != KlibConstructorExtensionVisitor.TYPE) return null
|
||||
return object : KlibConstructorExtensionVisitor() {
|
||||
) {
|
||||
kmConstructor.klibExtensions.accept(object : KlibConstructorExtensionVisitor() {
|
||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
||||
proto.addExtension(
|
||||
KlibMetadataProtoBuf.constructorAnnotation,
|
||||
@@ -332,16 +324,15 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
uniqId.writeUniqId().build()
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun writeTypeParameterExtensions(
|
||||
type: KmExtensionType,
|
||||
kmTypeParameter: KmTypeParameter,
|
||||
proto: ProtoBuf.TypeParameter.Builder,
|
||||
c: WriteContext
|
||||
): KmTypeParameterExtensionVisitor? {
|
||||
if (type != KlibTypeParameterExtensionVisitor.TYPE) return null
|
||||
return object : KlibTypeParameterExtensionVisitor() {
|
||||
) {
|
||||
kmTypeParameter.klibExtensions.accept(object : KlibTypeParameterExtensionVisitor() {
|
||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
||||
proto.addExtension(
|
||||
KlibMetadataProtoBuf.typeParameterAnnotation,
|
||||
@@ -355,51 +346,48 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
uniqId.writeUniqId().build()
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun writeTypeExtensions(type: KmExtensionType, proto: ProtoBuf.Type.Builder, c: WriteContext): KmTypeExtensionVisitor? {
|
||||
if (type != KlibTypeExtensionVisitor.TYPE) return null
|
||||
return object : KlibTypeExtensionVisitor() {
|
||||
override fun writeTypeExtensions(type: KmType, proto: ProtoBuf.Type.Builder, c: WriteContext) {
|
||||
type.klibExtensions.accept(object : KlibTypeExtensionVisitor() {
|
||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
||||
proto.addExtension(
|
||||
KlibMetadataProtoBuf.typeAnnotation,
|
||||
annotation.writeAnnotation(c.strings).build()
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun writeTypeAliasExtensions(
|
||||
type: KmExtensionType,
|
||||
typeAlias: KmTypeAlias,
|
||||
proto: ProtoBuf.TypeAlias.Builder,
|
||||
c: WriteContext
|
||||
): KmTypeAliasExtensionVisitor? {
|
||||
if (type != KlibTypeAliasExtensionVisitor.TYPE) return null
|
||||
return object : KlibTypeAliasExtensionVisitor() {
|
||||
) {
|
||||
typeAlias.klibExtensions.accept(object : KlibTypeAliasExtensionVisitor() {
|
||||
override fun visitUniqId(uniqId: UniqId) {
|
||||
proto.setExtension(
|
||||
KlibMetadataProtoBuf.typeAliasUniqId,
|
||||
uniqId.writeUniqId().build()
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun writeValueParameterExtensions(
|
||||
type: KmExtensionType,
|
||||
valueParameter: KmValueParameter,
|
||||
proto: ProtoBuf.ValueParameter.Builder,
|
||||
c: WriteContext
|
||||
): KmValueParameterExtensionVisitor? {
|
||||
if (type != KlibValueParameterExtensionVisitor.TYPE) return null
|
||||
return object : KlibValueParameterExtensionVisitor() {
|
||||
) {
|
||||
valueParameter.klibExtensions.accept(object : KlibValueParameterExtensionVisitor() {
|
||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
||||
proto.addExtension(
|
||||
KlibMetadataProtoBuf.parameterAnnotation,
|
||||
annotation.writeAnnotation(c.strings).build()
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun createClassExtension(): KmClassExtension =
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
@file:Suppress("DEPRECATION_ERROR")
|
||||
@file:Suppress("DEPRECATION_ERROR") // Extension visitors
|
||||
|
||||
package kotlinx.metadata.klib
|
||||
|
||||
|
||||
@@ -821,7 +821,7 @@ public class KmTypeParameter @Deprecated(flagsCtorDeprecated) constructor(
|
||||
KmType(flags).addTo(upperBounds)
|
||||
|
||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
||||
override fun visitExtensions(type: KmExtensionType): KmTypeParameterExtensionVisitor? =
|
||||
override fun visitExtensions(type: KmExtensionType): KmTypeParameterExtensionVisitor =
|
||||
extensions.singleOfType(type)
|
||||
|
||||
/**
|
||||
|
||||
@@ -86,9 +86,7 @@ public fun ProtoBuf.Class.toKmClass(
|
||||
contextReceiverTypes(c.types).mapTo(v.contextReceiverTypes) { it.toKmType(c) }
|
||||
versionRequirementList.mapTo(v.versionRequirements) { readVersionRequirement(it, c) }
|
||||
|
||||
for (extension in c.extensions) {
|
||||
extension.readClassExtensions(v, this, c)
|
||||
}
|
||||
c.extensions.forEach { it.readClassExtensions(v, this, c) }
|
||||
|
||||
return v
|
||||
}
|
||||
@@ -119,9 +117,7 @@ public fun ProtoBuf.Package.toKmPackage(
|
||||
|
||||
v.visitDeclarations(functionList, propertyList, typeAliasList, c)
|
||||
|
||||
for (extension in c.extensions) {
|
||||
extension.readPackageExtensions(v, this, c)
|
||||
}
|
||||
c.extensions.forEach { it.readPackageExtensions(v, this, c) }
|
||||
|
||||
return v
|
||||
}
|
||||
@@ -141,9 +137,7 @@ public fun ProtoBuf.PackageFragment.toKmModuleFragment(
|
||||
v.pkg = `package`.toKmPackage(strings, contextExtensions)
|
||||
class_List.mapTo(v.classes) { it.toKmClass(strings, contextExtensions) }
|
||||
|
||||
for (extension in c.extensions) {
|
||||
extension.readModuleFragmentExtensions(v, this, c)
|
||||
}
|
||||
c.extensions.forEach { it.readModuleFragmentExtensions(v, this, c) }
|
||||
|
||||
return v
|
||||
}
|
||||
@@ -171,9 +165,7 @@ private fun ProtoBuf.Constructor.toKmConstructor(c: ReadContext): KmConstructor
|
||||
valueParameterList.mapTo(v.valueParameters) { it.toKmValueParameter(c) }
|
||||
versionRequirementList.mapTo(v.versionRequirements) { readVersionRequirement(it, c) }
|
||||
|
||||
for (extension in c.extensions) {
|
||||
extension.readConstructorExtensions(v, this, c)
|
||||
}
|
||||
c.extensions.forEach { it.readConstructorExtensions(v, this, c) }
|
||||
|
||||
return v
|
||||
}
|
||||
@@ -196,9 +188,7 @@ private fun ProtoBuf.Function.toKmFunction(outer: ReadContext): KmFunction {
|
||||
|
||||
versionRequirementList.mapTo(v.versionRequirements) { readVersionRequirement(it, c) }
|
||||
|
||||
for (extension in c.extensions) {
|
||||
extension.readFunctionExtensions(v, this, c)
|
||||
}
|
||||
c.extensions.forEach { it.readFunctionExtensions(v, this, c) }
|
||||
|
||||
return v
|
||||
}
|
||||
@@ -217,9 +207,7 @@ public fun ProtoBuf.Property.toKmProperty(outer: ReadContext): KmProperty {
|
||||
v.returnType = returnType(c.types).toKmType(c)
|
||||
versionRequirementList.mapTo(v.versionRequirements) { readVersionRequirement(it, c) }
|
||||
|
||||
for (extension in c.extensions) {
|
||||
extension.readPropertyExtensions(v, this, c)
|
||||
}
|
||||
c.extensions.forEach { it.readPropertyExtensions(v, this, c) }
|
||||
|
||||
return v
|
||||
}
|
||||
@@ -236,9 +224,7 @@ private fun ProtoBuf.TypeAlias.toKmTypeAlias(outer: ReadContext): KmTypeAlias {
|
||||
|
||||
versionRequirementList.mapTo(v.versionRequirements) { readVersionRequirement(it, c) }
|
||||
|
||||
for (extension in c.extensions) {
|
||||
extension.readTypeAliasExtensions(v, this, c)
|
||||
}
|
||||
c.extensions.forEach { it.readTypeAliasExtensions(v, this, c) }
|
||||
|
||||
return v
|
||||
}
|
||||
@@ -249,9 +235,7 @@ private fun ProtoBuf.ValueParameter.toKmValueParameter(c: ReadContext): KmValueP
|
||||
|
||||
v.varargElementType = varargElementType(c.types)?.toKmType(c)
|
||||
|
||||
for (extension in c.extensions) {
|
||||
extension.readValueParameterExtensions(v, this, c)
|
||||
}
|
||||
c.extensions.forEach { it.readValueParameterExtensions(v, this, c) }
|
||||
|
||||
return v
|
||||
}
|
||||
@@ -268,9 +252,7 @@ private fun ProtoBuf.TypeParameter.toKmTypeParameter(
|
||||
|
||||
upperBounds(c.types).mapTo(ktp.upperBounds) { it.toKmType(c) }
|
||||
|
||||
for (extension in c.extensions) {
|
||||
extension.readTypeParameterExtensions(ktp, this, c)
|
||||
}
|
||||
c.extensions.forEach { it.readTypeParameterExtensions(ktp, this, c) }
|
||||
|
||||
return ktp
|
||||
}
|
||||
@@ -313,9 +295,7 @@ private fun ProtoBuf.Type.toKmType(c: ReadContext): KmType {
|
||||
KmFlexibleTypeUpperBound(it, if (hasFlexibleTypeCapabilitiesId()) c[flexibleTypeCapabilitiesId] else null)
|
||||
}
|
||||
|
||||
for (extension in c.extensions) {
|
||||
extension.readTypeExtensions(v, this, c)
|
||||
}
|
||||
c.extensions.forEach { it.readTypeExtensions(v, this, c) }
|
||||
|
||||
return v
|
||||
}
|
||||
|
||||
@@ -6,9 +6,6 @@
|
||||
package kotlinx.metadata.internal
|
||||
|
||||
import kotlinx.metadata.*
|
||||
import kotlinx.metadata.internal.extensions.KmExtension
|
||||
import kotlinx.metadata.internal.extensions.MetadataExtensions
|
||||
import kotlinx.metadata.internal.extensions.applySingleExtension
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.deserialization.Flags
|
||||
import org.jetbrains.kotlin.metadata.serialization.StringTable
|
||||
@@ -115,9 +112,3 @@ internal fun StringTable.getClassNameIndex(name: ClassName): Int =
|
||||
getQualifiedClassNameIndex(name.substring(1), true)
|
||||
else
|
||||
getQualifiedClassNameIndex(name, false)
|
||||
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
internal fun <V : KmExtensionVisitor, E : KmExtension<V>> List<E>.writeExtensions(writer: MetadataExtensions.(KmExtensionType) -> V?) =
|
||||
forEach { ext ->
|
||||
applySingleExtension(ext.type) { writer(ext.type) }?.let { ext.accept(it) }
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ package kotlinx.metadata.internal
|
||||
import kotlinx.metadata.*
|
||||
import kotlinx.metadata.internal.common.KmModuleFragment
|
||||
import kotlinx.metadata.internal.extensions.MetadataExtensions
|
||||
import kotlinx.metadata.internal.extensions.matchExtensions
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.deserialization.VersionRequirement
|
||||
import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable
|
||||
@@ -24,6 +23,8 @@ public interface WriteContextExtension
|
||||
public open class WriteContext(public val strings: StringTable, public val contextExtensions: List<WriteContextExtension> = emptyList()) {
|
||||
internal val versionRequirements: MutableVersionRequirementTable = MutableVersionRequirementTable()
|
||||
|
||||
internal val extensions = MetadataExtensions.INSTANCES
|
||||
|
||||
public operator fun get(string: String): Int =
|
||||
strings.getStringIndex(string)
|
||||
|
||||
@@ -36,8 +37,8 @@ private fun WriteContext.writeTypeParameter(kmTypeParameter: KmTypeParameter): P
|
||||
kmTypeParameter.upperBounds.forEach { ub ->
|
||||
t.addUpperBound(writeType(ub).build())
|
||||
}
|
||||
kmTypeParameter.extensions.writeExtensions {
|
||||
writeTypeParameterExtensions(it, t, this@writeTypeParameter)
|
||||
extensions.forEach {
|
||||
it.writeTypeParameterExtensions(kmTypeParameter, t, this)
|
||||
}
|
||||
t.name = this[kmTypeParameter.name]
|
||||
t.id = kmTypeParameter.id
|
||||
@@ -91,9 +92,7 @@ private fun WriteContext.writeType(kmType: KmType): ProtoBuf.Type.Builder {
|
||||
t.flexibleUpperBound = fubType.build()
|
||||
}
|
||||
|
||||
kmType.extensions.writeExtensions {
|
||||
writeTypeExtensions(it, t, this@writeType)
|
||||
}
|
||||
extensions.forEach { it.writeTypeExtensions(kmType, t, this) }
|
||||
|
||||
if (kmType.isNullable) {
|
||||
t.nullable = true
|
||||
@@ -112,8 +111,8 @@ private fun WriteContext.writeConstructor(kmConstructor: KmConstructor): ProtoBu
|
||||
t.addValueParameter(writeValueParameter(it).build())
|
||||
}
|
||||
kmConstructor.versionRequirements.forEach { t.addVersionRequirement(writeVersionRequirement(it)) }
|
||||
kmConstructor.extensions.writeExtensions {
|
||||
writeConstructorExtensions(it, t, this@writeConstructor)
|
||||
extensions.forEach {
|
||||
it.writeConstructorExtensions(kmConstructor, t, this)
|
||||
}
|
||||
if (kmConstructor.flags != ProtoBuf.Constructor.getDefaultInstance().flags) {
|
||||
t.flags = kmConstructor.flags
|
||||
@@ -125,14 +124,18 @@ private fun WriteContext.writeFunction(kmFunction: KmFunction): ProtoBuf.Functio
|
||||
val t = ProtoBuf.Function.newBuilder()
|
||||
t.addAllTypeParameter(kmFunction.typeParameters.map { writeTypeParameter(it).build() })
|
||||
kmFunction.receiverParameterType?.let { t.receiverType = writeType(it).build() }
|
||||
|
||||
@OptIn(ExperimentalContextReceivers::class)
|
||||
t.addAllContextReceiverType(kmFunction.contextReceiverTypes.map { writeType(it).build() })
|
||||
t.addAllValueParameter(kmFunction.valueParameters.map { writeValueParameter(it).build() })
|
||||
t.returnType = writeType(kmFunction.returnType).build()
|
||||
t.addAllVersionRequirement(kmFunction.versionRequirements.map(::writeVersionRequirement))
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
kmFunction.contract?.let { t.contract = writeContract(it) }
|
||||
kmFunction.extensions.writeExtensions { writeFunctionExtensions(it, t, this@writeFunction) }
|
||||
|
||||
extensions.forEach { it.writeFunctionExtensions(kmFunction, t, this) }
|
||||
|
||||
t.name = this[kmFunction.name]
|
||||
if (kmFunction.flags != ProtoBuf.Function.getDefaultInstance().flags) {
|
||||
t.flags = kmFunction.flags
|
||||
@@ -148,12 +151,15 @@ public fun WriteContext.writeProperty(kmProperty: KmProperty): ProtoBuf.Property
|
||||
t.addTypeParameter(writeTypeParameter(tp).build())
|
||||
}
|
||||
kmProperty.receiverParameterType?.let { t.receiverType = writeType(it).build() }
|
||||
|
||||
@OptIn(ExperimentalContextReceivers::class)
|
||||
t.addAllContextReceiverType(kmProperty.contextReceiverTypes.map { writeType(it).build() })
|
||||
kmProperty.setterParameter?.let { t.setterValueParameter = writeValueParameter(it).build() }
|
||||
t.returnType = writeType(kmProperty.returnType).build()
|
||||
t.addAllVersionRequirement(kmProperty.versionRequirements.map { writeVersionRequirement(it) })
|
||||
kmProperty.extensions.writeExtensions { writePropertyExtensions(it, t, this@writeProperty) }
|
||||
|
||||
extensions.forEach { it.writePropertyExtensions(kmProperty, t, this) }
|
||||
|
||||
t.name = this[kmProperty.name]
|
||||
if (kmProperty.flags != ProtoBuf.Property.getDefaultInstance().flags) {
|
||||
t.flags = kmProperty.flags
|
||||
@@ -170,7 +176,7 @@ private fun WriteContext.writeValueParameter(
|
||||
val t = ProtoBuf.ValueParameter.newBuilder()
|
||||
t.type = writeType(kmValueParameter.type).build()
|
||||
kmValueParameter.varargElementType?.let { t.varargElementType = writeType(it).build() }
|
||||
kmValueParameter.extensions.writeExtensions { writeValueParameterExtensions(it, t, this@writeValueParameter) }
|
||||
extensions.forEach { it.writeValueParameterExtensions(kmValueParameter, t, this) }
|
||||
if (kmValueParameter.flags != ProtoBuf.ValueParameter.getDefaultInstance().flags) {
|
||||
t.flags = kmValueParameter.flags
|
||||
}
|
||||
@@ -187,7 +193,7 @@ private fun WriteContext.writeTypeAlias(
|
||||
t.expandedType = writeType(typeAlias.expandedType).build()
|
||||
t.addAllAnnotation(typeAlias.annotations.map { it.writeAnnotation(strings).build() })
|
||||
t.addAllVersionRequirement(typeAlias.versionRequirements.map(::writeVersionRequirement))
|
||||
typeAlias.extensions.writeExtensions { writeTypeAliasExtensions(it, t, this@writeTypeAlias) }
|
||||
extensions.forEach { it.writeTypeAliasExtensions(typeAlias, t, this) }
|
||||
|
||||
if (typeAlias.flags != ProtoBuf.TypeAlias.getDefaultInstance().flags) {
|
||||
t.flags = typeAlias.flags
|
||||
@@ -232,7 +238,7 @@ private fun WriteContext.writeVersionRequirement(kmVersionRequirement: KmVersion
|
||||
writeVersionFull = { t!!.versionFull = it }
|
||||
)
|
||||
|
||||
return this.versionRequirements[t] //??
|
||||
return this.versionRequirements[t]
|
||||
}
|
||||
|
||||
@ExperimentalContracts
|
||||
@@ -324,7 +330,8 @@ public open class ClassWriter(stringTable: StringTable, contextExtensions: List<
|
||||
t.addAllContextReceiverType(kmClass.contextReceiverTypes.map { c.writeType(it).build() })
|
||||
|
||||
t.addAllVersionRequirement(kmClass.versionRequirements.map { c.writeVersionRequirement(it) })
|
||||
kmClass.extensions.matchExtensions { writeClassExtensions(it, t, c) }
|
||||
|
||||
c.extensions.forEach { it.writeClassExtensions(kmClass, t, c) }
|
||||
|
||||
c.versionRequirements.serialize()?.let {
|
||||
t.versionRequirementTable = it
|
||||
@@ -340,7 +347,7 @@ public open class PackageWriter(stringTable: StringTable, contextExtensions: Lis
|
||||
t.addAllFunction(kmPackage.functions.map { c.writeFunction(it).build() })
|
||||
t.addAllProperty(kmPackage.properties.map { c.writeProperty(it).build() })
|
||||
t.addAllTypeAlias(kmPackage.typeAliases.map { c.writeTypeAlias(it).build() })
|
||||
kmPackage.extensions.matchExtensions { writePackageExtensions(it, t, c) }
|
||||
c.extensions.forEach { it.writePackageExtensions(kmPackage, t, c) }
|
||||
c.versionRequirements.serialize()?.let {
|
||||
t.versionRequirementTable = it
|
||||
}
|
||||
@@ -364,7 +371,7 @@ public open class ModuleFragmentWriter(stringTable: StringTable, contextExtensio
|
||||
t.addClass_(classWriter.t)
|
||||
}
|
||||
|
||||
kmPackageFragment.extensions.writeExtensions { writeModuleFragmentExtensions(it, t, c) }
|
||||
c.extensions.forEach { it.writeModuleFragmentExtensions(kmPackageFragment, t, c) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -2,7 +2,7 @@
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
@file:Suppress("DEPRECATION_ERROR")
|
||||
@file:Suppress("DEPRECATION_ERROR") // deprecated .accept implementation
|
||||
|
||||
package kotlinx.metadata.internal.common
|
||||
|
||||
@@ -23,9 +23,9 @@ import java.io.ByteArrayInputStream
|
||||
* Usually such metadata comes from serialized klibs. However, special `kotlin_builtins` file from standard library
|
||||
* distribution can also be read with this reader.
|
||||
*/
|
||||
public class KotlinCommonMetadata private constructor(private val proto: ProtoBuf.PackageFragment) {
|
||||
public class KotlinCommonMetadata private constructor(proto: ProtoBuf.PackageFragment) {
|
||||
|
||||
public val kmModuleFragment: KmModuleFragment = readImpl()
|
||||
public val kmModuleFragment: KmModuleFragment = readImpl(proto)
|
||||
|
||||
@Deprecated(
|
||||
"To avoid excessive copying, use .kmModuleFragment property instead. Note that it returns a view and not a copy.",
|
||||
@@ -43,7 +43,7 @@ public class KotlinCommonMetadata private constructor(private val proto: ProtoBu
|
||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
||||
public fun accept(v: KmModuleFragmentVisitor): Unit = kmModuleFragment.accept(v)
|
||||
|
||||
private fun readImpl(): KmModuleFragment {
|
||||
private fun readImpl(proto: ProtoBuf.PackageFragment): KmModuleFragment {
|
||||
val v = KmModuleFragment()
|
||||
val strings = NameResolverImpl(proto.strings, proto.qualifiedNames)
|
||||
if (proto.hasPackage()) {
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
@file:Suppress("DEPRECATION_ERROR")
|
||||
@file:Suppress("DEPRECATION_ERROR") // deprecated visitors API
|
||||
|
||||
package kotlinx.metadata.internal.extensions
|
||||
|
||||
|
||||
+1
-25
@@ -2,34 +2,10 @@
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
@file:Suppress("DEPRECATION_ERROR")
|
||||
@file:Suppress("DEPRECATION_ERROR") // KmExtensionType will be moved to an internal package
|
||||
package kotlinx.metadata.internal.extensions
|
||||
|
||||
import kotlinx.metadata.KmExtensionType
|
||||
import kotlinx.metadata.KmExtensionVisitor
|
||||
|
||||
internal fun <T : KmExtensionVisitor> applySingleExtension(type: KmExtensionType, block: MetadataExtensions.() -> T?): T? {
|
||||
var result: T? = null
|
||||
for (extension in MetadataExtensions.INSTANCES) {
|
||||
val current = block(extension) ?: continue
|
||||
if (result != null) {
|
||||
throw IllegalStateException("Multiple extensions handle the same extension type: $type")
|
||||
}
|
||||
result = current
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
internal fun <E : KmExtension<*>> List<E>.matchExtensions(block: MetadataExtensions.(E) -> Boolean) {
|
||||
forEach { ext ->
|
||||
var processed = false
|
||||
for (extesion in MetadataExtensions.INSTANCES) {
|
||||
val current = extesion.block(ext)
|
||||
if (processed && current) throw IllegalStateException("Multiple extensions handle the same extension type: ${ext.type}")
|
||||
processed = current
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun <N : KmExtension<*>> Collection<N>.singleOfType(type: KmExtensionType): N {
|
||||
var result: N? = null
|
||||
|
||||
+24
-25
@@ -11,55 +11,54 @@ import kotlinx.metadata.internal.common.*
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import java.util.*
|
||||
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
public interface MetadataExtensions {
|
||||
public fun readClassExtensions(v: KmClassVisitor, proto: ProtoBuf.Class, c: ReadContext)
|
||||
public fun readClassExtensions(kmClass: KmClass, proto: ProtoBuf.Class, c: ReadContext)
|
||||
|
||||
public fun readPackageExtensions(v: KmPackageVisitor, proto: ProtoBuf.Package, c: ReadContext)
|
||||
public fun readPackageExtensions(kmPackage: KmPackage, proto: ProtoBuf.Package, c: ReadContext)
|
||||
|
||||
public fun readModuleFragmentExtensions(v: KmModuleFragmentVisitor, proto: ProtoBuf.PackageFragment, c: ReadContext)
|
||||
public fun readModuleFragmentExtensions(kmModuleFragment: KmModuleFragment, proto: ProtoBuf.PackageFragment, c: ReadContext)
|
||||
|
||||
public fun readFunctionExtensions(v: KmFunctionVisitor, proto: ProtoBuf.Function, c: ReadContext)
|
||||
public fun readFunctionExtensions(kmFunction: KmFunction, proto: ProtoBuf.Function, c: ReadContext)
|
||||
|
||||
public fun readPropertyExtensions(v: KmPropertyVisitor, proto: ProtoBuf.Property, c: ReadContext)
|
||||
public fun readPropertyExtensions(kmProperty: KmProperty, proto: ProtoBuf.Property, c: ReadContext)
|
||||
|
||||
public fun readConstructorExtensions(v: KmConstructorVisitor, proto: ProtoBuf.Constructor, c: ReadContext)
|
||||
public fun readConstructorExtensions(kmConstructor: KmConstructor, proto: ProtoBuf.Constructor, c: ReadContext)
|
||||
|
||||
public fun readTypeParameterExtensions(v: KmTypeParameterVisitor, proto: ProtoBuf.TypeParameter, c: ReadContext)
|
||||
public fun readTypeParameterExtensions(kmTypeParameter: KmTypeParameter, proto: ProtoBuf.TypeParameter, c: ReadContext)
|
||||
|
||||
public fun readTypeExtensions(v: KmTypeVisitor, proto: ProtoBuf.Type, c: ReadContext)
|
||||
public fun readTypeExtensions(kmType: KmType, proto: ProtoBuf.Type, c: ReadContext)
|
||||
|
||||
public fun readTypeAliasExtensions(v: KmTypeAliasVisitor, proto: ProtoBuf.TypeAlias, c: ReadContext)
|
||||
public fun readTypeAliasExtensions(kmTypeAlias: KmTypeAlias, proto: ProtoBuf.TypeAlias, c: ReadContext)
|
||||
|
||||
public fun readValueParameterExtensions(v: KmValueParameterVisitor, proto: ProtoBuf.ValueParameter, c: ReadContext)
|
||||
public fun readValueParameterExtensions(kmValueParameter: KmValueParameter, proto: ProtoBuf.ValueParameter, c: ReadContext)
|
||||
|
||||
public fun writeClassExtensions(extension: KmClassExtension, proto: ProtoBuf.Class.Builder, c: WriteContext): Boolean
|
||||
public fun writeClassExtensions(kmClass: KmClass, proto: ProtoBuf.Class.Builder, c: WriteContext)
|
||||
|
||||
public fun writePackageExtensions(extension: KmPackageExtension, proto: ProtoBuf.Package.Builder, c: WriteContext): Boolean
|
||||
public fun writePackageExtensions(kmPackage: KmPackage, proto: ProtoBuf.Package.Builder, c: WriteContext)
|
||||
|
||||
public fun writeModuleFragmentExtensions(
|
||||
type: KmExtensionType, proto: ProtoBuf.PackageFragment.Builder, c: WriteContext
|
||||
): KmModuleFragmentExtensionVisitor?
|
||||
kmModuleFragment: KmModuleFragment, proto: ProtoBuf.PackageFragment.Builder, c: WriteContext
|
||||
)
|
||||
|
||||
public fun writeFunctionExtensions(type: KmExtensionType, proto: ProtoBuf.Function.Builder, c: WriteContext): KmFunctionExtensionVisitor?
|
||||
public fun writeFunctionExtensions(kmFunction: KmFunction, proto: ProtoBuf.Function.Builder, c: WriteContext)
|
||||
|
||||
public fun writePropertyExtensions(type: KmExtensionType, proto: ProtoBuf.Property.Builder, c: WriteContext): KmPropertyExtensionVisitor?
|
||||
public fun writePropertyExtensions(kmProperty: KmProperty, proto: ProtoBuf.Property.Builder, c: WriteContext)
|
||||
|
||||
public fun writeConstructorExtensions(
|
||||
type: KmExtensionType, proto: ProtoBuf.Constructor.Builder, c: WriteContext
|
||||
): KmConstructorExtensionVisitor?
|
||||
kmConstructor: KmConstructor, proto: ProtoBuf.Constructor.Builder, c: WriteContext
|
||||
)
|
||||
|
||||
public fun writeTypeParameterExtensions(
|
||||
type: KmExtensionType, proto: ProtoBuf.TypeParameter.Builder, c: WriteContext
|
||||
): KmTypeParameterExtensionVisitor?
|
||||
kmTypeParameter: KmTypeParameter, proto: ProtoBuf.TypeParameter.Builder, c: WriteContext
|
||||
)
|
||||
|
||||
public fun writeTypeExtensions(type: KmExtensionType, proto: ProtoBuf.Type.Builder, c: WriteContext): KmTypeExtensionVisitor?
|
||||
public fun writeTypeExtensions(type: KmType, proto: ProtoBuf.Type.Builder, c: WriteContext)
|
||||
|
||||
public fun writeTypeAliasExtensions(type: KmExtensionType, proto: ProtoBuf.TypeAlias.Builder, c: WriteContext): KmTypeAliasExtensionVisitor?
|
||||
public fun writeTypeAliasExtensions(typeAlias: KmTypeAlias, proto: ProtoBuf.TypeAlias.Builder, c: WriteContext)
|
||||
|
||||
public fun writeValueParameterExtensions(
|
||||
type: KmExtensionType, proto: ProtoBuf.ValueParameter.Builder, c: WriteContext
|
||||
): KmValueParameterExtensionVisitor?
|
||||
valueParameter: KmValueParameter, proto: ProtoBuf.ValueParameter.Builder, c: WriteContext
|
||||
)
|
||||
|
||||
public fun createClassExtension(): KmClassExtension
|
||||
|
||||
|
||||
@@ -81,10 +81,10 @@ private fun compileAndPrintAllFiles(
|
||||
"class" -> {
|
||||
val metadata = kotlinp.readClassFile(outputFile)
|
||||
val classFile = kotlinp.readMetadata(metadata)
|
||||
val classFile3 = KotlinClassMetadata.read(transformClassFileWithNodes(metadata, classFile))
|
||||
val classFile2 = KotlinClassMetadata.read(transformClassFileWithNodes(metadata, classFile))
|
||||
|
||||
for ((sb, classFileToRender) in listOf(
|
||||
main to classFile, afterNodes to classFile3
|
||||
main to classFile, afterNodes to classFile2
|
||||
)) {
|
||||
sb.appendFileName(outputFile.relativeTo(tmpdir))
|
||||
sb.append(kotlinp.renderClassFile(classFileToRender))
|
||||
|
||||
Reference in New Issue
Block a user