def getServerProjectSources def getAndroidProjectSources apply from: "$buildScriptsDir/gradle/commonStaticAnalysis.gradle" 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 androidStaticAnalysisTasks = getStaticAnalysisTaskNames(true, getAndroidProjectSources(excludes)) def androidIdeaFormatTask = getIdeaFormatTask(true, getAndroidProjectSources(excludes)) task staticAnalysis { androidStaticAnalysisTasks.each { task -> tasks.findByName(task).mustRunAfter(androidIdeaFormatTask) } dependsOn androidIdeaFormatTask dependsOn androidStaticAnalysisTasks doFirst { generateReport(true) } } task staticAnalysisWithoutFormatting { dependsOn androidStaticAnalysisTasks doFirst { generateReport(true) } } def serverStaticAnalysisTasks = getStaticAnalysisTaskNames(false, getServerProjectSources(excludes)) def serverIdeaFormatTask = getIdeaFormatTask(false, getServerProjectSources(excludes)) task serverStaticAnalysis { serverStaticAnalysisTasks.each { task -> tasks.findByName(task).mustRunAfter(serverIdeaFormatTask) } dependsOn serverIdeaFormatTask dependsOn serverStaticAnalysisTasks doFirst { generateReport(false) } } task serverStaticAnalysisWithoutFormatting { dependsOn serverStaticAnalysisTasks doFirst { generateReport(false) } } } getServerProjectSources = { excludes -> def sources = new ArrayList() 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() 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 }