@@ -44,6 +44,7 @@ import org.gradle.api.GradleException
44
44
import org.gradle.api.NamedDomainObjectContainer
45
45
import org.gradle.api.Plugin
46
46
import org.gradle.api.Project
47
+ import org.gradle.api.Task
47
48
import org.gradle.api.artifacts.Configuration
48
49
import org.gradle.api.artifacts.type.ArtifactTypeDefinition
49
50
import org.gradle.api.attributes.LibraryElements
@@ -129,28 +130,29 @@ class ProtobufPlugin implements Plugin<Project> {
129
130
// extract included protos from {@code variant.compileConfiguration}
130
131
// of each variant.
131
132
Collection<Closure > postConfigure = []
133
+ Provider<Task > dummyTask = project. tasks. register(" protobufDummy" )
132
134
if (isAndroid) {
133
135
project. android. sourceSets. configureEach { sourceSet ->
134
136
ProtoSourceSet protoSourceSet = protobufExtension. sourceSets. create(sourceSet. name)
135
137
addSourceSetExtension(sourceSet, protoSourceSet)
136
138
Configuration protobufConfig = createProtobufConfiguration(protoSourceSet)
137
- setupExtractProtosTask(protoSourceSet, protobufConfig)
139
+ setupExtractProtosTask(protoSourceSet, protobufConfig, dummyTask )
138
140
}
139
141
140
142
NamedDomainObjectContainer<ProtoSourceSet > variantSourceSets =
141
143
project. objects. domainObjectContainer(ProtoSourceSet ) { String name ->
142
144
new DefaultProtoSourceSet (name, project. objects)
143
145
}
144
146
ProjectExt . forEachVariant(this . project) { BaseVariant variant ->
145
- addTasksForVariant(variant, variantSourceSets, postConfigure)
147
+ addTasksForVariant(variant, variantSourceSets, postConfigure, dummyTask )
146
148
}
147
149
} else {
148
150
project. sourceSets. configureEach { sourceSet ->
149
151
ProtoSourceSet protoSourceSet = protobufExtension. sourceSets. create(sourceSet. name)
150
152
addSourceSetExtension(sourceSet, protoSourceSet)
151
153
Configuration protobufConfig = createProtobufConfiguration(protoSourceSet)
152
154
Configuration compileProtoPath = createCompileProtoPathConfiguration(protoSourceSet)
153
- addTasksForSourceSet(sourceSet, protoSourceSet, protobufConfig, compileProtoPath, postConfigure)
155
+ addTasksForSourceSet(sourceSet, protoSourceSet, protobufConfig, compileProtoPath, postConfigure, dummyTask )
154
156
}
155
157
}
156
158
project. afterEvaluate {
@@ -237,11 +239,11 @@ class ProtobufPlugin implements Plugin<Project> {
237
239
*/
238
240
private void addTasksForSourceSet (
239
241
SourceSet sourceSet , ProtoSourceSet protoSourceSet , Configuration protobufConfig ,
240
- Configuration compileProtoPath , Collection<Closure > postConfigure ) {
241
- Provider<ProtobufExtract > extractProtosTask = setupExtractProtosTask(protoSourceSet, protobufConfig)
242
+ Configuration compileProtoPath , Collection<Closure > postConfigure , Provider< Task > dummyTask ) {
243
+ Provider<ProtobufExtract > extractProtosTask = setupExtractProtosTask(protoSourceSet, protobufConfig, dummyTask )
242
244
243
245
Provider<ProtobufExtract > extractIncludeProtosTask = setupExtractIncludeProtosTask(
244
- protoSourceSet, compileProtoPath)
246
+ protoSourceSet, compileProtoPath, dummyTask )
245
247
246
248
// Make protos in 'test' sourceSet able to import protos from the 'main' sourceSet.
247
249
// Pass include proto files from main to test.
@@ -295,7 +297,8 @@ class ProtobufPlugin implements Plugin<Project> {
295
297
private void addTasksForVariant (
296
298
Object variant ,
297
299
NamedDomainObjectContainer<ProtoSourceSet > variantSourceSets ,
298
- Collection<Closure > postConfigure
300
+ Collection<Closure > postConfigure ,
301
+ Provider<Task > dummyTask
299
302
) {
300
303
Boolean isTestVariant = variant instanceof TestVariant || variant instanceof UnitTestVariant
301
304
ProtoSourceSet variantSourceSet = variantSourceSets. create(variant. name)
@@ -318,7 +321,7 @@ class ProtobufPlugin implements Plugin<Project> {
318
321
}
319
322
}
320
323
321
- setupExtractIncludeProtosTask(variantSourceSet, classPathConfig)
324
+ setupExtractIncludeProtosTask(variantSourceSet, classPathConfig, dummyTask )
322
325
323
326
// GenerateProto task, one per variant (compilation unit).
324
327
variant. sourceSets. each { SourceProvider sourceProvider ->
@@ -422,14 +425,16 @@ class ProtobufPlugin implements Plugin<Project> {
422
425
*/
423
426
private Provider<ProtobufExtract > setupExtractProtosTask (
424
427
ProtoSourceSet protoSourceSet ,
425
- Configuration protobufConfig
428
+ Configuration protobufConfig ,
429
+ Provider<Task > dummyTask
426
430
) {
427
431
String sourceSetName = protoSourceSet. name
428
432
String taskName = getExtractProtosTaskName(sourceSetName)
429
433
Provider<ProtobufExtract > task = project. tasks. register(taskName, ProtobufExtract ) {
430
434
it. description = " Extracts proto files/dependencies specified by 'protobuf' configuration"
431
435
it. destDir. set(getExtractedProtosDir(sourceSetName) as File )
432
436
it. inputFiles. from(protobufConfig)
437
+ it. dummyTaskDependency. from(dummyTask)
433
438
}
434
439
protoSourceSet. proto. srcDir(task)
435
440
return task
@@ -448,13 +453,15 @@ class ProtobufPlugin implements Plugin<Project> {
448
453
*/
449
454
private Provider<ProtobufExtract > setupExtractIncludeProtosTask (
450
455
ProtoSourceSet protoSourceSet ,
451
- FileCollection archives
456
+ FileCollection archives ,
457
+ Provider<Task > dummyTask
452
458
) {
453
459
String taskName = ' extractInclude' + Utils . getSourceSetSubstringForTaskNames(protoSourceSet. name) + ' Proto'
454
460
Provider<ProtobufExtract > task = project. tasks. register(taskName, ProtobufExtract ) {
455
461
it. description = " Extracts proto files from compile dependencies for includes"
456
462
it. destDir. set(getExtractedIncludeProtosDir(protoSourceSet. name) as File )
457
463
it. inputFiles. from(archives)
464
+ it. dummyTaskDependency. from(dummyTask)
458
465
}
459
466
protoSourceSet. includeProtoDirs. from(task)
460
467
return task
0 commit comments