[Gradle] Replace toLowerCase/toUpperCase with ASCII-only variants

^KT-38712 Verification Pending
This commit is contained in:
Anton Lakotka
2022-12-09 14:59:11 +01:00
committed by Space Team
parent afb2bfe492
commit 36591ab8a0
36 changed files with 116 additions and 67 deletions
@@ -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)
@@ -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(
@@ -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<File>): 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) {
@@ -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<NativeBinar
/** Returns an executable with the given [namePrefix] and the given build type. Throws an exception if there is no such binary.*/
fun getExecutable(namePrefix: String, buildType: String): Executable =
getExecutable(namePrefix, NativeBuildType.valueOf(buildType.toUpperCase()))
getExecutable(namePrefix, NativeBuildType.valueOf(buildType.toUpperCaseAsciiOnly()))
/** Returns an executable with the empty name prefix and the given build type. Throws an exception if there is no such binary.*/
fun getExecutable(buildType: NativeBuildType): Executable = getExecutable("", buildType)
@@ -55,7 +56,7 @@ abstract class AbstractKotlinNativeBinaryContainer : DomainObjectSet<NativeBinar
/** Returns an executable with the given [namePrefix] and the given build type. Returns null if there is no such binary. */
fun findExecutable(namePrefix: String, buildType: String): Executable? =
findExecutable(namePrefix, NativeBuildType.valueOf(buildType.toUpperCase()))
findExecutable(namePrefix, NativeBuildType.valueOf(buildType.toUpperCaseAsciiOnly()))
/** Returns an executable with the empty name prefix and the given build type. Returns null if there is no such binary. */
fun findExecutable(buildType: NativeBuildType): Executable? = findExecutable("", buildType)
@@ -68,7 +69,7 @@ abstract class AbstractKotlinNativeBinaryContainer : DomainObjectSet<NativeBinar
/** Returns a static library with the given [namePrefix] and the given build type. Throws an exception if there is no such binary.*/
fun getStaticLib(namePrefix: String, buildType: String): StaticLibrary =
getStaticLib(namePrefix, NativeBuildType.valueOf(buildType.toUpperCase()))
getStaticLib(namePrefix, NativeBuildType.valueOf(buildType.toUpperCaseAsciiOnly()))
/** Returns a static library with the empty name prefix and the given build type. Throws an exception if there is no such binary.*/
fun getStaticLib(buildType: NativeBuildType): StaticLibrary = getStaticLib("", buildType)
@@ -81,7 +82,7 @@ abstract class AbstractKotlinNativeBinaryContainer : DomainObjectSet<NativeBinar
/** Returns a static library with the given [namePrefix] and the given build type. Returns null if there is no such binary. */
fun findStaticLib(namePrefix: String, buildType: String): StaticLibrary? =
findStaticLib(namePrefix, NativeBuildType.valueOf(buildType.toUpperCase()))
findStaticLib(namePrefix, NativeBuildType.valueOf(buildType.toUpperCaseAsciiOnly()))
/** Returns a static library with the empty name prefix and the given build type. Returns null if there is no such binary. */
fun findStaticLib(buildType: NativeBuildType): StaticLibrary? = findStaticLib("", buildType)
@@ -94,7 +95,7 @@ abstract class AbstractKotlinNativeBinaryContainer : DomainObjectSet<NativeBinar
/** Returns a shared library with the given [namePrefix] and the given build type. Throws an exception if there is no such binary.*/
fun getSharedLib(namePrefix: String, buildType: String): SharedLibrary =
getSharedLib(namePrefix, NativeBuildType.valueOf(buildType.toUpperCase()))
getSharedLib(namePrefix, NativeBuildType.valueOf(buildType.toUpperCaseAsciiOnly()))
/** Returns a shared library with the empty name prefix and the given build type. Throws an exception if there is no such binary.*/
fun getSharedLib(buildType: NativeBuildType): SharedLibrary = getSharedLib("", buildType)
@@ -107,7 +108,7 @@ abstract class AbstractKotlinNativeBinaryContainer : DomainObjectSet<NativeBinar
/** Returns a shared library with the given [namePrefix] and the given build type. Returns null if there is no such binary. */
fun findSharedLib(namePrefix: String, buildType: String): SharedLibrary? =
findSharedLib(namePrefix, NativeBuildType.valueOf(buildType.toUpperCase()))
findSharedLib(namePrefix, NativeBuildType.valueOf(buildType.toUpperCaseAsciiOnly()))
/** Returns a shared library with the empty name prefix and the given build type. Returns null if there is no such binary. */
fun findSharedLib(buildType: NativeBuildType): SharedLibrary? = findSharedLib("", buildType)
@@ -120,7 +121,7 @@ abstract class AbstractKotlinNativeBinaryContainer : DomainObjectSet<NativeBinar
/** Returns an Objective-C framework with the given [namePrefix] and the given build type. Throws an exception if there is no such binary.*/
fun getFramework(namePrefix: String, buildType: String): Framework =
getFramework(namePrefix, NativeBuildType.valueOf(buildType.toUpperCase()))
getFramework(namePrefix, NativeBuildType.valueOf(buildType.toUpperCaseAsciiOnly()))
/** Returns an Objective-C framework with the empty name prefix and the given build type. Throws an exception if there is no such binary.*/
fun getFramework(buildType: NativeBuildType): Framework = getFramework("", buildType)
@@ -133,7 +134,7 @@ abstract class AbstractKotlinNativeBinaryContainer : DomainObjectSet<NativeBinar
/** Returns an Objective-C framework with the given [namePrefix] and the given build type. Returns null if there is no such binary. */
fun findFramework(namePrefix: String, buildType: String): Framework? =
findFramework(namePrefix, NativeBuildType.valueOf(buildType.toUpperCase()))
findFramework(namePrefix, NativeBuildType.valueOf(buildType.toUpperCaseAsciiOnly()))
/** Returns an Objective-C framework with the empty name prefix and the given build type. Returns null if there is no such binary. */
fun findFramework(buildType: NativeBuildType): Framework? = findFramework("", buildType)
@@ -146,7 +147,7 @@ abstract class AbstractKotlinNativeBinaryContainer : DomainObjectSet<NativeBinar
/** Returns a test executable with the given [namePrefix] and the given build type. Throws an exception if there is no such binary.*/
fun getTest(namePrefix: String, buildType: String): TestExecutable =
getTest(namePrefix, NativeBuildType.valueOf(buildType.toUpperCase()))
getTest(namePrefix, NativeBuildType.valueOf(buildType.toUpperCaseAsciiOnly()))
/** Returns a test executable with the empty name prefix and the given build type. Throws an exception if there is no such binary.*/
fun getTest(buildType: NativeBuildType): TestExecutable = getTest("", buildType)
@@ -159,7 +160,7 @@ abstract class AbstractKotlinNativeBinaryContainer : DomainObjectSet<NativeBinar
/** Returns a test executable with the given [namePrefix] and the given build type. Returns null if there is no such binary. */
fun findTest(namePrefix: String, buildType: String): TestExecutable? =
findTest(namePrefix, NativeBuildType.valueOf(buildType.toUpperCase()))
findTest(namePrefix, NativeBuildType.valueOf(buildType.toUpperCaseAsciiOnly()))
/** Returns a test executable with the empty name prefix and the given build type. Returns null if there is no such binary. */
fun findTest(buildType: NativeBuildType): TestExecutable? = findTest("", buildType)
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.gradle.internal.kapt.incremental.KaptIncrementalChan
import org.jetbrains.kotlin.gradle.tasks.Kapt
import org.jetbrains.kotlin.gradle.tasks.toSingleCompilerPluginOptions
import org.jetbrains.kotlin.gradle.utils.listPropertyWithConvention
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
import org.jetbrains.kotlin.utils.PathUtil
import org.slf4j.LoggerFactory
import java.io.File
@@ -157,7 +158,7 @@ abstract class KaptWithoutKotlincTask @Inject constructor(
// as user may set JDK with same major Java version, but from different vendor
val isRunningOnGradleJvm = gradleJvm.javaVersion == toolchainProvider.javaVersion.get() &&
gradleJvm.javaExecutable.absolutePath == toolchainProvider.javaExecutable.get().asFile.absolutePath
val isolationModeStr = getValue("kapt.workers.isolation")?.toLowerCase()
val isolationModeStr = getValue("kapt.workers.isolation")?.toLowerCaseAsciiOnly()
return when {
(isolationModeStr == null || isolationModeStr == "none") && isRunningOnGradleJvm -> IsolationMode.NONE
else -> {
@@ -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 ->
@@ -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<KotlinCompilationType : KotlinCompil
target.compilations.all { compilation ->
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<KotlinCompilationType : KotlinCompil
target.disambiguationClassifier?.let { classifier ->
task.configure { taskInstance ->
taskInstance.archiveAppendix.set(classifier.toLowerCase())
taskInstance.archiveAppendix.set(classifier.toLowerCaseAsciiOnly())
}
}
@@ -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 <reified T : Enum<T>> enumProperty(
propName: String,
defaultValue: T
): T = this.property(propName)?.let { enumValueOf<T>(it.toUpperCase()) } ?: defaultValue
): T = this.property(propName)?.let { enumValueOf<T>(it.toUpperCaseAsciiOnly()) } ?: defaultValue
/**
* Looks up the property in the following sources with decreasing priority:
@@ -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,
@@ -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 {
@@ -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
@@ -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 " +
@@ -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
@@ -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()
}
}
}
@@ -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 =
@@ -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
@@ -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,
@@ -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
@@ -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 {
@@ -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()
)
}
}
@@ -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()
)
}
@@ -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
)
@@ -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
@@ -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<out Any?>): 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()
@@ -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(
@@ -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 {
@@ -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)
}
@@ -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<Jar>(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,
@@ -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<T : KotlinNativeTarget> : AbstractKotlinTargetConfigurator<T>(
@@ -144,7 +145,11 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : 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<T : KotlinNativeTarget> : 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())
}
}
@@ -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).
@@ -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.
@@ -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 = "..."
| ...
| }
|
@@ -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")
}
}
@@ -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) }
}
@@ -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<String?>) =
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()}"
}
}
@@ -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 {