From 5e7a39d14ddfedb36a50355b97f500aafa6ca28e Mon Sep 17 00:00:00 2001 From: Kirill Nayduik Date: Fri, 29 Apr 2022 22:13:42 +0300 Subject: [PATCH] Add comments for temporary workaround to avoid Android Linter configuration error --- gradle/plugins/build.gradle.kts | 2 +- .../static_analysis/linters/AndroidLinter.kt | 37 ++++++++++--------- .../plugins/StaticAnalysisAndroidPlugin.kt | 4 +- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/gradle/plugins/build.gradle.kts b/gradle/plugins/build.gradle.kts index 3611bcb..daf09c8 100644 --- a/gradle/plugins/build.gradle.kts +++ b/gradle/plugins/build.gradle.kts @@ -13,7 +13,7 @@ repositories { dependencies { // android gradle plugin, required by custom plugin - implementation("com.android.tools.build:gradle:4.0.1") + implementation("com.android.tools.build:gradle:7.1.3") implementation("io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.10.0") implementation("de.aaschmid:gradle-cpd-plugin:3.1") diff --git a/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt b/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt index c7acf1c..7c438b2 100644 --- a/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt +++ b/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt @@ -1,6 +1,6 @@ package static_analysis.linters -import com.android.build.gradle.AppExtension +import com.android.build.api.variant.AndroidComponentsExtension import com.android.build.gradle.AppPlugin import org.gradle.api.Project import org.gradle.kotlin.dsl.findByType @@ -32,22 +32,28 @@ class AndroidLinter : Linter { } .flatten() + @Suppress("UnstableApiUsage") override fun setupForProject(project: Project, extension: StaticAnalysisExtension) { + // Make sure to set lint options manually in app module gradle file + // Otherwise you will get java.io.FileNotFoundException + project.beforeEvaluate { subprojects - .mapNotNull { it.extensions.findByType() } + .mapNotNull { it.extensions.findByType(AndroidComponentsExtension::class) } .first() - .lintOptions.apply { - isAbortOnError = false - isCheckAllWarnings = true - isWarningsAsErrors = false - xmlReport = true - htmlReport = false - textReport = false - isCheckDependencies = true - disable("MissingConstraints", "VectorRaster") - xmlOutput = getLintReportFile() - lintConfig = file("${extension.buildScriptDir}/static_analysis_configs/lint.xml") + .finalizeDsl { ext -> + ext.lint { + abortOnError = false + checkAllWarnings = true + warningsAsErrors = false + checkDependencies = true + htmlReport = false + textReport = false + xmlReport = true + disable.addAll(listOf("MissingConstraints", "VectorRaster")) + xmlOutput = project.getLintReportFile() + lintConfig = file("${extension.buildScriptDir}/static_analysis_configs/lint.xml") + } } } } @@ -59,16 +65,13 @@ class AndroidLinter : Linter { return project .subprojects - .onEach { println(it) } .filter { it.plugins.hasPlugin(AppPlugin::class.java) } - .onEach { println(it) } .mapNotNull { subproject: Project -> subproject .tasks - .find { task -> task.name.contains(buildType, ignoreCase = true) && task.name.contains("lint") } + .find { task -> task.name.equals("lint$buildType") } ?.path } - .onEach { println(it) } } private fun Project.getLintReportFile() = file("${rootProject.buildDir}/reports/lint-report.xml") diff --git a/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisAndroidPlugin.kt b/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisAndroidPlugin.kt index 9196666..7b7b4ee 100644 --- a/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisAndroidPlugin.kt +++ b/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisAndroidPlugin.kt @@ -3,6 +3,7 @@ package static_analysis.plugins import com.android.build.gradle.AppExtension import org.gradle.api.Project import org.gradle.kotlin.dsl.getByType +import static_analysis.linters.AndroidLinter import static_analysis.linters.CpdLinter import static_analysis.linters.DetektLinter import static_analysis.linters.Linter @@ -34,8 +35,7 @@ class StaticAnalysisAndroidPlugin : StaticAnalysisPlugin() { override fun createLinters(): List = listOf( DetektLinter(), CpdLinter(), - //TODO temporary disable Android Linter to avoid FileNotFoundException when generating report - //AndroidLinter() + AndroidLinter() ) }