aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-05-16 01:25:22 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-05-16 01:25:22 +0000
commita6ca131576201c1fc1c530992de9979a455e1405 (patch)
treece8ecd937485b762a7d6356813be1eceb8702de0
parent0775cc56df01cfd7bfe89ae8303a0fa0fef6d571 (diff)
parente9dd1bd3f3db42ee66e45de688d78b4530c5f07b (diff)
downloadrobolectric-sdk-release.tar.gz
Merge "Snap for 11847757 from ce9e8edd65611e0ed7b912f72617c330f32738ee to sdk-release" into sdk-releasesdk-release
-rw-r--r--Android.bp4
-rw-r--r--annotations/src/main/java/org/robolectric/versioning/AndroidVersions.java59
-rw-r--r--annotations/src/test/java/org/robolectric/versioning/AndroidVersionsEdgeCaseTest.java47
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();
+ }
+ }
}
+