diff --git a/compiler/testData/codegen/bytecodeText/accessorNaming.kt b/compiler/testData/codegen/bytecodeText/accessorNaming.kt index 1b95c8742e2..727031e2293 100644 --- a/compiler/testData/codegen/bytecodeText/accessorNaming.kt +++ b/compiler/testData/codegen/bytecodeText/accessorNaming.kt @@ -15,6 +15,8 @@ interface I { var HTTPProtocol: String var issueFlag: Boolean + + var русскаяПропертя: Int // should not capitalize it because we only do it for ASCII } // 1 getSimpleFoo @@ -39,3 +41,5 @@ interface I { // 1 setHTTPProtocol // 1 getIssueFlag // 1 setIssueFlag +// 1 getрусскаяПропертя +// 1 setрусскаяПропертя diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JvmAbi.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JvmAbi.java index 194875d86b4..623cad06a3a 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JvmAbi.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JvmAbi.java @@ -16,12 +16,12 @@ package org.jetbrains.kotlin.load.java; -import kotlin.KotlinPackage; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.name.ClassId; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.serialization.deserialization.BinaryVersion; +import org.jetbrains.kotlin.util.capitalizeDecapitalize.CapitalizeDecapitalizeKt; public final class JvmAbi { /** @@ -79,7 +79,7 @@ public final class JvmAbi { public static String getterName(@NotNull String propertyName) { return startsWithIsPrefix(propertyName) ? propertyName - : GET_PREFIX + KotlinPackage.capitalize(propertyName); + : GET_PREFIX + CapitalizeDecapitalizeKt.capitalizeAsciiOnly(propertyName); } @@ -87,14 +87,14 @@ public final class JvmAbi { public static String setterName(@NotNull String propertyName) { return startsWithIsPrefix(propertyName) ? SET_PREFIX + propertyName.substring(IS_PREFIX.length()) - : SET_PREFIX + KotlinPackage.capitalize(propertyName); + : SET_PREFIX + CapitalizeDecapitalizeKt.capitalizeAsciiOnly(propertyName); } private static boolean startsWithIsPrefix(String name) { if (!name.startsWith(IS_PREFIX)) return false; if (name.length() == IS_PREFIX.length()) return false; char c = name.charAt(IS_PREFIX.length()); - return !Character.isLowerCase(c); + return !('a' <= c && c <= 'z'); } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/util/capitalizeDecapitalize.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/capitalizeDecapitalize.kt similarity index 88% rename from compiler/frontend/src/org/jetbrains/kotlin/util/capitalizeDecapitalize.kt rename to core/util.runtime/src/org/jetbrains/kotlin/utils/capitalizeDecapitalize.kt index 76aafb5ba58..3d2c4c17523 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/util/capitalizeDecapitalize.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/capitalizeDecapitalize.kt @@ -44,3 +44,13 @@ public fun String.capitalizeFirstWord(): String { return substring(0, secondWordStart).toUpperCase() + substring(secondWordStart) } +public fun String.capitalizeAsciiOnly(): String { + if (isEmpty()) return this + val c = charAt(0) + return if (c in 'a'..'z') + c.toUpperCase() + substring(1) + else + this +} + +