diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJsCompilerType.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJsCompilerType.kt index 05079d9110c..d82ca8f19d8 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJsCompilerType.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJsCompilerType.kt @@ -27,7 +27,7 @@ enum class KotlinJsCompilerType { } val KotlinJsCompilerType.lowerName - get() = name.toLowerCase() + get() = name.toLowerCase(Locale.ENGLISH) fun String.removeJsCompilerSuffix(compilerType: KotlinJsCompilerType): String { val truncatedString = removeSuffix(compilerType.lowerName) diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/NativeBinaryTypes.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/NativeBinaryTypes.kt index 8f56275650c..531950e761c 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/NativeBinaryTypes.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/NativeBinaryTypes.kt @@ -10,6 +10,7 @@ import org.gradle.api.Named import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.Family.* import org.jetbrains.kotlin.konan.target.KonanTarget +import java.util.* enum class NativeBuildType( val optimized: Boolean, @@ -18,7 +19,7 @@ enum class NativeBuildType( RELEASE(true, false), DEBUG(false, true); - override fun getName(): String = name.toLowerCase() + override fun getName(): String = name.toLowerCase(Locale.ENGLISH) @Suppress("UNUSED_PARAMETER") @Deprecated( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt index 8103b5d09b3..2e3ec97ddd7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.daemon.client.launchProcessWithFallback import org.jetbrains.kotlin.gradle.logging.GradleErrorMessageCollector import org.jetbrains.kotlin.gradle.logging.GradleKotlinLogger import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.jetbrains.org.objectweb.asm.ClassReader import org.jetbrains.org.objectweb.asm.ClassVisitor import org.jetbrains.org.objectweb.asm.FieldVisitor @@ -59,7 +60,7 @@ internal fun loadCompilerVersion(compilerClasspath: Iterable): String { try { val versionClassFileName = KotlinCompilerVersion::class.java.name.replace('.', '/') + ".class" for (cpFile in compilerClasspath) { - if (cpFile.isFile && cpFile.extension.toLowerCase() == "jar") { + if (cpFile.isFile && cpFile.extension.toLowerCaseAsciiOnly() == "jar") { ZipFile(cpFile).use { jar -> val versionFileEntry = jar.getEntry(KotlinCompilerVersion.VERSION_FILE_PATH) if (versionFileEntry != null) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/AbstractKotlinNativeBinaryContainer.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/AbstractKotlinNativeBinaryContainer.kt index 109645dcdde..d19ecbadc13 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/AbstractKotlinNativeBinaryContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/AbstractKotlinNativeBinaryContainer.kt @@ -4,6 +4,7 @@ import org.gradle.api.Action import org.gradle.api.DomainObjectSet import org.gradle.api.Project import org.jetbrains.kotlin.gradle.plugin.mpp.* +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly // DO NOT EDIT MANUALLY! Generated by org.jetbrains.kotlin.generators.gradle.dsl.MppNativeBinaryDSLCodegenKt @@ -42,7 +43,7 @@ abstract class AbstractKotlinNativeBinaryContainer : DomainObjectSet IsolationMode.NONE else -> { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt index 79c69faed0a..ff695081f7f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt @@ -9,6 +9,7 @@ import org.gradle.api.artifacts.transform.* import org.gradle.api.file.FileSystemLocation import org.gradle.api.provider.Provider import org.gradle.api.tasks.Classpath +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.jetbrains.org.objectweb.asm.ClassReader import org.jetbrains.org.objectweb.asm.ClassWriter import java.io.* @@ -72,7 +73,7 @@ private fun visitDirectory(directory: File): ClasspathEntryData { directory.walk().filter { it.extension == "class" - && !it.relativeTo(directory).toString().toLowerCase().startsWith("meta-inf") + && !it.relativeTo(directory).toString().toLowerCaseAsciiOnly().startsWith("meta-inf") && it.name != MODULE_INFO }.forEach { val internalName = it.relativeTo(directory).invariantSeparatorsPath.dropLast(".class".length) @@ -93,7 +94,7 @@ private fun visitJar(jar: File): ClasspathEntryData { val entry = entries.nextElement() if (entry.name.endsWith("class") - && !entry.name.toLowerCase().startsWith("meta-inf") + && !entry.name.toLowerCaseAsciiOnly().startsWith("meta-inf") && entry.name != MODULE_INFO ) { BufferedInputStream(zipFile.getInputStream(entry)).use { inputStream -> diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt index 1a4d18e9614..d2b2aa8c532 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.utils.* +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.util.concurrent.Callable import kotlin.reflect.KMutableProperty1 import kotlin.reflect.full.memberProperties @@ -289,7 +290,7 @@ abstract class KotlinOnlyTargetConfigurator buildCompilationProcessor(compilation).run() if (compilation.isMain()) { - sourcesJarTask(compilation, target.targetName, target.targetName.toLowerCase()) + sourcesJarTask(compilation, target.targetName, target.targetName.toLowerCaseAsciiOnly()) } } } @@ -315,7 +316,7 @@ abstract class KotlinOnlyTargetConfigurator task.configure { taskInstance -> - taskInstance.archiveAppendix.set(classifier.toLowerCase()) + taskInstance.archiveAppendix.set(classifier.toLowerCaseAsciiOnly()) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt index 1c7f522511a..ff8d8e27347 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt @@ -38,6 +38,8 @@ import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.presetName import org.jetbrains.kotlin.statistics.metrics.StringMetrics +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly import org.jetbrains.kotlin.util.prefixIfNot import java.io.File import java.util.* @@ -434,7 +436,9 @@ internal class PropertiesProvider private constructor(private val project: Proje get() = this.property("kotlin.daemon.jvmargs") val kotlinCompilerExecutionStrategy: KotlinCompilerExecutionStrategy - get() = KotlinCompilerExecutionStrategy.fromProperty(this.property("kotlin.compiler.execution.strategy")?.toLowerCase()) + get() = KotlinCompilerExecutionStrategy.fromProperty( + this.property("kotlin.compiler.execution.strategy")?.toLowerCaseAsciiOnly() + ) val kotlinDaemonUseFallbackStrategy: Boolean get() = booleanProperty("kotlin.daemon.useFallbackStrategy") ?: true @@ -460,7 +464,7 @@ internal class PropertiesProvider private constructor(private val project: Proje private inline fun > enumProperty( propName: String, defaultValue: T - ): T = this.property(propName)?.let { enumValueOf(it.toUpperCase()) } ?: defaultValue + ): T = this.property(propName)?.let { enumValueOf(it.toUpperCaseAsciiOnly()) } ?: defaultValue /** * Looks up the property in the following sources with decreasing priority: diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractKotlinTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractKotlinTarget.kt index 93782e236d7..1a273b1c730 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractKotlinTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractKotlinTarget.kt @@ -72,7 +72,11 @@ abstract class AbstractKotlinTarget( targetName else PRIMARY_SINGLE_COMPONENT_NAME - val sourcesArtifact = configureSourcesJarArtifact(mainCompilation, componentName, dashSeparatedName(targetName.toLowerCase())) + val sourcesArtifact = configureSourcesJarArtifact( + mainCompilation, + componentName, + dashSeparatedName(targetName.toLowerCaseAsciiOnly()) + ) if (sourcesArtifact != null) { usageContexts += DefaultKotlinUsageContext( compilation = mainCompilation, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt index 28c33719e2b..0a6c13f2688 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.gradle.targets.metadata.COMMON_MAIN_ELEMENTS_CONFIGU import org.jetbrains.kotlin.gradle.targets.metadata.isCompatibilityMetadataVariantEnabled import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled import org.jetbrains.kotlin.gradle.utils.setProperty +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly abstract class KotlinSoftwareComponent( private val project: Project, @@ -107,7 +108,7 @@ abstract class KotlinSoftwareComponent( name, project, lazy { allPublishableCommonSourceSets().associate { it.name to it.kotlin } }, - name.toLowerCase() + name.toLowerCaseAsciiOnly() ) private fun addSourcesJarArtifactToConfiguration(configurationName: String): PublishArtifact { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt index 251ef2da140..583619a338a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.konan.target.KonanTarget +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.io.File private object XcodeEnvironment { @@ -35,7 +36,7 @@ private object XcodeEnvironment { get() { val configuration = System.getenv("CONFIGURATION") ?: return null - fun String.toNativeBuildType() = when (this.toLowerCase()) { + fun String.toNativeBuildType() = when (this.toLowerCaseAsciiOnly()) { "debug" -> NativeBuildType.DEBUG "release" -> NativeBuildType.RELEASE else -> null diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetComponent.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetComponent.kt index 7f4784a64fb..2e13967e335 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetComponent.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetComponent.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinTargetComponentWithPublicati import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinTargetComponent.TargetProvider import org.jetbrains.kotlin.gradle.plugin.mpp.getCoordinatesFromPublicationDelegateAndProject import org.jetbrains.kotlin.gradle.utils.dashSeparatedName +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly internal class ExternalKotlinTargetComponent( val targetProvider: TargetProvider @@ -45,7 +46,7 @@ internal class ExternalKotlinTargetComponent( get() = true override val defaultArtifactId: String - get() = dashSeparatedName(target.project.name, target.name.toLowerCase()) + get() = dashSeparatedName(target.project.name, target.name.toLowerCaseAsciiOnly()) @Deprecated( message = "Sources artifacts are now published as separate variant " + diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinVariants.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinVariants.kt index ca627009f22..cb82d56b1c1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinVariants.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinVariants.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinTargetComponent import org.jetbrains.kotlin.gradle.utils.dashSeparatedName import org.jetbrains.kotlin.gradle.utils.getValue import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly internal interface KotlinTargetComponentWithPublication : KotlinTargetComponent { // This property is declared in the separate parent type to allow the usages to reference it without forcing the subtypes to load, @@ -88,7 +89,7 @@ open class KotlinVariant( internal var defaultArtifactIdSuffix: String? = null override val defaultArtifactId: String - get() = dashSeparatedName(target.project.name, artifactTargetName.toLowerCase(), defaultArtifactIdSuffix) + get() = dashSeparatedName(target.project.name, artifactTargetName.toLowerCaseAsciiOnly(), defaultArtifactIdSuffix) override var publicationDelegate: MavenPublication? = null } @@ -126,8 +127,8 @@ class JointAndroidKotlinTargetComponent( override val defaultArtifactId: String = dashSeparatedName( target.project.name, - target.targetName.toLowerCase(), - *flavorNames.map { it.toLowerCase() }.toTypedArray() + target.targetName.toLowerCaseAsciiOnly(), + *flavorNames.map { it.toLowerCaseAsciiOnly() }.toTypedArray() ) override var publicationDelegate: MavenPublication? = null diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/variantPublishing.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/variantPublishing.kt index fd4686628e6..0455d654e99 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/variantPublishing.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/variantPublishing.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.publishedConfigurationName import org.jetbrains.kotlin.gradle.plugin.usageByName import org.jetbrains.kotlin.gradle.tasks.withType import org.jetbrains.kotlin.gradle.utils.dashSeparatedName +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.util.* import javax.inject.Inject @@ -192,7 +193,7 @@ open class GradleKpmVariantPublishingConfigurator @Inject constructor( publishedModuleHolder.assignMavenPublication(this) artifactId = dashSeparatedName( project.name, publishedModuleHolder.defaultPublishedModuleSuffix - ).toLowerCase(Locale.ENGLISH) + ).toLowerCaseAsciiOnly() } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/configureReporing.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/configureReporing.kt index abe3221c2a9..d8eee5bed06 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/configureReporing.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/configureReporing.kt @@ -9,11 +9,12 @@ import org.gradle.api.Project import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_BUILD_REPORT_SINGLE_FILE import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_BUILD_REPORT_HTTP_URL +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly internal fun reportingSettings(rootProject: Project): ReportingSettings { val properties = PropertiesProvider(rootProject) val buildReportOutputTypes = properties.buildReportOutputs.map { - BuildReportType.values().firstOrNull { brt -> brt.name == it.trim().toUpperCase() } + BuildReportType.values().firstOrNull { brt -> brt.name == it.trim().toUpperCaseAsciiOnly() } ?: throw IllegalStateException("Unknown output type: $it") }.toMutableList() //temporary solution. support old property val buildReportMode = diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt index 2e1de42022e..e24a9a32935 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.gradle.utils.dashSeparatedName import org.jetbrains.kotlin.gradle.utils.forAllAndroidVariants import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.setProperty +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import javax.inject.Inject abstract class KotlinAndroidTarget @Inject constructor( @@ -138,7 +139,7 @@ abstract class KotlinAndroidTarget @Inject constructor( defaultArtifactIdSuffix = dashSeparatedName( (getFlavorNames(androidVariant) + getBuildTypeName(androidVariant).takeIf { it != "release" }) - .map { it?.toLowerCase() } + .map { it?.toLowerCaseAsciiOnly() } ).takeIf { it.isNotEmpty() } } } @@ -191,9 +192,9 @@ abstract class KotlinAndroidTarget @Inject constructor( compilation, compilation.disambiguateName(""), dashSeparatedName( - compilation.target.name.toLowerCase(), - *flavorNames.map { it.toLowerCase() }.toTypedArray(), - buildTypeName.takeIf { it != "release" }?.toLowerCase() + compilation.target.name.toLowerCaseAsciiOnly(), + *flavorNames.map { it.toLowerCaseAsciiOnly() }.toTypedArray(), + buildTypeName.takeIf { it != "release" }?.toLowerCaseAsciiOnly() ), classifierPrefix = artifactClassifier, sourcesElementsConfigurationName = sourcesElementsConfigurationName diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt index a4a4a6e8013..093246d84f5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.gradle.testing.testTaskName import org.jetbrains.kotlin.gradle.utils.dashSeparatedName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.setProperty +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import javax.inject.Inject abstract class KotlinJsTarget @@ -80,7 +81,7 @@ constructor( irTarget?.let { targetName.removeJsCompilerSuffix(LEGACY) } ?: targetName else PRIMARY_SINGLE_COMPONENT_NAME - configureSourcesJarArtifact(mainCompilation, componentName, dashSeparatedName(targetName.toLowerCase())) + configureSourcesJarArtifact(mainCompilation, componentName, dashSeparatedName(targetName.toLowerCaseAsciiOnly())) usageContexts += DefaultKotlinUsageContext( compilation = mainCompilation, mavenScope = KotlinUsageContext.MavenScope.RUNTIME, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/binaryen/BinaryenPlatform.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/binaryen/BinaryenPlatform.kt index eb2532e8163..e5db7cc50a3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/binaryen/BinaryenPlatform.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/binaryen/BinaryenPlatform.kt @@ -1,5 +1,7 @@ package org.jetbrains.kotlin.gradle.targets.js.binaryen +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly + /** * Provides platform and architecture names that is used to download Binaryen. */ @@ -12,7 +14,7 @@ internal object BinaryenPlatform { const val DARWIN = "macos" val name: String = run { - val name = property("os.name").toLowerCase() + val name = property("os.name").toLowerCaseAsciiOnly() when { name.contains("windows") -> WIN name.contains("mac") -> DARWIN diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt index 46670b88822..eefafc1974a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackMajorVersion.Compan import org.jetbrains.kotlin.gradle.tasks.dependsOn import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat import org.jetbrains.kotlin.gradle.utils.newFileProperty +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.io.File import javax.inject.Inject @@ -129,7 +130,7 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : { task.args.add(0, "serve") }, { task.bin = "webpack-dev-server/bin/webpack-dev-server.js" } )() - task.description = "start ${mode.name.toLowerCase()} webpack dev server" + task.description = "start ${mode.name.toLowerCaseAsciiOnly()} webpack dev server" webpackMajorVersion.choose( { @@ -210,7 +211,7 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : .resolve(link.compilerOptions.moduleName.get() + ".js") } - task.description = "build webpack ${mode.name.toLowerCase()} bundle" + task.description = "build webpack ${mode.name.toLowerCaseAsciiOnly()} bundle" task._destinationDirectory = binary.distribution.directory BuildMetricsService.registerIfAbsent(project)?.let { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt index f3b24385872..948ff905e6b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.PRODUCTION import org.jetbrains.kotlin.gradle.targets.js.subtargets.DefaultDistribution import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinJsSubTarget import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import javax.inject.Inject open class KotlinJsBinaryContainer @@ -216,8 +217,8 @@ constructor( ) = lowerCamelCaseName( if (compilation.isMain()) null else compilation.name, - mode.name.toLowerCase(), - jsBinaryType?.name?.toLowerCase() + mode.name.toLowerCaseAsciiOnly(), + jsBinaryType?.name?.toLowerCaseAsciiOnly() ) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt index 504d4833bb4..3985fa7e674 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.DEVELOPMENT import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics import org.jetbrains.kotlin.statistics.metrics.StringMetrics +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import javax.inject.Inject @CacheableTask @@ -107,9 +108,9 @@ abstract class KotlinJsIrLink @Inject constructor( it.report( StringMetrics.JS_OUTPUT_GRANULARITY, if (newArgs.irPerModule) - KotlinJsIrOutputGranularity.PER_MODULE.name.toLowerCase() + KotlinJsIrOutputGranularity.PER_MODULE.name.toLowerCaseAsciiOnly() else - KotlinJsIrOutputGranularity.WHOLE_PROGRAM.name.toLowerCase() + KotlinJsIrOutputGranularity.WHOLE_PROGRAM.name.toLowerCaseAsciiOnly() ) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTargetBase.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTargetBase.kt index 39eb420cf7e..6c5f0b8820c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTargetBase.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTargetBase.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.targets.js.ir import org.gradle.language.base.plugins.LifecycleBasePlugin import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode import org.jetbrains.kotlin.gradle.tasks.dependsOn +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly abstract class KotlinJsIrSubTargetBase(target: KotlinJsIrTarget, classifier: String) : KotlinJsIrSubTarget(target, classifier) { @@ -25,7 +26,7 @@ abstract class KotlinJsIrSubTargetBase(target: KotlinJsIrTarget, classifier: Str private fun configureRun(binary: JsIrBinary) { val binaryRunName = disambiguateCamelCased( - binary.mode.name.toLowerCase(), + binary.mode.name.toLowerCaseAsciiOnly(), RUN_TASK_NAME ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsPlatform.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsPlatform.kt index 44ac336c1fa..04178263b74 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsPlatform.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsPlatform.kt @@ -1,5 +1,7 @@ package org.jetbrains.kotlin.gradle.targets.js.nodejs +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly + /** * Provides platform and architecture names that is used to download NodeJs. * See [NodeJsEnv.ivyDependency] that is filled in [NodeJsRootExtension.environment]. @@ -14,7 +16,7 @@ internal object NodeJsPlatform { const val SUNOS = "sunos" val name: String = run { - val name = property("os.name").toLowerCase() + val name = property("os.name").toLowerCaseAsciiOnly() when { name.contains("windows") -> WIN name.contains("mac") -> DARWIN @@ -30,7 +32,7 @@ internal object NodeJsPlatform { const val ARM64 = "arm64" val architecture: String = run { - val arch = property("os.arch").toLowerCase() + val arch = property("os.arch").toLowerCaseAsciiOnly() when { arch == "aarch64" -> ARM64 arch.contains("64") -> X64 diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyExtension.kt index a556d84c143..6b8954c4bc2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyExtension.kt @@ -13,6 +13,7 @@ import org.gradle.api.reflect.TypeOf import org.jetbrains.kotlin.gradle.plugin.warnNpmGenerateExternals import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency.Scope.* import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.io.File interface BaseNpmDependencyExtension { @@ -100,7 +101,7 @@ internal fun Project.addNpmDependencyExtension() { private fun scopePrefix(scope: NpmDependency.Scope): String { val scopePrefix = scope.name .removePrefix(NORMAL.name) - .toLowerCase() + .toLowerCaseAsciiOnly() return lowerCamelCaseName(scopePrefix, "npm") } @@ -182,7 +183,7 @@ private abstract class NpmDependencyExtensionDelegate( protected fun npmDeclarationException(args: Array): Nothing { throw IllegalArgumentException( """ - |Unable to add NPM dependency with scope '${scope.name.toLowerCase()}' by ${args.joinToString { "'$it'" }} + |Unable to add NPM dependency with scope '${scope.name.toLowerCaseAsciiOnly()}' by ${args.joinToString { "'$it'" }} |Possible variants: |${possibleVariants().joinToString("\n") { "- ${it.first} -> ${it.second}" }} """.trimMargin() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProject.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProject.kt index 2fdcb3a4647..1cb7cd7b705 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProject.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProject.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.disambiguateName import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinPackageJsonTask +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.io.File import java.io.Serializable @@ -129,14 +130,14 @@ open class NpmProject(@Transient val compilation: KotlinJsCompilation) : Seriali project.name } else null - val targetName = if (target.name.isNotEmpty() && target.name.toLowerCase() != "js") { + val targetName = if (target.name.isNotEmpty() && target.name.toLowerCaseAsciiOnly() != "js") { target.name .replace(DECAMELIZE_REGEX) { it.groupValues .drop(1) .joinToString(prefix = "-", separator = "-") } - .toLowerCase() + .toLowerCaseAsciiOnly() } else null return sequenceOf( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt index fb06e920db3..8408e8d1a33 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.gradle.tasks.dependsOn import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.io.File import javax.inject.Inject import org.jetbrains.kotlin.gradle.tasks.KotlinJsDce as KotlinJsDceTask @@ -153,7 +154,7 @@ abstract class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : { task.bin = "webpack-dev-server/bin/webpack-dev-server.js" } )() - task.description = "start ${type.name.toLowerCase()} webpack dev server" + task.description = "start ${type.name.toLowerCaseAsciiOnly()} webpack dev server" webpackMajorVersion.choose( { @@ -235,7 +236,7 @@ abstract class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : distributeResourcesTask ) - task.description = "build webpack ${type.name.toLowerCase()} bundle" + task.description = "build webpack ${type.name.toLowerCaseAsciiOnly()} bundle" task._destinationDirectory = distribution.directory BuildMetricsService.registerIfAbsent(project)?.let { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt index 37651f1c463..9b00cd4ff84 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt @@ -37,6 +37,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinTest import org.jetbrains.kotlin.gradle.testing.internal.reportsDir import org.jetbrains.kotlin.gradle.utils.appendLine import org.jetbrains.kotlin.gradle.utils.property +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.slf4j.Logger import java.io.File @@ -106,7 +107,7 @@ class KotlinKarma( val propValue = project.kotlinPropertiesProvider.jsKarmaBrowsers(compilation.target) val propBrowsers = propValue?.split(",") propBrowsers?.map(String::trim)?.forEach { - when (it.toLowerCase()) { + when (it.toLowerCaseAsciiOnly()) { "chrome" -> useChrome() "chrome-canary" -> useChromeCanary() "chrome-canary-headless" -> useChromeCanaryHeadless() @@ -503,7 +504,7 @@ class KotlinKarma( val actualText = if (launcherMessage != null) { val (logLevel, message) = launcherMessage.destructured - actualType = LogType.byValueOrNull(logLevel.toLowerCase()) + actualType = LogType.byValueOrNull(logLevel.toLowerCaseAsciiOnly()) if (actualType?.isErrorLike() == true) { processFailedBrowsers(text) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt index 36e95ecfb8b..0e12a71a855 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask import org.jetbrains.kotlin.gradle.utils.dashSeparatedName import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import javax.inject.Inject abstract class KotlinNativeTarget @Inject constructor( @@ -60,7 +61,7 @@ abstract class KotlinNativeTarget @Inject constructor( if (hostSpecificSourceSets.isNotEmpty()) { val hostSpecificMetadataJar = project.locateOrRegisterTask(hostSpecificMetadataJarTaskName) { metadataJar -> - metadataJar.archiveAppendix.set(project.provider { disambiguationClassifier.orEmpty().toLowerCase() }) + metadataJar.archiveAppendix.set(project.provider { disambiguationClassifier.orEmpty().toLowerCaseAsciiOnly() }) metadataJar.archiveClassifier.set("metadata") metadataJar.group = BasePlugin.BUILD_GROUP metadataJar.description = "Assembles Kotlin metadata of target '${name}'." @@ -101,7 +102,7 @@ abstract class KotlinNativeTarget @Inject constructor( } } - configureSourcesJarArtifact(mainCompilation, targetName, dashSeparatedName(targetName.toLowerCase())) + configureSourcesJarArtifact(mainCompilation, targetName, dashSeparatedName(targetName.toLowerCaseAsciiOnly())) val sourcesUsage = DefaultKotlinUsageContext( compilation = mainCompilation, dependencyConfigurationName = sourcesElementsConfigurationName, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt index e3e9bd06102..df8deb20dad 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt @@ -47,6 +47,7 @@ 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 org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.io.File open class KotlinNativeTargetConfigurator : AbstractKotlinTargetConfigurator( @@ -144,7 +145,11 @@ open class KotlinNativeTargetConfigurator : AbstractKotl } fun configureFatFramework() { - val fatFrameworkConfigurationName = lowerCamelCaseName(binary.name, binary.target.konanTarget.family.name.toLowerCase(), "fat") + val fatFrameworkConfigurationName = lowerCamelCaseName( + binary.name, + binary.target.konanTarget.family.name.toLowerCaseAsciiOnly(), + "fat" + ) val fatFrameworkTaskName = "link${fatFrameworkConfigurationName.capitalizeAsciiOnly()}" val fatFrameworkTask = if (fatFrameworkTaskName in tasks.names) { @@ -152,7 +157,7 @@ open class KotlinNativeTargetConfigurator : AbstractKotl } else { tasks.register(fatFrameworkTaskName, FatFrameworkTask::class.java) { it.baseName = binary.baseName - it.destinationDir = it.destinationDir.resolve(binary.buildType.name.toLowerCase()) + it.destinationDir = it.destinationDir.resolve(binary.buildType.name.toLowerCaseAsciiOnly()) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeBinaries.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeBinaries.kt index c103d6bc5ed..00077d81f2e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeBinaries.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeBinaries.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinNativeLink import org.jetbrains.kotlin.gradle.utils.Xcode import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.konan.target.KonanTarget +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly import java.io.File /** @@ -310,7 +311,7 @@ class Framework( * marker - Embed placeholder LLVM IR data as a marker. * Has the same effect as the -Xembed-bitcode-marker command line option. */ - fun embedBitcode(mode: String) = embedBitcode(org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode.valueOf(mode.toUpperCase())) + fun embedBitcode(mode: String) = embedBitcode(org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode.valueOf(mode.toUpperCaseAsciiOnly())) /** * Specifies if the framework is linked as a static library (false by default). diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/NativeDistributionType.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/NativeDistributionType.kt index 0140d5efd86..0bb97da0fba 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/NativeDistributionType.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/NativeDistributionType.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.gradle.targets.native.internal.NativeDistributionTyp import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild import org.jetbrains.kotlin.konan.CompilerVersion import org.jetbrains.kotlin.konan.target.HostManager +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly internal enum class NativeDistributionType(val suffix: String?, val mustGeneratePlatformLibs: Boolean) { LIGHT(null, true), @@ -32,7 +33,7 @@ internal class NativeDistributionTypeProvider(private val project: Project) { lightType: NativeDistributionType, defaultType: NativeDistributionType ): NativeDistributionType { - val requestedByUser = propertiesProvider.nativeDistributionType?.toLowerCase() + val requestedByUser = propertiesProvider.nativeDistributionType?.toLowerCaseAsciiOnly() val deprecatedRestricted = propertiesProvider.nativeDeprecatedRestricted // A case when a deprecated property (kotlin.native.restrictedDistribution) is used to choose the restricted distribution. diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/AdvancedCocoapodsTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/AdvancedCocoapodsTasks.kt index 87f7fd749a8..fee5fabc73e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/AdvancedCocoapodsTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/AdvancedCocoapodsTasks.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.gradle.tasks.PodspecTask.Companion.retrieveSpecRepos import org.jetbrains.kotlin.gradle.utils.runCommand import org.jetbrains.kotlin.konan.target.Family import org.jetbrains.kotlin.konan.target.HostManager +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.io.File import java.io.IOException import java.io.Reader @@ -491,11 +492,11 @@ private object CocoapodsErrorHandlingUtil { ) { message += """ | - | Possible reason: ${family.name.toLowerCase()} deployment target is not configured + | Possible reason: ${family.name.toLowerCaseAsciiOnly()} deployment target is not configured | Configure deployment_target for ALL targets as follows: | cocoapods { | ... - | ${family.name.toLowerCase()}.deploymentTarget = "..." + | ${family.name.toLowerCaseAsciiOnly()}.deploymentTarget = "..." | ... | } | diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/FatFrameworkTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/FatFrameworkTask.kt index a0b29375941..0058af3f7fd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/FatFrameworkTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/FatFrameworkTask.kt @@ -23,6 +23,7 @@ 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.konan.util.visibleName +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.io.ByteArrayOutputStream import java.io.File import java.nio.file.Files @@ -227,7 +228,7 @@ internal constructor( require(!archToFramework.containsKey(arch)) { val alreadyAdded = archToFramework.getValue(arch) - "This fat framework already has a binary for architecture `${arch.name.toLowerCase()}` " + + "This fat framework already has a binary for architecture `${arch.name.toLowerCaseAsciiOnly()}` " + "(${alreadyAdded.name} for target `${alreadyAdded.target.name}`)" } @@ -236,8 +237,10 @@ internal constructor( buildString { append("Cannot create a fat framework from:\n") - archToFramework.forEach { append("${it.value.name} - ${it.key.name.toLowerCase()} - ${staticName(it.value.isStatic)}\n") } - append("${framework.name} - ${arch.name.toLowerCase()} - ${staticName(framework.isStatic)}\n") + archToFramework.forEach { + append("${it.value.name} - ${it.key.name.toLowerCaseAsciiOnly()} - ${staticName(it.value.isStatic)}\n") + } + append("${framework.name} - ${arch.name.toLowerCaseAsciiOnly()} - ${staticName(framework.isStatic)}\n") append("All input frameworks must be either static or dynamic") } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeCompilerArgBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeCompilerArgBuilder.kt index f0b0b359e88..cab23480832 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeCompilerArgBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeCompilerArgBuilder.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.gradle.tasks.CompilerPluginOptions import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.project.model.LanguageSettings +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.io.File internal class CompilerPluginData( @@ -138,7 +139,7 @@ private fun buildKotlinNativeMainArgs( addKey("-g", debuggable) addKey("-ea", debuggable) addArg("-target", target.name) - addArg("-p", outputKind.name.toLowerCase()) + addArg("-p", outputKind.name.toLowerCaseAsciiOnly()) addArg("-o", outFile.absolutePath) libraries.forEach { addArg("-l", it.absolutePath) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/stringUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/stringUtils.kt index 7120575b533..42c89853a6c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/stringUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/stringUtils.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.gradle.utils import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.util.* internal fun lowerCamelCaseName(vararg nameParts: String?): String { @@ -28,14 +29,14 @@ internal fun dashSeparatedLowercaseName(nameParts: Iterable) = dashSeparatedLowercaseName(*nameParts.toList().toTypedArray()) internal fun dashSeparatedLowercaseName(vararg nameParts: String?): String { - val nonEmptyParts = nameParts.mapNotNull { it?.takeIf(String::isNotEmpty)?.toLowerCase(Locale.ENGLISH) } + val nonEmptyParts = nameParts.mapNotNull { it?.takeIf(String::isNotEmpty)?.toLowerCaseAsciiOnly() } return nonEmptyParts.joinToString(separator = "-") } internal fun String.decamelize(): String { return replace(upperCaseRegex) { val (first) = it.destructured - "-${first.toLowerCase()}" + "-${first.toLowerCaseAsciiOnly()}" } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/JvmAndAndroidIntermediateSourceSetTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/JvmAndAndroidIntermediateSourceSetTest.kt index ac7c17417b9..253e7dc2346 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/JvmAndAndroidIntermediateSourceSetTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/JvmAndAndroidIntermediateSourceSetTest.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.kotlinProjectStructureMetadata +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import kotlin.test.* class JvmAndAndroidIntermediateSourceSetTest { @@ -117,7 +118,7 @@ class JvmAndAndroidIntermediateSourceSetTest { assertTrue(kotlinComponents.isNotEmpty(), "Expected at least one KotlinComponent to be present") kotlinComponents.forEach { component -> - val isReleaseComponent = "release" in component.name.toLowerCase() + val isReleaseComponent = "release" in component.name.toLowerCaseAsciiOnly() if (isReleaseComponent) { assertTrue(component.publishable, "Expected release component to be marked as publishable") } else {