Skip to content

Commit 45773c5

Browse files
authored
feat(ext): Lazy dependencies configuration (#119)
BREAKING CHANGES: The `strictNullCheck.sources` property of the extension was removed to encourage a lazy configuration. The methods that used to be inside `strictNullCheck.sources` ar now at `strictNullCheck` level. Also, it's not possible to add custom dependencies from the plugin extension anymore. If you want to add custom annotations, use Gradle's `dependencies` DSL as usual and configure `strictNullCheck.packageInfo` accordingly.
1 parent 69595ff commit 45773c5

File tree

5 files changed

+54
-122
lines changed

5 files changed

+54
-122
lines changed

src/main/java/io/github/joselion/strictnullcheck/StrictNullCheckPlugin.java

-19
Original file line numberDiff line numberDiff line change
@@ -42,24 +42,5 @@ public void apply(final Project project) {
4242
.srcDir(extension.getGeneratedDir().get().concat("/java/main"))
4343
);
4444
});
45-
46-
project.afterEvaluate(evaluated -> {
47-
final var allCompileOnly = evaluated
48-
.getConfigurations()
49-
.matching(configuration -> {
50-
final var name = configuration.getName();
51-
return name.startsWith("compileOnly") || name.endsWith("CompileOnly");
52-
});
53-
54-
allCompileOnly.configureEach(configuration ->
55-
extension
56-
.getSource()
57-
.getDependencies()
58-
.get()
59-
.stream()
60-
.map(evaluated.getDependencies()::create)
61-
.forEach(configuration.getDependencies()::add)
62-
);
63-
});
6445
}
6546
}

src/main/java/io/github/joselion/strictnullcheck/lib/StrictNullCheckExtension.java

+44-44
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
import javax.inject.Inject;
66

77
import org.gradle.api.Action;
8+
import org.gradle.api.Project;
89
import org.gradle.api.file.ProjectLayout;
910
import org.gradle.api.model.ObjectFactory;
1011
import org.gradle.api.provider.ListProperty;
1112
import org.gradle.api.provider.Property;
1213
import org.gradle.api.tasks.Input;
14+
import org.gradle.api.tasks.Internal;
1315
import org.gradle.api.tasks.Nested;
1416

1517
import lombok.Getter;
@@ -23,14 +25,14 @@ public class StrictNullCheckExtension {
2325
@Nested
2426
private final PackageInfo packageInfo;
2527

26-
@Nested
27-
private final Source source;
28+
@Internal
29+
private final Project project;
2830

2931
@Inject
30-
public StrictNullCheckExtension(final ObjectFactory objects, final ProjectLayout layout) {
32+
public StrictNullCheckExtension(final ObjectFactory objects, final ProjectLayout layout, final Project project) {
3133
this.generatedDir = objects.property(String.class);
3234
this.packageInfo = objects.newInstance(PackageInfo.class);
33-
this.source = objects.newInstance(Source.class);
35+
this.project = project;
3436

3537
this.generatedDir.convention(
3638
layout
@@ -46,8 +48,44 @@ public void packageInfo(final Action<PackageInfo> action) {
4648
action.execute(this.packageInfo);
4749
}
4850

49-
public void source(final Action<Source> action) {
50-
action.execute(this.source);
51+
public void addFindBugs(final String version) {
52+
this.addDependency("com.google.code.findbugs:jsr305:".concat(version));
53+
}
54+
55+
public void addFindBugs() {
56+
this.addFindBugs("3.0.2");
57+
}
58+
59+
public void addSpotBugs(final String version) {
60+
this.addDependency("com.github.spotbugs:spotbugs-annotations:".concat(version));
61+
}
62+
63+
public void addSpotBugs() {
64+
this.addSpotBugs("4.7.3");
65+
}
66+
67+
public void addEclipse(final String version) {
68+
this.addDependency("org.eclipse.jdt:org.eclipse.jdt.annotation:".concat(version));
69+
}
70+
71+
public void addEclipse() {
72+
this.addEclipse("2.2.700");
73+
}
74+
75+
private void addDependency(final String notation) {
76+
final var dependency = this.project.getDependencies().create(notation);
77+
final var allCompileOnly = this.project
78+
.getConfigurations()
79+
.matching(config -> {
80+
final var name = config.getName();
81+
return name.startsWith("compileOnly") || name.endsWith("CompileOnly");
82+
});
83+
84+
allCompileOnly.configureEach(config ->
85+
config
86+
.getDependencies()
87+
.add(dependency)
88+
);
5189
}
5290

5391
@Getter
@@ -112,42 +150,4 @@ public void useEclipse() {
112150
);
113151
}
114152
}
115-
116-
@Getter
117-
public static class Source {
118-
119-
@Input
120-
private final ListProperty<String> dependencies;
121-
122-
@Inject
123-
public Source(final ObjectFactory objects) {
124-
this.dependencies = objects.listProperty(String.class);
125-
126-
this.dependencies.convention(List.of());
127-
}
128-
129-
public void addFindBugs(final String version) {
130-
this.dependencies.add("com.google.code.findbugs:jsr305:".concat(version));
131-
}
132-
133-
public void addFindBugs() {
134-
this.addFindBugs("3.0.2");
135-
}
136-
137-
public void addSpotBugs(final String version) {
138-
this.dependencies.add("com.github.spotbugs:spotbugs-annotations:".concat(version));
139-
}
140-
141-
public void addSpotBugs() {
142-
this.addSpotBugs("4.7.3");
143-
}
144-
145-
public void addEclipse(final String version) {
146-
this.dependencies.add("org.eclipse.jdt:org.eclipse.jdt.annotation:".concat(version));
147-
}
148-
149-
public void addEclipse() {
150-
this.addEclipse("2.2.700");
151-
}
152-
}
153153
}

src/test/java/io/github/joselion/strictnullcheck/lib/StrictNullCheckExtensionTest.java

-43
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,11 @@
1919
final var imports = extension.getPackageInfo().getImports().get();
2020
final var annotations = extension.getPackageInfo().getAnnotations().get();
2121
final var javadoc = extension.getPackageInfo().getJavadoc().get();
22-
final var dependencies = extension.getSource().getDependencies().get();
2322

2423
assertThat(imports).containsExactly("javax.annotation.ParametersAreNonnullByDefault");
2524
assertThat(annotations).containsExactly("@ParametersAreNonnullByDefault");
2625
assertThat(generatedDir).isEqualTo(buildDir.concat("/generated/sources/strictNullCheck"));
2726
assertThat(javadoc).isEmpty();
28-
assertThat(dependencies).isEmpty();
2927
}
3028
}
3129

@@ -82,45 +80,4 @@
8280
}
8381
}
8482
}
85-
86-
@Nested class source {
87-
@Nested class addFindBugs {
88-
@Test void adds_the_FindBugs_dependency() {
89-
final var project = ProjectBuilder.builder().build();
90-
final var extension = project.getExtensions().create("strictNullCheck", StrictNullCheckExtension.class);
91-
92-
extension.getSource().addFindBugs();
93-
94-
final var dependencies = extension.getSource().getDependencies().get();
95-
96-
assertThat(dependencies).contains("com.google.code.findbugs:jsr305:3.0.2");
97-
}
98-
}
99-
100-
@Nested class addSpotBugs {
101-
@Test void adds_the_SpotBugs_dependency() {
102-
final var project = ProjectBuilder.builder().build();
103-
final var extension = project.getExtensions().create("strictNullCheck", StrictNullCheckExtension.class);
104-
105-
extension.getSource().addSpotBugs();
106-
107-
final var dependencies = extension.getSource().getDependencies().get();
108-
109-
assertThat(dependencies).contains("com.github.spotbugs:spotbugs-annotations:4.7.3");
110-
}
111-
}
112-
113-
@Nested class addEclipse {
114-
@Test void adds_the_SpotBugs_dependency() {
115-
final var project = ProjectBuilder.builder().build();
116-
final var extension = project.getExtensions().create("strictNullCheck", StrictNullCheckExtension.class);
117-
118-
extension.getSource().addEclipse();
119-
120-
final var dependencies = extension.getSource().getDependencies().get();
121-
122-
assertThat(dependencies).contains("org.eclipse.jdt:org.eclipse.jdt.annotation:2.2.700");
123-
}
124-
}
125-
}
12683
}

