BuildScripts/gradle/staticAnalysis.gradle

124 lines
4.1 KiB
Groovy

def getServerProjectSources
def getAndroidProjectSources
apply from: "$buildScriptsDir/gradle/commonStaticAnalysis.gradle"
apply plugin: 'cpd'
apply plugin: 'io.gitlab.arturbosch.detekt'
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs <<
"-Xlint:cast" <<
"-Xlint:divzero" <<
"-Xlint:empty" <<
"-Xlint:deprecation" <<
"-Xlint:finally" <<
"-Xlint:overrides" <<
"-Xlint:path" <<
"-Werror"
}
def excludes = rootProject.extensions.findByName("staticAnalysisExcludes")
def androidSources = getAndroidProjectSources(excludes)
def androidStaticAnalysisTasks = getStaticAnalysisTaskNames(true, androidSources, null)
def androidIdeaFormatTask = getIdeaFormatTask(true, androidSources)
task staticAnalysisWithFormatting {
androidStaticAnalysisTasks.each { task ->
tasks.findByName(task)?.mustRunAfter(androidIdeaFormatTask)
}
dependsOn androidIdeaFormatTask
dependsOn androidStaticAnalysisTasks
doFirst {
generateReport(true)
}
}
task staticAnalysis {
dependsOn androidStaticAnalysisTasks
doFirst {
generateReport(true)
}
}
def serverStaticAnalysisTasks = getStaticAnalysisTaskNames(false, getServerProjectSources(excludes), null)
def serverIdeaFormatTask = getIdeaFormatTask(false, getServerProjectSources(excludes))
task serverStaticAnalysisWithFormatting {
serverStaticAnalysisTasks.each { task ->
tasks.findByName(task)?.mustRunAfter(serverIdeaFormatTask)
}
dependsOn serverIdeaFormatTask
dependsOn serverStaticAnalysisTasks
doFirst {
generateReport(false)
}
}
task serverStaticAnalysis {
dependsOn serverStaticAnalysisTasks
doFirst {
generateReport(false)
}
}
subprojects {
pluginManager.withPlugin('com.android.application') {
android.applicationVariants.all { variant ->
task("staticAnalysis${variant.name.capitalize()}") {
dependsOn getStaticAnalysisTaskNames(true, androidSources, variant)
doFirst { generateReport(true) }
}
}
}
}
}
getServerProjectSources = { excludes ->
def sources = new ArrayList<String>()
def sourcesDirectory = new File(project.projectDir.path, 'src')
for (def sourceFlavorDirectory : sourcesDirectory.listFiles()) {
def javaSourceDirectory = new File(sourceFlavorDirectory.path, 'java')
def kotlinSourceDirectory = new File(sourceFlavorDirectory.path, 'kotlin')
if (javaSourceDirectory.exists() && javaSourceDirectory.isDirectory()) {
sources.add(javaSourceDirectory.absolutePath)
}
if (kotlinSourceDirectory.exists() && kotlinSourceDirectory.isDirectory()) {
sources.add(kotlinSourceDirectory.absolutePath)
}
}
return sources
}
getAndroidProjectSources = { excludes ->
def sources = new ArrayList<String>()
for (def project : rootProject.subprojects) {
if (!project.subprojects.isEmpty() || (excludes != null && excludes.contains(project.path))) {
continue
}
def sourcesDirectory = new File(project.projectDir.path, 'src')
if (!sourcesDirectory.exists() || !sourcesDirectory.isDirectory()) {
continue
}
for (def sourceFlavorDirectory : sourcesDirectory.listFiles()) {
def javaSourceDirectory = new File(sourceFlavorDirectory.path, 'java')
def kotlinSourceDirectory = new File(sourceFlavorDirectory.path, 'kotlin')
if (javaSourceDirectory.exists() && javaSourceDirectory.isDirectory()) {
sources.add(javaSourceDirectory.absolutePath)
}
if (kotlinSourceDirectory.exists() && kotlinSourceDirectory.isDirectory()) {
sources.add(kotlinSourceDirectory.absolutePath)
}
}
}
return sources
}