Skip to content
This repository has been archived by the owner on Feb 11, 2022. It is now read-only.

Commit

Permalink
Merge pull request #80 from novoda/clean-up
Browse files Browse the repository at this point in the history
Clean up variant aware code
  • Loading branch information
tobiasheine committed Feb 13, 2018
2 parents 5c4e39b + 7749bf2 commit e0d14b1
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 86 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.novoda.staticanalysis.internal
import com.novoda.staticanalysis.StaticAnalysisExtension
import com.novoda.staticanalysis.Violations
import org.gradle.api.Action
import org.gradle.api.NamedDomainObjectSet
import org.gradle.api.DomainObjectSet
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.plugins.quality.CodeQualityExtension
Expand Down Expand Up @@ -37,27 +37,27 @@ abstract class CodeQualityConfigurator<T extends SourceTask, E extends CodeQuali
config()
}
project.plugins.withId('com.android.application') {
project.afterEvaluate {
configureAndroidProject(variantFilter.filteredApplicationAndTestVariants)
configureToolTasks()
}
configureAndroidWithVariants(variantFilter.filteredApplicationVariants)
configureToolTasks()
}
project.plugins.withId('com.android.library') {
project.afterEvaluate {
configureAndroidProject(variantFilter.filteredLibraryAndTestVariants)
configureToolTasks()
}
configureAndroidWithVariants(variantFilter.filteredLibraryVariants)
configureToolTasks()
}
project.plugins.withId('java') {
project.afterEvaluate {
configureJavaProject()
configureToolTasks()
}
configureJavaProject()
configureToolTasks()
}
}
}

