All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ru.vyarus.gradle.plugin.animalsniffer.AnimalSnifferPlugin.groovy Maven / Gradle / Ivy

There is a newer version: 1.7.2
Show newest version
package ru.vyarus.gradle.plugin.animalsniffer

import org.gradle.api.GradleException
import org.gradle.api.artifacts.Configuration
import org.gradle.api.plugins.quality.CodeQualityExtension
import org.gradle.api.plugins.quality.internal.AbstractCodeQualityPlugin
import org.gradle.api.tasks.SourceSet
import org.gradle.util.GradleVersion

/**
 * AnimalSniffer plugin. Implemented the same way as gradle quality plugins (checkstyle, pmd, findbugs):
 * main configuration 'animalsniffer' used to configure custom tasks, registered for each source set.
 * 

* Signatures are expected to be defined with 'signature' configuration. Multiple signatures may be set. * If no signatures defined - no check will be performed. *

* Reports configuration is performed with reports section. Only text report supported. All violations * are always printed to console. * * @author Vyacheslav Rusakov * @since 13.12.2015 */ class AnimalSnifferPlugin extends AbstractCodeQualityPlugin { private static final String MINIMAL_GRADLE = '2.14' private static final String SIGNATURE_CONF = 'signature' private static final String ANIMALSNIFFER_CONF = 'animalsniffer' private AnimalSnifferExtension extension @Override protected String getToolName() { return 'AnimalSniffer' } @Override protected Class getTaskType() { return AnimalSniffer } @Override protected void beforeApply() { // due to base class refactor from groovy to java in gradle 2.14 // plugin can't be launched on prior gradle versions GradleVersion version = GradleVersion.current() if (version < GradleVersion.version(MINIMAL_GRADLE)) { throw new GradleException("Animalsniffer plugin requires gradle $MINIMAL_GRADLE or above, " + "but your gradle version is: $version.version. Use plugin version 1.0.1.") } } @Override @SuppressWarnings('BuilderMethodWithSideEffects') protected void createConfigurations() { super.createConfigurations() project.configurations.create(SIGNATURE_CONF).with { visible = false transitive = true description = 'AnimalSniffer signatures' } } @Override protected CodeQualityExtension createExtension() { extension = project.extensions.create(ANIMALSNIFFER_CONF, AnimalSnifferExtension) extension.with { toolVersion = '1.15' } return extension } @Override protected void configureTaskDefaults(AnimalSniffer task, String baseName) { Configuration signatures = project.configurations[SIGNATURE_CONF] Configuration animalsnifferConfiguration = project.configurations[ANIMALSNIFFER_CONF] animalsnifferConfiguration.defaultDependencies { dependencies -> dependencies.add(this.project.dependencies .create("org.codehaus.mojo:animal-sniffer-ant-tasks:${this.extension.toolVersion}")) } task.conventionMapping.with { animalsnifferSignatures = { signatures } animalsnifferClasspath = { animalsnifferConfiguration } ignoreFailures = { extension.ignoreFailures } annotation = { extension.annotation } } task.reports.all { report -> report.conventionMapping.with { enabled = { true } destination = { new File(extension.reportsDir, "${baseName}.${report.name}") } } } } @Override protected void configureForSourceSet(SourceSet sourceSet, AnimalSniffer task) { task.with { description = "Run AnimalSniffer checks for ${sourceSet.name} classes" } task.setSource(sourceSet.output) task.conventionMapping.with { classpath = { sourceSet.compileClasspath } classes = { // the simple "classes = sourceSet.output" may lead to non-existing resources directory // being passed to FindBugs Ant task, resulting in an error project.fileTree(sourceSet.output.classesDir) { builtBy sourceSet.output } } sourcesDirs = { sourceSet.allJava } } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy