Skip to content

Commit b6dd315

Browse files
feat: gradle plugin markers are part of an implicit bundle.
1 parent 5306882 commit b6dd315

3 files changed

Lines changed: 93 additions & 1 deletion

File tree

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright (c) 2026. Tony Robalik.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package com.autonomousapps.jvm
4+
5+
import com.autonomousapps.jvm.projects.BuildLogicProject
6+
7+
import static com.autonomousapps.utils.Runner.build
8+
import static com.google.common.truth.Truth.assertThat
9+
10+
final class BuildLogicSpec extends AbstractJvmSpec {
11+
12+
def "gradle plugin markers are used when the plugin is used (#gradleVersion)"() {
13+
given:
14+
def project = new BuildLogicProject()
15+
gradleProject = project.gradleProject
16+
17+
when:
18+
build(gradleVersion, gradleProject.rootDir, 'buildHealth')
19+
20+
then:
21+
assertThat(project.actualBuildHealth()).containsExactlyElementsIn(project.expectedBuildHealth)
22+
23+
where:
24+
gradleVersion << gradleVersions()
25+
}
26+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// Copyright (c) 2026. Tony Robalik.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package com.autonomousapps.jvm.projects
4+
5+
import com.autonomousapps.AbstractProject
6+
import com.autonomousapps.kit.GradleProject
7+
import com.autonomousapps.kit.Source
8+
import com.autonomousapps.kit.SourceType
9+
import com.autonomousapps.kit.gradle.Dependency
10+
import com.autonomousapps.kit.gradle.Plugin
11+
import com.autonomousapps.kit.gradle.dependencies.Plugins
12+
import com.autonomousapps.model.ProjectAdvice
13+
14+
import static com.autonomousapps.AdviceHelper.actualProjectAdvice
15+
import static com.autonomousapps.AdviceHelper.emptyProjectAdviceFor
16+
import static com.autonomousapps.kit.gradle.Dependency.implementation
17+
18+
final class BuildLogicProject extends AbstractProject {
19+
20+
private static final Dependency DAGP = implementation('com.autonomousapps.dependency-analysis:com.autonomousapps.dependency-analysis.gradle.plugin:3.9.0')
21+
22+
final GradleProject gradleProject
23+
24+
BuildLogicProject() {
25+
this.gradleProject = build()
26+
}
27+
28+
private GradleProject build() {
29+
return newGradleProjectBuilder()
30+
.withSubproject('conventions') { s ->
31+
s.sources = sources
32+
s.withBuildScript { bs ->
33+
bs.plugins(Plugin.javaGradle, Plugins.kotlinJvmNoVersion, Plugins.dependencyAnalysisNoVersion)
34+
bs.dependencies(DAGP)
35+
}
36+
}
37+
.write()
38+
}
39+
40+
private List<Source> sources = [
41+
Source.kotlin(
42+
'''\
43+
package mutual.aid
44+
45+
import com.autonomousapps.DependencyAnalysisSubExtension
46+
47+
class DagpConfigurer(private val dependencyAnalysis: DependencyAnalysisSubExtension)
48+
'''.stripIndent()
49+
).build()
50+
]
51+
52+
Set<ProjectAdvice> actualBuildHealth() {
53+
return actualProjectAdvice(gradleProject)
54+
}
55+
56+
final Set<ProjectAdvice> expectedBuildHealth = [
57+
emptyProjectAdviceFor(':conventions'),
58+
]
59+
}

src/main/kotlin/com/autonomousapps/internal/Bundles.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,13 @@ internal class Bundles private constructor(
248248
}
249249
}
250250

251+
// handle Gradle plugin marker artifacts
252+
if (parentNode.identifier.endsWith(".gradle.plugin")) {
253+
view.graph.children(parentNode)
254+
.singleOrNull()
255+
?.let { child -> bundles[parentNode] = child }
256+
}
257+
251258
fun implicitKmpBundleFor(target: String) {
252259
val candidate = "${parentNode.identifier}-${target}"
253260
view.graph.children(parentNode)
@@ -263,7 +270,7 @@ internal class Bundles private constructor(
263270
fun implicitKmpPrimaryFor(target: String) {
264271
val suffix = "-$target"
265272
view.graph.nodes()
266-
.filter { it.identifier.endsWith(suffix) }
273+
.filter { node -> node.identifier.endsWith(suffix) }
267274
.mapNotNull { candidate ->
268275
val kmpIdentifier = candidate.identifier.substringBeforeLast(suffix)
269276
val kmp = candidate.copy(

0 commit comments

Comments
 (0)