Merging lint-checks and ui-internal-lint-checks at build time
as a workaround, so lint will no longer randomly choose to use only one of them
Bug: 148102969
Test: find core/core -type f | xargs sed 's/.*LargeTest.*//' -i && ./gradlew :core:core:lintDebug # and see that this fails because lint still runs
Test: ./gradlew lintDebug
Test: cd ui && ./gradlew lintDebug
Change-Id: Ice923922c4c26abfa625aae3989fde9b9339c184
diff --git a/buildSrc/lint-checks/build.gradle b/buildSrc/lint-checks/build.gradle
deleted file mode 100644
index 0bab94b..0000000
--- a/buildSrc/lint-checks/build.gradle
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * 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.
- */
-
-apply plugin: 'kotlin'
-
-dependencies {
- compileOnly build_libs.lint.api
- compileOnly build_libs.kotlin.stdlib
- api "androidx.annotation:annotation:1.0.0"
-}
diff --git a/buildSrc/lint-checks/src/main/java/androidx/build/lint/AndroidXIssueRegistry.kt b/buildSrc/lint-checks/src/main/java/androidx/build/lint/AndroidXIssueRegistry.kt
deleted file mode 100644
index 7cdc6d6..0000000
--- a/buildSrc/lint-checks/src/main/java/androidx/build/lint/AndroidXIssueRegistry.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * 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 androidx.build.lint
-
-import com.android.tools.lint.client.api.IssueRegistry
-import com.android.tools.lint.detector.api.CURRENT_API
-
-class AndroidXIssueRegistry : IssueRegistry() {
- override val api = CURRENT_API
- override val issues get() = listOf(
- BanParcelableUsage.ISSUE,
- BanKeepAnnotation.ISSUE,
- BanTargetApiAnnotation.ISSUE,
- MissingTestSizeAnnotation.ISSUE,
- SampledAnnotationEnforcer.MISSING_SAMPLED_ANNOTATION,
- SampledAnnotationEnforcer.OBSOLETE_SAMPLED_ANNOTATION,
- SampledAnnotationEnforcer.MISSING_SAMPLES_DIRECTORY,
- SampledAnnotationEnforcer.UNRESOLVED_SAMPLE_LINK,
- SampledAnnotationEnforcer.MULTIPLE_FUNCTIONS_FOUND,
- SampledAnnotationEnforcer.INVALID_SAMPLES_LOCATION,
- ObsoleteBuildCompatUsageDetector.ISSUE
- )
-}
diff --git a/buildSrc/settings.gradle b/buildSrc/settings.gradle
index ce9f51c..af0681e 100644
--- a/buildSrc/settings.gradle
+++ b/buildSrc/settings.gradle
@@ -14,5 +14,4 @@
* limitations under the License.
*/
-include ':lint-checks'
-include ':jetpad-integration'
\ No newline at end of file
+include ':jetpad-integration'
diff --git a/buildSrc/src/main/kotlin/androidx/build/AndroidXUiPlugin.kt b/buildSrc/src/main/kotlin/androidx/build/AndroidXUiPlugin.kt
index 4edd1ab..9b4e1a1 100644
--- a/buildSrc/src/main/kotlin/androidx/build/AndroidXUiPlugin.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/AndroidXUiPlugin.kt
@@ -43,10 +43,12 @@
targetSdkVersion(29)
}
+ // TODO(148540713): remove this exclusion when Lint can support using multiple lint jars
+ project.configurations.getByName("lintChecks").exclude(mapOf("module" to "lint-checks"))
// TODO: figure out how to apply this to multiplatform modules
project.dependencies.add(
"lintChecks",
- project.rootProject.project(":ui:ui-internal-lint-checks")
+ project.dependencies.project(mapOf("path" to ":ui:ui-internal-lint-checks", "configuration" to "shadow"))
)
library.lintOptions.apply {
diff --git a/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt b/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt
index 43b298a..df43614 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt
@@ -55,6 +55,11 @@
}
fun Project.configureLint(lintOptions: LintOptions, extension: AndroidXExtension) {
+ project.dependencies.add(
+ "lintChecks",
+ project.rootProject.project(":lint-checks")
+ )
+
// If -PcheckUnknownNullness was set we should fail on UnknownNullness warnings
val checkUnknownNullness = hasProperty(CHECK_UNKNOWN_NULLNESS)
diff --git a/buildSrc/src/main/kotlin/androidx/build/TaskUpToDateValidator.kt b/buildSrc/src/main/kotlin/androidx/build/TaskUpToDateValidator.kt
index 790b788..c0424f2 100644
--- a/buildSrc/src/main/kotlin/androidx/build/TaskUpToDateValidator.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/TaskUpToDateValidator.kt
@@ -59,6 +59,7 @@
"generatePomFileForSafeargsKotlinPluginMarkerMavenPublication",
"jacocoPublicDebug",
"jacocoTipOfTreeDebug",
+ "jar",
"lint",
"lintDebug",
"lintVitalRelease",
@@ -82,6 +83,7 @@
"packageTipOfTreeDebug",
"partiallyDejetifyArchive",
"postInstrumentCode",
+ "prepareLintJar",
"publishBenchmarkPluginMarkerMavenPublicationToMavenRepository",
"publishKotlinMultiplatformPublicationToMavenRepository",
"publishMavenPublicationToMavenRepository",
@@ -90,6 +92,7 @@
"publishSafeargsJavaPluginMarkerMavenPublicationToMavenRepository",
"publishSafeargsKotlinPluginMarkerMavenPublicationToMavenRepository",
"reportLibraryMetrics",
+ "shadowJar",
"stripArchiveForPartialDejetification",
"transformClassesWithDexBuilderForPublicDebug",
"transformClassesWithDexBuilderForTipOfTreeDebug",
diff --git a/compose/compose-runtime/build.gradle b/compose/compose-runtime/build.gradle
index 353b4ad..3a9768a6 100644
--- a/compose/compose-runtime/build.gradle
+++ b/compose/compose-runtime/build.gradle
@@ -32,6 +32,7 @@
sourceSets {
commonMain.dependencies {
implementation(KOTLIN_STDLIB)
+ implementation project(":annotation:annotation-sampled")
}
commonTest.dependencies {
implementation kotlin("test-junit")
diff --git a/compose/compose-runtime/integration-tests/samples/src/main/java/androidx/compose/samples/ModelSamples.kt b/compose/compose-runtime/integration-tests/samples/src/main/java/androidx/compose/samples/ModelSamples.kt
index 033af94..d22bec8 100644
--- a/compose/compose-runtime/integration-tests/samples/src/main/java/androidx/compose/samples/ModelSamples.kt
+++ b/compose/compose-runtime/integration-tests/samples/src/main/java/androidx/compose/samples/ModelSamples.kt
@@ -16,6 +16,7 @@
package androidx.compose.samples
+import androidx.annotation.Sampled
import androidx.compose.Composable
import androidx.compose.Model
import androidx.compose.remember
diff --git a/compose/compose-runtime/integration-tests/samples/src/main/java/androidx/compose/samples/RecomposeSamples.kt b/compose/compose-runtime/integration-tests/samples/src/main/java/androidx/compose/samples/RecomposeSamples.kt
index 2f19c5a..be8204f 100644
--- a/compose/compose-runtime/integration-tests/samples/src/main/java/androidx/compose/samples/RecomposeSamples.kt
+++ b/compose/compose-runtime/integration-tests/samples/src/main/java/androidx/compose/samples/RecomposeSamples.kt
@@ -16,6 +16,7 @@
package androidx.compose.samples
+import androidx.annotation.Sampled
import androidx.compose.Composable
import androidx.compose.Recompose
import androidx.compose.remember
diff --git a/gradlew b/gradlew
index 2729139..04c0630 100755
--- a/gradlew
+++ b/gradlew
@@ -100,9 +100,6 @@
fi
DEFAULT_JVM_OPTS="-DLINT_API_DATABASE=$APP_HOME/../../prebuilts/fullsdk-$plat/platform-tools/api/api-versions.xml"
-# Temporary solution for custom, private lint rules https://issuetracker.google.com/issues/65248347
-# Gradle automatically invokes 'jar' task on 'buildSrc/' projects so this will always be available.
-export ANDROID_LINT_JARS="$OUT_DIR/buildSrc/lint-checks/build/libs/lint-checks.jar"
# Tests for lint checks default to using sdk defined by this variable. This removes a lot of
# setup from each lint module.
export ANDROID_HOME="$APP_HOME/../../prebuilts/fullsdk-$plat"
diff --git a/buildSrc-tests/lint-checks/build.gradle b/lint-checks/build.gradle
similarity index 69%
copy from buildSrc-tests/lint-checks/build.gradle
copy to lint-checks/build.gradle
index b89bc5c..6f14782 100644
--- a/buildSrc-tests/lint-checks/build.gradle
+++ b/lint-checks/build.gradle
@@ -1,5 +1,5 @@
/*
- * Copyright 2019 The Android Open Source Project
+ * Copyright 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,10 +14,7 @@
* limitations under the License.
*/
-
-import androidx.build.BuildServerConfigurationKt
-
-import java.io.File
+import androidx.build.Publish
import static androidx.build.dependencies.DependenciesKt.*
@@ -27,14 +24,18 @@
}
dependencies {
- testImplementation LINT_CORE
- testImplementation LINT_API_LATEST
+ compileOnly LINT_API_LATEST
+ compileOnly KOTLIN_STDLIB
+
testImplementation KOTLIN_STDLIB
+ testImplementation LINT_CORE
testImplementation LINT_TESTS
- testImplementation("androidx.annotation:annotation:1.0.0")
- testImplementation project.files(new File(BuildServerConfigurationKt.getRootOutDirectory(project), "buildSrc/lint-checks/build/libs/lint-checks.jar"))
}
androidx {
+ name = "Lint checks"
+ publish = Publish.NONE
toolingProject = true
+ inceptionYear = "2018"
+ description = "Internal lint checks"
}
diff --git a/lint-checks/src/main/java/androidx/build/lint/AndroidXIssueRegistry.kt b/lint-checks/src/main/java/androidx/build/lint/AndroidXIssueRegistry.kt
new file mode 100644
index 0000000..cc58b3a
--- /dev/null
+++ b/lint-checks/src/main/java/androidx/build/lint/AndroidXIssueRegistry.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * 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 androidx.build.lint
+
+import com.android.tools.lint.client.api.IssueRegistry
+import com.android.tools.lint.detector.api.CURRENT_API
+import com.android.tools.lint.detector.api.Issue
+
+class AndroidXIssueRegistry : IssueRegistry() {
+ override val api = CURRENT_API
+ override val issues get(): List<Issue> {
+ return Issues
+ }
+
+ companion object {
+ val Issues get(): List<Issue> {
+ return listOf(
+ BanParcelableUsage.ISSUE,
+ BanKeepAnnotation.ISSUE,
+ BanTargetApiAnnotation.ISSUE,
+ MissingTestSizeAnnotation.ISSUE,
+ SampledAnnotationEnforcer.MISSING_SAMPLED_ANNOTATION,
+ SampledAnnotationEnforcer.OBSOLETE_SAMPLED_ANNOTATION,
+ SampledAnnotationEnforcer.MISSING_SAMPLES_DIRECTORY,
+ SampledAnnotationEnforcer.UNRESOLVED_SAMPLE_LINK,
+ SampledAnnotationEnforcer.MULTIPLE_FUNCTIONS_FOUND,
+ SampledAnnotationEnforcer.INVALID_SAMPLES_LOCATION,
+ ObsoleteBuildCompatUsageDetector.ISSUE
+ )
+ }
+ }
+}
diff --git a/buildSrc/lint-checks/src/main/java/androidx/build/lint/BanKeepAnnotation.kt b/lint-checks/src/main/java/androidx/build/lint/BanKeepAnnotation.kt
similarity index 100%
rename from buildSrc/lint-checks/src/main/java/androidx/build/lint/BanKeepAnnotation.kt
rename to lint-checks/src/main/java/androidx/build/lint/BanKeepAnnotation.kt
diff --git a/buildSrc/lint-checks/src/main/java/androidx/build/lint/BanParcelableUsage.kt b/lint-checks/src/main/java/androidx/build/lint/BanParcelableUsage.kt
similarity index 100%
rename from buildSrc/lint-checks/src/main/java/androidx/build/lint/BanParcelableUsage.kt
rename to lint-checks/src/main/java/androidx/build/lint/BanParcelableUsage.kt
diff --git a/buildSrc/lint-checks/src/main/java/androidx/build/lint/BanTargetApiAnnotation.kt b/lint-checks/src/main/java/androidx/build/lint/BanTargetApiAnnotation.kt
similarity index 100%
rename from buildSrc/lint-checks/src/main/java/androidx/build/lint/BanTargetApiAnnotation.kt
rename to lint-checks/src/main/java/androidx/build/lint/BanTargetApiAnnotation.kt
diff --git a/buildSrc/lint-checks/src/main/java/androidx/build/lint/MissingTestSizeAnnotation.kt b/lint-checks/src/main/java/androidx/build/lint/MissingTestSizeAnnotation.kt
similarity index 100%
rename from buildSrc/lint-checks/src/main/java/androidx/build/lint/MissingTestSizeAnnotation.kt
rename to lint-checks/src/main/java/androidx/build/lint/MissingTestSizeAnnotation.kt
diff --git a/buildSrc/lint-checks/src/main/java/androidx/build/lint/ObsoleteBuildCompatUsageDetector.kt b/lint-checks/src/main/java/androidx/build/lint/ObsoleteBuildCompatUsageDetector.kt
similarity index 100%
rename from buildSrc/lint-checks/src/main/java/androidx/build/lint/ObsoleteBuildCompatUsageDetector.kt
rename to lint-checks/src/main/java/androidx/build/lint/ObsoleteBuildCompatUsageDetector.kt
diff --git a/buildSrc/lint-checks/src/main/java/androidx/build/lint/SampledAnnotationEnforcer.kt b/lint-checks/src/main/java/androidx/build/lint/SampledAnnotationEnforcer.kt
similarity index 100%
rename from buildSrc/lint-checks/src/main/java/androidx/build/lint/SampledAnnotationEnforcer.kt
rename to lint-checks/src/main/java/androidx/build/lint/SampledAnnotationEnforcer.kt
diff --git a/buildSrc/lint-checks/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry b/lint-checks/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry
similarity index 100%
rename from buildSrc/lint-checks/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry
rename to lint-checks/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry
diff --git a/buildSrc-tests/lint-checks/build.gradle b/lint-checks/tests/build.gradle
similarity index 86%
rename from buildSrc-tests/lint-checks/build.gradle
rename to lint-checks/tests/build.gradle
index b89bc5c..2fdce1e 100644
--- a/buildSrc-tests/lint-checks/build.gradle
+++ b/lint-checks/tests/build.gradle
@@ -32,7 +32,7 @@
testImplementation KOTLIN_STDLIB
testImplementation LINT_TESTS
testImplementation("androidx.annotation:annotation:1.0.0")
- testImplementation project.files(new File(BuildServerConfigurationKt.getRootOutDirectory(project), "buildSrc/lint-checks/build/libs/lint-checks.jar"))
+ testImplementation project(":lint-checks")
}
androidx {
diff --git a/buildSrc-tests/lint-checks/src/test/java/androidx/build/lint/ObsoleteBuildCompatUsageDetectorTest.kt b/lint-checks/tests/src/test/java/androidx/build/lint/ObsoleteBuildCompatUsageDetectorTest.kt
similarity index 100%
rename from buildSrc-tests/lint-checks/src/test/java/androidx/build/lint/ObsoleteBuildCompatUsageDetectorTest.kt
rename to lint-checks/tests/src/test/java/androidx/build/lint/ObsoleteBuildCompatUsageDetectorTest.kt
diff --git a/buildSrc-tests/lint-checks/src/test/java/androidx/build/lint/SampledAnnotationEnforcerTest.kt b/lint-checks/tests/src/test/java/androidx/build/lint/SampledAnnotationEnforcerTest.kt
similarity index 100%
rename from buildSrc-tests/lint-checks/src/test/java/androidx/build/lint/SampledAnnotationEnforcerTest.kt
rename to lint-checks/tests/src/test/java/androidx/build/lint/SampledAnnotationEnforcerTest.kt
diff --git a/settings.gradle b/settings.gradle
index f3f0ccc..8fe2bab 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -82,8 +82,6 @@
includeProject(":benchmark:integration-tests:startup-benchmark", "benchmark/integration-tests/startup-benchmark")
includeProject(":biometric:biometric", "biometric/biometric")
includeProject(":browser:browser", "browser/browser")
-includeProject(":buildSrc-tests", "buildSrc-tests")
-includeProject(":buildSrc-tests:lint-checks", "buildSrc-tests/lint-checks")
includeProject(":camera:camera-camera2", "camera/camera-camera2")
includeProject(":camera:camera-core", "camera/camera-core")
includeProject(":camera:camera-extensions", "camera/camera-extensions")
@@ -138,6 +136,8 @@
includeProject(":jetifier-processor", "jetifier/jetifier/processor")
includeProject(":jetifier-standalone", "jetifier/jetifier/standalone")
includeProject(":jetifier-preprocessor", "jetifier/jetifier/preprocessor")
+includeProject(":lint-checks", "lint-checks")
+includeProject(":lint-checks:tests", "lint-checks/tests")
includeProject(":leanback", "leanback")
includeProject(":leanback-preference", "leanback-preference")
includeProject(":lifecycle:integration-tests:incrementality", "lifecycle/integration-tests/incrementality")
diff --git a/ui/settings.gradle b/ui/settings.gradle
index 10c04c2..33865ba 100644
--- a/ui/settings.gradle
+++ b/ui/settings.gradle
@@ -43,6 +43,7 @@
includeProject(":compose:compose-runtime", "../compose/compose-runtime")
includeProject(":compose:compose-runtime-benchmark", "../compose/compose-runtime/compose-runtime-benchmark")
includeProject(":compose:compose-runtime:integration-tests:samples", "../compose/compose-runtime/integration-tests/samples")
+includeProject(":lint-checks", "../lint-checks")
includeProject(":ui:integration-tests:benchmark", "integration-tests/benchmark")
includeProject(":ui:integration-tests:demos", "integration-tests/demos")
includeProject(":ui:integration-tests:test", "integration-tests/test")
diff --git a/ui/ui-internal-lint-checks/build.gradle b/ui/ui-internal-lint-checks/build.gradle
index 2d48e5b..8a824ce 100644
--- a/ui/ui-internal-lint-checks/build.gradle
+++ b/ui/ui-internal-lint-checks/build.gradle
@@ -20,14 +20,23 @@
import static androidx.build.dependencies.DependenciesKt.*
+buildscript {
+ dependencies {
+ classpath "com.github.jengelman.gradle.plugins:shadow:4.0.4"
+ }
+}
+
plugins {
id("AndroidXPlugin")
id("kotlin")
}
+apply(plugin:"com.github.johnrengelman.shadow")
+
dependencies {
compileOnly LINT_API_LATEST
compileOnly KOTLIN_STDLIB
+ api project(":lint-checks")
testImplementation KOTLIN_STDLIB
testImplementation LINT_CORE
diff --git a/ui/ui-internal-lint-checks/src/main/java/androidx/ui/lint/ComposeIssueRegistry.kt b/ui/ui-internal-lint-checks/src/main/java/androidx/ui/lint/ComposeIssueRegistry.kt
index 4798beb..79647f2 100644
--- a/ui/ui-internal-lint-checks/src/main/java/androidx/ui/lint/ComposeIssueRegistry.kt
+++ b/ui/ui-internal-lint-checks/src/main/java/androidx/ui/lint/ComposeIssueRegistry.kt
@@ -16,10 +16,14 @@
package androidx.ui.lint
+import androidx.build.lint.AndroidXIssueRegistry
import com.android.tools.lint.client.api.IssueRegistry
import com.android.tools.lint.detector.api.CURRENT_API
+import com.android.tools.lint.detector.api.Issue
class ComposeIssueRegistry : IssueRegistry() {
override val api = CURRENT_API
- override val issues get() = listOf(UnnecessaryLambdaCreationDetector.ISSUE)
+ override val issues get(): List<Issue> {
+ return listOf(UnnecessaryLambdaCreationDetector.ISSUE) + AndroidXIssueRegistry.Issues
+ }
}