protected void configureToolTasks() {
def configureAndroidWithVariants(DomainObjectSet variants) {
variants.all { configureAndroidVariant(it) }
variantFilter.filteredTestVariants.all { configureAndroidVariant(it) }
variantFilter.filteredUnitTestVariants.all { configureAndroidVariant(it) }
}

def configureToolTasks() {
project.tasks.withType(taskClass) { task ->
task.group = 'verification'
configureReportEvaluation(task, violations)
Expand All @@ -80,7 +80,7 @@ abstract class CodeQualityConfigurator<T extends SourceTask, E extends CodeQuali
}
}

protected abstract void configureAndroidProject(NamedDomainObjectSet variants)
protected abstract void configureAndroidVariant(variant)

protected void configureJavaProject() {
project.tasks.withType(taskClass) { task -> sourceFilter.applyTo(task) }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.novoda.staticanalysis.internal

import org.gradle.api.DomainObjectSet
import org.gradle.api.NamedDomainObjectSet
import org.gradle.api.Project

final class VariantFilter {
Expand All @@ -13,31 +12,23 @@ final class VariantFilter {
this.project = project
}

DomainObjectSet<Object> getFilteredApplicationVariants() {
DomainObjectSet getFilteredApplicationVariants() {
filterVariants(project.android.applicationVariants)
}

NamedDomainObjectSet<Object> getFilteredApplicationAndTestVariants() {
filterVariants(getAllVariants(project.android.applicationVariants))
}

DomainObjectSet<Object> getFilteredLibraryVariants() {
DomainObjectSet getFilteredLibraryVariants() {
filterVariants(project.android.libraryVariants)
}

NamedDomainObjectSet<Object> getFilteredLibraryAndTestVariants() {
filterVariants(getAllVariants(project.android.libraryVariants))
DomainObjectSet getFilteredTestVariants() {
filterVariants(project.android.testVariants)
}
private def filterVariants(variants) {
includeVariantsFilter != null ? variants.matching { includeVariantsFilter(it) } : variants

DomainObjectSet getFilteredUnitTestVariants() {
filterVariants(project.android.unitTestVariants)
}

private NamedDomainObjectSet<Object> getAllVariants(variants1) {
NamedDomainObjectSet<Object> variants = project.container(Object)
variants.addAll(variants1)
variants.addAll(project.android.testVariants)
variants.addAll(project.android.unitTestVariants)
return variants
private DomainObjectSet filterVariants(DomainObjectSet variants) {
includeVariantsFilter != null ? variants.matching { includeVariantsFilter(it) } : variants
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,23 +48,21 @@ class CheckstyleConfigurator extends CodeQualityConfigurator<Checkstyle, Checkst
}

@Override
protected void configureAndroidProject(NamedDomainObjectSet variants) {
protected void configureAndroidVariant(variant) {
project.with {
variants.all { variant ->
variant.sourceSets.each { sourceSet ->
def taskName = "checkstyle${sourceSet.name.capitalize()}"
Checkstyle task = tasks.findByName(taskName)
if (task == null) {
task = tasks.create(taskName, Checkstyle)
task.with {
description = "Run Checkstyle analysis for ${sourceSet.name} classes"
source = sourceSet.java.srcDirs
classpath = files("$buildDir/intermediates/classes/")
}
variant.sourceSets.each { sourceSet ->
def taskName = "checkstyle${sourceSet.name.capitalize()}"
Checkstyle task = tasks.findByName(taskName)
if (task == null) {
task = tasks.create(taskName, Checkstyle)
task.with {
description = "Run Checkstyle analysis for ${sourceSet.name} classes"
source = sourceSet.java.srcDirs
classpath = files("$buildDir/intermediates/classes/")
}
sourceFilter.applyTo(task)
task.mustRunAfter variant.javaCompile
}
sourceFilter.applyTo(task)
task.mustRunAfter variant.javaCompile
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,22 +57,20 @@ class FindbugsConfigurator extends CodeQualityConfigurator<FindBugs, FindBugsExt
}

@Override
protected void configureAndroidProject(NamedDomainObjectSet variants) {
variants.all { variant ->
FindBugs task = project.tasks.create("findbugs${variant.name.capitalize()}", QuietFindbugsPlugin.Task)
List<File> androidSourceDirs = variant.sourceSets.collect { it.javaDirectories }.flatten()
task.with {
description = "Run FindBugs analysis for ${variant.name} classes"
source = androidSourceDirs
classpath = variant.javaCompile.classpath
}
sourceFilter.applyTo(task)
task.conventionMapping.map("classes", {
List<String> includes = createIncludePatterns(task.source, androidSourceDirs)
getAndroidClasses(variant, includes)
});
task.dependsOn variant.javaCompile
protected void configureAndroidVariant(variant) {
FindBugs task = project.tasks.create("findbugs${variant.name.capitalize()}", QuietFindbugsPlugin.Task)
List<File> androidSourceDirs = variant.sourceSets.collect { it.javaDirectories }.flatten()
task.with {
description = "Run FindBugs analysis for ${variant.name} classes"
source = androidSourceDirs
classpath = variant.javaCompile.classpath
}
sourceFilter.applyTo(task)
task.conventionMapping.map("classes", {
List<String> includes = createIncludePatterns(task.source, androidSourceDirs)
getAndroidClasses(variant, includes)
})
task.dependsOn variant.javaCompile
}

private FileCollection getAndroidClasses(Object variant, List<String> includes) {
Expand All @@ -81,16 +79,18 @@ class FindbugsConfigurator extends CodeQualityConfigurator<FindBugs, FindBugsExt

@Override
protected void configureJavaProject() {
project.sourceSets.each { SourceSet sourceSet ->
String taskName = sourceSet.getTaskName(toolName, null)
FindBugs task = project.tasks.findByName(taskName)
if (task != null) {
sourceFilter.applyTo(task)
task.conventionMapping.map("classes", {
List<File> sourceDirs = sourceSet.allJava.srcDirs.findAll { it.exists() }.toList()
List<String> includes = createIncludePatterns(task.source, sourceDirs)
getJavaClasses(sourceSet, includes)
});
project.afterEvaluate {
project.sourceSets.each { SourceSet sourceSet ->
String taskName = sourceSet.getTaskName(toolName, null)
FindBugs task = project.tasks.findByName(taskName)
if (task != null) {
sourceFilter.applyTo(task)
task.conventionMapping.map("classes", {
List<File> sourceDirs = sourceSet.allJava.srcDirs.findAll { it.exists() }.toList()
List<String> includes = createIncludePatterns(task.source, sourceDirs)
getJavaClasses(sourceSet, includes)
})
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ package com.novoda.staticanalysis.internal.pmd
import com.novoda.staticanalysis.Violations
import com.novoda.staticanalysis.internal.CodeQualityConfigurator
import com.novoda.staticanalysis.internal.QuietLogger
import org.gradle.api.*
import org.gradle.api.Action
import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.plugins.quality.Pmd
import org.gradle.api.plugins.quality.PmdExtension

Expand Down Expand Up @@ -49,22 +52,20 @@ class PmdConfigurator extends CodeQualityConfigurator<Pmd, PmdExtension> {
}

@Override
protected void configureAndroidProject(NamedDomainObjectSet variants) {
protected void configureAndroidVariant(variant) {
project.with {
variants.all { variant ->
variant.sourceSets.each { sourceSet ->
def taskName = "pmd${sourceSet.name.capitalize()}"
Pmd task = tasks.findByName(taskName)
if (task == null) {
task = tasks.create(taskName, Pmd)
task.with {
description = "Run PMD analysis for ${sourceSet.name} classes"
source = sourceSet.java.srcDirs
}
variant.sourceSets.each { sourceSet ->
def taskName = "pmd${sourceSet.name.capitalize()}"
Pmd task = tasks.findByName(taskName)
if (task == null) {
task = tasks.create(taskName, Pmd)
task.with {
description = "Run PMD analysis for ${sourceSet.name} classes"
source = sourceSet.java.srcDirs
}
sourceFilter.applyTo(task)
task.mustRunAfter variant.javaCompile
}
sourceFilter.applyTo(task)
task.mustRunAfter variant.javaCompile
}
}
}
Expand Down

0 comments on commit e0d14b1

Please sign in to comment.