Skip to content

Commit

Permalink
Merge pull request #72 from nebula-plugins/gradle-7_3-support
Browse files Browse the repository at this point in the history
NebulaFacetPlugin: removes the need for extracting outputs so we can support Gradle 7.3 and do not collide with the new test suite feature
  • Loading branch information
rpalcolea authored Sep 23, 2021
2 parents 7de7325 + 08d52ba commit 4da7d83
Showing 1 changed file with 2 additions and 20 deletions.
22 changes: 2 additions & 20 deletions src/main/groovy/nebula/plugin/responsible/NebulaFacetPlugin.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,13 @@ import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.artifacts.Configuration
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection
import org.gradle.api.internal.CollectionCallbackActionDecorator
import org.gradle.api.internal.file.UnionFileCollection
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.api.tasks.SourceSetOutput
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.testing.Test
import org.gradle.internal.reflect.Instantiator
Expand Down Expand Up @@ -144,34 +140,20 @@ class NebulaFacetPlugin implements Plugin<Project> {
Set<Object> compileClasspath = new LinkedHashSet<Object>()
compileClasspath.add(sourceSet.compileClasspath)
compileClasspath.add(parentSourceSet.output)
compileClasspath.addAll(extractAllOutputs(parentSourceSet.compileClasspath))
compileClasspath.add(parentSourceSet.compileClasspath)

//we are using from to create ConfigurableFileCollection so if we keep inhering from created facets we can
//still extract chain of output from all parents
sourceSet.compileClasspath = project.objects.fileCollection().from(compileClasspath as Object[])
//runtime classpath of parent already has parent output so we don't need to explicitly add it
Set<Object> runtimeClasspath = new LinkedHashSet<Object>()
runtimeClasspath.add(sourceSet.runtimeClasspath)
runtimeClasspath.addAll(extractAllOutputs(parentSourceSet.runtimeClasspath))
runtimeClasspath.add(parentSourceSet.runtimeClasspath)

sourceSet.runtimeClasspath = project.objects.fileCollection().from(runtimeClasspath as Object[])
}
}

private static Set<Object> extractAllOutputs(FileCollection classpath) {
if (classpath instanceof ConfigurableFileCollection) {
(classpath as ConfigurableFileCollection).from.findAll {it instanceof FileCollection }. collectMany { extractAllOutputs(it as FileCollection) } as Set<Object>
}
else if (classpath instanceof UnionFileCollection) {
(classpath as UnionFileCollection).sources.collectMany { extractAllOutputs(it) } as Set<Object>
}
else if (classpath instanceof SourceSetOutput) {
[classpath] as Set<Object>
}
else {
new LinkedHashSet<Object>()
}
}

public <C> NamedContainerProperOrder<C> container(Class<C> type, NamedDomainObjectFactory<C> factory) {
Instantiator instantiator = ((ProjectInternal) project).getServices().get(Instantiator.class) as Instantiator
Expand Down

0 comments on commit 4da7d83

Please sign in to comment.