Skip to content

Commit 5e2a8c4

Browse files
authored
Merge pull request #94 from nebula-plugins/improve-provider-api-configuration-avoidance
Improve usage of Provider API
2 parents 5c8c172 + 9ae7856 commit 5e2a8c4

10 files changed

+1233
-45
lines changed
Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,30 @@
11
package nebula.plugin.responsible
22

3-
import groovy.transform.Canonical
43
import groovy.transform.CompileStatic
54
import org.gradle.api.Named
5+
import org.gradle.api.model.ObjectFactory
6+
import org.gradle.api.provider.Property
7+
8+
import javax.inject.Inject
69

710
/**
811
* Definition of a source facet, which via the NebulaFacetPlugin will create
912
* a source set and runtime/compile configurations. Name is used for the source
1013
* directory and the prefix for configurations.
1114
*/
12-
@Canonical
1315
@CompileStatic
1416
class FacetDefinition implements Named {
15-
// TODO Use convention mapping to provide good defaults
16-
FacetDefinition(String name) {
17+
private final String name
18+
final Property<String> parentSourceSet
19+
20+
@Inject
21+
FacetDefinition(String name, ObjectFactory objects) {
1722
this.name = name
23+
this.parentSourceSet = objects.property(String).convention('main')
1824
}
1925

20-
String name
21-
String parentSourceSet
22-
23-
String getParentSourceSet() {
24-
return parentSourceSet ?: 'main'
26+
@Override
27+
String getName() {
28+
return name
2529
}
2630
}

src/main/groovy/nebula/plugin/responsible/NebulaFacetPlugin.groovy

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import org.gradle.api.Task
1414
import org.gradle.api.artifacts.Configuration
1515
import org.gradle.api.internal.CollectionCallbackActionDecorator
1616
import org.gradle.api.internal.project.ProjectInternal
17+
import org.gradle.api.model.ObjectFactory
1718
import org.gradle.api.plugins.JavaBasePlugin
1819
import org.gradle.api.plugins.JavaPlugin
1920
import org.gradle.api.plugins.JavaPluginExtension
@@ -38,13 +39,14 @@ class NebulaFacetPlugin implements Plugin<Project> {
3839
void apply(Project project) {
3940
this.project = project
4041

42+
ObjectFactory objects = project.objects
4143
extension = container(FacetDefinition, new NamedDomainObjectFactory<FacetDefinition>() {
4244
@Override
4345
FacetDefinition create(String name) {
4446
if (name.contains('Test')) {
45-
return new TestFacetDefinition(name)
47+
return objects.newInstance(TestFacetDefinition, name)
4648
} else {
47-
return new FacetDefinition(name)
49+
return objects.newInstance(FacetDefinition, name)
4850
}
4951
}
5052
})
@@ -58,7 +60,7 @@ class NebulaFacetPlugin implements Plugin<Project> {
5860

5961

6062
SourceSetContainer sourceSets = SourceSetUtils.getSourceSets(project)
61-
sourceSets.matching { SourceSet sourceSet -> sourceSet.name == facet.parentSourceSet }.all { SourceSet parentSourceSet ->
63+
sourceSets.matching { SourceSet sourceSet -> sourceSet.name == facet.parentSourceSet.get() }.all { SourceSet parentSourceSet ->
6264

6365
// Since we're using NamedContainerProperOrder, we're configured already.
6466
SourceSet sourceSet = createSourceSet(parentSourceSet, facet)
@@ -76,17 +78,17 @@ class NebulaFacetPlugin implements Plugin<Project> {
7678
project.configurations.getByName(sourceSet.annotationProcessorConfigurationName).extendsFrom(annotationProcessor)
7779

7880
// Make sure at the classes get built as part of build
79-
project.tasks.named('build').configure(new Action<Task>() {
81+
project.tasks.named('build', new Action<Task>() {
8082
@Override
8183
void execute(Task buildTask) {
8284
buildTask.dependsOn(sourceSet.classesTaskName)
8385
}
8486
})
8587

8688
if (facet instanceof TestFacetDefinition) {
87-
TaskProvider<Test> testTask = createTestTask(facet.testTaskName.toString(), sourceSet)
88-
if (facet.includeInCheckLifecycle) {
89-
project.tasks.named('check') configure(new Action<Task>() {
89+
TaskProvider<Test> testTask = createTestTask(facet.testTaskName.get(), sourceSet)
90+
if (facet.includeInCheckLifecycle.get()) {
91+
project.tasks.named('check', new Action<Task>() {
9092
@Override
9193
void execute(Task checkTask) {
9294
checkTask.dependsOn(testTask)
@@ -197,7 +199,7 @@ class NebulaFacetPlugin implements Plugin<Project> {
197199
* @return the created and configured test facet
198200
*/
199201
TestFacetDefinition createTestFacet(String name, Action<? super TestFacetDefinition> configureAction) {
200-
TestFacetDefinition facet = new TestFacetDefinition(name)
202+
TestFacetDefinition facet = project.objects.newInstance(TestFacetDefinition, name)
201203
configureAction.execute(facet)
202204
extension.add(facet)
203205
return facet
@@ -210,7 +212,7 @@ class NebulaFacetPlugin implements Plugin<Project> {
210212
* @return the created test facet
211213
*/
212214
TestFacetDefinition createTestFacet(String name) {
213-
TestFacetDefinition facet = new TestFacetDefinition(name)
215+
TestFacetDefinition facet = project.objects.newInstance(TestFacetDefinition, name)
214216
extension.add(facet)
215217
return facet
216218
}
@@ -223,7 +225,7 @@ class NebulaFacetPlugin implements Plugin<Project> {
223225
* @return the created and configured facet
224226
*/
225227
FacetDefinition createFacet(String name, Action<? super FacetDefinition> configureAction) {
226-
FacetDefinition facet = new FacetDefinition(name)
228+
FacetDefinition facet = project.objects.newInstance(FacetDefinition, name)
227229
configureAction.execute(facet)
228230
extension.add(facet)
229231
return facet
@@ -236,7 +238,7 @@ class NebulaFacetPlugin implements Plugin<Project> {
236238
* @return the created facet
237239
*/
238240
FacetDefinition createFacet(String name) {
239-
FacetDefinition facet = new FacetDefinition(name)
241+
FacetDefinition facet = project.objects.newInstance(FacetDefinition, name)
240242
extension.add(facet)
241243
return facet
242244
}

src/main/groovy/nebula/plugin/responsible/NebulaIntegTestPlugin.groovy

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ class NebulaIntegTestPlugin implements Plugin<Project> {
2727
facetPlugin.createTestFacet(FACET_NAME, new Action<TestFacetDefinition>() {
2828
@Override
2929
void execute(TestFacetDefinition facet) {
30-
facet.setTestTaskName(TASK_NAME)
31-
facet.setParentSourceSet(PARENT_SOURCE_SET)
32-
facet.setIncludeInCheckLifecycle(shouldIncludeInCheckLifecycle())
30+
facet.testTaskName.set(TASK_NAME)
31+
facet.parentSourceSet.set(PARENT_SOURCE_SET)
32+
facet.includeInCheckLifecycle.set(shouldIncludeInCheckLifecycle())
3333
}
3434
})
3535
}
Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
11
package nebula.plugin.responsible
22

3-
import groovy.transform.Canonical
43
import groovy.transform.CompileStatic
4+
import org.gradle.api.model.ObjectFactory
5+
import org.gradle.api.provider.Property
6+
7+
import javax.inject.Inject
58

69
/**
710
* Definition of a source facet, which via the NebulaFacetPlugin will create
811
* a source set and runtime/compile configurations. Name is used for the source
912
* directory and the prefix for configurations.
1013
*/
11-
@Canonical
1214
@CompileStatic
1315
class TestFacetDefinition extends FacetDefinition {
14-
15-
public TestFacetDefinition(String name) {
16-
super(name)
17-
}
18-
1916
/**
2017
* Name of the test task that will get created
2118
*/
22-
String testTaskName
23-
24-
String getTestTaskName() {
25-
testTaskName ?: getName()
26-
}
19+
final Property<String> testTaskName
2720

2821
/**
2922
* Whether the task created for the test facet should be a dependency of 'check'.
3023
*/
31-
boolean includeInCheckLifecycle = true
24+
final Property<Boolean> includeInCheckLifecycle
25+
26+
@Inject
27+
TestFacetDefinition(String name, ObjectFactory objects) {
28+
super(name, objects)
29+
this.testTaskName = objects.property(String).convention(name)
30+
this.includeInCheckLifecycle = objects.property(Boolean).convention(true)
31+
}
3232
}

0 commit comments

Comments
 (0)