diff options
author | Joshua Hale <joshuahale@google.com> | 2022-08-05 20:42:24 +0000 |
---|---|---|
committer | Josh Hale <joshuahale@google.com> | 2022-08-12 18:19:38 +0000 |
commit | c7210fe31932f26970b83d123966524421a7115a (patch) | |
tree | 106f3941a090bdf199277f885d83d36c0b2ff87d | |
parent | f8c467e9be3045c5053ab749f595631f7f7b2085 (diff) | |
download | base-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
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 |