com.uber.infer.InferAndroidPlugin.groovy Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of infer-plugin Show documentation
Show all versions of infer-plugin Show documentation
Gradle integration for infer static analyzer.
The newest version!
package com.uber.infer
import com.android.build.gradle.api.BaseVariant
import com.uber.infer.extension.InferPluginExtension
import com.uber.infer.task.DeleteInferConfig
import com.uber.infer.task.PrepareForInfer
import com.uber.infer.task.CheckForInfer
import com.uber.infer.task.Eradicate
import com.uber.infer.task.Infer
import com.uber.infer.util.ConfigurationUtils
import org.gradle.api.Plugin
import org.gradle.api.Project
/**
* Infer plug-in for Android projects. This generates tasks for each Android build variant.
*/
class InferAndroidPlugin implements Plugin {
@Override
void apply(Project project) {
if (project.plugins.hasPlugin("com.android.application")) {
createInferTasks(project, project.android.applicationVariants)
} else if (project.plugins.hasPlugin("com.android.library")) {
createInferTasks(project, project.android.libraryVariants)
}
project.extensions.create(Constants.EXTENSION_INFER_PLUGIN_NAME, InferPluginExtension, project)
}
private createInferTasks(Project project, Set variants) {
def checkForInferTask = project.tasks.create(Constants.TASK_CHECK_FOR_INFER, CheckForInfer)
def deleteInferConfigTask = project.tasks.create("deleteInferConfig", DeleteInferConfig)
variants.all { BaseVariant variant ->
def taskVariantName = variant.name.capitalize()
def inferCaptureTask = createPrepareForInferTask(project, taskVariantName, variant)
inferCaptureTask.dependsOn(checkForInferTask)
// Required to get exploded-aar directory.
inferCaptureTask.dependsOn("generate${taskVariantName}Sources")
def eradicateTask = project.tasks.create(Constants.TASK_ERADICATE + taskVariantName, Eradicate)
eradicateTask.dependsOn(inferCaptureTask)
if (taskVariantName != null) {
eradicateTask.setDescription("Runs Infer's eradicate static analysis on the ${taskVariantName} " +
"variant.")
} else {
eradicateTask.setDescription("Runs Infer's eradicate static analysis.")
}
eradicateTask.setGroup(Constants.GROUP)
def inferTask = project.tasks.create(Constants.TASK_INFER + taskVariantName, Infer)
inferTask.dependsOn(inferCaptureTask)
inferTask.setGroup(Constants.GROUP)
if (taskVariantName != null) {
inferTask.setDescription("Runs Infer static analysis on the ${taskVariantName} variant.")
} else {
inferTask.setDescription("Runs Infer static analysis.")
}
inferTask.finalizedBy(deleteInferConfigTask)
eradicateTask.finalizedBy(deleteInferConfigTask)
}
}
private createPrepareForInferTask(Project project, String taskVariantName, BaseVariant variant) {
return project.tasks.create(Constants.TASK_PREPARE_FOR_INFER + taskVariantName, PrepareForInfer) {
eradicateExclude = {
project.eradicate.exclude
}
eradicateInclude = {
project.eradicate.include
}
inferExclude = {
project.infer.exclude
}
inferInclude = {
project.infer.include
}
bootClasspath = {
project.files(project.android.bootClasspath)
}
compileDependencies = {
project.files(project.fileTree(dir: "${project.buildDir.path}/intermediates/exploded-aar",
include: "**/*.jar")).plus(project.files(
project.configurations.asList().findAll {
String configName = it.name.toLowerCase()
configName.contains("compile") && !configName.contains("test")
it.asFileTree
})
)
}
processorDependencies = {
ConfigurationUtils.getAvailable(project, 'apt', 'annotationProcessor')
}
providedDependencies = {
project.configurations.getByName("provided") +
project.configurations.getByName("${variant.name}Provided")
}
sourceFiles = {
def result = variant.javaCompiler.source
variant.variantData.extraGeneratedSourceFolders.collect {
result.plus(project.fileTree(dir: it, include: "**/*.java"))
}
result
}
sourceJavaVersion = {
variant.javaCompiler.sourceCompatibility
}
targetJavaVersion = {
variant.javaCompiler.targetCompatibility
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy