Change extension properties on ClassName into functions, to be more distinct from other String extensions.

This commit is contained in:
Leonid Startsev
2023-01-05 17:54:35 +01:00
committed by Space Team
parent db53b83822
commit 165e779e3e
5 changed files with 35 additions and 16 deletions
@@ -1,5 +1,6 @@
public final class kotlinx/metadata/ClassNameKt { public final class kotlinx/metadata/ClassNameKt {
public static final fun isLocal (Ljava/lang/String;)Z public static final fun isLocal (Ljava/lang/String;)Z
public static final fun isLocalClassName (Ljava/lang/String;)Z
} }
public abstract interface annotation class kotlinx/metadata/ExperimentalContextReceivers : java/lang/annotation/Annotation { public abstract interface annotation class kotlinx/metadata/ExperimentalContextReceivers : java/lang/annotation/Annotation {
@@ -1143,6 +1144,7 @@ public final class kotlinx/metadata/jvm/JvmMetadataUtil {
public static final fun Metadata (Ljava/lang/Integer;[I[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;)Lkotlin/Metadata; public static final fun Metadata (Ljava/lang/Integer;[I[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;)Lkotlin/Metadata;
public static synthetic fun Metadata$default (Ljava/lang/Integer;[I[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;ILjava/lang/Object;)Lkotlin/Metadata; public static synthetic fun Metadata$default (Ljava/lang/Integer;[I[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;ILjava/lang/Object;)Lkotlin/Metadata;
public static final fun getJvmInternalName (Ljava/lang/String;)Ljava/lang/String; public static final fun getJvmInternalName (Ljava/lang/String;)Ljava/lang/String;
public static final fun toJvmInternalName (Ljava/lang/String;)Ljava/lang/String;
} }
public final class kotlinx/metadata/jvm/JvmMethodSignature : kotlinx/metadata/jvm/JvmMemberSignature { public final class kotlinx/metadata/jvm/JvmMethodSignature : kotlinx/metadata/jvm/JvmMemberSignature {
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. * 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. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
@@ -8,16 +8,22 @@
package kotlinx.metadata.jvm package kotlinx.metadata.jvm
import kotlinx.metadata.ClassName import kotlinx.metadata.ClassName
import kotlinx.metadata.isLocal import kotlinx.metadata.isLocalClassName
/** /**
* JVM internal name of the class, where package names are separated by '/', and class names are separated by '$', * Converts [this] to a JVM internal name of the class, where package names are separated by '/', and class names are separated by '$',
* for example: `"org/foo/bar/Baz$Nested"` * for example: `"org/foo/bar/Baz.Nested"` -> `"org/foo/bar/Baz$Nested"`
*/ */
val ClassName.jvmInternalName: String fun ClassName.toJvmInternalName(): String =
get() = if (this.isLocalClassName()) substring(1)
if (this.isLocal) substring(1) else replace('.', '$')
else replace('.', '$')
@Deprecated(
"Renamed to toJvmInternalName() to avoid confusion with String properties",
ReplaceWith("toJvmInternalName()"),
level = DeprecationLevel.WARNING
)
val ClassName.jvmInternalName: String get() = toJvmInternalName()
/** /**
* Helper function to instantiate [Metadata]. * Helper function to instantiate [Metadata].
@@ -139,14 +139,14 @@ class MetadataSmokeTest {
className className
} }
assertEquals(".kotlinx/metadata/test/MetadataSmokeTest\$jvmInternalName\$L", l) assertEquals(".kotlinx/metadata/test/MetadataSmokeTest\$jvmInternalName\$L", l)
assertEquals("kotlinx/metadata/test/MetadataSmokeTest\$jvmInternalName\$L", l.jvmInternalName) assertEquals("kotlinx/metadata/test/MetadataSmokeTest\$jvmInternalName\$L", l.toJvmInternalName())
val coroutineContextKey = ClassNameReader().run { val coroutineContextKey = ClassNameReader().run {
(KotlinClassMetadata.read(CoroutineContext.Key::class.java.readMetadata()) as KotlinClassMetadata.Class).accept(this) (KotlinClassMetadata.read(CoroutineContext.Key::class.java.readMetadata()) as KotlinClassMetadata.Class).accept(this)
className className
} }
assertEquals("kotlin/coroutines/CoroutineContext.Key", coroutineContextKey) assertEquals("kotlin/coroutines/CoroutineContext.Key", coroutineContextKey)
assertEquals("kotlin/coroutines/CoroutineContext\$Key", coroutineContextKey.jvmInternalName) assertEquals("kotlin/coroutines/CoroutineContext\$Key", coroutineContextKey.toJvmInternalName())
} }
@Test @Test
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. * 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. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
@@ -18,5 +18,16 @@ package kotlinx.metadata
*/ */
typealias ClassName = String // Not a value class because of Java usages typealias ClassName = String // Not a value class because of Java usages
val ClassName.isLocal: Boolean /**
get() = this.startsWith(".") * Checks whether a class name [this] represents a local class or an anonymous object.
*
* A class name represents a local class or an anonymous object if it starts with '.' (dot).
*/
fun ClassName.isLocalClassName(): Boolean = this.startsWith(".")
@Deprecated(
"Renamed to isLocalClassName() to avoid confusion with String properties",
ReplaceWith("isLocalClassName()"),
level = DeprecationLevel.WARNING
)
val ClassName.isLocal: Boolean get() = isLocalClassName()
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. * 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. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
@@ -8,7 +8,7 @@ package kotlinx.metadata.internal
import kotlinx.metadata.ClassName import kotlinx.metadata.ClassName
import kotlinx.metadata.KmAnnotation import kotlinx.metadata.KmAnnotation
import kotlinx.metadata.KmAnnotationArgument import kotlinx.metadata.KmAnnotationArgument
import kotlinx.metadata.isLocal import kotlinx.metadata.isLocalClassName
import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.deserialization.Flags import org.jetbrains.kotlin.metadata.deserialization.Flags
import org.jetbrains.kotlin.metadata.serialization.StringTable import org.jetbrains.kotlin.metadata.serialization.StringTable
@@ -107,7 +107,7 @@ fun KmAnnotationArgument.writeAnnotationArgument(strings: StringTable): ProtoBuf
} }
internal fun StringTable.getClassNameIndex(name: ClassName): Int = internal fun StringTable.getClassNameIndex(name: ClassName): Int =
if (name.isLocal) if (name.isLocalClassName())
getQualifiedClassNameIndex(name.substring(1), true) getQualifiedClassNameIndex(name.substring(1), true)
else else
getQualifiedClassNameIndex(name, false) getQualifiedClassNameIndex(name, false)