Compare commits

...

7 Commits

Author SHA1 Message Date
Sergey Vlasenko a6dcd67a81 feature add support java 17, gradle 8 2024-03-06 12:57:36 +03:00
Konstantin Kuzhim 5c46386ebf update BuildScripts to include copy task in AndroidLinter.kt 2023-02-07 14:26:50 +07:00
Kirill Nayduik 3cc63ffe5e Ignore WrongTimberUsageDetector error 2022-05-11 19:10:22 +03:00
Kirill Nayduik ec358728eb Set lintConfig file direction 2022-05-11 17:40:08 +03:00
Kirill Nayduik 78024ea1a6 Add script for setting lintOptions 2022-05-11 17:10:27 +03:00
Kirill Nayduik 5e7a39d14d Add comments for temporary workaround to avoid Android Linter configuration error 2022-04-29 22:13:42 +03:00
Kirill Nayduik e175e66e57 Update parcelize implementation 2022-04-28 16:56:21 +03:00
7 changed files with 40 additions and 30 deletions

View File

@ -9,17 +9,18 @@ plugins {
repositories { repositories {
jcenter() jcenter()
google() google()
gradlePluginPortal()
} }
dependencies { dependencies {
// android gradle plugin, required by custom plugin // 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("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 // kotlin plugin, required by custom plugin
implementation(kotlin("gradle-plugin", embeddedKotlinVersion)) implementation(kotlin("gradle-plugin", "1.8.10"))
gradleKotlinDsl() gradleKotlinDsl()
implementation(kotlin("stdlib-jdk8")) implementation(kotlin("stdlib-jdk8"))
@ -27,7 +28,7 @@ dependencies {
val compileKotlin: KotlinCompile by tasks val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions { compileKotlin.kotlinOptions {
jvmTarget = "1.8" jvmTarget = "17"
} }
gradlePlugin { gradlePlugin {

View File

@ -52,9 +52,13 @@ abstract class ApiGeneratorPlugin : Plugin<Project> {
val outputLanguage = extension.outputLanguage ?: throw IllegalStateException("Configure output language code for api generator plugin") val outputLanguage = extension.outputLanguage ?: throw IllegalStateException("Configure output language code for api generator plugin")
javaexec { javaexec {
main = "-jar" mainClass.set("-jar")
workingDir = rootDir workingDir = rootDir
args = listOfNotNull( args = listOfNotNull(
"--add-opens",
"java.base/java.lang=ALL-UNNAMED",
"--add-opens",
"java.base/java.time=ALL-UNNAMED",
configurations.getByName("apiGenerator").asPath, configurations.getByName("apiGenerator").asPath,
"generate-client-code", "generate-client-code",
"--output-language", "--output-language",
@ -68,7 +72,7 @@ abstract class ApiGeneratorPlugin : Plugin<Project> {
"--package-name", "--package-name",
extension.outputPackageName, extension.outputPackageName,
"--recreate_output_dirs", "--recreate_output_dirs",
extension.recreateOutputDir.toString() extension.recreateOutputDir.toString(),
) )
} }
} }

View File

@ -1,9 +1,7 @@
package static_analysis.linters package static_analysis.linters
import com.android.build.gradle.AppExtension
import com.android.build.gradle.AppPlugin import com.android.build.gradle.AppPlugin
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.kotlin.dsl.findByType
import static_analysis.errors.AndroidLintError import static_analysis.errors.AndroidLintError
import static_analysis.errors.StaticAnalysisError import static_analysis.errors.StaticAnalysisError
import static_analysis.plugins.StaticAnalysisExtension import static_analysis.plugins.StaticAnalysisExtension
@ -33,22 +31,10 @@ class AndroidLinter : Linter {
.flatten() .flatten()
override fun setupForProject(project: Project, extension: StaticAnalysisExtension) { override fun setupForProject(project: Project, extension: StaticAnalysisExtension) {
project.beforeEvaluate { // Make sure to set lint options manually in modules gradle file
subprojects // Otherwise you will get java.io.FileNotFoundException
.mapNotNull { it.extensions.findByType<AppExtension>() }
.first() // See issue: https://github.com/TouchInstinct/BuildScripts/issues/310
.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")
}
}
} }
override fun getTaskNames(project: Project, buildType: String?): List<String> { override fun getTaskNames(project: Project, buildType: String?): List<String> {
@ -62,11 +48,14 @@ class AndroidLinter : Linter {
.mapNotNull { subproject: Project -> .mapNotNull { subproject: Project ->
subproject subproject
.tasks .tasks
.find { task -> task.name.contains(buildType, ignoreCase = true) && task.name.contains("lint") } .filter { task ->
?.path 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") private fun Project.getLintReportFile() = file("${rootProject.buildDir}/reports/lint-report.xml")
} }

View File

@ -42,7 +42,7 @@ class CpdLinter : Linter {
} }
tasks.withType<Cpd> { tasks.withType<Cpd> {
reports.xml.required.set(true) reports.xml.required.set(true)
reports.xml.destination = getCpdReportFile() reports.xml.outputLocation.set(getCpdReportFile())
ignoreFailures = true ignoreFailures = true
source = getSources(extension.excludes) source = getSources(extension.excludes)
} }

View File

@ -3,6 +3,7 @@ package static_analysis.plugins
import com.android.build.gradle.AppExtension import com.android.build.gradle.AppExtension
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.getByType
import static_analysis.linters.AndroidLinter
import static_analysis.linters.CpdLinter import static_analysis.linters.CpdLinter
import static_analysis.linters.DetektLinter import static_analysis.linters.DetektLinter
import static_analysis.linters.Linter import static_analysis.linters.Linter
@ -34,8 +35,7 @@ class StaticAnalysisAndroidPlugin : StaticAnalysisPlugin() {
override fun createLinters(): List<Linter> = listOf( override fun createLinters(): List<Linter> = listOf(
DetektLinter(), DetektLinter(),
CpdLinter(), CpdLinter(),
//TODO temporary disable Android Linter to avoid FileNotFoundException when generating report AndroidLinter()
//AndroidLinter()
) )
} }

View File

@ -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")
}
}

View File

@ -16,6 +16,9 @@
<!--All activities should have locked orientation--> <!--All activities should have locked orientation-->
<issue id="LockedOrientationActivity" severity="ignore" /> <issue id="LockedOrientationActivity" severity="ignore" />
<!-- TODO: Update Timber version. See this issue: https://github.com/JakeWharton/timber/issues/408 -->
<issue id="WrongTimberUsageDetector" severity="ignore" />
<issue id="AllowAllHostnameVerifier" severity="error" /> <issue id="AllowAllHostnameVerifier" severity="error" />
<issue id="InvalidUsesTagAttribute" severity="error" /> <issue id="InvalidUsesTagAttribute" severity="error" />
<issue id="MissingIntentFilterForMediaSearch" severity="error" /> <issue id="MissingIntentFilterForMediaSearch" severity="error" />