Skip to content

Commit

Permalink
SourceSetUtils: Use plugin convention only when project is using Grad…
Browse files Browse the repository at this point in the history
…le older than 7.1 (#362)
  • Loading branch information
rpalcolea authored Nov 19, 2021
1 parent 0a69f02 commit 3690cb7
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 13 deletions.
25 changes: 25 additions & 0 deletions src/main/groovy/com/netflix/nebula/lint/SourceSetUtils.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.netflix.nebula.lint

import org.gradle.api.Project
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.util.GradleVersion

class SourceSetUtils {
static boolean hasSourceSets(Project project) {
if (isOlderThanGradle7_1(project)) {
return project.convention.findPlugin(JavaPluginConvention)
} else {
return project.extensions.findByType(JavaPluginExtension)
}
}

static SourceSetContainer getSourceSets(Project project) {
return isOlderThanGradle7_1(project) ? project.convention.getPlugin(JavaPluginConvention).sourceSets : project.extensions.getByType(JavaPluginExtension).sourceSets
}

private static boolean isOlderThanGradle7_1(Project project) {
return GradleVersion.version(project.gradle.gradleVersion).compareTo(GradleVersion.version("7.1")) < 0
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.netflix.nebula.lint.rule.dependency

import com.netflix.nebula.interop.GradleKt
import com.netflix.nebula.lint.SourceSetUtils
import groovy.transform.Memoized
import groovyx.gpars.GParsPool
import org.gradle.api.Project
Expand All @@ -12,8 +13,8 @@ import org.gradle.api.artifacts.ResolvedDependency
import org.gradle.api.artifacts.UnknownConfigurationException
import org.gradle.api.file.FileCollection
import org.gradle.api.internal.artifacts.DefaultModuleIdentifier
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.util.VersionNumber
import org.objectweb.asm.ClassReader
import org.slf4j.Logger
Expand Down Expand Up @@ -614,15 +615,16 @@ class DependencyService {
}

private Iterable<String> sourceSetCompileConfigurations() {
(project.convention.getPlugin(JavaPluginConvention).sourceSets +
(SourceSetUtils.getSourceSets(project) +
(project.getExtensions().findByName('android')?.sourceSets ?: []))*.compileClasspathConfigurationName
}

SourceSet sourceSetByConf(String conf) {
project.convention.findPlugin(JavaPluginConvention)?.sourceSets?.find {
SourceSetContainer sourceSets = SourceSetUtils.getSourceSets(project)
sourceSets?.find {
it.compileClasspathConfigurationName == conf
}
?: project.convention.findPlugin(JavaPluginConvention)?.sourceSets?.find { sourceSet -> project.configurations.getByName(conf).extendsFrom.any { it.name == sourceSet.compileClasspathConfigurationName } } //find source set from parent
?: sourceSets?.find { sourceSet -> project.configurations.getByName(conf).extendsFrom.any { it.name == sourceSet.compileClasspathConfigurationName } } //find source set from parent
?: project.configurations.findAll { it.extendsFrom.contains(project.configurations.getByName(conf)) }
.collect { sourceSetByConf(it.name) }
.find { true } // get the first source set, if one is available that matches
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.netflix.nebula.lint.rule.dependency

import com.netflix.nebula.lint.SourceSetUtils
import com.netflix.nebula.lint.rule.GradleLintRule
import com.netflix.nebula.lint.rule.GradleModelAware
import groovy.transform.CompileDynamic
Expand All @@ -8,7 +9,6 @@ import org.codehaus.groovy.ast.ASTNode
import org.codehaus.groovy.ast.ClassNode
import org.codehaus.groovy.ast.expr.MethodCallExpression
import org.gradle.api.artifacts.ModuleVersionIdentifier
import org.gradle.api.plugins.JavaPluginConvention

@CompileStatic
class UndeclaredDependencyRule extends GradleLintRule implements GradleModelAware {
Expand All @@ -35,10 +35,9 @@ class UndeclaredDependencyRule extends GradleLintRule implements GradleModelAwar
Set<ModuleVersionIdentifier> insertedDependencies = [] as Set
Map<String, HashMap<String, ASTNode>> violations = new HashMap()

def convention = project.convention.findPlugin(JavaPluginConvention)
if (convention != null) {
if (SourceSetUtils.hasSourceSets(project)) {
// sort the sourceSets from least dependent to most dependent, e.g. [main, test, integTest]
def sortedSourceSets = convention.sourceSets.sort(false, dependencyService.sourceSetComparator())
def sortedSourceSets = SourceSetUtils.getSourceSets(project).sort(false, dependencyService.sourceSetComparator())

sortedSourceSets.each { sourceSet ->
def confName = sourceSet.compileClasspathConfigurationName
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.netflix.nebula.lint.rule.dependency

import com.netflix.nebula.lint.SourceSetUtils
import com.netflix.nebula.lint.rule.GradleDependency
import com.netflix.nebula.lint.rule.GradleLintRule
import com.netflix.nebula.lint.rule.GradleModelAware
Expand All @@ -8,7 +9,6 @@ import org.codehaus.groovy.ast.expr.MethodCallExpression
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ModuleIdentifier
import org.gradle.api.artifacts.ModuleVersionIdentifier
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.tasks.SourceSet

class UnusedDependencyRule extends GradleLintRule implements GradleModelAware {
Expand All @@ -32,7 +32,7 @@ class UnusedDependencyRule extends GradleLintRule implements GradleModelAware {
void visitGradleDependency(MethodCallExpression call, String declaredConf, GradleDependency dep) {
String conf = dependencyService.findAndReplaceNonResolvableConfiguration(project.configurations.getByName(declaredConf)).name

if(project.convention.findPlugin(JavaPluginConvention)) {
if(SourceSetUtils.hasSourceSets(project)) {
def mid = dep.toModule()

if (!declaredDependenciesByConf.containsKey(declaredConf)) {
Expand Down Expand Up @@ -89,10 +89,9 @@ class UnusedDependencyRule extends GradleLintRule implements GradleModelAware {
void visitClassComplete(ClassNode node) {
Set<ModuleVersionIdentifier> insertedDependencies = [] as Set

def convention = project.convention.findPlugin(JavaPluginConvention)
if(convention) {
if(SourceSetUtils.hasSourceSets(project)) {
// sort the sourceSets from least dependent to most dependent, e.g. [main, test, integTest]
def sortedSourceSets = convention.sourceSets.sort(false, dependencyService.sourceSetComparator())
def sortedSourceSets = SourceSetUtils.getSourceSets(project).sort(false, dependencyService.sourceSetComparator())

sortedSourceSets.each { sourceSet ->
def confName = sourceSet.compileClasspathConfigurationName
Expand Down

0 comments on commit 3690cb7

Please sign in to comment.