From bbc7edf9d19e4fc7242b866911734ffdf78d1d3b Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 12 Dec 2018 16:35:01 +0100 Subject: [PATCH] Fix incorrect character replacement in ClassName.jvmInternalName #KT-28682 Fixed --- libraries/kotlinx-metadata/jvm/ChangeLog.md | 1 + .../kotlinx/metadata/jvm/jvmMetadataUtil.kt | 2 +- .../metadata/test/MetadataSmokeTest.kt | 28 +++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/libraries/kotlinx-metadata/jvm/ChangeLog.md b/libraries/kotlinx-metadata/jvm/ChangeLog.md index fccdca1203a..8bb54627947 100644 --- a/libraries/kotlinx-metadata/jvm/ChangeLog.md +++ b/libraries/kotlinx-metadata/jvm/ChangeLog.md @@ -3,6 +3,7 @@ ## 0.0.5 - [`KT-25371`](https://youtrack.jetbrains.com/issue/KT-25371) Support unsigned integers in kotlinx-metadata-jvm +- [`KT-28682`](https://youtrack.jetbrains.com/issue/KT-28682) Wrong character replacement in ClassName.jvmInternalName of kotlinx-metadata-jvm ## 0.0.4 diff --git a/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/jvmMetadataUtil.kt b/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/jvmMetadataUtil.kt index 1c64487aca0..7a569288e70 100644 --- a/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/jvmMetadataUtil.kt +++ b/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/jvmMetadataUtil.kt @@ -16,4 +16,4 @@ import kotlinx.metadata.isLocal val ClassName.jvmInternalName: String get() = if (this.isLocal) substring(1) - else replace('/', '$') + else replace('.', '$') 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 c5364ebcdd6..e0cdf47a904 100644 --- a/libraries/kotlinx-metadata/jvm/test/kotlinx/metadata/test/MetadataSmokeTest.kt +++ b/libraries/kotlinx-metadata/jvm/test/kotlinx/metadata/test/MetadataSmokeTest.kt @@ -12,6 +12,7 @@ import org.jetbrains.org.objectweb.asm.Opcodes import org.junit.Assert.assertEquals import org.junit.Test import java.net.URLClassLoader +import kotlin.coroutines.CoroutineContext import kotlin.reflect.full.primaryConstructor class MetadataSmokeTest { @@ -144,4 +145,31 @@ class MetadataSmokeTest { assertEquals("Hello, world!", result) } + + @Test + fun jvmInternalName() { + class ClassNameReader : KmClassVisitor() { + lateinit var className: ClassName + + override fun visit(flags: Flags, name: ClassName) { + className = name + } + } + + class L + + val l = ClassNameReader().run { + (KotlinClassMetadata.read(L::class.java.readMetadata()) as KotlinClassMetadata.Class).accept(this) + className + } + assertEquals(".kotlinx/metadata/test/MetadataSmokeTest\$jvmInternalName\$L", l) + assertEquals("kotlinx/metadata/test/MetadataSmokeTest\$jvmInternalName\$L", l.jvmInternalName) + + val coroutineContextKey = ClassNameReader().run { + (KotlinClassMetadata.read(CoroutineContext.Key::class.java.readMetadata()) as KotlinClassMetadata.Class).accept(this) + className + } + assertEquals("kotlin/coroutines/CoroutineContext.Key", coroutineContextKey) + assertEquals("kotlin/coroutines/CoroutineContext\$Key", coroutineContextKey.jvmInternalName) + } }