Skip to content

Commit

Permalink
Make Android configuration more flexible
Browse files Browse the repository at this point in the history
* Change syntax to the `android { }` closure
* Make the version of gummy bears configurable
* Allow using descriptors with core library desugaring
  • Loading branch information
ogolberg authored Dec 4, 2023
1 parent 8408d82 commit 0c16284
Show file tree
Hide file tree
Showing 8 changed files with 83 additions and 34 deletions.
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
}
}
```
Expand All @@ -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.8.0@expediter")
}
```

Expand All @@ -128,7 +130,7 @@ expediter {
configurations.create("_animal_sniffer_descriptors_")

dependencies {
add("_animal_sniffer_descriptors_", "com.toasttab.android:gummy-bears-api-21:0.6.1@signature")
add("_animal_sniffer_descriptors_", "com.toasttab.android:gummy-bears-api-21:0.8.0@signature")
}
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -46,13 +47,12 @@ class ExpediterPlugin : Plugin<Project> {

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.6.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) {
Expand All @@ -63,8 +63,8 @@ class ExpediterPlugin : Plugin<Project> {
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) {
Expand All @@ -73,8 +73,7 @@ class ExpediterPlugin : Plugin<Project> {

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

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.toasttab.expediter.gradle.config

class AndroidSpec {
var sdk: Int? = null
var coreLibraryDesugaring: Boolean = false
var gummyBearsVersion: String = "0.8.0"

fun artifact(): String {
val base = "com.toasttab.android:gummy-bears-api-$sdk:$gummyBearsVersion"

return if (coreLibraryDesugaring) {
"$base:coreLib2@expediter"
} else {
"$base@expediter"
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<String>,
val files: MutableList<String> = mutableListOf(),
val sourceSets: MutableList<String> = mutableListOf()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<ApplicationClassSelector>) {
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<ApplicationSpec>) {
application = ApplicationSpec()
configure.execute(application)
}

fun platform(configure: Action<PlatformClassSelector>) {
fun platform(configure: Action<PlatformSpec>) {
configure.execute(platform)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.toasttab.expediter.gradle
package com.toasttab.expediter.gradle.config

import com.toasttab.expediter.ignore.Ignore

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> = mutableListOf()
val expediterConfigurations: MutableList<String> = mutableListOf()
val configurations: MutableList<String> = mutableListOf()

class PlatformClassSelector(
val animalSnifferConfigurations: MutableList<String> = mutableListOf(),
val expediterConfigurations: MutableList<String> = mutableListOf(),
val configurations: MutableList<String> = 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<AndroidSpec>) {
configure.execute(android)
}

fun animalSnifferConfiguration(configuration: String) {
animalSnifferConfigurations.add(configuration)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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())

Expand Down

0 comments on commit 0c16284

Please sign in to comment.