Skip to content

Commit 3b200a6

Browse files
committed
Add util methods for getting containing source sets
Useful for probing which source sets contain a specific directory. Needed by ForgeGradle 7.
1 parent 14d11bf commit 3b200a6

File tree

1 file changed

+44
-0
lines changed
  • gradleutils-shared/src/main/java/net/minecraftforge/gradleutils/shared

1 file changed

+44
-0
lines changed

gradleutils-shared/src/main/java/net/minecraftforge/gradleutils/shared/SharedUtil.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.gradle.TaskExecutionRequest;
1414
import org.gradle.api.Action;
1515
import org.gradle.api.DomainObjectCollection;
16+
import org.gradle.api.NamedDomainObjectContainer;
1617
import org.gradle.api.NamedDomainObjectSet;
1718
import org.gradle.api.Project;
1819
import org.gradle.api.Transformer;
@@ -350,6 +351,49 @@ public static Set<Dependency> collect(NamedDomainObjectSet<Configuration> config
350351
.collect(Collectors.toSet());
351352
}
352353

354+
public static NamedDomainObjectSet<SourceSet> collect(Project project, boolean transitive, Dependency dependency) {
355+
return collect(project, transitive, dependency::equals);
356+
}
357+
358+
public static NamedDomainObjectSet<SourceSet> collect(Project project, boolean transitive, Spec<? super Dependency> dependency) {
359+
return collect(
360+
project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets(),
361+
project.getConfigurations(),
362+
transitive,
363+
dependency
364+
);
365+
}
366+
367+
public static NamedDomainObjectSet<SourceSet> collect(NamedDomainObjectContainer<SourceSet> sourceSets, NamedDomainObjectSet<Configuration> configurations, boolean transitive, Dependency dependency) {
368+
return collect(sourceSets, configurations, transitive, dependency::equals);
369+
}
370+
371+
public static NamedDomainObjectSet<SourceSet> collect(NamedDomainObjectContainer<SourceSet> sourceSets, NamedDomainObjectSet<Configuration> configurations, boolean transitive, Spec<? super Dependency> dependency) {
372+
return sourceSets.matching(sourceSet -> {
373+
var candidates = configurations.named(name ->
374+
// Always check these resolvable configurations
375+
name.equals(sourceSet.getCompileClasspathConfigurationName())
376+
|| name.equals(sourceSet.getRuntimeClasspathConfigurationName())
377+
|| name.equals(sourceSet.getAnnotationProcessorConfigurationName())
378+
379+
// If not checking transitively, we need to check these declared configurations as well
380+
|| (!transitive && (
381+
name.equals(sourceSet.getCompileOnlyConfigurationName())
382+
|| name.equals(sourceSet.getCompileOnlyApiConfigurationName())
383+
|| name.equals(sourceSet.getRuntimeOnlyConfigurationName())
384+
|| name.equals(sourceSet.getImplementationConfigurationName())
385+
|| name.equals(sourceSet.getApiConfigurationName())
386+
))
387+
);
388+
389+
// The candidate matches if the dependency set matches our dependency spec
390+
return !candidates.matching(configuration -> {
391+
var dependencies = transitive ? configuration.getAllDependencies() : configuration.getDependencies();
392+
return !dependencies.matching(dependency).isEmpty();
393+
}).isEmpty();
394+
});
395+
}
396+
353397
static <T> void guardCheck(T t) { }
354398

355399
/// Iterates through the given source set's classpath configurations using the given action.

0 commit comments

Comments
 (0)