[Gradle] Replace deprecated String::capitalize with capitalizeAsciiOnly

This should prevent issues when ascii characters are uppercased or
lowercased on users machines with their locales.

For example in Turkish locale:
* 'i' uppercases to 'İ'
* 'I' lowercases to 'ı'

^KT-38712 Verification Pending
This commit is contained in:
Anton Lakotka
2022-12-07 10:41:39 +01:00
committed by Space Team
parent 7ef858b2fe
commit 1d041b7ef4
11 changed files with 27 additions and 15 deletions
@@ -5,6 +5,8 @@
package org.jetbrains.kotlin.gradle.plugin
import java.util.*
enum class KotlinJsCompilerType {
LEGACY,
IR,
@@ -33,5 +35,5 @@ fun String.removeJsCompilerSuffix(compilerType: KotlinJsCompilerType): String {
return truncatedString
}
return removeSuffix(compilerType.lowerName.capitalize())
return removeSuffix(compilerType.lowerName.capitalize(Locale.ENGLISH))
}
@@ -13,6 +13,7 @@ import org.gradle.api.plugins.ExtensionAware
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import javax.inject.Inject
/*
@@ -164,7 +165,7 @@ abstract class KotlinNativeBinaryContainer @Inject constructor(
return if (name == suffix)
""
else
name.substringBeforeLast(suffix.capitalize())
name.substringBeforeLast(suffix.capitalizeAsciiOnly())
}
// TODO: Remove in 1.3.50.
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
import org.jetbrains.kotlin.gradle.tasks.*
import org.jetbrains.kotlin.gradle.tasks.configuration.*
import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.ObjectOutputStream
@@ -75,7 +76,7 @@ class Kapt3GradleSubplugin @Inject internal constructor(private val registry: To
fun getKaptConfigurationName(sourceSetName: String): String {
return if (sourceSetName != SourceSet.MAIN_SOURCE_SET_NAME)
"$MAIN_KAPT_CONFIGURATION_NAME${sourceSetName.capitalize()}"
"$MAIN_KAPT_CONFIGURATION_NAME${sourceSetName.capitalizeAsciiOnly()}"
else
MAIN_KAPT_CONFIGURATION_NAME
}
@@ -599,7 +600,7 @@ internal fun registerGeneratedJavaSource(kaptTask: TaskProvider<out KaptTask>, j
internal fun Configuration.getNamedDependencies(): List<Dependency> = allDependencies.filter { it.group != null }
private val ANNOTATION_PROCESSOR = "annotationProcessor"
private val ANNOTATION_PROCESSOR_CAP = ANNOTATION_PROCESSOR.capitalize()
private val ANNOTATION_PROCESSOR_CAP = ANNOTATION_PROCESSOR.capitalizeAsciiOnly()
internal fun checkAndroidAnnotationProcessorDependencyUsage(project: Project) {
if (project.hasProperty("kapt.dont.warn.annotationProcessor.dependencies")) {
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.gradle.scripting.ScriptingExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.scripting.compiler.plugin.impl.reporter
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionsFromClasspathDiscoverySource
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
private const val SCRIPTING_LOG_PREFIX = "kotlin scripting plugin:"
@@ -94,7 +95,7 @@ private const val RESULTS_CONFIGURATION_SUFFIX = "Extensions"
private fun getDiscoveryClasspathConfigurationName(sourceSetName: String): String = when (sourceSetName) {
"main" -> MAIN_CONFIGURATION_NAME
else -> "$sourceSetName${MAIN_CONFIGURATION_NAME.capitalize()}"
else -> "$sourceSetName${MAIN_CONFIGURATION_NAME.capitalizeAsciiOnly()}"
}
private fun getDiscoveryResultsConfigurationName(sourceSetName: String): String =
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetPreset
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheckWhenEvaluated
import org.jetbrains.kotlin.statistics.metrics.StringMetrics
import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly
open class KotlinJsTargetPreset(
project: Project
@@ -117,7 +118,7 @@ class KotlinJsSingleTargetPreset(
irPreset?.let {
super.provideTargetDisambiguationClassifier(target)
?.removePrefix(target.name.removeJsCompilerSuffix(KotlinJsCompilerType.LEGACY))
?.decapitalize()
?.decapitalizeAsciiOnly()
}
override fun createKotlinTargetConfigurator() = KotlinJsTargetConfigurator()
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheckWhenEvaluated
import org.jetbrains.kotlin.statistics.metrics.StringMetrics
import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly
open class KotlinJsIrTargetPreset(
project: Project
@@ -92,7 +93,7 @@ class KotlinJsIrSingleTargetPreset(
return if (mixedMode!!) {
super.provideTargetDisambiguationClassifier(target)
?.removePrefix(target.name.removeJsCompilerSuffix(KotlinJsCompilerType.IR))
?.decapitalize()
?.decapitalizeAsciiOnly()
} else {
null
}
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropIdentifier
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.gradle.utils.newInstance
import org.jetbrains.kotlin.gradle.utils.property
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import java.io.File
import javax.inject.Inject
@@ -149,7 +150,7 @@ internal class DefaultCInteropSettingsFactory(private val compilation: KotlinCom
val params = DefaultCInteropSettings.Params(
name = name,
identifier = CInteropIdentifier(CInteropIdentifier.Scope.create(compilation), name),
dependencyConfigurationName = compilation.disambiguateName("${name.capitalize()}CInterop"),
dependencyConfigurationName = compilation.disambiguateName("${name.capitalizeAsciiOnly()}CInterop"),
interopProcessingTaskName = lowerCamelCaseName(
"cinterop",
compilation.name.takeIf { it != "main" }.orEmpty(),
@@ -169,7 +170,7 @@ internal class GradleKpmDefaultCInteropSettingsFactory(private val compilation:
val params = DefaultCInteropSettings.Params(
name = name,
identifier = CInteropIdentifier(CInteropIdentifier.Scope.create(compilation), name),
dependencyConfigurationName = compilation.owner.disambiguateName("${name.capitalize()}CInterop"),
dependencyConfigurationName = compilation.owner.disambiguateName("${name.capitalizeAsciiOnly()}CInterop"),
interopProcessingTaskName = lowerCamelCaseName(
"cinterop",
compilation.compilationPurpose.takeIf { it != "main" }.orEmpty(),
@@ -46,6 +46,7 @@ import org.jetbrains.kotlin.gradle.testing.testTaskName
import org.jetbrains.kotlin.gradle.utils.*
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import java.io.File
open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotlinTargetConfigurator<T>(
@@ -144,7 +145,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
fun configureFatFramework() {
val fatFrameworkConfigurationName = lowerCamelCaseName(binary.name, binary.target.konanTarget.family.name.toLowerCase(), "fat")
val fatFrameworkTaskName = "link${fatFrameworkConfigurationName.capitalize()}"
val fatFrameworkTaskName = "link${fatFrameworkConfigurationName.capitalizeAsciiOnly()}"
val fatFrameworkTask = if (fatFrameworkTaskName in tasks.names) {
tasks.named(fatFrameworkTaskName, FatFrameworkTask::class.java)
@@ -567,7 +568,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
val realProducingTask: TaskProvider<*>
// TODO: Someone remove this HACK PLEASE!
val realArtifactFile = if (copy) {
realProducingTask = project.project.registerTask<Copy>("copy${producingTask.name.capitalize()}") {
realProducingTask = project.project.registerTask<Copy>("copy${producingTask.name.capitalizeAsciiOnly()}") {
val targetSubDirectory = compilationInfo.targetDisambiguationClassifier?.let { "$it/" }.orEmpty()
it.destinationDir = project.project.buildDir.resolve("libs/$targetSubDirectory${compilationInfo.compilationName}")
it.from(artifactFile)
@@ -38,6 +38,7 @@ import org.jetbrains.kotlin.konan.target.Family
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.KonanTarget.*
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import org.jetbrains.kotlin.utils.addToStdlib.cast
import java.io.File
@@ -653,7 +654,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
task.outputDir = cocoapodsExtension.publishDir
task.buildType = buildType
task.baseName = cocoapodsExtension.podFrameworkName
task.description = "Produces ${buildType.getName().capitalize()} XCFramework for all requested targets"
task.description = "Produces ${buildType.getName().capitalizeAsciiOnly()} XCFramework for all requested targets"
task.group = TASK_GROUP
}
}
@@ -667,7 +668,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
with(project) {
val task =
tasks.register(lowerCamelCaseName(POD_FRAMEWORK_PREFIX, "spec", buildType.getName()), PodspecTask::class.java) { task ->
task.description = "Generates podspec for ${buildType.getName().capitalize()} XCFramework publishing"
task.description = "Generates podspec for ${buildType.getName().capitalizeAsciiOnly()} XCFramework publishing"
task.outputDir.set(xcFrameworkTask.map { it.outputDir.resolve(it.buildType.getName()) })
task.needPodspec = provider { true }
task.publishing.set(true)
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.tasks.locateTask
import org.jetbrains.kotlin.gradle.utils.readSystemPropertyAtConfigurationTime
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
/**
* Internal service for creating aggregated test tasks and registering all test tasks.
@@ -111,7 +112,7 @@ class KotlinTestsRegistry(val project: Project, val allTestsTaskName: String = "
private fun cleanTaskName(taskName: String): String {
check(taskName.isNotEmpty())
return "clean" + taskName.capitalize()
return "clean" + taskName.capitalizeAsciiOnly()
}
private val Project.cleanAllTestTask: TaskProvider<*>
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.gradle.utils
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import java.util.*
internal fun lowerCamelCaseName(vararg nameParts: String?): String {
@@ -12,7 +13,7 @@ internal fun lowerCamelCaseName(vararg nameParts: String?): String {
return nonEmptyParts.drop(1).joinToString(
separator = "",
prefix = nonEmptyParts.firstOrNull().orEmpty(),
transform = String::capitalize
transform = String::capitalizeAsciiOnly
)
}