From 10ce5b3b1f845044fb4b6b1428aefa3d67cddb39 Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Wed, 26 Jul 2017 12:36:50 +0700 Subject: [PATCH] gradle-plugin: Use enum for konan-specific project properties --- .../plugin/KonanCompilerDownloadTask.kt | 4 +- .../kotlin/gradle/plugin/KonanPlugin.kt | 48 ++++++++++++------- .../gradle/plugin/test/KonanProject.groovy | 4 +- 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompilerDownloadTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompilerDownloadTask.kt index 3525fb23a6f..09edb52a001 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompilerDownloadTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompilerDownloadTask.kt @@ -32,8 +32,8 @@ open class KonanCompilerDownloadTask : DefaultTask() { @TaskAction fun downloadAndExtract() { - if (!project.hasProperty(KonanPlugin.PropertyNames.DOWNLOAD_COMPILER)) { - val konanHome = project.property(KonanPlugin.PropertyNames.KONAN_HOME) + if (!project.hasProperty(KonanPlugin.ProjectProperty.DOWNLOAD_COMPILER)) { + val konanHome = project.getProperty(KonanPlugin.ProjectProperty.KONAN_HOME) logger.info("Use a user-defined compiler path: $konanHome") return } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt index 3a40262f151..5cfec278dbe 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt @@ -29,11 +29,24 @@ import javax.inject.Inject * konan.version - a konan compiler version for downloading. */ +internal fun Project.hasProperty(property: KonanPlugin.ProjectProperty) = hasProperty(property.propertyName) +internal fun Project.findProperty(property: KonanPlugin.ProjectProperty) = findProperty(property.propertyName) + +internal fun Project.getProperty(property: KonanPlugin.ProjectProperty) = findProperty(property) + ?: throw IllegalArgumentException("No such property in the project: ${property.propertyName}") + +internal fun Project.getProperty(property: KonanPlugin.ProjectProperty, defaultValue: Any?) = + findProperty(property) ?: defaultValue + +internal fun Project.setProperty(property: KonanPlugin.ProjectProperty, value: Any?) { + extensions.extraProperties.set(property.propertyName, value) +} + // konanHome extension is set by downloadKonanCompiler task. internal val Project.konanHome: String get() { - assert(extensions.extraProperties.has(KonanPlugin.PropertyNames.KONAN_HOME)) - return extensions.extraProperties.get(KonanPlugin.PropertyNames.KONAN_HOME).toString() + assert(hasProperty(KonanPlugin.ProjectProperty.KONAN_HOME)) + return getProperty(KonanPlugin.ProjectProperty.KONAN_HOME).toString() } internal val Project.konanBuildRoot get() = "${buildDir.canonicalPath}/konan" @@ -57,10 +70,10 @@ internal val Project.konanInteropContainer: NamedDomainObjectContainer { +internal class KonanCompileConfigFactory(val project: Project): NamedDomainObjectFactory { override fun create(name: String): KonanCompileConfig = KonanCompileConfig(name, project) } -class KonanInteropConfigFactory(val project: Project): NamedDomainObjectFactory { +internal class KonanInteropConfigFactory(val project: Project): NamedDomainObjectFactory { override fun create(name: String): KonanInteropConfig = KonanInteropConfig(name, project) } @@ -173,7 +186,7 @@ internal fun dumpProperties(task: Task) { } } -fun setDefaultInputs(project: Project) { +internal fun setDefaultInputs(project: Project) { project.konanArtifactsContainer.asSequence() .filter { it.compilationTask.inputFiles.isEmpty() } .forEach { config -> @@ -194,12 +207,11 @@ fun setDefaultInputs(project: Project) { class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderRegistry) : Plugin { - object PropertyNames { - internal const val KONAN_HOME = "konan.home" - internal const val KONAN_VERSION = "konan.version" - internal const val KONAN_BUILD_TARGETS = "konan.build.targets" - - internal const val DOWNLOAD_COMPILER = "download.compiler" + enum class ProjectProperty(val propertyName: String) { + KONAN_HOME ("konan.home"), + KONAN_VERSION ("konan.version"), + KONAN_BUILD_TARGETS ("konan.build.targets"), + DOWNLOAD_COMPILER ("download.compiler") } companion object { @@ -242,12 +254,12 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR project.container(KonanInteropConfig::class.java, KonanInteropConfigFactory(project))) // Set additional project properties like konan.home, konan.build.targets etc. - if (!project.extensions.extraProperties.has(PropertyNames.KONAN_HOME)) { - project.extensions.extraProperties.set(PropertyNames.KONAN_HOME, project.konanCompilerDownloadDir()) - project.extensions.extraProperties.set(PropertyNames.DOWNLOAD_COMPILER, true) + if (!project.hasProperty(ProjectProperty.KONAN_HOME)) { + project.setProperty(ProjectProperty.KONAN_HOME, project.konanCompilerDownloadDir()) + project.setProperty(ProjectProperty.DOWNLOAD_COMPILER, true) } - if (!project.extensions.extraProperties.has(PropertyNames.KONAN_BUILD_TARGETS)) { - project.extensions.extraProperties.set(PropertyNames.KONAN_BUILD_TARGETS, project.host) + if (!project.hasProperty(ProjectProperty.KONAN_BUILD_TARGETS)) { + project.setProperty(ProjectProperty.KONAN_BUILD_TARGETS, project.host) } // Create and set up aggregate building tasks. diff --git a/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/KonanProject.groovy b/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/KonanProject.groovy index 6b4b44af743..ff4742ce7ec 100644 --- a/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/KonanProject.groovy +++ b/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/KonanProject.groovy @@ -22,7 +22,9 @@ class KonanProject { List getBuildingTasks() { return compilationTasks } List getKonanTasks() { return getBuildingTasks() + downloadTask } - GradleRunner createRunner() { return GradleRunner.create().withProjectDir(projectDirRoot).withPluginClasspath() } + GradleRunner createRunner(boolean withDebug = true) { + return GradleRunner.create().withProjectDir(projectDirRoot).withPluginClasspath().withDebug(withDebug) + } protected KonanProject(TemporaryFolder projectDir) { this.projectDir = projectDir