From 77a9d14f93a8a0581f276bee3a1e211781791aee Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 17 Nov 2020 20:26:19 +0100 Subject: [PATCH] Capitalize/decapitalize only ASCII characters across project MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use {de,}capitalizeAsciiOnly and to{Lower,Upper}CaseAsciiOnly where possible, and stdlib's functions with Locale.US everywhere else. Otherwise, if the default system locale is Turkish, the capital latin letter "I" is transformed in toLowerCase to "ı" (see https://github.com/JetBrains/kotlin/blob/66bc142f92085047a1ca64f9a291f0496e33dd98/libraries/stdlib/jvm/test/text/StringJVMTest.kt#L119), which for example breaks the codegen for `intArrayOf` in KT-25400/KT-43405. Similarly, lower case latin letter "i" is transformed to "İ". #KT-13631 Fixed #KT-25400 Fixed #KT-43405 Fixed --- .../kotlin/incremental/IncrementalJsCache.kt | 7 +++-- .../codegen/intrinsics/IntrinsicMethods.java | 8 ++++-- .../messages/PlainTextMessageRenderer.java | 3 +- .../compilerRunner/CompilerOutputParser.kt | 3 +- .../kotlin/daemon/common/FileSystemUtils.kt | 3 +- .../fir/backend/jvm/FirJvmMangleComputer.kt | 3 +- .../jetbrains/kotlin/fir/java/JavaUtils.kt | 5 ++-- .../resolve/FirJavaSyntheticNamesProvider.kt | 4 +-- .../org/jetbrains/kotlin/fir/FirRenderer.kt | 5 ++-- .../jetbrains/kotlin/ir/interpreter/Utils.kt | 14 ++++++---- .../kotlin/ir/interpreter/state/Wrapper.kt | 5 ++-- .../kotlin/kdoc/parser/KDocKnownTag.kt | 4 ++- .../kotlin/kdoc/psi/impl/KDocImpl.kt | 9 +++--- .../compiler/visualizer/FirVisualizer.kt | 3 +- .../annotations/AnnotationUseSiteTarget.kt | 12 ++++---- .../kotlin/builtins/ReflectionTypes.kt | 3 +- .../kotlin/renderer/DescriptorRendererImpl.kt | 5 ++-- .../completion/KDocCompletionContributor.kt | 3 +- ...riableOrParameterNameWithTypeCompletion.kt | 5 ++-- .../kotlin/idea/core/KotlinNameSuggester.kt | 2 +- .../run/KotlinMPPGradleTestTasksProvider.kt | 5 ++-- .../idea/run/MultiplatformTestTasksChooser.kt | 7 +++-- .../jetbrains/kotlin/idea/maven/PomFile.kt | 6 ++-- .../wizard/NewProjectWizardModuleBuilder.kt | 3 +- .../ModulesEditorToolbarDecorator.kt | 5 ++-- .../idea/debugger/FileRankingCalculator.kt | 3 +- .../RecursivePropertyAccessorInspection.kt | 5 ++-- .../kotlin/idea/quickfix/AddArrayOfTypeFix.kt | 5 ++-- .../extractableAnalysisUtil.kt | 7 +++-- .../moveMethod/MoveKotlinMethodProcessor.kt | 3 +- .../kotlin/idea/refactoring/move/moveUtils.kt | 3 +- .../jetbrains/kotlin/j2k/ast/Expressions.kt | 3 +- .../FieldToPropertyProcessing.kt | 3 +- .../src/org/jetbrains/kotlin/js/dce/util.kt | 3 +- .../kotlin/js/config/ErrorTolerancePolicy.kt | 6 ++-- .../intrinsic/functions/factories/ArrayFIF.kt | 2 +- .../kotlin/mainKts/impl/directories.kt | 2 +- .../org/jetbrains/kotlin/kotlinp/printers.kt | 5 ++-- .../ir/buildsystem/SourcesetIR.kt | 3 +- .../NativeTargetConfigurator.kt | 5 ++-- .../kotlin/tools/projectWizard/mpp/mpp.kt | 8 ++---- .../plugins/kotlin/ModulesToIRsConverter.kt | 3 +- .../plugins/templates/TemplatesPlugin.kt | 8 +++--- .../templates/KtorServerTemplate.kt | 28 +++++++++++-------- .../tools/projectWizard/templates/Template.kt | 15 +++++----- .../jetbrains/kotlin/konan/target/utils.kt | 4 ++- ...rtGettersAndSettersToPropertyProcessing.kt | 3 +- .../kotlin/nj2k/ConversionsRunner.kt | 5 ++-- .../BoxedTypeOperationsConversion.kt | 6 ++-- .../conversions/ImplicitCastsConversion.kt | 7 +++-- nj2k/src/org/jetbrains/kotlin/nj2k/utils.kt | 7 +++-- .../base/incremental/incrementalProcessors.kt | 5 ++-- .../idea/KaptGradleProjectImportHandler.kt | 5 ++-- 53 files changed, 173 insertions(+), 121 deletions(-) diff --git a/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt b/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt index e0fc64a147d..ed38bea2a31 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt @@ -32,6 +32,7 @@ import org.jetbrains.kotlin.name.parentOrNull import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol import org.jetbrains.kotlin.serialization.deserialization.getClassId import org.jetbrains.kotlin.serialization.js.JsSerializerProtocol +import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import java.io.DataInput import java.io.DataOutput import java.io.File @@ -326,7 +327,7 @@ private class ProtoDataProvider(private val serializerProtocol: SerializerExtens proto.`package`.apply { val packageNameId = getExtensionOrNull(serializerProtocol.packageFqName) val packageFqName = packageNameId?.let { FqName(nameResolver.getPackageFqName(it)) } ?: FqName.ROOT - val packagePartClassId = ClassId(packageFqName, Name.identifier(sourceFile.nameWithoutExtension.capitalize() + "Kt")) + val packagePartClassId = ClassId(packageFqName, Name.identifier(sourceFile.nameWithoutExtension.capitalizeAsciiOnly() + "Kt")) classes[packagePartClassId] = PackagePartProtoData(this, nameResolver, packageFqName) } @@ -347,7 +348,7 @@ fun getProtoData(sourceFile: File, metadata: ByteArray): Map proto.`package`.apply { val packageFqName = getExtensionOrNull(JsProtoBuf.packageFqName)?.let(nameResolver::getPackageFqName)?.let(::FqName) ?: FqName.ROOT - val packagePartClassId = ClassId(packageFqName, Name.identifier(sourceFile.nameWithoutExtension.capitalize() + "Kt")) + val packagePartClassId = ClassId(packageFqName, Name.identifier(sourceFile.nameWithoutExtension.capitalizeAsciiOnly() + "Kt")) classes[packagePartClassId] = PackagePartProtoData(this, nameResolver, packageFqName) } @@ -412,4 +413,4 @@ private class PackageMetadataMap(storageFile: File) : BasicStringMap( operator fun get(packageName: String) = storage[packageName] override fun dumpValue(value: ByteArray): String = "Package metadata: ${value.md5()}" -} \ No newline at end of file +} diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicMethods.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicMethods.java index 8feb66f79ab..6742e3763c9 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicMethods.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicMethods.java @@ -17,11 +17,10 @@ package org.jetbrains.kotlin.codegen.intrinsics; import com.google.common.collect.ImmutableList; -import kotlin.text.StringsKt; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.builtins.StandardNames; import org.jetbrains.kotlin.builtins.PrimitiveType; +import org.jetbrains.kotlin.builtins.StandardNames; import org.jetbrains.kotlin.codegen.AsmUtil; import org.jetbrains.kotlin.config.JvmTarget; import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor; @@ -30,6 +29,7 @@ import org.jetbrains.kotlin.name.FqNameUnsafe; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType; import org.jetbrains.kotlin.types.expressions.OperatorConventions; +import org.jetbrains.kotlin.util.capitalizeDecapitalize.CapitalizeDecapitalizeKt; import org.jetbrains.org.objectweb.asm.Type; import static org.jetbrains.kotlin.builtins.StandardNames.*; @@ -122,7 +122,9 @@ public class IntrinsicMethods { declareIntrinsicFunction(typeFqName, "toString", 0, TO_STRING); intrinsicsMap.registerIntrinsic( - BUILT_INS_PACKAGE_FQ_NAME, null, StringsKt.decapitalize(type.getArrayTypeName().asString()) + "Of", 1, new ArrayOf() + BUILT_INS_PACKAGE_FQ_NAME, null, + CapitalizeDecapitalizeKt.decapitalizeAsciiOnly(type.getArrayTypeName().asString()) + "Of", + 1, new ArrayOf() ); } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/PlainTextMessageRenderer.java b/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/PlainTextMessageRenderer.java index d0f073c4ddd..8f8c9a052cd 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/PlainTextMessageRenderer.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/PlainTextMessageRenderer.java @@ -23,6 +23,7 @@ import org.fusesource.jansi.Ansi; import org.fusesource.jansi.internal.CLibrary; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.util.capitalizeDecapitalize.CapitalizeDecapitalizeKt; import java.util.EnumSet; import java.util.Set; @@ -130,7 +131,7 @@ public abstract class PlainTextMessageRenderer implements MessageRenderer { return message; } - return StringsKt.decapitalize(message); + return CapitalizeDecapitalizeKt.decapitalizeAsciiOnly(message); } @NotNull diff --git a/compiler/compiler-runner/src/org/jetbrains/kotlin/compilerRunner/CompilerOutputParser.kt b/compiler/compiler-runner/src/org/jetbrains/kotlin/compilerRunner/CompilerOutputParser.kt index 191634200e9..1cbdd931c35 100644 --- a/compiler/compiler-runner/src/org/jetbrains/kotlin/compilerRunner/CompilerOutputParser.kt +++ b/compiler/compiler-runner/src/org/jetbrains/kotlin/compilerRunner/CompilerOutputParser.kt @@ -30,6 +30,7 @@ import org.xml.sax.SAXException import org.xml.sax.helpers.DefaultHandler import java.io.IOException import java.io.Reader +import java.util.* import javax.xml.parsers.SAXParserFactory object CompilerOutputParser { @@ -124,7 +125,7 @@ object CompilerOutputParser { // We're directly inside the root tag: return } - val qNameLowerCase = qName.toLowerCase() + val qNameLowerCase = qName.toLowerCase(Locale.US) var category: CompilerMessageSeverity? = CATEGORIES[qNameLowerCase] if (category == null) { messageCollector.report(ERROR, "Unknown compiler message tag: $qName") diff --git a/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/FileSystemUtils.kt b/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/FileSystemUtils.kt index 85ced4e0299..bd2f3bc400f 100644 --- a/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/FileSystemUtils.kt +++ b/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/FileSystemUtils.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.daemon.common +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.io.File enum class OSKind { @@ -25,7 +26,7 @@ enum class OSKind { Unknown; companion object { - val current: OSKind = System.getProperty("os.name").toLowerCase().let { + val current: OSKind = System.getProperty("os.name").toLowerCaseAsciiOnly().let { when { // partly taken from http://www.code4copy.com/java/post/detecting-os-type-in-java it.startsWith("windows") -> Windows diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt index 379af1ea5d0..32f7ebd5eb6 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty open class FirJvmMangleComputer( @@ -210,7 +211,7 @@ open class FirJvmMangleComputer( is ConeStarProjection -> appendSignature(MangleConstant.STAR_MARK) is ConeKotlinTypeProjection -> { if (arg.kind != ProjectionKind.INVARIANT) { - appendSignature(arg.kind.name.toLowerCase()) + appendSignature(arg.kind.name.toLowerCaseAsciiOnly()) appendSignature(MangleConstant.VARIANCE_SEPARATOR) } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt index 34590214bac..6233ffd1959 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt @@ -47,6 +47,7 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.Variance.* +import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import org.jetbrains.kotlin.utils.addToStdlib.runIf import java.lang.Deprecated import java.lang.annotation.Documented @@ -140,7 +141,7 @@ internal fun JavaType?.toConeKotlinTypeWithoutEnhancement( val primitiveType = type val kotlinPrimitiveName = when (val javaName = primitiveType?.typeName?.asString()) { null -> "Unit" - else -> javaName.capitalize() + else -> javaName.capitalizeAsciiOnly() } val classId = StandardClassIds.byName(kotlinPrimitiveName) @@ -194,7 +195,7 @@ private fun JavaArrayType.toConeKotlinTypeWithoutEnhancement( ) } } else { - val javaComponentName = componentType.type?.typeName?.asString()?.capitalize() ?: error("Array of voids") + val javaComponentName = componentType.type?.typeName?.asString()?.capitalizeAsciiOnly() ?: error("Array of voids") val classId = StandardClassIds.byName(javaComponentName + "Array") if (forAnnotationValueParameter) { diff --git a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaSyntheticNamesProvider.kt b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaSyntheticNamesProvider.kt index 4071a0932dd..b25132646f7 100644 --- a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaSyntheticNamesProvider.kt +++ b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaSyntheticNamesProvider.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticNamesProvider import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly +import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly @NoMutableState @@ -91,7 +92,7 @@ object FirJavaSyntheticNamesProvider : FirSyntheticNamesProvider() { else -> return emptyList() } val withoutPrefix = identifier.removePrefix(prefix) - val withoutPrefixName = Name.identifier(withoutPrefix.decapitalize()) + val withoutPrefixName = Name.identifier(withoutPrefix.decapitalizeAsciiOnly()) return if (prefix == SETTER_PREFIX) { listOf(withoutPrefixName, Name.identifier(IS_PREFIX + withoutPrefix)) } else { @@ -99,4 +100,3 @@ object FirJavaSyntheticNamesProvider : FirSyntheticNamesProvider() { } } } - diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt index 52db4dc41f5..9223ab2c694 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.types.Variance +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.jetbrains.kotlin.utils.Printer import org.jetbrains.kotlin.utils.addToStdlib.safeAs @@ -226,7 +227,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM } private fun FirMemberDeclaration.modalityAsString(): String { - return modality?.name?.toLowerCase() ?: run { + return modality?.name?.toLowerCaseAsciiOnly() ?: run { if (this is FirCallableMemberDeclaration<*> && this.isOverride) { "open?" } else { @@ -343,7 +344,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM declaration.renderPhaseIfNeeded() print( when (declaration) { - is FirRegularClass -> declaration.classKind.name.toLowerCase().replace("_", " ") + is FirRegularClass -> declaration.classKind.name.toLowerCaseAsciiOnly().replace("_", " ") is FirTypeAlias -> "typealias" is FirSimpleFunction -> "fun" is FirProperty -> { diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt index 1e0fa463421..452fdd9bd55 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt @@ -7,18 +7,22 @@ package org.jetbrains.kotlin.ir.interpreter import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.ir.interpreter.builtins.evaluateIntrinsicAnnotation -import org.jetbrains.kotlin.ir.interpreter.stack.Variable -import org.jetbrains.kotlin.ir.interpreter.state.* import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl -import org.jetbrains.kotlin.ir.symbols.* +import org.jetbrains.kotlin.ir.interpreter.builtins.evaluateIntrinsicAnnotation +import org.jetbrains.kotlin.ir.interpreter.stack.Variable +import org.jetbrains.kotlin.ir.interpreter.state.* +import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol +import org.jetbrains.kotlin.ir.symbols.IrSymbol +import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol +import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import org.jetbrains.kotlin.utils.addToStdlib.safeAs internal fun IrFunction.getDispatchReceiver(): IrValueParameterSymbol? = this.dispatchReceiverParameter?.symbol @@ -202,7 +206,7 @@ internal fun State?.getCorrectReceiverByFunction(irFunction: IrFunction): State? return generateSequence(original) { it.superClass }.firstOrNull { it.irClass.thisReceiver == other } ?: this } -internal fun IrFunction.getCapitalizedFileName() = this.file.name.replace(".kt", "Kt").capitalize() +internal fun IrFunction.getCapitalizedFileName() = this.file.name.replace(".kt", "Kt").capitalizeAsciiOnly() internal fun IrType.isUnsigned() = this.isUByte() || this.isUShort() || this.isUInt() || this.isULong() diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Wrapper.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Wrapper.kt index 4af15568285..4baf6203cb4 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Wrapper.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Wrapper.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.ir.util.defaultType import org.jetbrains.kotlin.ir.util.fqNameForIrSerialization import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable import org.jetbrains.kotlin.ir.util.parentAsClass +import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import java.lang.invoke.MethodHandle import java.lang.invoke.MethodHandles import java.lang.invoke.MethodType @@ -30,7 +31,7 @@ internal class Wrapper(val value: Any, override val irClass: IrClass) : Complex( if (irFunction.getEvaluateIntrinsicValue()?.isEmpty() == true) return null // this method will handle IntrinsicEvaluator // if function is actually a getter, then use "get${property.name.capitalize()}" as method name val propertyName = (irFunction as? IrSimpleFunction)?.correspondingPropertySymbol?.owner?.name?.asString() - val propertyCall = listOfNotNull(propertyName, "get${propertyName?.capitalize()}") + val propertyCall = listOfNotNull(propertyName, "get${propertyName?.capitalizeAsciiOnly()}") .firstOrNull { receiverClass.methods.any { method -> method.name == it } } val intrinsicName = getJavaOriginalName(irFunction) @@ -187,4 +188,4 @@ internal class Wrapper(val value: Any, override val irClass: IrClass) : Complex( override fun toString(): String { return "Wrapper(obj='$typeFqName', value=$value)" } -} \ No newline at end of file +} diff --git a/compiler/psi/src/org/jetbrains/kotlin/kdoc/parser/KDocKnownTag.kt b/compiler/psi/src/org/jetbrains/kotlin/kdoc/parser/KDocKnownTag.kt index 9f99a2e4c0e..a3117b36865 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/kdoc/parser/KDocKnownTag.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/kdoc/parser/KDocKnownTag.kt @@ -16,6 +16,8 @@ package org.jetbrains.kotlin.kdoc.parser +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly + enum class KDocKnownTag(val isReferenceRequired: Boolean, val isSectionStart: Boolean) { AUTHOR(false, false), THROWS(true, false), @@ -37,7 +39,7 @@ enum class KDocKnownTag(val isReferenceRequired: Boolean, val isSectionStart: Bo tagName.subSequence(1, tagName.length) } else tagName try { - return valueOf(name.toString().toUpperCase()) + return valueOf(name.toString().toUpperCaseAsciiOnly()) } catch (ignored: IllegalArgumentException) { } diff --git a/compiler/psi/src/org/jetbrains/kotlin/kdoc/psi/impl/KDocImpl.kt b/compiler/psi/src/org/jetbrains/kotlin/kdoc/psi/impl/KDocImpl.kt index 43c5480fe8c..ea061c747de 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/kdoc/psi/impl/KDocImpl.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/kdoc/psi/impl/KDocImpl.kt @@ -10,13 +10,14 @@ import com.intellij.psi.impl.source.tree.LazyParseablePsiElement import com.intellij.psi.tree.IElementType import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.kdoc.lexer.KDocTokens +import org.jetbrains.kotlin.kdoc.parser.KDocKnownTag import org.jetbrains.kotlin.kdoc.psi.api.KDoc import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtDeclaration -import org.jetbrains.kotlin.psi.psiUtil.getParentOfType import org.jetbrains.kotlin.psi.psiUtil.getChildOfType import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType -import org.jetbrains.kotlin.kdoc.parser.KDocKnownTag +import org.jetbrains.kotlin.psi.psiUtil.getParentOfType +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly class KDocImpl(buffer: CharSequence?) : LazyParseablePsiElement(KDocTokens.KDOC, buffer), KDoc { @@ -37,10 +38,10 @@ class KDocImpl(buffer: CharSequence?) : LazyParseablePsiElement(KDocTokens.KDOC, getChildrenOfType().firstOrNull { it.name == name } override fun findSectionByTag(tag: KDocKnownTag): KDocSection? = - findSectionByName(tag.name.toLowerCase()) + findSectionByName(tag.name.toLowerCaseAsciiOnly()) override fun findSectionByTag(tag: KDocKnownTag, subjectName: String): KDocSection? = getChildrenOfType().firstOrNull { - it.name == tag.name.toLowerCase() && it.getSubjectName() == subjectName + it.name == tag.name.toLowerCaseAsciiOnly() && it.getSubjectName() == subjectName } } diff --git a/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt b/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt index 2dfee53961c..f2e5e700d34 100644 --- a/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt +++ b/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly private typealias Stack = MutableList>> @@ -452,7 +453,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() { resolvedQualifier.symbol?.let { val fir = it.fir if (fir is FirClass) { - data.append(fir.classKind.name.toLowerCase()).append(" ") + data.append(fir.classKind.name.toLowerCaseAsciiOnly()).append(" ") data.append((fir as? FirRegularClass)?.name ?: Name.special("")) if (fir.superTypeRefs.any { it.render() != "kotlin/Any" }) { data.append(": ") diff --git a/core/compiler.common/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationUseSiteTarget.kt b/core/compiler.common/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationUseSiteTarget.kt index 006bf819be8..8b8bfdbc718 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationUseSiteTarget.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationUseSiteTarget.kt @@ -16,16 +16,18 @@ package org.jetbrains.kotlin.descriptors.annotations +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly + enum class AnnotationUseSiteTarget(renderName: String? = null) { - FIELD(), - FILE(), - PROPERTY(), + FIELD, + FILE, + PROPERTY, PROPERTY_GETTER("get"), PROPERTY_SETTER("set"), - RECEIVER(), + RECEIVER, CONSTRUCTOR_PARAMETER("param"), SETTER_PARAMETER("setparam"), PROPERTY_DELEGATE_FIELD("delegate"); - val renderName: String = renderName ?: name.toLowerCase() + val renderName: String = renderName ?: name.toLowerCaseAsciiOnly() } diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/ReflectionTypes.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/ReflectionTypes.kt index ba2c2b3a831..4af442dac9c 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/ReflectionTypes.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/ReflectionTypes.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.types.* +import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import kotlin.reflect.KProperty class ReflectionTypes(module: ModuleDescriptor, private val notFoundClasses: NotFoundClasses) { @@ -35,7 +36,7 @@ class ReflectionTypes(module: ModuleDescriptor, private val notFoundClasses: Not private class ClassLookup(val numberOfTypeParameters: Int) { operator fun getValue(types: ReflectionTypes, property: KProperty<*>): ClassDescriptor { - return types.find(property.name.capitalize(), numberOfTypeParameters) + return types.find(property.name.capitalizeAsciiOnly(), numberOfTypeParameters) } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt index a37436911e8..52ba6d26cde 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.declaresOrInheritsDefaultValu import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.ErrorUtils.UninferredParameterTypeConstructor import org.jetbrains.kotlin.types.TypeUtils.CANT_INFER_FUNCTION_PARAM_TYPE +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.util.* internal class DescriptorRendererImpl( @@ -494,7 +495,7 @@ internal class DescriptorRendererImpl( private fun renderModality(modality: Modality, builder: StringBuilder, defaultModality: Modality) { if (!renderDefaultModality && modality == defaultModality) return - renderModifier(builder, DescriptorRendererModifier.MODALITY in modifiers, modality.name.toLowerCase()) + renderModifier(builder, DescriptorRendererModifier.MODALITY in modifiers, modality.name.toLowerCaseAsciiOnly()) } private fun MemberDescriptor.implicitModalityWithoutExtensions(): Modality { @@ -538,7 +539,7 @@ internal class DescriptorRendererImpl( private fun renderMemberKind(callableMember: CallableMemberDescriptor, builder: StringBuilder) { if (DescriptorRendererModifier.MEMBER_KIND !in modifiers) return if (verbose && callableMember.kind != CallableMemberDescriptor.Kind.DECLARATION) { - builder.append("/*").append(callableMember.kind.name.toLowerCase()).append("*/ ") + builder.append("/*").append(callableMember.kind.name.toLowerCaseAsciiOnly()).append("*/ ") } } diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KDocCompletionContributor.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KDocCompletionContributor.kt index be3e43859bc..ff2a78b2658 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KDocCompletionContributor.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KDocCompletionContributor.kt @@ -43,6 +43,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.utils.collectDescriptorsFiltered +import java.util.* class KDocCompletionContributor : CompletionContributor() { init { @@ -157,7 +158,7 @@ object KDocTagCompletionProvider : CompletionProvider() { val resultWithPrefix = result.withPrefixMatcher(prefix) KDocKnownTag.values().forEach { if (kdocOwner == null || it.isApplicable(kdocOwner)) { - resultWithPrefix.addElement(LookupElementBuilder.create("@" + it.name.toLowerCase())) + resultWithPrefix.addElement(LookupElementBuilder.create("@" + it.name.toLowerCase(Locale.US))) } } } diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/VariableOrParameterNameWithTypeCompletion.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/VariableOrParameterNameWithTypeCompletion.kt index d206a8109fa..168b07042da 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/VariableOrParameterNameWithTypeCompletion.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/VariableOrParameterNameWithTypeCompletion.kt @@ -24,7 +24,6 @@ import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.util.Key import com.intellij.psi.PsiClass import com.intellij.psi.PsiElement -import com.intellij.psi.codeStyle.CodeStyleSettingsManager import com.intellij.psi.codeStyle.NameUtil import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor @@ -69,7 +68,7 @@ class VariableOrParameterNameWithTypeCompletion( prefixWords.indices.map { index -> if (index == 0) prefix else prefixWords.drop(index).joinToString("") } userPrefixes = nameSuggestionPrefixes.indices.map { prefixWords.take(it).joinToString("") } - classNamePrefixMatchers = nameSuggestionPrefixes.map { CamelHumpMatcher(it.capitalize(), false) } + classNamePrefixMatchers = nameSuggestionPrefixes.map { CamelHumpMatcher(it.capitalize(Locale.US), false) } } private val suggestionsByTypesAdded = HashSet() @@ -281,4 +280,4 @@ class VariableOrParameterNameWithTypeCompletion( object Weigher : LookupElementWeigher("kotlin.parameterNameAndTypePriority") { override fun weigh(element: LookupElement, context: WeighingContext): Int = element.getUserData(PRIORITY_KEY) ?: 0 } -} \ No newline at end of file +} diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt index 69bf8db6270..c55ded190d1 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt @@ -164,7 +164,7 @@ object KotlinNameSuggester { val argText = typeArguments.joinToString(separator = "") { it.typeReference?.typeElement?.render() ?: "" } "$argText${referenceExpression?.text ?: ""}" } - else -> text.capitalize() + else -> text.capitalizeAsciiOnly() } } diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/KotlinMPPGradleTestTasksProvider.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/KotlinMPPGradleTestTasksProvider.kt index 0cd104807b2..ac6460a7d3f 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/KotlinMPPGradleTestTasksProvider.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/KotlinMPPGradleTestTasksProvider.kt @@ -13,6 +13,7 @@ import com.intellij.openapi.module.Module import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider import org.jetbrains.kotlin.idea.caches.project.isMPPModule import org.jetbrains.kotlin.idea.configuration.KotlinTargetData +import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import org.jetbrains.plugins.gradle.execution.test.runner.GradleTestTasksProvider import org.jetbrains.plugins.gradle.service.project.GradleProjectResolverUtil import org.jetbrains.plugins.gradle.util.GradleConstants @@ -57,6 +58,6 @@ class KotlinMPPGradleTestTasksProvider : GradleTestTasksProvider { private fun getTaskNames(task: TaskData, namePrefix: String): List { val name = task.name - return listOf(namePrefix + CLEAN_NAME_PREFIX + name.capitalize(), namePrefix + name) + return listOf(namePrefix + CLEAN_NAME_PREFIX + name.capitalizeAsciiOnly(), namePrefix + name) } -} \ No newline at end of file +} diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/MultiplatformTestTasksChooser.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/MultiplatformTestTasksChooser.kt index d9ef2548885..cc908fdc66b 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/MultiplatformTestTasksChooser.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/MultiplatformTestTasksChooser.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.config.ExternalSystemRunTask import org.jetbrains.kotlin.config.ExternalSystemTestRunTask import org.jetbrains.kotlin.idea.facet.externalSystemTestRunTasks import org.jetbrains.kotlin.idea.util.module +import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import org.jetbrains.plugins.gradle.execution.test.runner.* import org.jetbrains.plugins.gradle.util.TasksToRun import java.util.* @@ -56,7 +57,7 @@ class MultiplatformTestTasksChooser : TestTasksChooser() { return { it.targetName == targetName } } - val taskPrefix = targetName + parts[1].capitalize() + val taskPrefix = targetName + parts[1].capitalizeAsciiOnly() return { it.targetName == targetName && it.taskName.startsWith(taskPrefix) } } @@ -119,9 +120,9 @@ class MultiplatformTestTasksChooser : TestTasksChooser() { } private fun getTaskNames(task: ExternalSystemRunTask): List { - return listOf("clean" + task.taskName.capitalize(), task.taskName) + return listOf("clean" + task.taskName.capitalizeAsciiOnly(), task.taskName) } } private val ExternalSystemRunTask.presentableName: String - get() = targetName ?: (":$taskName") \ No newline at end of file + get() = targetName ?: (":$taskName") diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt index 685485da2c5..896915fecae 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.config.TestSourceKotlinRootType import org.jetbrains.kotlin.idea.configuration.RepositoryDescription import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.jetbrains.kotlin.utils.SmartList import java.util.* @@ -116,7 +117,7 @@ class PomFile private constructor(private val xmlFile: XmlFile, val domModel: Ma dependency.classifier.stringValue = classifier if (scope != null && scope != MavenArtifactScope.COMPILE) { - dependency.scope.stringValue = scope.name.toLowerCase() + dependency.scope.stringValue = scope.name.toLowerCaseAsciiOnly() } if (optional) { @@ -635,7 +636,8 @@ internal fun MavenDomDependencies.findDependencies(artifacts: List, sco } private fun MavenDomDependency.matches(artifact: MavenId, scope: MavenArtifactScope?) = - this.matches(artifact) && (this.scope.stringValue == scope?.name?.toLowerCase() || scope == null && this.scope.stringValue == "compile") + this.matches(artifact) && + (this.scope.stringValue == scope?.name?.toLowerCaseAsciiOnly() || scope == null && this.scope.stringValue == "compile") private fun MavenDomArtifactCoordinates.matches(artifact: MavenId) = (artifact.groupId == null || groupId.stringValue == artifact.groupId) diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt index dbc32b3351b..c906ed661b1 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt @@ -40,6 +40,7 @@ import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.firstStep.FirstWizardS import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.runWithProgressBar import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep.SecondStepWizardComponent import java.io.File +import java.util.* import javax.swing.JButton import javax.swing.JComponent import com.intellij.openapi.module.Module as IdeaModule @@ -217,7 +218,7 @@ class ModuleNewWizardFirstStep(wizard: IdeWizard) : WizardStep(wizard, Generatio private fun suggestGroupId(): String { val username = SystemProperties.getUserName() ?: return DEFAULT_GROUP_ID if (!username.matches("[\\w\\s]+".toRegex())) return DEFAULT_GROUP_ID - val usernameAsGroupId = username.trim().toLowerCase().split("\\s+".toRegex()).joinToString(separator = ".") + val usernameAsGroupId = username.trim().toLowerCase(Locale.US).split("\\s+".toRegex()).joinToString(separator = ".") return "me.$usernameAsGroupId" } diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorToolbarDecorator.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorToolbarDecorator.kt index ae6b87b2e3d..0cdb7bbdc99 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorToolbarDecorator.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorToolbarDecorator.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Sourceset import org.jetbrains.kotlin.tools.projectWizard.wizard.KotlinNewProjectWizardUIBundle import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.createPanelWithPopupHandler import org.jetbrains.kotlin.utils.addToStdlib.safeAs +import java.util.* import javax.swing.JComponent class ModulesEditorToolbarDecorator( @@ -72,7 +73,7 @@ class ModulesEditorToolbarDecorator( null -> "" } - text = KotlinNewProjectWizardUIBundle.message("editor.modules.add", moduleKindTextToAdd.capitalize()) + text = KotlinNewProjectWizardUIBundle.message("editor.modules.add", moduleKindTextToAdd.capitalize(Locale.US)) } event.presentation.isEnabled } @@ -103,7 +104,7 @@ class ModulesEditorToolbarDecorator( isEnabled = tree.selectedSettingItem is Module text = KotlinNewProjectWizardUIBundle.message( "editor.modules.remove.tooltip", - selectedModuleKindText?.let { " ${it.capitalize()}" }.orEmpty() + selectedModuleKindText?.let { " ${it.capitalize(Locale.US)}" }.orEmpty() ) } event.presentation.isEnabled diff --git a/idea/jvm-debugger/jvm-debugger-util/src/org/jetbrains/kotlin/idea/debugger/FileRankingCalculator.kt b/idea/jvm-debugger/jvm-debugger-util/src/org/jetbrains/kotlin/idea/debugger/FileRankingCalculator.kt index 9642a20a218..ba5712cc09c 100644 --- a/idea/jvm-debugger/jvm-debugger-util/src/org/jetbrains/kotlin/idea/debugger/FileRankingCalculator.kt +++ b/idea/jvm-debugger/jvm-debugger-util/src/org/jetbrains/kotlin/idea/debugger/FileRankingCalculator.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.descriptorUtil.varargParameterPosition import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode +import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import org.jetbrains.kotlin.utils.keysToMap import kotlin.jvm.internal.FunctionBase @@ -172,7 +173,7 @@ abstract class FileRankingCalculator(private val checkClassFqName: Boolean = tru return -MAJOR // boolean is - return if (methodName.drop(3) == propertyName.capitalize()) MAJOR else -NORMAL + return if (methodName.drop(3) == propertyName.capitalizeAsciiOnly()) MAJOR else -NORMAL } private fun rankingForVisibility(descriptor: DeclarationDescriptorWithVisibility, accessible: Accessible): Ranking { diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/RecursivePropertyAccessorInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/RecursivePropertyAccessorInspection.kt index 12fd0de43b2..0122a85353d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/RecursivePropertyAccessorInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/RecursivePropertyAccessorInspection.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext.DECLARATION_TO_DESCRIPTOR import org.jetbrains.kotlin.resolve.BindingContext.REFERENCE_TARGET import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor +import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly class RecursivePropertyAccessorInspection : AbstractKotlinInspection() { @@ -98,7 +99,7 @@ class RecursivePropertyAccessorInspection : AbstractKotlinInspection() { if (element !is KtSimpleNameExpression) return false val namedFunction = element.getParentOfType(true) as? KtNamedFunction ?: return false val name = namedFunction.name ?: return false - val referencedName = element.text.capitalize() + val referencedName = element.text.capitalizeAsciiOnly() val isGetter = name == "get$referencedName" val isSetter = name == "set$referencedName" if (!isGetter && !isSetter) return false @@ -117,4 +118,4 @@ class RecursivePropertyAccessorInspection : AbstractKotlinInspection() { return (context[REFERENCE_TARGET, receiver] as? ClassDescriptor)?.kind == ClassKind.OBJECT } } -} \ No newline at end of file +} diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddArrayOfTypeFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddArrayOfTypeFix.kt index 592e3290826..577d34b88fe 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddArrayOfTypeFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddArrayOfTypeFix.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.psi.KtPsiFactory import org.jetbrains.kotlin.psi.createExpressionByPattern import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.types.KotlinType +import java.util.* class AddArrayOfTypeFix(expression: KtExpression, expectedType: KotlinType) : KotlinQuickFixAction(expression) { @@ -22,7 +23,7 @@ class AddArrayOfTypeFix(expression: KtExpression, expectedType: KotlinType) : Ko "arrayOf" } else { val typeName = DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(expectedType) - "${typeName.decapitalize()}Of" + "${typeName.decapitalize(Locale.US)}Of" } @@ -34,4 +35,4 @@ class AddArrayOfTypeFix(expression: KtExpression, expectedType: KotlinType) : Ko val arrayOfExpression = KtPsiFactory(project).createExpressionByPattern("$0($1)", prefix, element) element.replace(arrayOfExpression) } -} \ No newline at end of file +} diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt index abd0c6c57ed..3a65b2b679f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.cfg.pseudocodeTraverser.traverseFollowingInstruction import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor import org.jetbrains.kotlin.diagnostics.Errors +import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.analyzeWithContent import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade @@ -34,7 +35,6 @@ import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.core.KotlinNameSuggester import org.jetbrains.kotlin.idea.core.NewDeclarationNameValidator import org.jetbrains.kotlin.idea.core.compareDescriptors -import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.refactoring.createTempCopy import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.AnalysisResult.ErrorMessage import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.AnalysisResult.Status @@ -56,6 +56,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getCalleeExpressionIfAny import org.jetbrains.kotlin.resolve.scopes.LexicalScope import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.typeUtil.makeNullable +import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import org.jetbrains.kotlin.utils.DFS.* import java.util.* @@ -736,7 +737,7 @@ private fun ExtractionData.suggestFunctionNames(returnType: KotlinType): List val property = expr.getStrictParentOfType() if (property?.initializer == expr) { - property.name?.let { functionNames.add(KotlinNameSuggester.suggestNameByName("get" + it.capitalize(), validator)) } + property.name?.let { functionNames.add(KotlinNameSuggester.suggestNameByName("get" + it.capitalizeAsciiOnly(), validator)) } } } @@ -834,4 +835,4 @@ fun ExtractableCodeDescriptor.validate(target: ExtractionTarget = ExtractionTarg ) return ExtractableCodeDescriptorWithConflicts(this, conflicts) -} \ No newline at end of file +} diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveMethod/MoveKotlinMethodProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveMethod/MoveKotlinMethodProcessor.kt index 68da4a46552..91b2b6b14b8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveMethod/MoveKotlinMethodProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveMethod/MoveKotlinMethodProcessor.kt @@ -40,6 +40,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.isAncestorOf import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver import org.jetbrains.kotlin.resolve.scopes.utils.getImplicitReceiversHierarchy +import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import org.jetbrains.kotlin.util.containingNonLocalDeclaration class MoveKotlinMethodProcessor( @@ -197,7 +198,7 @@ class MoveKotlinMethodProcessor( argumentExpression } else return } else { - val getterName = "get${targetVariable.nameAsSafeName.identifier.capitalize()}" + val getterName = "get${targetVariable.nameAsSafeName.identifier.capitalizeAsciiOnly()}" JavaPsiFacade.getElementFactory(myProject).createExpressionFromText("${oldReceiver.text}.$getterName()", null) } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt index 7f51962462a..d80e8063ac9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt @@ -57,6 +57,7 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitClassReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver import org.jetbrains.kotlin.types.expressions.DoubleColonLHS +import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import org.jetbrains.kotlin.utils.addIfNotNull import java.io.File import java.lang.System.currentTimeMillis @@ -407,7 +408,7 @@ fun guessNewFileName(declarationsToMove: Collection): String val newFileName = representative?.run { if (containingKtFile.isScript()) "$name.kts" else "$name.${KotlinFileType.EXTENSION}" } ?: declarationsToMove.first().containingFile.name - return newFileName.capitalize() + return newFileName.capitalizeAsciiOnly() } // returns true if successful diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ast/Expressions.kt b/j2k/src/org/jetbrains/kotlin/j2k/ast/Expressions.kt index 454679d4eca..84361f36e3e 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ast/Expressions.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ast/Expressions.kt @@ -22,6 +22,7 @@ import com.intellij.psi.tree.IElementType import org.jetbrains.kotlin.j2k.CodeBuilder import org.jetbrains.kotlin.j2k.append import org.jetbrains.kotlin.lexer.KtTokens +import java.util.* class ArrayAccessExpression(val expression: Expression, val index: Expression, val lvalue: Boolean) : Expression() { override fun generateCode(builder: CodeBuilder) { @@ -294,7 +295,7 @@ class ClassLiteralExpression(val type: Type): Expression() { fun createArrayInitializerExpression(arrayType: ArrayType, initializers: List, needExplicitType: Boolean = true) : MethodCallExpression { val elementType = arrayType.elementType val createArrayFunction = when { - elementType is PrimitiveType -> (elementType.toNotNullType().canonicalCode() + "ArrayOf").decapitalize() + elementType is PrimitiveType -> (elementType.toNotNullType().canonicalCode() + "ArrayOf").decapitalize(Locale.US) needExplicitType -> "arrayOf<" + arrayType.elementType.canonicalCode() + ">" else -> "arrayOf" } diff --git a/j2k/src/org/jetbrains/kotlin/j2k/usageProcessing/FieldToPropertyProcessing.kt b/j2k/src/org/jetbrains/kotlin/j2k/usageProcessing/FieldToPropertyProcessing.kt index 85111de12ee..c4962f7785e 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/usageProcessing/FieldToPropertyProcessing.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/usageProcessing/FieldToPropertyProcessing.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.j2k.AccessorKind import org.jetbrains.kotlin.j2k.CodeConverter import org.jetbrains.kotlin.j2k.ast.* import org.jetbrains.kotlin.j2k.dot +import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly class FieldToPropertyProcessing( private val field: PsiField, @@ -167,5 +168,5 @@ class UseAccessorsJavaCodeProcessor(private val factory: PsiElementFactory, priv } private fun accessorName(kind: AccessorKind) = - (if (kind == AccessorKind.GETTER) "get" else "set") + propertyName.capitalize() + (if (kind == AccessorKind.GETTER) "get" else "set") + propertyName.capitalizeAsciiOnly() } diff --git a/js/js.dce/src/org/jetbrains/kotlin/js/dce/util.kt b/js/js.dce/src/org/jetbrains/kotlin/js/dce/util.kt index 2beadabfaf4..f984ad4f411 100644 --- a/js/js.dce/src/org/jetbrains/kotlin/js/dce/util.kt +++ b/js/js.dce/src/org/jetbrains/kotlin/js/dce/util.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.js.backend.ast.* import org.jetbrains.kotlin.js.backend.ast.metadata.SpecialFunction import org.jetbrains.kotlin.js.backend.ast.metadata.specialFunction import org.jetbrains.kotlin.js.dce.Context.Node +import java.util.* fun Context.isObjectDefineProperty(function: JsExpression) = isObjectFunction(function, "defineProperty") @@ -46,7 +47,7 @@ fun Context.isObjectFunction(function: JsExpression, functionName: String): Bool fun Context.isKotlinFunction(function: JsExpression, name: String): Boolean { if (function !is JsNameRef || function.ident != name) return false val receiver = (function.qualifier as? JsNameRef)?.name ?: return false - return receiver in nodes && receiver.ident.toLowerCase() == "kotlin" + return receiver in nodes && receiver.ident.toLowerCase(Locale.US) == "kotlin" } fun isSpecialFunction(expr: JsExpression, specialFunction: SpecialFunction): Boolean = diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/config/ErrorTolerancePolicy.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/config/ErrorTolerancePolicy.kt index 2b6f18a5d12..c8e7bf657c5 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/config/ErrorTolerancePolicy.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/config/ErrorTolerancePolicy.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.js.config +import java.util.* + enum class ErrorTolerancePolicy(val allowSyntaxErrors: Boolean, val allowSemanticErrors: Boolean) { NONE(false, false), SEMANTIC(false, true), @@ -16,7 +18,7 @@ enum class ErrorTolerancePolicy(val allowSyntaxErrors: Boolean, val allowSemanti val DEFAULT = NONE fun resolvePolicy(key: String): ErrorTolerancePolicy { - return when (key.toUpperCase()) { + return when (key.toUpperCase(Locale.US)) { "NONE" -> NONE "SEMANTIC" -> SEMANTIC "SYNTAX", "ALL" -> ALL @@ -24,4 +26,4 @@ enum class ErrorTolerancePolicy(val allowSyntaxErrors: Boolean, val allowSemanti } } } -} \ No newline at end of file +} diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.kt index 4d7c269d809..dad6b6bcbd6 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.kt @@ -109,7 +109,7 @@ object ArrayFIF : CompositeFIF() { } private val PrimitiveType.lowerCaseName - get() = typeName.asString().toLowerCase() + get() = typeName.asString().toLowerCase(Locale.US) fun getTag(descriptor: CallableDescriptor, config: JsConfig): String? { if (descriptor !is ConstructorDescriptor) return null diff --git a/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/impl/directories.kt b/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/impl/directories.kt index bacc11d1858..9e2ff344b97 100644 --- a/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/impl/directories.kt +++ b/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/impl/directories.kt @@ -39,7 +39,7 @@ class Directories( // compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/FileSystemUtils.kt // which in turn is based on: http://www.code4copy.com/java/post/detecting-os-type-in-java private val os: OSKind - get() = getProperty("os.name")?.toLowerCase().let { name -> + get() = getProperty("os.name")?.toLowerCase(Locale.US).let { name -> when { name == null -> OSKind.Unknown name.startsWith("windows") -> OSKind.Windows diff --git a/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/printers.kt b/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/printers.kt index 965f159863c..a4f6842585e 100644 --- a/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/printers.kt +++ b/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/printers.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.kotlinp import kotlinx.metadata.* import kotlinx.metadata.jvm.* +import java.util.* private object SpecialCharacters { const val TYPE_ALIAS_MARKER = '^' @@ -309,7 +310,7 @@ private fun printType(flags: Flags, output: (String) -> Unit): KmTypeVisitor = printType(flags) { argumentTypeString -> arguments += buildString { if (variance != KmVariance.INVARIANT) { - append(variance.name.toLowerCase()).append(" ") + append(variance.name.toLowerCase(Locale.US)).append(" ") } append(argumentTypeString) } @@ -399,7 +400,7 @@ private fun printTypeParameter( append("@").append(renderAnnotation(annotation)).append(" ") } if (variance != KmVariance.INVARIANT) { - append(variance.name.toLowerCase()).append(" ") + append(variance.name.toLowerCase(Locale.US)).append(" ") } append("T#$id") if (settings.isVerbose) { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/SourcesetIR.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/SourcesetIR.kt index fa4737046c9..eb056801f36 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/SourcesetIR.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/SourcesetIR.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Sourceset import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType import java.nio.file.Path +import java.util.* sealed class SourcesetIR : BuildSystemIR { @@ -55,4 +56,4 @@ data class MultiplatformSourcesetIR( } val MultiplatformSourcesetIR.sourcesetName - get() = targetName + sourcesetType.name.capitalize() \ No newline at end of file + get() = targetName + sourcesetType.name.capitalize(Locale.US) diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt index 10b14a1efcd..ab22f552bed 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt @@ -4,8 +4,6 @@ import kotlinx.collections.immutable.toPersistentList import org.jetbrains.annotations.NonNls import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.core.Reader - -import org.jetbrains.kotlin.tools.projectWizard.core.buildList import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.* import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.NonDefaultTargetConfigurationIR @@ -13,6 +11,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemT import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.* import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module +import java.util.* interface NativeTargetConfigurator : TargetConfigurator { val isDesktopTarget: Boolean @@ -22,7 +21,7 @@ interface NativeTargetConfigurator : TargetConfigurator { class RealNativeTargetConfigurator private constructor( override val moduleSubType: ModuleSubType ) : NativeTargetConfigurator, SimpleTargetConfigurator { - override val text: String = moduleSubType.name.capitalize() + override val text: String = moduleSubType.name.capitalize(Locale.US) override val isDesktopTarget: Boolean get() = moduleSubType.isNativeDesktop diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/mpp/mpp.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/mpp/mpp.kt index e8c990b37f5..b8ac41ea6a5 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/mpp/mpp.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/mpp/mpp.kt @@ -7,12 +7,9 @@ package org.jetbrains.kotlin.tools.projectWizard.mpp import org.jetbrains.annotations.NonNls import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.core.safeAs import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.SimpleTargetConfigurator import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.inContextOfModuleConfigurator -import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GradlePlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.settings.JavaPackage @@ -22,6 +19,7 @@ import org.jetbrains.kotlin.tools.projectWizard.templates.FileDescriptor import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate import org.jetbrains.kotlin.tools.projectWizard.templates.FileTextDescriptor import java.nio.file.Path +import java.util.* @DslMarker annotation class ExpectFileDSL @@ -321,7 +319,7 @@ private fun pathForFileInTarget( sourcesetType: SourcesetType, ) = mppModulePath / Defaults.SRC_DIR / - "${target.name}${sourcesetType.name.capitalize()}" / + "${target.name}${sourcesetType.name.capitalize(Locale.US)}" / mppModule.configurator.kotlinDirectoryName / javaPackage?.asPath() / - filename \ No newline at end of file + filename diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt index 98be940aebe..ca7b830261d 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* import java.nio.file.Path +import java.util.* data class ModulesToIrConversionData( val rootModules: List, @@ -265,7 +266,7 @@ class ModulesToIRsConverter( val (moduleDependencies) = createModuleDependencies(target) mutateProjectStructureByModuleConfigurator(target, modulePath) val sourcesetss = target.sourcesets.map { sourceset -> - val sourcesetName = target.name + sourceset.sourcesetType.name.capitalize() + val sourcesetName = target.name + sourceset.sourcesetType.name.capitalize(Locale.US) MultiplatformSourcesetIR( sourceset.sourcesetType, modulePath / Defaults.SRC_DIR / sourcesetName, diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt index 531d88be318..a34a3405c4c 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt @@ -9,8 +9,8 @@ import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetti import org.jetbrains.kotlin.tools.projectWizard.core.service.TemplateEngineService import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.ModuleConfiguratorWithTests -import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.MppModuleConfigurator.runArbitraryTask import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.isPresent +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.settingValue import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin @@ -21,8 +21,8 @@ import org.jetbrains.kotlin.tools.projectWizard.templates.* import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.InterceptionPoint import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.TemplateInterceptionApplicationState import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.applyAll -import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.settingValue import java.nio.file.Path +import java.util.* class TemplatesPlugin(context: Context) : Plugin(context) { override val path = pluginPath @@ -174,7 +174,7 @@ class TemplatesPlugin(context: Context) : Plugin(context) { is SrcFilePath -> moduleConfigurator.kotlinDirectoryName is ResourcesFilePath -> moduleConfigurator.resourcesDirectoryName } - SRC_DIR / "${module.name}${filePath.sourcesetType.name.capitalize()}" / directory + SRC_DIR / "${module.name}${filePath.sourcesetType.name.capitalize(Locale.US)}" / directory } is FakeMultiplatformModuleIR -> error("Not supported for FakeMultiplatformModuleIR") } @@ -193,4 +193,4 @@ class TemplatesPlugin(context: Context) : Plugin(context) { templates, fileTemplatesToRender ) -} \ No newline at end of file +} diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/KtorServerTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/KtorServerTemplate.kt index 9a302a4c508..21bdae1083e 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/KtorServerTemplate.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/KtorServerTemplate.kt @@ -7,6 +7,11 @@ package org.jetbrains.kotlin.tools.projectWizard.templates import org.jetbrains.annotations.NonNls +import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle +import org.jetbrains.kotlin.tools.projectWizard.Versions +import org.jetbrains.kotlin.tools.projectWizard.WizardGradleRunConfiguration +import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration +import org.jetbrains.kotlin.tools.projectWizard.core.Reader import org.jetbrains.kotlin.tools.projectWizard.core.Writer import org.jetbrains.kotlin.tools.projectWizard.core.asPath import org.jetbrains.kotlin.tools.projectWizard.core.buildList @@ -15,20 +20,19 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.TargetConfigurationIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.addWithJavaIntoJvmTarget import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact -import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType -import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem -import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.InterceptionPoint -import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle -import org.jetbrains.kotlin.tools.projectWizard.Versions -import org.jetbrains.kotlin.tools.projectWizard.WizardGradleRunConfiguration -import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration -import org.jetbrains.kotlin.tools.projectWizard.core.Reader import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType +import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind -import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* +import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repositories +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version +import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.InterceptionPoint +import java.util.* class KtorServerTemplate : Template() { override val title: String = KotlinNewProjectWizardBundle.message("module.template.ktor.server.title") @@ -110,5 +114,5 @@ enum class KtorServerEngine(val engineName: String, val dependencyName: String) get() = engineName.capitalize() val import: String - get() = "io.ktor.server.${engineName.decapitalize()}.${engineName.capitalize()}" -} \ No newline at end of file + get() = "io.ktor.server.${engineName.decapitalize(Locale.US)}.${engineName.capitalize(Locale.US)}" +} diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt index d359e09f6d7..9b4f9917e7b 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt @@ -1,12 +1,14 @@ +/* + * Copyright 2010-2020 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. + */ + package org.jetbrains.kotlin.tools.projectWizard.templates import org.jetbrains.kotlin.tools.projectWizard.Identificator import org.jetbrains.kotlin.tools.projectWizard.SettingsOwner import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration - - import org.jetbrains.kotlin.tools.projectWizard.core.* - import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.* import org.jetbrains.kotlin.tools.projectWizard.enumSettingImpl import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* @@ -14,8 +16,6 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatf import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.RunConfigurationsPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.InterceptionPoint import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.TemplateInterceptor import java.nio.file.Path +import java.util.* import kotlin.properties.ReadOnlyProperty interface TemplateEnvironment { @@ -163,7 +164,7 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor, DisplayableSet private fun Reader.createDefaultSettings() = mapOf( - "projectName" to StructurePlugin.name.settingValue.capitalize() + "projectName" to StructurePlugin.name.settingValue.capitalize(Locale.US) ) override fun equals(other: Any?): Boolean = @@ -331,4 +332,4 @@ operator fun TemplateApplicationResult.plus(other: TemplateApplicationResult) = irsToAddToBuildFile + other.irsToAddToBuildFile, updateTarget andThen other.updateTarget, updateModuleIR andThen other.updateModuleIR, - ) \ No newline at end of file + ) diff --git a/native/utils/src/org/jetbrains/kotlin/konan/target/utils.kt b/native/utils/src/org/jetbrains/kotlin/konan/target/utils.kt index 4b35065f10d..8254b14cb10 100644 --- a/native/utils/src/org/jetbrains/kotlin/konan/target/utils.kt +++ b/native/utils/src/org/jetbrains/kotlin/konan/target/utils.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.konan.target +import java.util.* + /** * Name of a preset used in the 'kotlin-multiplatform' Gradle plugin to represent this target. */ @@ -19,5 +21,5 @@ val KonanTarget.presetName: String private fun evaluatePresetName(targetName: String): String { val nameParts = targetName.split('_').mapNotNull { it.takeIf(String::isNotEmpty) } - return nameParts.asSequence().drop(1).joinToString("", nameParts.firstOrNull().orEmpty(), transform = String::capitalize) + return nameParts.asSequence().drop(1).joinToString("", nameParts.firstOrNull().orEmpty()) { it.capitalize(Locale.US) } } diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt index ac7f6371f4e..baa5091324f 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt @@ -52,6 +52,7 @@ import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.checker.KotlinTypeChecker import org.jetbrains.kotlin.types.isError import org.jetbrains.kotlin.types.typeUtil.isUnit +import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly import org.jetbrains.kotlin.util.isJavaDescriptor import org.jetbrains.kotlin.utils.addToStdlib.cast import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull @@ -369,7 +370,7 @@ private class ConvertGettersAndSettersToPropertyStatefulProcessing( return declarations .asSequence() .mapNotNull { it.asPropertyAccessor() } - .groupBy { it.name.removePrefix("is").decapitalize() } + .groupBy { it.name.removePrefix("is").decapitalizeAsciiOnly() } .values .mapNotNull { group -> val realGetter = group.firstIsInstanceOrNull() diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/ConversionsRunner.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/ConversionsRunner.kt index 218f4ec7587..40b9b9a4e97 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/ConversionsRunner.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/ConversionsRunner.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.nj2k.tree.JKLambdaExpression import org.jetbrains.kotlin.nj2k.tree.JKParameter import org.jetbrains.kotlin.nj2k.tree.JKTreeRoot import org.jetbrains.kotlin.utils.addToStdlib.safeAs +import java.util.* object ConversionsRunner { private fun createConversions(context: NewJ2kConverterContext) = listOf( @@ -105,7 +106,7 @@ object ConversionsRunner { private fun Conversion.description(): String { val conversionName = this::class.simpleName - val words = conversionName?.let { wordRegex.findAll(conversionName).map { it.value.decapitalize() }.toList() } + val words = conversionName?.let { wordRegex.findAll(conversionName).map { it.value.decapitalize(Locale.US) }.toList() } return when { conversionName == null -> "Converting..." conversionName.endsWith("Conversion") -> "Converting ${words!!.dropLast(1).joinToString(" ")}" @@ -114,4 +115,4 @@ object ConversionsRunner { } private val wordRegex = "[A-Z][a-z0-9]+".toRegex() -} \ No newline at end of file +} diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BoxedTypeOperationsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BoxedTypeOperationsConversion.kt index b3b82aef797..c006b2c9851 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BoxedTypeOperationsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BoxedTypeOperationsConversion.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.types.primitiveTypes - +import java.util.* class BoxedTypeOperationsConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) { override fun applyToElement(element: JKTreeElement): JKTreeElement { @@ -40,7 +40,7 @@ class BoxedTypeOperationsConversion(context: NewJ2kConverterContext) : Recursive if (operationType !in primitiveTypeNames) return null return JKCallExpressionImpl( symbolProvider.provideMethodSymbol( - "kotlin.${primitiveTypeName.capitalize()}.to${operationType.capitalize()}" + "kotlin.${primitiveTypeName.capitalize(Locale.US)}.to${operationType.capitalize(Locale.US)}" ), JKArgumentList() ).withFormattingFrom(methodCallExpression) @@ -59,4 +59,4 @@ class BoxedTypeOperationsConversion(context: NewJ2kConverterContext) : Recursive private val primitiveTypeUnwrapRegexp = """([\w.]+)\.(\w+)Value""".toRegex() } -} \ No newline at end of file +} diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt index cbff0757e06..05ca33639fd 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.nj2k.types.* import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType import org.jetbrains.kotlin.utils.addToStdlib.safeAs +import java.util.* class ImplicitCastsConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) { override fun applyToElement(element: JKTreeElement): JKTreeElement { @@ -138,8 +139,8 @@ class ImplicitCastsConversion(context: NewJ2kConverterContext) : RecursiveApplic } } - val initialTypeName = expressionTypeAsPrimitive.jvmPrimitiveType.javaKeywordName.capitalize() - val conversionFunctionName = "to${toTypeAsPrimitive.jvmPrimitiveType.javaKeywordName.capitalize()}" + val initialTypeName = expressionTypeAsPrimitive.jvmPrimitiveType.javaKeywordName.capitalize(Locale.US) + val conversionFunctionName = "to${toTypeAsPrimitive.jvmPrimitiveType.javaKeywordName.capitalize(Locale.US)}" return JKQualifiedExpression( copyTreeAndDetach().parenthesizeIfBinaryExpression(), JKCallExpressionImpl( @@ -164,4 +165,4 @@ class ImplicitCastsConversion(context: NewJ2kConverterContext) : RecursiveApplic val lastArrayType = realParameterTypes.lastOrNull()?.arrayInnerType() ?: return realParameterTypes return realParameterTypes.subList(0, realParameterTypes.lastIndex) + lastArrayType } -} \ No newline at end of file +} diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/utils.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/utils.kt index 2e9571b4214..70040a87068 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/utils.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/utils.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.nj2k import org.jetbrains.kotlin.lexer.KtKeywordToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.load.java.JvmAbi +import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly fun List.replace(element: T, replacer: T): List { val mutableList = toMutableList() @@ -22,14 +23,14 @@ fun String.asGetterName() = ?.takeIf { it.isNotEmpty() && it.first().isUpperCase() || it.startsWith("is") && it.length > 2 && it[2].isUpperCase() - }?.decapitalize() + }?.decapitalizeAsciiOnly() ?.escaped() fun String.asSetterName() = takeIf { JvmAbi.isSetterName(it) } ?.removePrefix("set") ?.takeIf { it.isNotEmpty() && it.first().isUpperCase() } - ?.decapitalize() + ?.decapitalizeAsciiOnly() ?.escaped() fun String.isPossiblyGetterOrSetterName() = @@ -40,4 +41,4 @@ private val KEYWORDS = KtTokens.KEYWORDS.types.map { (it as KtKeywordToken).valu fun String.escaped() = if (this in KEYWORDS || '$' in this) "`$this`" - else this \ No newline at end of file + else this diff --git a/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/incremental/incrementalProcessors.kt b/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/incremental/incrementalProcessors.kt index a674abc535c..bf1c80acd4b 100644 --- a/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/incremental/incrementalProcessors.kt +++ b/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/incremental/incrementalProcessors.kt @@ -9,6 +9,7 @@ import com.sun.tools.javac.code.Symbol import org.jetbrains.kotlin.kapt3.base.util.KaptLogger import java.io.File import java.net.URI +import java.util.* import javax.annotation.processing.Filer import javax.annotation.processing.ProcessingEnvironment import javax.annotation.processing.Processor @@ -49,7 +50,7 @@ class IncrementalProcessor(private val processor: Processor, private val kind: D if (fromOptions == null) { RuntimeProcType.NON_INCREMENTAL } else { - val declaredType = fromOptions.drop("org.gradle.annotation.processing.".length).toUpperCase() + val declaredType = fromOptions.drop("org.gradle.annotation.processing.".length).toUpperCase(Locale.US) if (ALLOWED_RUNTIME_TYPES.contains(declaredType)) { enumValueOf(declaredType) } else { @@ -251,4 +252,4 @@ enum class RuntimeProcType(val isIncremental: Boolean) { AGGREGATING(true), ISOLATING(true), NON_INCREMENTAL(false), -} \ No newline at end of file +} diff --git a/plugins/kapt3/kapt3-idea/src/org/jetbrains/kotlin/kapt/idea/KaptGradleProjectImportHandler.kt b/plugins/kapt3/kapt3-idea/src/org/jetbrains/kotlin/kapt/idea/KaptGradleProjectImportHandler.kt index a91bb459591..68947141c64 100644 --- a/plugins/kapt3/kapt3-idea/src/org/jetbrains/kotlin/kapt/idea/KaptGradleProjectImportHandler.kt +++ b/plugins/kapt3/kapt3-idea/src/org/jetbrains/kotlin/kapt/idea/KaptGradleProjectImportHandler.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.idea.configuration.GradleProjectImportHandler import org.jetbrains.kotlin.idea.facet.KotlinFacet import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData import java.io.File +import java.util.* class KaptGradleProjectImportHandler : GradleProjectImportHandler { override fun importBySourceSet(facet: KotlinFacet, sourceSetNode: DataNode) { @@ -42,7 +43,7 @@ class KaptGradleProjectImportHandler : GradleProjectImportHandler { private fun isKaptCompilerPluginPath(path: String): Boolean { val lastIndexOfFile = path.lastIndexOfAny(charArrayOf('/', File.separatorChar)).takeIf { it >= 0 } ?: return false - val fileName = path.drop(lastIndexOfFile + 1).toLowerCase() + val fileName = path.drop(lastIndexOfFile + 1).toLowerCase(Locale.US) return fileName.matches("kotlin\\-annotation\\-processing(\\-gradle)?\\-[0-9].*\\.jar".toRegex()) } -} \ No newline at end of file +}