Skip to content

Commit 5b45502

Browse files
adinauerclaude
andcommitted
build: Extract Animal Sniffer convention plugins
Move shared Java 8 API compatibility configuration into build-logic plugins. Apply the Android-compatible variant where modules also need gummy-bears API checks to reduce duplicated signature setup. Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 305dafe commit 5b45502

39 files changed

Lines changed: 118 additions & 201 deletions

File tree

build-logic/build.gradle.kts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,19 @@ repositories {
77
}
88

99
dependencies {
10+
implementation(libs.animalsniffer.gradle.plugin)
1011
implementation(libs.spotlessLib)
1112
}
13+
14+
gradlePlugin {
15+
plugins {
16+
register("sentryAnimalSniffer") {
17+
id = "io.sentry.animalsniffer"
18+
implementationClass = "io.sentry.gradle.SentryAnimalSnifferPlugin"
19+
}
20+
register("sentryAnimalSnifferAndroid") {
21+
id = "io.sentry.animalsniffer.android"
22+
implementationClass = "io.sentry.gradle.SentryAnimalSnifferAndroidPlugin"
23+
}
24+
}
25+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package io.sentry.gradle
2+
3+
import javax.inject.Inject
4+
import org.gradle.api.Plugin
5+
import org.gradle.api.Project
6+
import org.gradle.api.artifacts.VersionCatalogsExtension
7+
import org.gradle.api.model.ObjectFactory
8+
import org.gradle.api.provider.ListProperty
9+
import org.gradle.api.tasks.SourceTask
10+
11+
abstract class SentryAnimalSnifferExtension @Inject constructor(objects: ObjectFactory) {
12+
val ignoredClasses: ListProperty<String> = objects.listProperty(String::class.java)
13+
val mainExcludes: ListProperty<String> = objects.listProperty(String::class.java)
14+
}
15+
16+
class SentryAnimalSnifferPlugin : Plugin<Project> {
17+
override fun apply(project: Project) {
18+
project.pluginManager.apply("ru.vyarus.animalsniffer")
19+
20+
val libs = project.extensions.getByType(VersionCatalogsExtension::class.java).named("libs")
21+
val extension =
22+
project.extensions.create(
23+
"sentryAnimalSniffer",
24+
SentryAnimalSnifferExtension::class.java,
25+
)
26+
27+
val java18Version = libs.findVersion("java18Signature").get().requiredVersion
28+
project.dependencies.add(
29+
"signature",
30+
"org.codehaus.mojo.signature:java18:$java18Version@signature",
31+
)
32+
33+
project.tasks.matching { it.name == "check" }.configureEach {
34+
dependsOn("animalsnifferMain")
35+
}
36+
37+
project.afterEvaluate {
38+
project.tasks.named("animalsnifferMain", SourceTask::class.java).configure {
39+
exclude(extension.mainExcludes.get())
40+
val ignoredClasses = extension.ignoredClasses.get()
41+
if (ignoredClasses.isNotEmpty()) {
42+
javaClass.getMethod("setIgnoreClasses", Iterable::class.java).invoke(this, ignoredClasses)
43+
}
44+
}
45+
}
46+
}
47+
}
48+
49+
class SentryAnimalSnifferAndroidPlugin : Plugin<Project> {
50+
override fun apply(project: Project) {
51+
project.pluginManager.apply(SentryAnimalSnifferPlugin::class.java)
52+
53+
val libs = project.extensions.getByType(VersionCatalogsExtension::class.java).named("libs")
54+
val gummyBears = libs.findLibrary("gummy-bears-api21").get().get()
55+
val gummyBearsVersion = libs.findVersion("gummyBears").get().requiredVersion
56+
project.dependencies.add(
57+
"signature",
58+
"${gummyBears.module.group}:${gummyBears.module.name}:$gummyBearsVersion@signature",
59+
)
60+
}
61+
}

gradle/libs.versions.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
[versions]
2+
animalsniffer = "2.0.1"
23
apollo = "2.5.9"
34
androidxLifecycle = "2.2.0"
45
androidxNavigation = "2.4.2"
@@ -73,11 +74,12 @@ springboot4 = { id = "org.springframework.boot", version.ref = "springboot4" }
7374
spring-dependency-management = { id = "io.spring.dependency-management", version = "1.1.7" }
7475
sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" }
7576
gretty = { id = "org.gretty", version = "4.0.0" }
76-
animalsniffer = { id = "ru.vyarus.animalsniffer", version = "2.0.1" }
77+
animalsniffer = { id = "ru.vyarus.animalsniffer", version.ref = "animalsniffer" }
7778
sentry = { id = "io.sentry.android.gradle", version.ref = "sagp"}
7879
shadow = { id = "com.gradleup.shadow", version = "9.4.1" }
7980

8081
[libraries]
82+
animalsniffer-gradle-plugin = { module = "ru.vyarus:gradle-animalsniffer-plugin", version.ref = "animalsniffer" }
8183
apache-httpclient = { module = "org.apache.httpcomponents.client5:httpclient5", version = "5.0.4" }
8284
apollo2-coroutines = { module = "com.apollographql.apollo:apollo-coroutines-support", version.ref = "apollo" }
8385
apollo2-runtime = { module = "com.apollographql.apollo:apollo-runtime", version.ref = "apollo" }

sentry-apache-http-client-5/build.gradle.kts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
33

44
plugins {
55
`java-library`
6-
alias(libs.plugins.animalsniffer)
6+
id("io.sentry.animalsniffer")
77
id("io.sentry.javadoc")
88
alias(libs.plugins.kotlin.jvm)
99
alias(libs.plugins.errorprone)
@@ -26,8 +26,6 @@ dependencies {
2626
errorprone(libs.nopen.checker)
2727
errorprone(libs.nullaway)
2828

29-
signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature")
30-
3129
// tests
3230
testImplementation(libs.apache.httpclient)
3331
testImplementation(projects.sentryTestSupport)
@@ -36,8 +34,6 @@ dependencies {
3634
testImplementation(libs.mockito.kotlin)
3735
}
3836

39-
tasks { check { dependsOn(animalsnifferMain) } }
40-
4137
tasks.withType<JavaCompile>().configureEach {
4238
options.errorprone {
4339
check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR)

sentry-apollo-3/build.gradle.kts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ plugins {
88
alias(libs.plugins.errorprone)
99
alias(libs.plugins.gradle.versions)
1010
alias(libs.plugins.buildconfig)
11-
alias(libs.plugins.animalsniffer)
11+
id("io.sentry.animalsniffer.android")
1212
}
1313

1414
tasks.withType<KotlinCompile>().configureEach {
@@ -37,14 +37,8 @@ dependencies {
3737
testImplementation(libs.mockito.kotlin)
3838
testImplementation(libs.mockito.inline)
3939
testImplementation(libs.okhttp.mockwebserver)
40-
41-
val gummyBearsModule = libs.gummy.bears.api21.get().module
42-
signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature")
43-
signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature")
4440
}
4541

46-
tasks { check { dependsOn(animalsnifferMain) } }
47-
4842
tasks.withType<JavaCompile>().configureEach {
4943
options.errorprone {
5044
check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR)

sentry-apollo-4/build.gradle.kts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ plugins {
88
alias(libs.plugins.errorprone)
99
alias(libs.plugins.gradle.versions)
1010
alias(libs.plugins.buildconfig)
11-
alias(libs.plugins.animalsniffer)
11+
id("io.sentry.animalsniffer.android")
1212
}
1313

1414
tasks.withType<KotlinCompile>().configureEach {
@@ -39,14 +39,8 @@ dependencies {
3939
testImplementation(libs.mockito.inline)
4040
testImplementation(libs.okhttp.mockwebserver)
4141
testImplementation("org.jetbrains.kotlin:kotlin-reflect:2.0.0")
42-
43-
val gummyBearsModule = libs.gummy.bears.api21.get().module
44-
signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature")
45-
signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature")
4642
}
4743

48-
tasks { check { dependsOn(animalsnifferMain) } }
49-
5044
tasks.withType<JavaCompile>().configureEach {
5145
options.errorprone {
5246
check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR)

sentry-apollo/build.gradle.kts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ plugins {
88
alias(libs.plugins.errorprone)
99
alias(libs.plugins.gradle.versions)
1010
alias(libs.plugins.buildconfig)
11-
alias(libs.plugins.animalsniffer)
11+
id("io.sentry.animalsniffer.android")
1212
}
1313

1414
tasks.withType<KotlinCompile>().configureEach {
@@ -38,14 +38,8 @@ dependencies {
3838
testImplementation(libs.mockito.kotlin)
3939
testImplementation(libs.mockito.inline)
4040
testImplementation(libs.okhttp.mockwebserver)
41-
42-
val gummyBearsModule = libs.gummy.bears.api21.get().module
43-
signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature")
44-
signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature")
4541
}
4642

47-
tasks { check { dependsOn(animalsnifferMain) } }
48-
4943
tasks.withType<JavaCompile>().configureEach {
5044
options.errorprone {
5145
check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR)

sentry-async-profiler/build.gradle.kts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ plugins {
88
alias(libs.plugins.errorprone)
99
alias(libs.plugins.gradle.versions)
1010
alias(libs.plugins.buildconfig)
11-
alias(libs.plugins.animalsniffer)
11+
id("io.sentry.animalsniffer")
1212
}
1313

1414
tasks.withType<KotlinCompile>().configureEach {
@@ -29,8 +29,6 @@ dependencies {
2929
errorprone(libs.nopen.checker)
3030
errorprone(libs.nullaway)
3131

32-
signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature")
33-
3432
// tests
3533
testImplementation(kotlin(Config.kotlinStdLib))
3634
testImplementation(projects.sentryTestSupport)
@@ -39,8 +37,6 @@ dependencies {
3937
testImplementation(libs.mockito.inline)
4038
}
4139

42-
tasks { check { dependsOn(animalsnifferMain) } }
43-
4440
tasks.withType<JavaCompile>().configureEach {
4541
options.errorprone {
4642
check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR)

sentry-graphql-22/build.gradle.kts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ plugins {
88
alias(libs.plugins.errorprone)
99
alias(libs.plugins.gradle.versions)
1010
alias(libs.plugins.buildconfig)
11-
alias(libs.plugins.animalsniffer)
11+
id("io.sentry.animalsniffer")
1212
}
1313

1414
tasks.withType<KotlinCompile>().configureEach {
@@ -28,8 +28,6 @@ dependencies {
2828
errorprone(libs.nopen.checker)
2929
errorprone(libs.nullaway)
3030

31-
signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature")
32-
3331
// tests
3432
testImplementation(projects.sentry)
3533
testImplementation(projects.sentryTestSupport)
@@ -44,8 +42,6 @@ dependencies {
4442
testImplementation("com.netflix.graphql.dgs:graphql-error-types:4.9.2")
4543
}
4644

47-
tasks { check { dependsOn(animalsnifferMain) } }
48-
4945
tasks.withType<JavaCompile>().configureEach {
5046
options.errorprone {
5147
check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR)

sentry-graphql-core/build.gradle.kts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ plugins {
88
alias(libs.plugins.errorprone)
99
alias(libs.plugins.gradle.versions)
1010
alias(libs.plugins.buildconfig)
11-
alias(libs.plugins.animalsniffer)
11+
id("io.sentry.animalsniffer")
1212
}
1313

1414
tasks.withType<KotlinCompile>().configureEach {
@@ -27,8 +27,6 @@ dependencies {
2727
errorprone(libs.nopen.checker)
2828
errorprone(libs.nullaway)
2929

30-
signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature")
31-
3230
// tests
3331
testImplementation(projects.sentry)
3432
testImplementation(projects.sentryTestSupport)
@@ -43,8 +41,6 @@ dependencies {
4341
testImplementation("com.netflix.graphql.dgs:graphql-error-types:4.9.2")
4442
}
4543

46-
tasks { check { dependsOn(animalsnifferMain) } }
47-
4844
tasks.withType<JavaCompile>().configureEach {
4945
options.errorprone {
5046
check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR)

0 commit comments

Comments
 (0)