From dcd17e41a4c2a2560c34399acbce93f9a9e73b65 Mon Sep 17 00:00:00 2001 From: Vyacheslav Gerasimov Date: Wed, 27 Apr 2022 20:10:45 +0000 Subject: [PATCH] Fix capitalization related deprecation warnings --- buildSrc/src/main/kotlin/GradleCommon.kt | 16 +- .../jetbrains/kotlin/EndorsedLibraryInfo.kt | 3 +- .../org/jetbrains/kotlin/FrameworkTest.kt | 6 +- .../main/kotlin/org/jetbrains/kotlin/Utils.kt | 167 ++++++++++-------- .../kotlin/bitcode/CompileToBitcodePlugin.kt | 12 +- .../plugin/konan/EnvironmentVariables.kt | 9 +- .../plugin/konan/KonanBuildingConfig.kt | 20 ++- .../kotlin/gradle/plugin/konan/KonanPlugin.kt | 10 +- .../android/KotlinAndroidVariantFactory.kt | 3 +- plugins/pill/pill-importer/src/ModelParser.kt | 10 +- 10 files changed, 161 insertions(+), 95 deletions(-) diff --git a/buildSrc/src/main/kotlin/GradleCommon.kt b/buildSrc/src/main/kotlin/GradleCommon.kt index 6c4075e69a5..32fbcaa87d8 100644 --- a/buildSrc/src/main/kotlin/GradleCommon.kt +++ b/buildSrc/src/main/kotlin/GradleCommon.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.project.model.KotlinPlatformTypeAttribute import plugins.configureDefaultPublishing import plugins.configureKotlinPomAttributes +import java.util.* /** * Gradle plugins common variants. @@ -130,7 +131,7 @@ fun Project.createGradleCommonSourceSet(): SourceSet { // Common outputs will also produce '${project.name}.kotlin_module' file, so we need to avoid // files clash - tasks.named("compile${commonSourceSet.name.capitalize()}Kotlin") { + tasks.named("compile${commonSourceSet.name.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }}Kotlin") { kotlinOptions { moduleName = "${this@createGradleCommonSourceSet.name}_${commonSourceSet.name}" } @@ -357,7 +358,14 @@ fun Project.createGradlePluginVariant( if (kotlinBuildProperties.publishGradlePluginsJavadoc) { plugins.withId("org.jetbrains.dokka") { - val dokkaTask = tasks.register("dokka${variantSourceSet.javadocTaskName.capitalize()}") { + val dokkaTask = tasks.register( + "dokka${ + variantSourceSet.javadocTaskName.replaceFirstChar { + if (it.isLowerCase()) it.titlecase( + Locale.getDefault() + ) else it.toString() + } + }") { description = "Generates documentation in 'javadoc' format for '${variantSourceSet.javadocTaskName}' variant" plugins.dependencies.add( @@ -402,7 +410,7 @@ fun Project.createGradlePluginVariant( } // KT-52138: Make module name the same for all variants, so KSP could access internal methods/properties - tasks.named("compile${variantSourceSet.name.capitalize()}Kotlin") { + tasks.named("compile${variantSourceSet.name.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }}Kotlin") { kotlinOptions { moduleName = this@createGradlePluginVariant.name } @@ -462,7 +470,7 @@ fun Project.publishShadowedJar( val jarTask = tasks.named(sourceSet.jarTaskName) val shadowJarTask = embeddableCompilerDummyForDependenciesRewriting( - taskName = "$EMBEDDABLE_COMPILER_TASK_NAME${sourceSet.jarTaskName.capitalize()}" + taskName = "$EMBEDDABLE_COMPILER_TASK_NAME${sourceSet.jarTaskName.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }}" ) { setupPublicJar( jarTask.flatMap { it.archiveBaseName }, diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/EndorsedLibraryInfo.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/EndorsedLibraryInfo.kt index 890a3704263..6b41bd71354 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/EndorsedLibraryInfo.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/EndorsedLibraryInfo.kt @@ -1,6 +1,7 @@ package org.jetbrains.kotlin import org.gradle.api.Project +import java.util.* data class EndorsedLibraryInfo(val project: Project, val name: String) { @@ -8,6 +9,6 @@ data class EndorsedLibraryInfo(val project: Project, val name: String) { get() = project.name val taskName: String by lazy { - projectName.split('.').joinToString(separator = "") { it.capitalize() } + projectName.split('.').joinToString(separator = "") { it.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } } } } \ No newline at end of file diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt index 08feb8730b9..a749955579d 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt @@ -19,6 +19,7 @@ import java.io.Serializable import java.nio.file.Files import java.nio.file.Path import java.nio.file.Paths +import java.util.* /** * Test task for -produce framework testing. Requires a framework to be built by the Konan plugin @@ -145,7 +146,10 @@ open class FrameworkTest : DefaultTask(), KonanTestExecutable { val provider = Paths.get(testOutput, name, "provider.swift") FileWriter(provider.toFile()).use { writer -> val providers = swiftSources.toFiles(Language.Swift) - .map { it.name.toString().removeSuffix(".swift").capitalize() } + .map { + it.name.toString().removeSuffix(".swift") + .replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } + } .map { "${it}Tests" } writer.write(""" diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Utils.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Utils.kt index 6d44c638717..2f8ddca69cd 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Utils.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Utils.kt @@ -19,7 +19,6 @@ import java.io.File import java.util.concurrent.TimeUnit import java.net.HttpURLConnection import java.net.URL -import java.util.Base64 import java.nio.file.Path import org.jetbrains.kotlin.konan.file.File as KFile import org.gradle.nativeplatform.toolchain.internal.* @@ -53,6 +52,8 @@ import org.gradle.nativeplatform.toolchain.internal.tools.ToolSearchPath import org.gradle.process.internal.ExecActionFactory import java.io.ByteArrayOutputStream import java.net.URI +import java.util.* +import kotlin.collections.HashSet //region Project properties. @@ -63,7 +64,7 @@ val Project.testTarget get() = findProperty("target") as? KonanTarget ?: HostManager.host val Project.testTargetSuffix - get() = (findProperty("target") as KonanTarget).name.capitalize() + get() = (findProperty("target") as KonanTarget).name.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } val Project.verboseTest get() = hasProperty("test_verbose") @@ -89,15 +90,17 @@ val Project.cacheRedirectorEnabled val Project.compileOnlyTests: Boolean get() = hasProperty("test_compile_only") -fun Project.redirectIfEnabled(url: String):String = if (cacheRedirectorEnabled) { +fun Project.redirectIfEnabled(url: String): String = if (cacheRedirectorEnabled) { val base = URL(url) "https://cache-redirector.jetbrains.com/${base.host}/${base.path}" } else url -val validPropertiesNames = listOf("konan.home", - "org.jetbrains.kotlin.native.home", - "kotlin.native.home") +val validPropertiesNames = listOf( + "konan.home", + "org.jetbrains.kotlin.native.home", + "kotlin.native.home" +) val Project.kotlinNativeDist get() = rootProject.currentKotlinNativeDist @@ -137,10 +140,10 @@ fun Task.dependsOnPlatformLibs() { @Suppress("UNCHECKED_CAST") private fun Project.groovyPropertyArrayToList(property: String): List = - with(findProperty(property)) { - if (this is Array<*>) this.toList() as List - else this as List - } + with(findProperty(property)) { + if (this is Array<*>) this.toList() as List + else this as List + } val Project.globalBuildArgs: List get() = project.groovyPropertyArrayToList("globalBuildArgs") @@ -166,9 +169,12 @@ fun projectOrFiles(proj: Project, notation: String): Any? { */ fun codesign(project: Project, path: String) { check(HostManager.hostIsMac) { "Apple specific code signing" } - val (stdOut, stdErr, exitCode) = runProcess(executor = localExecutor(project), executable = "/usr/bin/codesign", - args = listOf("--verbose", "-s", "-", path)) - check(exitCode == 0) { """ + val (stdOut, stdErr, exitCode) = runProcess( + executor = localExecutor(project), executable = "/usr/bin/codesign", + args = listOf("--verbose", "-s", "-", path) + ) + check(exitCode == 0) { + """ |Codesign failed with exitCode: $exitCode |stdout: $stdOut |stderr: $stdErr @@ -198,17 +204,24 @@ fun Project.getFilesToCompile(compile: List, exclude: List): Lis // create list of tests to compile return compile.flatMap { f -> project.file(f) - .walk() - .filter { it.isFile && it.name.endsWith(".kt") && !excludeFiles.contains(it.absolutePath) } - .map{ it.absolutePath } - .asIterable() + .walk() + .filter { it.isFile && it.name.endsWith(".kt") && !excludeFiles.contains(it.absolutePath) } + .map { it.absolutePath } + .asIterable() } } //region Task dependency. fun Project.findKonanBuildTask(artifact: String, target: KonanTarget): TaskProvider = - tasks.named("compileKonan${artifact.capitalize()}${target.name.capitalize()}") + tasks.named( + "compileKonan${artifact.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }}${ + target.name.replaceFirstChar { + if (it.isLowerCase()) it.titlecase( + Locale.getDefault() + ) else it.toString() + } + }") fun Project.dependsOnDist(taskName: String) { project.tasks.getByName(taskName).dependsOnDist() @@ -234,7 +247,7 @@ private val Project.hasPlatformLibs: Boolean get() { if (!isDefaultNativeHome) { return File(buildDistribution(project.kotlinNativeDist.absolutePath).platformLibs(project.testTarget)) - .exists() + .exists() } return false } @@ -243,7 +256,7 @@ private val Project.isCrossDist: Boolean get() { if (!isDefaultNativeHome) { return File(buildDistribution(project.kotlinNativeDist.absolutePath).runtime(project.testTarget)) - .exists() + .exists() } return false } @@ -278,9 +291,9 @@ fun Task.dependsOnCrossDist(target: KonanTarget) { } } -fun Task.konanOldPluginTaskDependenciesWalker(index:Int = 0, walker: Task.(Int)->Unit) { +fun Task.konanOldPluginTaskDependenciesWalker(index: Int = 0, walker: Task.(Int) -> Unit) { walker(index + 1) - dependsOn.forEach{ + dependsOn.forEach { val task = (it as? Task) ?: return@forEach if (task.name.startsWith("compileKonan")) task.konanOldPluginTaskDependenciesWalker(index + 1, walker) @@ -320,17 +333,19 @@ fun Task.dependsOnKonanBuildingTask(artifact: String, target: KonanTarget) { //endregion // Run command line from string. -fun Array.runCommand(workingDir: File = File("."), - timeoutAmount: Long = 60, - timeoutUnit: TimeUnit = TimeUnit.SECONDS): String { +fun Array.runCommand( + workingDir: File = File("."), + timeoutAmount: Long = 60, + timeoutUnit: TimeUnit = TimeUnit.SECONDS +): String { return try { ProcessBuilder(*this) - .directory(workingDir) - .redirectOutput(ProcessBuilder.Redirect.PIPE) - .redirectError(ProcessBuilder.Redirect.PIPE) - .start().apply { - waitFor(timeoutAmount, timeoutUnit) - }.inputStream.bufferedReader().readText() + .directory(workingDir) + .redirectOutput(ProcessBuilder.Redirect.PIPE) + .redirectError(ProcessBuilder.Redirect.PIPE) + .start().apply { + waitFor(timeoutAmount, timeoutUnit) + }.inputStream.bufferedReader().readText() } catch (e: Exception) { println("Couldn't run command ${this.joinToString(" ")}") println(e.stackTrace.joinToString("\n")) @@ -339,25 +354,25 @@ fun Array.runCommand(workingDir: File = File("."), } fun String.splitCommaSeparatedOption(optionName: String) = - split("\\s*,\\s*".toRegex()).map { - if (it.isNotEmpty()) listOf(optionName, it) else listOf(null) - }.flatten().filterNotNull() + split("\\s*,\\s*".toRegex()).map { + if (it.isNotEmpty()) listOf(optionName, it) else listOf(null) + }.flatten().filterNotNull() data class Commit(val revision: String, val developer: String, val webUrlWithDescription: String) val teamCityUrl = "https://buildserver.labs.intellij.net" fun buildsUrl(buildLocator: String) = - "$teamCityUrl/app/rest/builds/?locator=$buildLocator" + "$teamCityUrl/app/rest/builds/?locator=$buildLocator" fun getBuild(buildLocator: String, user: String, password: String) = - try { - sendGetRequest(buildsUrl(buildLocator), user, password) - } catch (t: Throwable) { - error("Try to get build! TeamCity is unreachable!") - } + try { + sendGetRequest(buildsUrl(buildLocator), user, password) + } catch (t: Throwable) { + error("Try to get build! TeamCity is unreachable!") + } -fun sendGetRequest(url: String, username: String? = null, password: String? = null) : String { +fun sendGetRequest(url: String, username: String? = null, password: String? = null): String { val connection = URL(url).openConnection() as HttpURLConnection if (username != null && password != null) { val auth = Base64.getEncoder().encode(("$username:$password").toByteArray()).toString(Charsets.UTF_8) @@ -370,8 +385,10 @@ fun sendGetRequest(url: String, username: String? = null, password: String? = nu @JvmOverloads -fun compileSwift(project: Project, target: KonanTarget, sources: List, options: List, - output: Path, fullBitcode: Boolean = false) { +fun compileSwift( + project: Project, target: KonanTarget, sources: List, options: List, + output: Path, fullBitcode: Boolean = false +) { val platform = project.platformManager.platform(target) assert(platform.configurables is AppleConfigurables) val configs = platform.configurables as AppleConfigurables @@ -385,27 +402,29 @@ fun compileSwift(project: Project, target: KonanTarget, sources: List, o val (stdOut, stdErr, exitCode) = runProcess(executor = localExecutor(project), executable = compiler, args = args) - println(""" + println( + """ |$compiler finished with exit code: $exitCode |options: ${args.joinToString(separator = " ")} |stdout: $stdOut |stderr: $stdErr - """.trimMargin()) + """.trimMargin() + ) check(exitCode == 0) { "Compilation failed" } check(output.toFile().exists()) { "Compiler swiftc hasn't produced an output file: $output" } } fun targetSupportsMimallocAllocator(targetName: String) = - HostManager().targetByName(targetName).supportsMimallocAllocator() + HostManager().targetByName(targetName).supportsMimallocAllocator() fun targetSupportsLibBacktrace(targetName: String) = - HostManager().targetByName(targetName).supportsLibBacktrace() + HostManager().targetByName(targetName).supportsLibBacktrace() fun targetSupportsCoreSymbolication(targetName: String) = - HostManager().targetByName(targetName).supportsCoreSymbolication() + HostManager().targetByName(targetName).supportsCoreSymbolication() fun targetSupportsThreads(targetName: String) = - HostManager().targetByName(targetName).supportsThreads() + HostManager().targetByName(targetName).supportsThreads() fun Project.mergeManifestsByTargets(source: File, destination: File) { logger.info("Merging manifests: $source -> $destination") @@ -418,29 +437,29 @@ fun Project.mergeManifestsByTargets(source: File, destination: File) { // check that all properties except for KLIB_PROPERTY_NATIVE_TARGETS are equivalent val mismatchedProperties = (sourceProperties.keys + destinationProperties.keys) - .asSequence() - .map { it.toString() } - .filter { it != KLIB_PROPERTY_NATIVE_TARGETS } - .sorted() - .mapNotNull { propertyKey: String -> - val sourceProperty: String? = sourceProperties.getProperty(propertyKey) - val destinationProperty: String? = destinationProperties.getProperty(propertyKey) - when { - sourceProperty == null -> "\"$propertyKey\" is absent in $sourceFile" - destinationProperty == null -> "\"$propertyKey\" is absent in $destinationFile" - sourceProperty == destinationProperty -> { - // properties match, OK - null - } - sourceProperties.propertyList(propertyKey, escapeInQuotes = true).toSet() == - destinationProperties.propertyList(propertyKey, escapeInQuotes = true).toSet() -> { - // properties match, OK - null - } - else -> "\"$propertyKey\" differ: [$sourceProperty] vs [$destinationProperty]" + .asSequence() + .map { it.toString() } + .filter { it != KLIB_PROPERTY_NATIVE_TARGETS } + .sorted() + .mapNotNull { propertyKey: String -> + val sourceProperty: String? = sourceProperties.getProperty(propertyKey) + val destinationProperty: String? = destinationProperties.getProperty(propertyKey) + when { + sourceProperty == null -> "\"$propertyKey\" is absent in $sourceFile" + destinationProperty == null -> "\"$propertyKey\" is absent in $destinationFile" + sourceProperty == destinationProperty -> { + // properties match, OK + null } + sourceProperties.propertyList(propertyKey, escapeInQuotes = true).toSet() == + destinationProperties.propertyList(propertyKey, escapeInQuotes = true).toSet() -> { + // properties match, OK + null + } + else -> "\"$propertyKey\" differ: [$sourceProperty] vs [$destinationProperty]" } - .toList() + } + .toList() check(mismatchedProperties.isEmpty()) { buildString { @@ -478,10 +497,10 @@ fun Project.buildStaticLibrary(cSources: Collection, output: File, objDir: output.parentFile.mkdirs() exec { commandLine( - "${platform.configurables.absoluteLlvmHome}/bin/llvm-ar", - "-rc", - output, - *fileTree(objDir).files.toTypedArray() + "${platform.configurables.absoluteLlvmHome}/bin/llvm-ar", + "-rc", + output, + *fileTree(objDir).files.toTypedArray() ) } } diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcodePlugin.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcodePlugin.kt index 736437289e9..8bd750bff63 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcodePlugin.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcodePlugin.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.konan.target.PlatformManager import org.jetbrains.kotlin.konan.target.SanitizerKind import org.jetbrains.kotlin.konan.target.supportedSanitizers import java.io.File +import java.util.* import javax.inject.Inject /** @@ -53,9 +54,12 @@ open class CompileToBitcodeExtension @Inject constructor(val project: Project) { val sanitizers: List = target.supportedSanitizers() + listOf(null) sanitizers.forEach { sanitizer -> project.tasks.register( - "${targetName}${name.snakeCaseToCamelCase().capitalize()}${suffixForSanitizer(sanitizer)}", - CompileToBitcode::class.java, - name, targetName, outputGroup + "${targetName}${ + name.snakeCaseToCamelCase() + .replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } + }${suffixForSanitizer(sanitizer)}", + CompileToBitcode::class.java, + name, targetName, outputGroup ).configure { srcDirs = project.files(srcRoot.resolve("cpp")) headersDirs = srcDirs + project.files(srcRoot.resolve("headers")) @@ -78,7 +82,7 @@ open class CompileToBitcodeExtension @Inject constructor(val project: Project) { companion object { private fun String.snakeCaseToCamelCase() = - split('_').joinToString(separator = "") { it.capitalize() } + split('_').joinToString(separator = "") { it.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } } fun suffixForSanitizer(sanitizer: SanitizerKind?) = when (sanitizer) { diff --git a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/EnvironmentVariables.kt b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/EnvironmentVariables.kt index bc207636532..fdd974a1c5d 100644 --- a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/EnvironmentVariables.kt +++ b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/EnvironmentVariables.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.gradle.plugin.konan import org.gradle.api.Project import org.jetbrains.kotlin.gradle.plugin.konan.KonanPlugin.ProjectProperty import java.io.File +import java.util.* /** * The plugin allows an IDE to specify some building parameters. These parameters @@ -64,10 +65,10 @@ internal class EnvironmentVariablesImpl(val project: Project): EnvironmentVaria } override val debuggingSymbols: Boolean - get() = System.getenv("DEBUGGING_SYMBOLS")?.toUpperCase() == "YES" + get() = System.getenv("DEBUGGING_SYMBOLS")?.uppercase(Locale.getDefault()) == "YES" override val enableOptimizations: Boolean - get() = System.getenv("KONAN_ENABLE_OPTIMIZATIONS")?.toUpperCase() == "YES" + get() = System.getenv("KONAN_ENABLE_OPTIMIZATIONS")?.uppercase(Locale.getDefault()) == "YES" } /** @@ -82,12 +83,12 @@ internal class EnvironmentVariablesFromProperties(val project: Project): Environ } override val debuggingSymbols: Boolean - get() = project.findProperty(ProjectProperty.KONAN_DEBUGGING_SYMBOLS)?.toString()?.toUpperCase().let { + get() = project.findProperty(ProjectProperty.KONAN_DEBUGGING_SYMBOLS)?.toString()?.uppercase(Locale.getDefault()).let { it == "YES" || it == "TRUE" } override val enableOptimizations: Boolean - get() = project.findProperty(ProjectProperty.KONAN_OPTIMIZATIONS_ENABLE)?.toString()?.toUpperCase().let { + get() = project.findProperty(ProjectProperty.KONAN_OPTIMIZATIONS_ENABLE)?.toString()?.uppercase(Locale.getDefault()).let { it == "YES" || it == "TRUE" } } diff --git a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanBuildingConfig.kt b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanBuildingConfig.kt index 1ab6dadb8c6..3600e0a59a2 100644 --- a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanBuildingConfig.kt +++ b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanBuildingConfig.kt @@ -29,6 +29,8 @@ import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.plugin.tasks.KonanBuildingTask import org.jetbrains.kotlin.konan.target.KonanTarget import java.io.File +import java.util.* +import kotlin.NoSuchElementException /** Base class for all Kotlin/Native artifacts. */ abstract class KonanBuildingConfig( @@ -79,13 +81,25 @@ abstract class KonanBuildingConfig( } protected open fun generateTaskName(target: KonanTarget) = - "compileKonan${name.capitalize()}${target.visibleName.capitalize()}" + "compileKonan${name.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }}${ + target.visibleName.replaceFirstChar { + if (it.isLowerCase()) it.titlecase( + Locale.getDefault() + ) else it.toString() + } + }" protected open fun generateAggregateTaskName() = - "compileKonan${name.capitalize()}" + "compileKonan${name.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }}" protected open fun generateTargetAliasTaskName(targetName: String) = - "compileKonan${name.capitalize()}${targetName.capitalize()}" + "compileKonan${name.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }}${ + targetName.replaceFirstChar { + if (it.isLowerCase()) it.titlecase( + Locale.getDefault() + ) else it.toString() + } + }" protected abstract fun generateTaskDescription(task: T): String protected abstract fun generateAggregateTaskDescription(task: Task): String diff --git a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt index 1fd5d59a065..ff3ff879e7b 100644 --- a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt +++ b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt @@ -52,6 +52,7 @@ import org.jetbrains.kotlin.konan.target.customerDistribution import org.jetbrains.kotlin.konan.util.DependencyProcessor import org.jetbrains.kotlin.* import java.io.File +import java.util.* import javax.inject.Inject /** @@ -394,7 +395,14 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR .forEach { task -> val isCrossCompile = (task.target != HostManager.host.visibleName) if (!isCrossCompile && !project.hasProperty("konanNoRun")) - task.runTask = project.tasks.register("run${task.artifactName.capitalize()}", Exec::class.java) { + task.runTask = project.tasks.register( + "run${ + task.artifactName.replaceFirstChar { + if (it.isLowerCase()) it.titlecase( + Locale.getDefault() + ) else it.toString() + } + }", Exec::class.java) { group= "run" dependsOn(task) val artifactPathClosure = object : Closure(this) { diff --git a/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidVariantFactory.kt b/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidVariantFactory.kt index 0ab7c257f63..29641b4fead 100644 --- a/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidVariantFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin-kpm-android/src/main/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidVariantFactory.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.gradle.kpm.external.createExternalJvmVariant import org.jetbrains.kotlin.gradle.kpm.external.external import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.* +import java.util.* fun KotlinGradleModule.createKotlinAndroidVariant(androidVariant: BaseVariant) { val androidOutgoingArtifacts = FragmentArtifacts { @@ -44,7 +45,7 @@ fun KotlinGradleModule.createKotlinAndroidVariant(androidVariant: BaseVariant) { } val kotlinVariant = createExternalJvmVariant( - "android${androidVariant.buildType.name.capitalize()}", KotlinJvmVariantConfig( + "android${androidVariant.buildType.name.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }}", KotlinJvmVariantConfig( /* Only swap out configuration that is used. Default setup shall still be applied */ compileDependencies = (DefaultKotlinCompileDependenciesDefinition + FragmentAttributes { diff --git a/plugins/pill/pill-importer/src/ModelParser.kt b/plugins/pill/pill-importer/src/ModelParser.kt index 0acf8e7a234..3b8cf6e0869 100644 --- a/plugins/pill/pill-importer/src/ModelParser.kt +++ b/plugins/pill/pill-importer/src/ModelParser.kt @@ -28,6 +28,8 @@ import org.jetbrains.kotlin.pill.model.PSourceRoot.* import org.jetbrains.kotlin.pill.PillExtensionMirror.* import org.jetbrains.kotlin.pill.model.* import java.io.File +import java.util.* +import kotlin.collections.HashMap typealias OutputDir = String typealias GradleProjectPath = String @@ -104,7 +106,9 @@ class ModelParser(private val variant: Variant, private val modulePrefix: String private fun findEmbeddableTask(project: Project, sourceSet: SourceSet): Jar? { val jarName = sourceSet.jarTaskName val embeddable = "embeddable" - val embeddedName = if (jarName == "jar") embeddable else jarName.dropLast("jar".length) + embeddable.capitalize() + val embeddedName = if (jarName == "jar") embeddable else jarName.dropLast("jar".length) + embeddable.replaceFirstChar { + if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() + } return project.tasks.findByName(embeddedName) as? Jar } @@ -257,7 +261,9 @@ class ModelParser(private val variant: Variant, private val modulePrefix: String val isMainSourceSet = sourceSet.name == SourceSet.MAIN_SOURCE_SET_NAME val taskNameBase = "processResources" - val taskName = if (isMainSourceSet) taskNameBase else sourceSet.name + taskNameBase.capitalize() + val taskName = if (isMainSourceSet) taskNameBase else sourceSet.name + taskNameBase.replaceFirstChar { + if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() + } val task = project.tasks.findByName(taskName) as? ProcessResources ?: return emptyList() val roots = mutableListOf()