Capitalize/decapitalize only ASCII characters across project
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
This commit is contained in:
+1
-1
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
+2
-1
@@ -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()
|
||||
get() = targetName + sourcesetType.name.capitalize(Locale.US)
|
||||
|
||||
+2
-3
@@ -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
|
||||
|
||||
|
||||
+3
-5
@@ -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
|
||||
filename
|
||||
|
||||
+2
-1
@@ -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<Module>,
|
||||
@@ -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,
|
||||
|
||||
+4
-4
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+16
-12
@@ -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()}"
|
||||
}
|
||||
get() = "io.ktor.server.${engineName.decapitalize(Locale.US)}.${engineName.capitalize(Locale.US)}"
|
||||
}
|
||||
|
||||
+8
-7
@@ -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,
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user