From 4b4ee78e5d8adfb07250ecf37fe836a3fe07959d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Wed, 13 Oct 2021 15:00:00 +0200 Subject: [PATCH] kotlinx-metadata: Fix parsing of inlineClassUnderlyingType --- .../metadata/test/MetadataSmokeTest.kt | 3 +- .../src/kotlinx/metadata/impl/readers.kt | 2 +- .../tools/kotlinp/testData/ValueClass.kt | 6 ++ .../tools/kotlinp/testData/ValueClass.txt | 58 +++++++++++++++++++ 4 files changed, 66 insertions(+), 3 deletions(-) diff --git a/libraries/kotlinx-metadata/jvm/test/kotlinx/metadata/test/MetadataSmokeTest.kt b/libraries/kotlinx-metadata/jvm/test/kotlinx/metadata/test/MetadataSmokeTest.kt index 5c2ae3c19e5..039fbbce7c3 100644 --- a/libraries/kotlinx-metadata/jvm/test/kotlinx/metadata/test/MetadataSmokeTest.kt +++ b/libraries/kotlinx-metadata/jvm/test/kotlinx/metadata/test/MetadataSmokeTest.kt @@ -9,12 +9,11 @@ import kotlinx.metadata.* import kotlinx.metadata.jvm.* import org.jetbrains.org.objectweb.asm.ClassWriter import org.jetbrains.org.objectweb.asm.Opcodes -import org.junit.Assert.* import org.junit.Test import java.net.URLClassLoader import kotlin.coroutines.CoroutineContext import kotlin.reflect.full.primaryConstructor -import kotlin.test.assertFailsWith +import kotlin.test.* class MetadataSmokeTest { private fun Class<*>.readMetadata(): KotlinClassHeader { diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/readers.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/readers.kt index d1276f7ea2d..676bd68613f 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/readers.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/readers.kt @@ -97,7 +97,7 @@ fun ProtoBuf.Class.accept( v.visitInlineClassUnderlyingPropertyName(c[inlineClassUnderlyingPropertyName]) } loadInlineClassUnderlyingType(c)?.let { underlyingType -> - v.visitInlineClassUnderlyingType(underlyingType.flags)?.let { underlyingType.accept(it, c) } + v.visitInlineClassUnderlyingType(underlyingType.typeFlags)?.let { underlyingType.accept(it, c) } } for (versionRequirement in versionRequirementList) { diff --git a/libraries/tools/kotlinp/testData/ValueClass.kt b/libraries/tools/kotlinp/testData/ValueClass.kt index 6dd2cf271c6..086f58458fc 100644 --- a/libraries/tools/kotlinp/testData/ValueClass.kt +++ b/libraries/tools/kotlinp/testData/ValueClass.kt @@ -1,2 +1,8 @@ +@JvmInline +value class A(private val i: Int?) + +@JvmInline +value class B(private val f: suspend () -> Unit) + @JvmInline value class Z(val s: String) diff --git a/libraries/tools/kotlinp/testData/ValueClass.txt b/libraries/tools/kotlinp/testData/ValueClass.txt index c8c7ba4663a..6392bcbf063 100644 --- a/libraries/tools/kotlinp/testData/ValueClass.txt +++ b/libraries/tools/kotlinp/testData/ValueClass.txt @@ -1,3 +1,61 @@ +// A.class +// ------------------------------------------ +// requires language version 1.3.0 (level=ERROR) +public final value class A : kotlin/Any { + + // requires language version 1.3.0 (level=ERROR) + // signature: constructor-impl(Ljava/lang/Integer;)Ljava/lang/Integer; + public constructor(i: kotlin/Int?) + + // signature: equals-impl(Ljava/lang/Integer;Ljava/lang/Object;)Z + public open /* synthesized */ operator fun equals(other: kotlin/Any?): kotlin/Boolean + + // signature: hashCode-impl(Ljava/lang/Integer;)I + public open /* synthesized */ fun hashCode(): kotlin/Int + + // signature: toString-impl(Ljava/lang/Integer;)Ljava/lang/String; + public open /* synthesized */ fun toString(): kotlin/String + + // field: i:Ljava/lang/Integer; + private final val i: kotlin/Int? + private final get + + // underlying property: i + + // underlying type: kotlin/Int? + + // module name: test-module +} +// B.class +// ------------------------------------------ +// requires language version 1.3.0 (level=ERROR) +public final value class B : kotlin/Any { + + // requires language version 1.3.0 (level=ERROR) + // requires language version 1.3.0 (level=ERROR) + // signature: constructor-impl(Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; + public constructor(f: suspend kotlin/Function1, kotlin/Any?>) + + // signature: equals-impl(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)Z + public open /* synthesized */ operator fun equals(other: kotlin/Any?): kotlin/Boolean + + // signature: hashCode-impl(Lkotlin/jvm/functions/Function1;)I + public open /* synthesized */ fun hashCode(): kotlin/Int + + // signature: toString-impl(Lkotlin/jvm/functions/Function1;)Ljava/lang/String; + public open /* synthesized */ fun toString(): kotlin/String + + // requires language version 1.3.0 (level=ERROR) + // field: f:Lkotlin/jvm/functions/Function1; + private final val f: suspend kotlin/Function1, kotlin/Any?> + private final get + + // underlying property: f + + // underlying type: suspend kotlin/Function1, kotlin/Any?> + + // module name: test-module +} // Z.class // ------------------------------------------ // requires language version 1.3.0 (level=ERROR)