diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/bazel/rules/AndroidRules.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/bazel/rules/AndroidRules.kt index 31b78d2b..ef1a9d62 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/bazel/rules/AndroidRules.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/bazel/rules/AndroidRules.kt @@ -18,6 +18,7 @@ package com.grab.grazel.bazel.rules import com.grab.grazel.bazel.starlark.Assignee import com.grab.grazel.bazel.starlark.BazelDependency +import com.grab.grazel.bazel.starlark.LintConfigs import com.grab.grazel.bazel.starlark.StatementsBuilder import com.grab.grazel.bazel.starlark.array import com.grab.grazel.bazel.starlark.asString @@ -137,7 +138,8 @@ internal fun StatementsBuilder.androidBinary( deps: List, assetsGlob: List = emptyList(), assetsDir: String? = null, - buildConfigData: BuildConfigData + buildConfigData: BuildConfigData, + lintConfigs: LintConfigs? = null, ) { load("@$GRAB_BAZEL_COMMON//rules:defs.bzl", "android_binary") rule("android_binary") { @@ -180,6 +182,10 @@ internal fun StatementsBuilder.androidBinary( if (!resValuesData.isEmpty) { "res_values" `=` resValuesData.merged.toObject(quoteKeys = true, quoteValues = true) } + + if (lintConfigs?.merged?.isNotEmpty() == true) { + "lint_options" `=` lintConfigs.merged.toObject(quoteValues = true) + } } } @@ -198,7 +204,8 @@ internal fun StatementsBuilder.androidLibrary( assetsGlob: List = emptyList(), assetsDir: String? = null, resValuesData: ResValuesData, - buildConfigData: BuildConfigData + buildConfigData: BuildConfigData, + lintConfigs: LintConfigs? ) { load("@$GRAB_BAZEL_COMMON//rules:defs.bzl", "android_library") rule("android_library") { @@ -238,6 +245,10 @@ internal fun StatementsBuilder.androidLibrary( if (!resValuesData.isEmpty) { "res_values" `=` resValuesData.merged.toObject(quoteKeys = true, quoteValues = true) } + + if (lintConfigs?.merged?.isNotEmpty() == true) { + "lint_options" `=` lintConfigs.merged.toObject(quoteValues = true) + } } } diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/bazel/starlark/LintConfigs.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/bazel/starlark/LintConfigs.kt new file mode 100644 index 00000000..63de8367 --- /dev/null +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/bazel/starlark/LintConfigs.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2023 Grabtaxi Holdings PTE LTD (GRAB) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.grab.grazel.bazel.starlark + +data class LintConfigs(val configPath: String? = null, val baselinePath: String? = null) { + val merged: Map = mapOf( + "config" to configPath, + "baseline" to baselinePath + ).filterValues { it != null } as Map +} \ No newline at end of file diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/android/AndroidData.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/android/AndroidData.kt index ced5d185..a4020a9f 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/android/AndroidData.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/android/AndroidData.kt @@ -18,6 +18,7 @@ package com.grab.grazel.migrate.android import com.grab.grazel.bazel.rules.Multidex import com.grab.grazel.bazel.starlark.BazelDependency +import com.grab.grazel.bazel.starlark.LintConfigs internal interface AndroidData { val name: String @@ -39,6 +40,7 @@ internal interface AndroidData { val compose: Boolean val databinding: Boolean val tags: List + val lintConfigs: LintConfigs } internal data class AndroidLibraryData( @@ -56,7 +58,8 @@ internal data class AndroidLibraryData( override val plugins: List = emptyList(), override val databinding: Boolean = false, override val compose: Boolean = false, - override val tags: List = emptyList() + override val tags: List = emptyList(), + override val lintConfigs: LintConfigs, ) : AndroidData internal data class AndroidBinaryData( @@ -75,6 +78,7 @@ internal data class AndroidBinaryData( override val databinding: Boolean = false, override val compose: Boolean = false, override val tags: List = emptyList(), + override val lintConfigs: LintConfigs, val manifestValues: Map = emptyMap(), val multidex: Multidex = Multidex.Native, val dexShards: Int? = null, diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/android/AndroidExtractor.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/android/AndroidExtractor.kt index 92f5e413..1faa3ea3 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/android/AndroidExtractor.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/android/AndroidExtractor.kt @@ -18,9 +18,11 @@ package com.grab.grazel.migrate.android import com.android.build.gradle.BaseExtension import com.android.build.gradle.api.AndroidSourceSet +import com.android.build.gradle.internal.dsl.LintOptions import com.grab.grazel.GrazelExtension import com.grab.grazel.bazel.rules.Multidex import com.grab.grazel.bazel.starlark.BazelDependency +import com.grab.grazel.bazel.starlark.LintConfigs import com.grab.grazel.gradle.ConfigurationScope.BUILD import com.grab.grazel.gradle.dependencies.BuildGraphType import com.grab.grazel.gradle.dependencies.DependenciesDataSource @@ -126,6 +128,8 @@ constructor( deps.calculateDirectDependencyTags(name) } else emptyList() + val lintConfigs = lintConfigs(extension.lintOptions, project) + return AndroidLibraryData( name = name + matchedVariant.nameSuffix, srcs = srcs, @@ -140,7 +144,8 @@ constructor( buildConfigData = extension.extractBuildConfig(this, matchedVariant.variant), resValuesData = extension.extractResValue(matchedVariant), deps = deps.sorted(), - tags = tags.sorted() + tags = tags.sorted(), + lintConfigs = lintConfigs ) } @@ -158,6 +163,23 @@ constructor( } } +private fun lintConfigs( + lintOptions: LintOptions, + project: Project +): LintConfigs { + val configPath = if (lintOptions.lintConfig?.absolutePath != null) { + project.relativePath(lintOptions.lintConfig!!.absolutePath) + } else { + null + } + val baseLinePath = if (lintOptions.baselineFile?.absolutePath != null) { + project.relativePath(lintOptions.baselineFile!!.absolutePath) + } else { + null + } + return LintConfigs(configPath, baseLinePath) +} + internal interface AndroidBinaryDataExtractor : AndroidExtractor @Singleton @@ -195,6 +217,8 @@ constructor( .toList() ) ?: "" + val lintConfigs = lintConfigs(extension.lintOptions, project) + return AndroidBinaryData( name = project.name, manifestValues = manifestValues, @@ -207,7 +231,8 @@ constructor( packageName = matchedVariant.variant.applicationId, hasCrashlytics = project.hasCrashlytics, compose = project.hasCompose, - databinding = project.hasDatabinding + databinding = project.hasDatabinding, + lintConfigs = lintConfigs, ) } } \ No newline at end of file diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/android/AndroidTarget.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/android/AndroidTarget.kt index ff150c10..d1e73a03 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/android/AndroidTarget.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/android/AndroidTarget.kt @@ -21,6 +21,7 @@ import com.grab.grazel.bazel.rules.Visibility import com.grab.grazel.bazel.rules.androidBinary import com.grab.grazel.bazel.rules.androidLibrary import com.grab.grazel.bazel.starlark.BazelDependency +import com.grab.grazel.bazel.starlark.LintConfigs import com.grab.grazel.bazel.starlark.StatementsBuilder import com.grab.grazel.migrate.BazelBuildTarget @@ -35,6 +36,7 @@ internal interface AndroidTarget : BazelBuildTarget { val manifest: String? val assetsGlob: List val assetsDir: String? + val lintConfigs: LintConfigs? } internal data class AndroidLibraryTarget( @@ -54,6 +56,7 @@ internal data class AndroidLibraryTarget( override val assetsGlob: List = emptyList(), override val assetsDir: String? = null, override val sortKey: String = "0$name", + override val lintConfigs: LintConfigs? = null, ) : AndroidTarget { override fun statements(builder: StatementsBuilder) = builder { androidLibrary( @@ -70,7 +73,8 @@ internal data class AndroidLibraryTarget( assetsGlob = assetsGlob, assetsDir = assetsDir, buildConfigData = buildConfigData, - resValuesData = resValuesData + resValuesData = resValuesData, + lintConfigs = lintConfigs, ) } } @@ -92,6 +96,7 @@ internal data class AndroidBinaryTarget( override val assetsGlob: List = emptyList(), override val assetsDir: String? = null, override val sortKey: String = "0$name", + override val lintConfigs: LintConfigs? = null, val crunchPng: Boolean = false, val multidex: Multidex = Multidex.Native, val debug: Boolean = true, @@ -122,6 +127,7 @@ internal data class AndroidBinaryTarget( assetsGlob = assetsGlob, buildConfigData = buildConfigData, assetsDir = assetsDir, + lintConfigs = lintConfigs, ) } } \ No newline at end of file diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/target/AndroidBinaryTargetBuilder.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/target/AndroidBinaryTargetBuilder.kt index 50bc625d..faa089ca 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/target/AndroidBinaryTargetBuilder.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/target/AndroidBinaryTargetBuilder.kt @@ -123,7 +123,8 @@ constructor( resValuesData = androidLibraryData.resValuesData, assetsGlob = androidLibraryData.assets, assetsDir = androidLibraryData.assetsDir, - buildConfigData = androidLibraryData.buildConfigData + buildConfigData = androidLibraryData.buildConfigData, + lintConfigs = androidLibraryData.lintConfigs, ) ) + intermediateTargets } diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/target/AndroidLibraryTargetBuilder.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/target/AndroidLibraryTargetBuilder.kt index 84ed50b7..623ea969 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/target/AndroidLibraryTargetBuilder.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/target/AndroidLibraryTargetBuilder.kt @@ -100,6 +100,7 @@ private fun AndroidLibraryData.toAndroidLibTarget() = AndroidLibraryTarget( manifest = manifestFile, assetsGlob = assets, assetsDir = assetsDir, - tags = tags + tags = tags, + lintConfigs = lintConfigs )