diff --git a/gradle/plugins/build.gradle.kts b/gradle/plugins/build.gradle.kts index 3611bcb..90d7576 100644 --- a/gradle/plugins/build.gradle.kts +++ b/gradle/plugins/build.gradle.kts @@ -9,17 +9,18 @@ plugins { repositories { jcenter() google() + gradlePluginPortal() } 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") + 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/AndroidLinter.kt b/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt index fa6ff5b..d211215 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.gradle.AppExtension 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 @@ -33,22 +31,10 @@ class AndroidLinter : Linter { .flatten() override fun setupForProject(project: Project, extension: StaticAnalysisExtension) { - project.beforeEvaluate { - subprojects - .mapNotNull { it.extensions.findByType() } - .first() - .lintOptions.apply { - isAbortOnError = false - isCheckAllWarnings = true - isWarningsAsErrors = false - xmlReport = true - htmlReport = false - isCheckDependencies = true - disable("MissingConstraints", "VectorRaster") - xmlOutput = getLintReportFile() - lintConfig = file("${extension.buildScriptDir}/static_analysis_configs/lint.xml") - } - } + // Make sure to set lint options manually in modules gradle file + // Otherwise you will get java.io.FileNotFoundException + + // See issue: https://github.com/TouchInstinct/BuildScripts/issues/310 } override fun getTaskNames(project: Project, buildType: String?): List { @@ -62,11 +48,14 @@ class AndroidLinter : Linter { .mapNotNull { subproject: Project -> subproject .tasks - .find { task -> task.name.contains(buildType, ignoreCase = true) && task.name.contains("lint") } - ?.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") - } 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) } 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() ) } diff --git a/gradle/scripts/lintOptions.gradle b/gradle/scripts/lintOptions.gradle new file mode 100644 index 0000000..e1fd032 --- /dev/null +++ b/gradle/scripts/lintOptions.gradle @@ -0,0 +1,13 @@ +android { + lint { + abortOnError false + checkAllWarnings true + warningsAsErrors false + checkDependencies true + htmlReport false + textReport false + xmlReport true + xmlOutput file("${rootProject.buildDir}/reports/lint-report.xml") + lintConfig file("${rootProject.ext["buildScriptsDir"]}/static_analysis_configs/lint.xml") + } +} 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 @@ + + +