summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Hale <joshuahale@google.com>2022-08-05 20:42:24 +0000
committerJosh Hale <joshuahale@google.com>2022-08-12 18:19:38 +0000
commitc7210fe31932f26970b83d123966524421a7115a (patch)
tree106f3941a090bdf199277f885d83d36c0b2ff87d
parentf8c467e9be3045c5053ab749f595631f7f7b2085 (diff)
downloadbase-c7210fe31932f26970b83d123966524421a7115a.tar.gz
Add Lints for Minimum Version Requirements for Large Screens
Added minimum version requirement lint rules for Jetpack Compose Foundation and Sliding Pane Layout Libraries Bug: 236875867 Bug: 236873496 Test: Covered by new unit tests in GradleDetectorTest Change-Id: Ie305f35f15889235612abedb514decf6e2dea502
-rw-r--r--lint/cli/src/main/java/com/android/tools/lint/gradle/GroovyGradleVisitor.java6
-rw-r--r--lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/GradleDetector.kt8
-rw-r--r--lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/GradleDetectorTest.kt70
3 files changed, 81 insertions, 3 deletions
diff --git a/lint/cli/src/main/java/com/android/tools/lint/gradle/GroovyGradleVisitor.java b/lint/cli/src/main/java/com/android/tools/lint/gradle/GroovyGradleVisitor.java
index e9d09f853c..35fb93caea 100644
--- a/lint/cli/src/main/java/com/android/tools/lint/gradle/GroovyGradleVisitor.java
+++ b/lint/cli/src/main/java/com/android/tools/lint/gradle/GroovyGradleVisitor.java
@@ -20,6 +20,7 @@ import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.android.tools.lint.checks.GradleDetector;
import com.android.tools.lint.client.api.GradleVisitor;
+import com.android.tools.lint.client.api.LintClient;
import com.android.tools.lint.detector.api.Context;
import com.android.tools.lint.detector.api.DefaultPosition;
import com.android.tools.lint.detector.api.GradleContext;
@@ -55,6 +56,11 @@ public class GroovyGradleVisitor extends GradleVisitor {
@NonNull GradleContext context, @NonNull List<? extends GradleScanner> detectors) {
try {
visitQuietly(context, detectors);
+ } catch (AssertionError e) {
+ // Test infrastructure checks
+ if (LintClient.isUnitTest()) {
+ throw e;
+ }
} catch (Throwable t) {
// else: ignore
// Parsing the build script can involve class loading that we sometimes can't
diff --git a/lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/GradleDetector.kt b/lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/GradleDetector.kt
index 40afd231ce..992e9d6b32 100644
--- a/lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/GradleDetector.kt
+++ b/lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/GradleDetector.kt
@@ -1061,7 +1061,13 @@ open class GradleDetector : Detector(), GradleScanner {
if (newerVersion != null && version > GradleVersion(0, 0, 0) && newerVersion > version) {
val versionString = newerVersion.toString()
- val message = getNewerVersionAvailableMessage(dependency, versionString, null)
+ val message = if (dependency.groupId == "androidx.slidingpanelayout" && dependency.artifactId == "slidingpanelayout") {
+ "Upgrade `androidx.slidingpanelayout` for keyboard and mouse support"
+ } else if (dependency.groupId == "androidx.compose.foundation" && dependency.artifactId == "foundation") {
+ "Upgrade `androidx.compose.foundation` for keyboard and mouse support"
+ } else {
+ getNewerVersionAvailableMessage(dependency, versionString, null)
+ }
val fix = if (!isResolved) getUpdateDependencyFix(revision, versionString) else null
report(context, cookie, issue, message, fix)
}
diff --git a/lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/GradleDetectorTest.kt b/lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/GradleDetectorTest.kt
index 57a147320c..844ed42e15 100644
--- a/lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/GradleDetectorTest.kt
+++ b/lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/GradleDetectorTest.kt
@@ -507,7 +507,6 @@ class GradleDetectorTest : AbstractCheckTest() {
"""
)
}
-
fun testSnapshots() {
// Regression test for b/183137869:
// Gradle special-cases the SNAPSHOT version; make sure we don't offer updates to/from it except
@@ -1083,6 +1082,51 @@ class GradleDetectorTest : AbstractCheckTest() {
).issues(DEPENDENCY).run().expect(expected)
}
+ fun testLargeScreenIncorrectDependencies() {
+ val expected = "build.gradle:9: Warning: Upgrade androidx.slidingpanelayout for keyboard and mouse support [GradleDependency]\n" +
+ " compile 'androidx.slidingpanelayout:slidingpanelayout:1.1.0'\n" +
+ " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" +
+ "build.gradle:10: Warning: Upgrade androidx.compose.foundation for keyboard and mouse support [GradleDependency]\n" +
+ " compile 'androidx.compose.foundation:foundation:1.1.1'\n" +
+ " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" +
+ "0 errors, 2 warnings"
+ lint().files(
+ gradle(
+ "" +
+ "apply plugin: 'com.android.application'\n" +
+ "\n" +
+ "android {\n" +
+ " compileSdkVersion 21\n" +
+ " buildToolsVersion \"21.1.2\"\n" +
+ "}\n" +
+ "\n" +
+ "dependencies {\n" +
+ " compile 'androidx.slidingpanelayout:slidingpanelayout:1.1.0'\n" +
+ " compile 'androidx.compose.foundation:foundation:1.1.1'\n" +
+ "}\n"
+ )
+ ).issues(DEPENDENCY).run().expect(expected)
+ }
+
+ fun testLargeScreenCorrectDependencies() {
+ lint().files(
+ gradle(
+ "" +
+ "apply plugin: 'com.android.application'\n" +
+ "\n" +
+ "android {\n" +
+ " compileSdkVersion 21\n" +
+ " buildToolsVersion \"21.1.2\"\n" +
+ "}\n" +
+ "\n" +
+ "dependencies {\n" +
+ " compile 'androidx.slidingpanelayout:slidingpanelayout:1.2'\n" +
+ " compile 'androidx.compose.foundation:foundation:1.2.1'\n" +
+ "}\n"
+ )
+ ).issues(DEPENDENCY).run().expectClean()
+ }
+
fun testDependenciesMinSdkVersion() {
lint().files(
gradle(
@@ -4443,7 +4487,9 @@ class GradleDetectorTest : AbstractCheckTest() {
// SDK distributed via Maven
"caches/modules-2/files-2.1/com.android.support/recyclerview-v7/26.0.0/sample",
- "caches/modules-2/files-2.1/com.google.firebase/firebase-messaging/11.0.0/sample"
+ "caches/modules-2/files-2.1/com.google.firebase/firebase-messaging/11.0.0/sample",
+ "caches/modules-2/files-2.1/androidx.slidingpanelayout/slidingpanelayout/1.2.0/sample",
+ "caches/modules-2/files-2.1/androidx.compose.foundation/foundation/1.2.1/sample"
)
)
}
@@ -4464,6 +4510,8 @@ class GradleDetectorTest : AbstractCheckTest() {
<com.google.android.gms/>
<com.google.android.support/>
<androidx.core/>
+ <androidx.slidingpanelayout/>
+ <androidx.compose/>
</metadata>
""".trimIndent()
)
@@ -4540,6 +4588,24 @@ class GradleDetectorTest : AbstractCheckTest() {
</androidx.core>
""".trimIndent()
)
+ task.networkData(
+ "https://maven.google.com/androidx/slidingpanelayout/group-index.xml",
+ """
+ <?xml version="1.0" encoding="UTF-8"?>
+ <androidx.slidingpanelayout>
+ <slidingpanelayout versions="1.1.0", "1.2.0"/>
+ </androidx.slidingpanelayout>
+ """.trimIndent()
+ )
+ task.networkData(
+ "https://maven.google.com/androidx/compose/foundation/group-index.xml",
+ """
+ <?xml version="1.0" encoding="UTF-8"?>
+ <androidx.compose.foundation>
+ <foundation versions="1.1.0", "1.2.0"/>
+ </androidx.compose.foundation>
+ """.trimIndent()
+ )
// Similarly set up the expected SDK Index network output from dl.google.com to
// ensure stable SDK library suggestions in the tests