Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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