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
+    }
 }