diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-05-16 01:25:22 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-05-16 01:25:22 +0000 |
commit | a6ca131576201c1fc1c530992de9979a455e1405 (patch) | |
tree | ce8ecd937485b762a7d6356813be1eceb8702de0 | |
parent | 0775cc56df01cfd7bfe89ae8303a0fa0fef6d571 (diff) | |
parent | e9dd1bd3f3db42ee66e45de688d78b4530c5f07b (diff) | |
download | robolectric-sdk-release.tar.gz |
Merge "Snap for 11847757 from ce9e8edd65611e0ed7b912f72617c330f32738ee to sdk-release" into sdk-releasesdk-release
3 files changed, 99 insertions, 11 deletions
diff --git a/Android.bp b/Android.bp index 4e5cb23b2..65d10e70c 100644 --- a/Android.bp +++ b/Android.bp @@ -205,8 +205,8 @@ java_host_for_device { "//frameworks/base/packages/CredentialManager:__subpackages__", "//frameworks/base/packages/SettingsLib:__subpackages__", "//frameworks/base/packages/SystemUI:__pkg__", - "//frameworks/libs/systemui/animationlib:__pkg__", - "//frameworks/libs/systemui/tracinglib:__pkg__", + "//frameworks/libs/systemui:__subpackages__", + "//packages/apps/Launcher3/tests:__pkg__", "//frameworks/base/tests/InputScreenshotTest:__subpackages__", "//frameworks/opt/car/setupwizard/library/main/tests/robotests:__pkg__", "//frameworks/opt/localepicker/tests:__pkg__", diff --git a/annotations/src/main/java/org/robolectric/versioning/AndroidVersions.java b/annotations/src/main/java/org/robolectric/versioning/AndroidVersions.java index 71cc48042..19ebef9a1 100644 --- a/annotations/src/main/java/org/robolectric/versioning/AndroidVersions.java +++ b/annotations/src/main/java/org/robolectric/versioning/AndroidVersions.java @@ -53,6 +53,8 @@ import javax.annotation.Nullable; */ public final class AndroidVersions { + private static boolean WARN_ONLY = true; + private AndroidVersions() {} /** Representation of an android release, one that has occurred, or is expected. */ @@ -825,7 +827,7 @@ public final class AndroidVersions { } } - private void throwStaticErrors() { + private void handleStaticErrors() { StringBuilder errors = new StringBuilder(); if (!this.classesWithIllegalNames.isEmpty()) { errors @@ -858,14 +860,14 @@ public final class AndroidVersions { } } if (errors.length() > 0) { - throw new IllegalStateException( + errorMessage( errors .append("Please check the AndroidReleases defined ") .append("in ") .append(AndroidVersions.class.getName()) .append("and ensure they are aligned with the versions of") .append(" Android.") - .toString()); + .toString(), null); } } @@ -877,14 +879,14 @@ public final class AndroidVersions { // the first letter of the code name equal to the release number. current = sdkIntToAllReleases.get(reportedVersion); if (current != null && !current.isReleased()) { - throw new IllegalStateException( + errorMessage( "The current sdk " + current.getShortCode() + " has been released. Please update the contents of " + AndroidVersions.class.getName() + " to mark sdk " + current.getShortCode() - + " as released."); + + " as released.", null); } } else { // Get known active code name letters @@ -936,10 +938,30 @@ public final class AndroidVersions { .append("contents of current sdk jar to the released version.\n"); } if (detectedProblems.length() > 0) { - throw new IllegalStateException(detectedProblems.toString()); + errorMessage(detectedProblems.toString(), null); + } + + if (current == null) { //only possible in warning mode + current = new AndroidUnreleased() { + @Override + public int getSdkInt() { + return 10000; // the super large unknown sdk value. + } + + @Override + public String getShortCode() { + return codename.toUpperCase(Locale.getDefault()).substring(0, 1); + } + + @Override + public String getVersion() { + return ""; + } + }; } } } + return current; } } @@ -971,7 +993,7 @@ public final class AndroidVersions { | IllegalArgumentException | IllegalAccessException | InvocationTargetException ex) { - throw new IllegalStateException( + errorMessage( "Classes " + clazz.getName() + "should be accessible via " @@ -984,7 +1006,7 @@ public final class AndroidVersions { Collections.sort(allReleases, AndroidRelease::compareTo); SdkInformation sdkInformation = new SdkInformation(allReleases, classesWithIllegalNames); - sdkInformation.throwStaticErrors(); + sdkInformation.handleStaticErrors(); return sdkInformation; } @@ -1007,13 +1029,32 @@ public final class AndroidVersions { String codenames = buildProps.getProperty("ro.build.version.all_codenames"); String[] allCodeNames = codenames == null ? new String[0] : codenames.split(","); String[] activeCodeNames = - allCodeNames.length > 0 && allCodeNames[0].equals("REL") ? new String[0] : allCodeNames; + allCodeNames.length > 0 && allCodeNames[0].equals("REL") ? new String[0] : allCodeNames; return information.computeCurrentSdk(sdk, release, codename, asList(activeCodeNames)); } private static final SdkInformation information; + private static final void errorMessage(String errorMessage, @Nullable Exception ex){ + if (WARN_ONLY) { + System.err.println(errorMessage); + } else { + throw new IllegalStateException(errorMessage, ex); + } + } + + static { + // We shouldn't break in annotation processors, only test runs. + String cmd = System.getProperty("sun.java.command"); + // We appear to be in an annotation processor, so only warn users. + if (cmd.indexOf("-Aorg.robolectric.annotation.processing.") != -1) { + System.err.println("Robolectric's AndroidVersions is running in warning mode," + + " no errors will be thrown."); + WARN_ONLY = true; + } else { + WARN_ONLY = false; + } AndroidRelease currentRelease = null; information = gatherStaticSdkInformationFromThisClass(); try { diff --git a/annotations/src/test/java/org/robolectric/versioning/AndroidVersionsEdgeCaseTest.java b/annotations/src/test/java/org/robolectric/versioning/AndroidVersionsEdgeCaseTest.java index 95b2c4266..334ca05f3 100644 --- a/annotations/src/test/java/org/robolectric/versioning/AndroidVersionsEdgeCaseTest.java +++ b/annotations/src/test/java/org/robolectric/versioning/AndroidVersionsEdgeCaseTest.java @@ -3,6 +3,7 @@ package org.robolectric.versioning; import static com.google.common.truth.Truth.assertThat; import java.util.Arrays; +import java.lang.reflect.Field; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -13,6 +14,16 @@ import org.robolectric.versioning.AndroidVersions.SdkInformation; @RunWith(JUnit4.class) public final class AndroidVersionsEdgeCaseTest { + private void forceWarningMode(boolean warnMode) { + try { + Field f = AndroidVersions.class.getDeclaredField("WARN_ONLY"); + f.setAccessible(true); + f.set(null, warnMode); + } catch (NoSuchFieldException | IllegalAccessException ex) { + throw new RuntimeException("Could not update WARN_ONLY field", ex); + } + } + /** * sdkInt higher than any known release, claims it's released. Expects an error message to update * to update the AndroidVersions.class @@ -21,6 +32,7 @@ public final class AndroidVersionsEdgeCaseTest { public void sdkIntHigherThanKnownReleasesClaimsIsReleased_throwsException() { AndroidRelease earliestUnrelease = null; try { + forceWarningMode(false); SdkInformation information = AndroidVersions.gatherStaticSdkInformationFromThisClass(); earliestUnrelease = information.earliestUnreleased; information.computeCurrentSdk( @@ -49,6 +61,7 @@ public final class AndroidVersionsEdgeCaseTest { public void sdkIntReleasedButStillReportsCodeName_throwsException() { AndroidRelease latestRelease = null; try { + forceWarningMode(false); SdkInformation information = AndroidVersions.gatherStaticSdkInformationFromThisClass(); latestRelease = information.latestRelease; information.computeCurrentSdk( @@ -68,4 +81,38 @@ public final class AndroidVersionsEdgeCaseTest { assertThat(e).isInstanceOf(RuntimeException.class); } } + + @Test + public void sdkIntReleasedButStillReportsCodeName_warningMode() { + AndroidRelease latestRelease = null; + try { + forceWarningMode(true); + SdkInformation information = AndroidVersions.gatherStaticSdkInformationFromThisClass(); + latestRelease = information.latestRelease; + information.computeCurrentSdk( + latestRelease.getSdkInt(), + null, + information.latestRelease.getShortCode(), + Arrays.asList(latestRelease.getShortCode())); + } catch (Throwable t) { + assertThat(t).isNull(); + } + } + + @Test + public void unknownSdkInt_warningMode() { + AndroidRelease latestRelease = null; + try { + forceWarningMode(true); + SdkInformation information = AndroidVersions.gatherStaticSdkInformationFromThisClass(); + latestRelease = information.latestRelease; + AndroidRelease found = + information.computeCurrentSdk( + 35, "zzzz", "Z", Arrays.asList("wwww", "xxxx", "yyyy", "zzzz")); + assertThat(found.getSdkInt()).isEqualTo(10000); + } catch (Throwable t) { + assertThat(t).isNull(); + } + } } + |