kotlinx-metadata: reformat, cleanup, fix inspections

This commit is contained in:
Alexander Udalov
2020-10-07 17:41:38 +02:00
parent c89c31cd29
commit 90d66b0ba5
11 changed files with 38 additions and 27 deletions
@@ -3,6 +3,8 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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("MemberVisibilityCanBePrivate")
package kotlinx.metadata.jvm package kotlinx.metadata.jvm
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmBytecodeBinaryVersion import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmBytecodeBinaryVersion
@@ -29,7 +29,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
class Class internal constructor(header: KotlinClassHeader) : KotlinClassMetadata(header) { class Class internal constructor(header: KotlinClassHeader) : KotlinClassMetadata(header) {
private val classData by lazy(PUBLICATION) { private val classData by lazy(PUBLICATION) {
val data1 = (header.data1.takeIf(Array<*>::isNotEmpty) val data1 = (header.data1.takeIf(Array<*>::isNotEmpty)
?: throw InconsistentKotlinMetadataException("data1 must not be empty")) ?: throw InconsistentKotlinMetadataException("data1 must not be empty"))
JvmProtoBufUtil.readClassDataFrom(data1, header.data2) JvmProtoBufUtil.readClassDataFrom(data1, header.data2)
} }
@@ -68,12 +68,12 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION, metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION,
bytecodeVersion: IntArray = KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION, bytecodeVersion: IntArray = KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION,
extraInt: Int = 0 extraInt: Int = 0
): KotlinClassMetadata.Class { ): Class {
val (d1, d2) = writeProtoBufData(t.build(), c) val (d1, d2) = writeProtoBufData(t.build(), c)
val metadata = KotlinClassHeader( val metadata = KotlinClassHeader(
KotlinClassHeader.CLASS_KIND, metadataVersion, bytecodeVersion, d1, d2, null, null, extraInt KotlinClassHeader.CLASS_KIND, metadataVersion, bytecodeVersion, d1, d2, null, null, extraInt
) )
return KotlinClassMetadata.Class(metadata) return Class(metadata)
} }
} }
} }
@@ -84,7 +84,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
class FileFacade internal constructor(header: KotlinClassHeader) : KotlinClassMetadata(header) { class FileFacade internal constructor(header: KotlinClassHeader) : KotlinClassMetadata(header) {
private val packageData by lazy(PUBLICATION) { private val packageData by lazy(PUBLICATION) {
val data1 = (header.data1.takeIf(Array<*>::isNotEmpty) val data1 = (header.data1.takeIf(Array<*>::isNotEmpty)
?: throw InconsistentKotlinMetadataException("data1 must not be empty")) ?: throw InconsistentKotlinMetadataException("data1 must not be empty"))
JvmProtoBufUtil.readPackageDataFrom(data1, header.data2) JvmProtoBufUtil.readPackageDataFrom(data1, header.data2)
} }
@@ -123,12 +123,12 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION, metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION,
bytecodeVersion: IntArray = KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION, bytecodeVersion: IntArray = KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION,
extraInt: Int = 0 extraInt: Int = 0
): KotlinClassMetadata.FileFacade { ): FileFacade {
val (d1, d2) = writeProtoBufData(t.build(), c) val (d1, d2) = writeProtoBufData(t.build(), c)
val metadata = KotlinClassHeader( val metadata = KotlinClassHeader(
KotlinClassHeader.FILE_FACADE_KIND, metadataVersion, bytecodeVersion, d1, d2, null, null, extraInt KotlinClassHeader.FILE_FACADE_KIND, metadataVersion, bytecodeVersion, d1, d2, null, null, extraInt
) )
return KotlinClassMetadata.FileFacade(metadata) return FileFacade(metadata)
} }
} }
} }
@@ -196,15 +196,15 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION, metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION,
bytecodeVersion: IntArray = KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION, bytecodeVersion: IntArray = KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION,
extraInt: Int = 0 extraInt: Int = 0
): KotlinClassMetadata.SyntheticClass { ): SyntheticClass {
val proto = t?.build() val proto = t?.build()
val (d1, d2) = val (d1, d2) =
if (proto != null) writeProtoBufData(proto, c) if (proto != null) writeProtoBufData(proto, c)
else Pair(emptyArray(), emptyArray()) else Pair(emptyArray(), emptyArray())
val metadata = KotlinClassHeader( val metadata = KotlinClassHeader(
KotlinClassHeader.SYNTHETIC_CLASS_KIND, metadataVersion, bytecodeVersion, d1, d2, null, null, extraInt KotlinClassHeader.SYNTHETIC_CLASS_KIND, metadataVersion, bytecodeVersion, d1, d2, null, null, extraInt
) )
return KotlinClassMetadata.SyntheticClass(metadata) return SyntheticClass(metadata)
} }
} }
} }
@@ -241,12 +241,12 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION, metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION,
bytecodeVersion: IntArray = KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION, bytecodeVersion: IntArray = KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION,
extraInt: Int = 0 extraInt: Int = 0
): KotlinClassMetadata.MultiFileClassFacade { ): MultiFileClassFacade {
val metadata = KotlinClassHeader( val metadata = KotlinClassHeader(
KotlinClassHeader.MULTI_FILE_CLASS_FACADE_KIND, metadataVersion, bytecodeVersion, partClassNames.toTypedArray(), KotlinClassHeader.MULTI_FILE_CLASS_FACADE_KIND, metadataVersion, bytecodeVersion, partClassNames.toTypedArray(),
null, null, null, extraInt null, null, null, extraInt
) )
return KotlinClassMetadata.MultiFileClassFacade(metadata) return MultiFileClassFacade(metadata)
} }
} }
} }
@@ -260,7 +260,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
class MultiFileClassPart internal constructor(header: KotlinClassHeader) : KotlinClassMetadata(header) { class MultiFileClassPart internal constructor(header: KotlinClassHeader) : KotlinClassMetadata(header) {
private val packageData by lazy(PUBLICATION) { private val packageData by lazy(PUBLICATION) {
val data1 = (header.data1.takeIf(Array<*>::isNotEmpty) val data1 = (header.data1.takeIf(Array<*>::isNotEmpty)
?: throw InconsistentKotlinMetadataException("data1 must not be empty")) ?: throw InconsistentKotlinMetadataException("data1 must not be empty"))
JvmProtoBufUtil.readPackageDataFrom(data1, header.data2) JvmProtoBufUtil.readPackageDataFrom(data1, header.data2)
} }
@@ -307,12 +307,12 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION, metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION,
bytecodeVersion: IntArray = KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION, bytecodeVersion: IntArray = KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION,
extraInt: Int = 0 extraInt: Int = 0
): KotlinClassMetadata.MultiFileClassPart { ): MultiFileClassPart {
val (d1, d2) = writeProtoBufData(t.build(), c) val (d1, d2) = writeProtoBufData(t.build(), c)
val metadata = KotlinClassHeader( val metadata = KotlinClassHeader(
KotlinClassHeader.MULTI_FILE_CLASS_PART_KIND, metadataVersion, bytecodeVersion, d1, d2, facadeClassName, null, extraInt KotlinClassHeader.MULTI_FILE_CLASS_PART_KIND, metadataVersion, bytecodeVersion, d1, d2, facadeClassName, null, extraInt
) )
return KotlinClassMetadata.MultiFileClassPart(metadata) return MultiFileClassPart(metadata)
} }
} }
} }
@@ -344,12 +344,12 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
return try { return try {
when (header.kind) { when (header.kind) {
KotlinClassHeader.CLASS_KIND -> KotlinClassMetadata.Class(header) KotlinClassHeader.CLASS_KIND -> Class(header)
KotlinClassHeader.FILE_FACADE_KIND -> KotlinClassMetadata.FileFacade(header) KotlinClassHeader.FILE_FACADE_KIND -> FileFacade(header)
KotlinClassHeader.SYNTHETIC_CLASS_KIND -> KotlinClassMetadata.SyntheticClass(header) KotlinClassHeader.SYNTHETIC_CLASS_KIND -> SyntheticClass(header)
KotlinClassHeader.MULTI_FILE_CLASS_FACADE_KIND -> KotlinClassMetadata.MultiFileClassFacade(header) KotlinClassHeader.MULTI_FILE_CLASS_FACADE_KIND -> MultiFileClassFacade(header)
KotlinClassHeader.MULTI_FILE_CLASS_PART_KIND -> KotlinClassMetadata.MultiFileClassPart(header) KotlinClassHeader.MULTI_FILE_CLASS_PART_KIND -> MultiFileClassPart(header)
else -> KotlinClassMetadata.Unknown(header) else -> Unknown(header)
} }
} catch (e: InconsistentKotlinMetadataException) { } catch (e: InconsistentKotlinMetadataException) {
throw e throw e
@@ -3,6 +3,8 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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("unused")
package kotlinx.metadata.jvm package kotlinx.metadata.jvm
import kotlinx.metadata.* import kotlinx.metadata.*
@@ -4,6 +4,7 @@
*/ */
@file:JvmName("JvmMetadataUtil") @file:JvmName("JvmMetadataUtil")
package kotlinx.metadata.jvm package kotlinx.metadata.jvm
import kotlinx.metadata.ClassName import kotlinx.metadata.ClassName
@@ -4,6 +4,7 @@
*/ */
@file:JvmName("ClassNameKt") @file:JvmName("ClassNameKt")
package kotlinx.metadata package kotlinx.metadata
/** /**
@@ -4,6 +4,7 @@
*/ */
@file:JvmName("FlagsKt") @file:JvmName("FlagsKt")
package kotlinx.metadata package kotlinx.metadata
/** /**
@@ -56,7 +56,9 @@ interface MetadataExtensions {
fun writeTypeAliasExtensions(type: KmExtensionType, proto: ProtoBuf.TypeAlias.Builder, c: WriteContext): KmTypeAliasExtensionVisitor? fun writeTypeAliasExtensions(type: KmExtensionType, proto: ProtoBuf.TypeAlias.Builder, c: WriteContext): KmTypeAliasExtensionVisitor?
fun writeValueParameterExtensions(type: KmExtensionType, proto: ProtoBuf.ValueParameter.Builder, c: WriteContext): KmValueParameterExtensionVisitor? fun writeValueParameterExtensions(
type: KmExtensionType, proto: ProtoBuf.ValueParameter.Builder, c: WriteContext
): KmValueParameterExtensionVisitor?
fun createClassExtension(): KmClassExtension fun createClassExtension(): KmClassExtension
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.metadata.deserialization.*
import org.jetbrains.kotlin.metadata.deserialization.Flags as F import org.jetbrains.kotlin.metadata.deserialization.Flags as F
/** /**
* Allows to populate [BasicReadContext] with additional data * Allows to populate [ReadContext] with additional data
* that can be used when reading metadata in [MetadataExtensions]. * that can be used when reading metadata in [MetadataExtensions].
*/ */
interface ReadContextExtension interface ReadContextExtension
@@ -337,7 +337,7 @@ private fun ProtoBuf.Type.accept(v: KmTypeVisitor, c: ReadContext) {
hasTypeParameter() -> v.visitTypeParameter(typeParameter) hasTypeParameter() -> v.visitTypeParameter(typeParameter)
hasTypeParameterName() -> { hasTypeParameterName() -> {
val id = c.getTypeParameterId(typeParameterName) val id = c.getTypeParameterId(typeParameterName)
?: throw InconsistentKotlinMetadataException("No type parameter id for ${c[typeParameterName]}") ?: throw InconsistentKotlinMetadataException("No type parameter id for ${c[typeParameterName]}")
v.visitTypeParameter(id) v.visitTypeParameter(id)
} }
else -> { else -> {
@@ -355,7 +355,7 @@ private fun ProtoBuf.Type.accept(v: KmTypeVisitor, c: ReadContext) {
if (variance != null) { if (variance != null) {
val argumentType = argument.type(c.types) val argumentType = argument.type(c.types)
?: throw InconsistentKotlinMetadataException("No type argument for non-STAR projection in Type") ?: throw InconsistentKotlinMetadataException("No type argument for non-STAR projection in Type")
v.visitArgument(argumentType.typeFlags, variance)?.let { argumentType.accept(it, c) } v.visitArgument(argumentType.typeFlags, variance)?.let { argumentType.accept(it, c) }
} else { } else {
v.visitStarProjection() v.visitStarProjection()
@@ -76,7 +76,7 @@ fun KmAnnotationArgument<*>.writeAnnotationArgument(strings: StringTable): Proto
} }
is KmAnnotationArgument.ULongValue -> { is KmAnnotationArgument.ULongValue -> {
this.type = ProtoBuf.Annotation.Argument.Value.Type.LONG this.type = ProtoBuf.Annotation.Argument.Value.Type.LONG
this.intValue = value.toLong() this.intValue = value
this.flags = Flags.IS_UNSIGNED.toFlags(true) this.flags = Flags.IS_UNSIGNED.toFlags(true)
} }
is KmAnnotationArgument.StringValue -> { is KmAnnotationArgument.StringValue -> {
@@ -499,7 +499,7 @@ open class PackageWriter(stringTable: StringTable, contextExtensions: List<Write
open class ModuleFragmentWriter(stringTable: StringTable, contextExtensions: List<WriteContextExtension> = emptyList()) : open class ModuleFragmentWriter(stringTable: StringTable, contextExtensions: List<WriteContextExtension> = emptyList()) :
KmModuleFragmentVisitor() { KmModuleFragmentVisitor() {
protected val t = ProtoBuf.PackageFragment.newBuilder() protected val t = ProtoBuf.PackageFragment.newBuilder()!!
protected val c: WriteContext = WriteContext(stringTable, contextExtensions) protected val c: WriteContext = WriteContext(stringTable, contextExtensions)
override fun visitPackage(): KmPackageVisitor? = object : PackageWriter(c.strings, c.contextExtensions) { override fun visitPackage(): KmPackageVisitor? = object : PackageWriter(c.strings, c.contextExtensions) {
@@ -3,6 +3,8 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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("unused")
package kotlinx.metadata package kotlinx.metadata
/** /**