From e175e66e579183c96ca3384c6c926428139de6d5 Mon Sep 17 00:00:00 2001 From: Kirill Nayduik Date: Thu, 28 Apr 2022 16:56:21 +0300 Subject: [PATCH 1/7] Update parcelize implementation --- .../src/main/java/static_analysis/linters/AndroidLinter.kt | 4 ++++ 1 file changed, 4 insertions(+) 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 fa6ff5b..c7acf1c 100644 --- a/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt +++ b/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt @@ -43,6 +43,7 @@ class AndroidLinter : Linter { isWarningsAsErrors = false xmlReport = true htmlReport = false + textReport = false isCheckDependencies = true disable("MissingConstraints", "VectorRaster") xmlOutput = getLintReportFile() @@ -58,13 +59,16 @@ 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") } ?.path } + .onEach { println(it) } } private fun Project.getLintReportFile() = file("${rootProject.buildDir}/reports/lint-report.xml") -- 2.40.1 From 5e7a39d14ddfedb36a50355b97f500aafa6ca28e Mon Sep 17 00:00:00 2001 From: Kirill Nayduik Date: Fri, 29 Apr 2022 22:13:42 +0300 Subject: [PATCH 2/7] 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() ) } -- 2.40.1 From 78024ea1a6f8c0f6398df549a5ad99e3ef126a7e Mon Sep 17 00:00:00 2001 From: Kirill Nayduik Date: Wed, 11 May 2022 17:10:27 +0300 Subject: [PATCH 3/7] Add script for setting lintOptions --- .../static_analysis/linters/AndroidLinter.kt | 27 +++---------------- gradle/scripts/lintOptions.gradle | 12 +++++++++ 2 files changed, 15 insertions(+), 24 deletions(-) create mode 100644 gradle/scripts/lintOptions.gradle 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 7c438b2..56b6aec 100644 --- a/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt +++ b/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt @@ -1,9 +1,7 @@ package static_analysis.linters -import com.android.build.api.variant.AndroidComponentsExtension import com.android.build.gradle.AppPlugin import org.gradle.api.Project -import org.gradle.kotlin.dsl.findByType import static_analysis.errors.AndroidLintError import static_analysis.errors.StaticAnalysisError import static_analysis.plugins.StaticAnalysisExtension @@ -32,30 +30,11 @@ 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 + // Make sure to set lint options manually in modules gradle file // Otherwise you will get java.io.FileNotFoundException - project.beforeEvaluate { - subprojects - .mapNotNull { it.extensions.findByType(AndroidComponentsExtension::class) } - .first() - .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") - } - } - } + // See issue: https://github.com/TouchInstinct/BuildScripts/issues/310 } override fun getTaskNames(project: Project, buildType: String?): List { @@ -69,7 +48,7 @@ class AndroidLinter : Linter { .mapNotNull { subproject: Project -> subproject .tasks - .find { task -> task.name.equals("lint$buildType") } + .find { task -> task.name.equals("lint$buildType", ignoreCase = true) } ?.path } } diff --git a/gradle/scripts/lintOptions.gradle b/gradle/scripts/lintOptions.gradle new file mode 100644 index 0000000..e143f8a --- /dev/null +++ b/gradle/scripts/lintOptions.gradle @@ -0,0 +1,12 @@ +android { + lint { + abortOnError false + checkAllWarnings true + warningsAsErrors false + checkDependencies true + htmlReport false + textReport false + xmlReport true + xmlOutput file("${rootProject.buildDir}/reports/lint-report.xml") + } +} -- 2.40.1 From ec358728eb7096fe48b28f69dd1990945a5c4595 Mon Sep 17 00:00:00 2001 From: Kirill Nayduik Date: Wed, 11 May 2022 17:40:08 +0300 Subject: [PATCH 4/7] Set lintConfig file direction --- gradle/scripts/lintOptions.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle/scripts/lintOptions.gradle b/gradle/scripts/lintOptions.gradle index e143f8a..e1fd032 100644 --- a/gradle/scripts/lintOptions.gradle +++ b/gradle/scripts/lintOptions.gradle @@ -8,5 +8,6 @@ android { textReport false xmlReport true xmlOutput file("${rootProject.buildDir}/reports/lint-report.xml") + lintConfig file("${rootProject.ext["buildScriptsDir"]}/static_analysis_configs/lint.xml") } } -- 2.40.1 From 3cc63ffe5e6297e3d07f6cbab4275de504b5fe21 Mon Sep 17 00:00:00 2001 From: Kirill Nayduik Date: Wed, 11 May 2022 19:10:22 +0300 Subject: [PATCH 5/7] Ignore WrongTimberUsageDetector error --- static_analysis_configs/lint.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/static_analysis_configs/lint.xml b/static_analysis_configs/lint.xml index 98227d4..511e843 100644 --- a/static_analysis_configs/lint.xml +++ b/static_analysis_configs/lint.xml @@ -16,6 +16,9 @@ + + + -- 2.40.1 From 5c46386ebff66626452533b72d8a29098c756def Mon Sep 17 00:00:00 2001 From: Konstantin Kuzhim Date: Tue, 7 Feb 2023 14:26:50 +0700 Subject: [PATCH 6/7] update BuildScripts to include copy task in AndroidLinter.kt --- .../main/java/static_analysis/linters/AndroidLinter.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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 56b6aec..d211215 100644 --- a/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt +++ b/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt @@ -48,11 +48,14 @@ class AndroidLinter : Linter { .mapNotNull { subproject: Project -> subproject .tasks - .find { task -> task.name.equals("lint$buildType", ignoreCase = true) } - ?.path + .filter { task -> + task.name.equals("lint${buildType}", ignoreCase = true) + || task.name.equals("copy${buildType}AndroidLintReports", ignoreCase = true) + } + .map { it.path } } + .flatten() } private fun Project.getLintReportFile() = file("${rootProject.buildDir}/reports/lint-report.xml") - } -- 2.40.1 From a6dcd67a810a78847feb51c21ddc851098b294a0 Mon Sep 17 00:00:00 2001 From: Sergey Vlasenko Date: Tue, 5 Mar 2024 02:15:30 +0300 Subject: [PATCH 7/7] feature add support java 17, gradle 8 --- gradle/plugins/build.gradle.kts | 7 ++++--- gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt | 8 ++++++-- .../src/main/java/static_analysis/linters/CpdLinter.kt | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/gradle/plugins/build.gradle.kts b/gradle/plugins/build.gradle.kts index daf09c8..90d7576 100644 --- a/gradle/plugins/build.gradle.kts +++ b/gradle/plugins/build.gradle.kts @@ -9,6 +9,7 @@ plugins { repositories { jcenter() google() + gradlePluginPortal() } dependencies { @@ -16,10 +17,10 @@ dependencies { 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") + implementation("de.aaschmid:gradle-cpd-plugin:3.3") // kotlin plugin, required by custom plugin - implementation(kotlin("gradle-plugin", embeddedKotlinVersion)) + implementation(kotlin("gradle-plugin", "1.8.10")) gradleKotlinDsl() implementation(kotlin("stdlib-jdk8")) @@ -27,7 +28,7 @@ dependencies { val compileKotlin: KotlinCompile by tasks compileKotlin.kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } gradlePlugin { diff --git a/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt b/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt index fcaf17a..8b706bd 100644 --- a/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt +++ b/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt @@ -52,9 +52,13 @@ abstract class ApiGeneratorPlugin : Plugin { val outputLanguage = extension.outputLanguage ?: throw IllegalStateException("Configure output language code for api generator plugin") javaexec { - main = "-jar" + mainClass.set("-jar") workingDir = rootDir args = listOfNotNull( + "--add-opens", + "java.base/java.lang=ALL-UNNAMED", + "--add-opens", + "java.base/java.time=ALL-UNNAMED", configurations.getByName("apiGenerator").asPath, "generate-client-code", "--output-language", @@ -68,7 +72,7 @@ abstract class ApiGeneratorPlugin : Plugin { "--package-name", extension.outputPackageName, "--recreate_output_dirs", - extension.recreateOutputDir.toString() + extension.recreateOutputDir.toString(), ) } } diff --git a/gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt b/gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt index 68e4be7..20e245c 100644 --- a/gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt +++ b/gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt @@ -42,7 +42,7 @@ class CpdLinter : Linter { } tasks.withType { reports.xml.required.set(true) - reports.xml.destination = getCpdReportFile() + reports.xml.outputLocation.set(getCpdReportFile()) ignoreFailures = true source = getSources(extension.excludes) } -- 2.40.1