diff --git a/README.md b/README.md index 3705f93..d86f5b8 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,9 @@ For Android compatibility, you may use a shorthand, which will set up the [Gummy ```kotlin expediter { platform { - androidSdk = 21 + android { + sdk = 21 + } } } ``` @@ -112,7 +114,7 @@ expediter { configurations.create("_descriptors_") dependencies { - add("_descriptors_", "com.toasttab.android:gummy-bears-api-21:0.6.1@expediter") + add("_descriptors_", "com.toasttab.android:gummy-bears-api-21:0.7.0@expediter") } ``` diff --git a/plugin/src/main/kotlin/com/toasttab/expediter/gradle/ExpediterPlugin.kt b/plugin/src/main/kotlin/com/toasttab/expediter/gradle/ExpediterPlugin.kt index b7b3450..100f375 100644 --- a/plugin/src/main/kotlin/com/toasttab/expediter/gradle/ExpediterPlugin.kt +++ b/plugin/src/main/kotlin/com/toasttab/expediter/gradle/ExpediterPlugin.kt @@ -15,6 +15,7 @@ package com.toasttab.expediter.gradle +import com.toasttab.expediter.gradle.config.ExpediterExtension import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.tasks.SourceSetContainer @@ -46,13 +47,12 @@ class ExpediterPlugin : Plugin { val expediterConfigurations = extension.platform.expediterConfigurations.toMutableList() - if (extension.platform.androidSdk != null) { - val config = project.configurations.create("_expediter_type_descriptors_") - project.dependencies.add( - config.name, - "com.toasttab.android:gummy-bears-api-${extension.platform.androidSdk}:0.7.0@expediter" - ) - expediterConfigurations.add(config.name) + extension.platform.android.run { + if (sdk != null) { + val config = project.configurations.create("_expediter_type_descriptors_") + project.dependencies.add(config.name, artifact()) + expediterConfigurations.add(config.name) + } } for (conf in expediterConfigurations) { @@ -63,8 +63,8 @@ class ExpediterPlugin : Plugin { animalSnifferSignatures.from(project.configurations.getByName(conf)) } - if (extension.platform.jvmVersion != null && extension.platform.androidSdk != null) { - logger.warn("Both jvmVersion and androidSdk are set.") + if (extension.platform.jvmVersion != null && extension.platform.android.sdk != null) { + logger.warn("Both JVM version and Android SDK are set.") } for (conf in extension.platform.configurations) { @@ -73,8 +73,7 @@ class ExpediterPlugin : Plugin { ignore = extension.ignoreSpec.buildIgnore() - @Suppress("DEPRECATION") - ignoreFile = (extension.ignoreSpec.file ?: extension.ignoreFile)?.let { project.file(it) } + ignoreFile = extension.ignoreSpec.file?.let(project::file) report = project.layout.buildDirectory.file("expediter.json").get().asFile diff --git a/plugin/src/main/kotlin/com/toasttab/expediter/gradle/config/AndroidSpec.kt b/plugin/src/main/kotlin/com/toasttab/expediter/gradle/config/AndroidSpec.kt new file mode 100644 index 0000000..2cdfb3f --- /dev/null +++ b/plugin/src/main/kotlin/com/toasttab/expediter/gradle/config/AndroidSpec.kt @@ -0,0 +1,17 @@ +package com.toasttab.expediter.gradle.config + +class AndroidSpec { + var sdk: Int? = null + var coreLibraryDesugaring: Boolean = false + var gummyBearsVersion: String = "0.7.0" + + fun artifact(): String { + val base = "com.toasttab.android:gummy-bears-api-$sdk:$gummyBearsVersion" + + return if (coreLibraryDesugaring) { + "$base:coreLib2@expediter" + } else { + "$base@expediter" + } + } +} diff --git a/plugin/src/main/kotlin/com/toasttab/expediter/gradle/ApplicationClassSelector.kt b/plugin/src/main/kotlin/com/toasttab/expediter/gradle/config/ApplicationSpec.kt similarity index 94% rename from plugin/src/main/kotlin/com/toasttab/expediter/gradle/ApplicationClassSelector.kt rename to plugin/src/main/kotlin/com/toasttab/expediter/gradle/config/ApplicationSpec.kt index 697588f..9a285d7 100644 --- a/plugin/src/main/kotlin/com/toasttab/expediter/gradle/ApplicationClassSelector.kt +++ b/plugin/src/main/kotlin/com/toasttab/expediter/gradle/config/ApplicationSpec.kt @@ -13,9 +13,9 @@ * limitations under the License. */ -package com.toasttab.expediter.gradle +package com.toasttab.expediter.gradle.config -class ApplicationClassSelector( +class ApplicationSpec( val configurations: MutableList, val files: MutableList = mutableListOf(), val sourceSets: MutableList = mutableListOf() diff --git a/plugin/src/main/kotlin/com/toasttab/expediter/gradle/ExpediterExtension.kt b/plugin/src/main/kotlin/com/toasttab/expediter/gradle/config/ExpediterExtension.kt similarity index 56% rename from plugin/src/main/kotlin/com/toasttab/expediter/gradle/ExpediterExtension.kt rename to plugin/src/main/kotlin/com/toasttab/expediter/gradle/config/ExpediterExtension.kt index 03f909f..e8ad208 100644 --- a/plugin/src/main/kotlin/com/toasttab/expediter/gradle/ExpediterExtension.kt +++ b/plugin/src/main/kotlin/com/toasttab/expediter/gradle/config/ExpediterExtension.kt @@ -13,27 +13,36 @@ * limitations under the License. */ -package com.toasttab.expediter.gradle +package com.toasttab.expediter.gradle.config import org.gradle.api.Action +import org.slf4j.LoggerFactory abstract class ExpediterExtension { - var application: ApplicationClassSelector = ApplicationClassSelector(configuration = "runtimeClasspath", sourceSet = "main") - var platform: PlatformClassSelector = PlatformClassSelector() + companion object { + private val LOGGER = LoggerFactory.getLogger(ExpediterExtension::class.java) + } - val ignoreSpec = IgnoreSpec() + var application: ApplicationSpec = ApplicationSpec(configuration = "runtimeClasspath", sourceSet = "main") + var platform: PlatformSpec = PlatformSpec() - @Deprecated("use the ignore closure instead", replaceWith = ReplaceWith("ignore { file = ignoreFile }")) - var ignoreFile: Any? = null + val ignoreSpec = IgnoreSpec() var failOnIssues: Boolean = false - fun application(configure: Action) { - application = ApplicationClassSelector() + @Deprecated("use ignore closure instead") + var ignoreFile: Any? = null + set(value) { + LOGGER.warn("ignoreFile property is deprecated and will be removed, use ignore { file = ... }") + ignoreSpec.file = value + } + + fun application(configure: Action) { + application = ApplicationSpec() configure.execute(application) } - fun platform(configure: Action) { + fun platform(configure: Action) { configure.execute(platform) } diff --git a/plugin/src/main/kotlin/com/toasttab/expediter/gradle/IgnoreSpec.kt b/plugin/src/main/kotlin/com/toasttab/expediter/gradle/config/IgnoreSpec.kt similarity index 92% rename from plugin/src/main/kotlin/com/toasttab/expediter/gradle/IgnoreSpec.kt rename to plugin/src/main/kotlin/com/toasttab/expediter/gradle/config/IgnoreSpec.kt index 75e1f78..61d135b 100644 --- a/plugin/src/main/kotlin/com/toasttab/expediter/gradle/IgnoreSpec.kt +++ b/plugin/src/main/kotlin/com/toasttab/expediter/gradle/config/IgnoreSpec.kt @@ -1,4 +1,4 @@ -package com.toasttab.expediter.gradle +package com.toasttab.expediter.gradle.config import com.toasttab.expediter.ignore.Ignore diff --git a/plugin/src/main/kotlin/com/toasttab/expediter/gradle/PlatformClassSelector.kt b/plugin/src/main/kotlin/com/toasttab/expediter/gradle/config/PlatformSpec.kt similarity index 60% rename from plugin/src/main/kotlin/com/toasttab/expediter/gradle/PlatformClassSelector.kt rename to plugin/src/main/kotlin/com/toasttab/expediter/gradle/config/PlatformSpec.kt index ae0cf33..8cb6263 100644 --- a/plugin/src/main/kotlin/com/toasttab/expediter/gradle/PlatformClassSelector.kt +++ b/plugin/src/main/kotlin/com/toasttab/expediter/gradle/config/PlatformSpec.kt @@ -13,15 +13,35 @@ * limitations under the License. */ -package com.toasttab.expediter.gradle +package com.toasttab.expediter.gradle.config + +import org.gradle.api.Action +import org.slf4j.LoggerFactory + +class PlatformSpec { + companion object { + private val LOGGER = LoggerFactory.getLogger(PlatformSpec::class.java) + } + + val animalSnifferConfigurations: MutableList = mutableListOf() + val expediterConfigurations: MutableList = mutableListOf() + val configurations: MutableList = mutableListOf() -class PlatformClassSelector( - val animalSnifferConfigurations: MutableList = mutableListOf(), - val expediterConfigurations: MutableList = mutableListOf(), - val configurations: MutableList = mutableListOf(), - var androidSdk: Int? = null, var jvmVersion: Int? = null -) { + + @Deprecated("use android closure instead") + var androidSdk: Int? = null + set(value) { + LOGGER.warn("androidSdk property is deprecated and will be removed, use android { sdk = ... }") + android.sdk = value + } + + val android: AndroidSpec = AndroidSpec() + + fun android(configure: Action) { + configure.execute(android) + } + fun animalSnifferConfiguration(configuration: String) { animalSnifferConfigurations.add(configuration) } diff --git a/plugin/src/test/kotlin/com/toasttab/expediter/gradle/ExpediterPluginIntegrationTest.kt b/plugin/src/test/kotlin/com/toasttab/expediter/gradle/ExpediterPluginIntegrationTest.kt index 3e14af5..fc25b19 100644 --- a/plugin/src/test/kotlin/com/toasttab/expediter/gradle/ExpediterPluginIntegrationTest.kt +++ b/plugin/src/test/kotlin/com/toasttab/expediter/gradle/ExpediterPluginIntegrationTest.kt @@ -34,7 +34,9 @@ class ExpediterPluginIntegrationTest { fun `android compat`(project: TestProject) { project.createRunner() .withArguments("check") - .buildAndFail() + .buildAndFail().let { + println(it.output) + } val report = IssueReport.fromJson(project.dir.resolve("build/expediter.json").readText())