src/testkit/java/io/github/joselion/strictnullcheck/StrictNullCheckPluginTkTest.java

+9-13
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@
2424
}
2525
2626
strictNullCheck {
27-
source {
28-
addFindBugs()
29-
}
27+
addFindBugs()
3028
}
3129
3230
repositories {
@@ -70,8 +68,7 @@
7068
'my.custom.annotation.NullApi',
7169
'my.custom.annotation.NullFields',
7270
]
73-
source.dependencies = ['my.custom:annotations:1.5.3']
74-
source.addFindBugs()
71+
addFindBugs()
7572
}
7673
7774
repositories {
@@ -80,8 +77,9 @@
8077
8178
task showConfig() {
8279
doLast {
80+
def deps = configurations.compileOnly.dependencies.collect { "$it.group:$it.name:$it.version" }
8381
println("*** packageInfo.annotations: ${strictNullCheck.packageInfo.annotations.get()}")
84-
println("*** source.dependencies: ${strictNullCheck.source.dependencies.get()}")
82+
println("*** dependencies: $deps")
8583
}
8684
}
8785
"""
@@ -91,7 +89,7 @@ task showConfig() {
9189

9290
assertThat(result.getOutput())
9391
.contains("*** packageInfo.annotations: [my.custom.annotation.NullApi, my.custom.annotation.NullFields]")
94-
.contains("*** source.dependencies: [my.custom:annotations:1.5.3, com.google.code.findbugs:jsr305:3.0.2]")
92+
.contains("*** dependencies: [com.google.code.findbugs:jsr305:3.0.2]")
9593
.contains("BUILD SUCCESSFUL");
9694
}
9795
}
@@ -112,10 +110,7 @@ task showConfig() {
112110
'my.custom.annotation.NullFields',
113111
]
114112
}
115-
source {
116-
dependencies = ['my.custom:annotations:1.5.3']
117-
addFindBugs()
118-
}
113+
addFindBugs()
119114
}
120115
121116
repositories {
@@ -124,8 +119,9 @@ task showConfig() {
124119
125120
task showConfig() {
126121
doLast {
122+
def deps = configurations.compileOnly.dependencies.collect { "$it.group:$it.name:$it.version" }
127123
println("*** packageInfo.annotations: ${strictNullCheck.packageInfo.annotations.get()}")
128-
println("*** source.dependencies: ${strictNullCheck.source.dependencies.get()}")
124+
println("*** dependencies: $deps")
129125
}
130126
}
131127
"""
@@ -135,7 +131,7 @@ task showConfig() {
135131

136132
assertThat(result.getOutput())
137133
.contains("*** packageInfo.annotations: [my.custom.annotation.NullApi, my.custom.annotation.NullFields]")
138-
.contains("*** source.dependencies: [my.custom:annotations:1.5.3, com.google.code.findbugs:jsr305:3.0.2]")
134+
.contains("*** dependencies: [com.google.code.findbugs:jsr305:3.0.2]")
139135
.contains("BUILD SUCCESSFUL");
140136
}
141137
}

src/testkit/java/io/github/joselion/strictnullcheck/lib/GeneratePackageInfoTaskTkTest.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@
2626
}
2727
2828
strictNullCheck {
29-
source {
30-
addFindBugs()
31-
}
29+
addFindBugs()
3230
}
3331
3432
repositories {

0 commit comments

Comments
 (0)