From b8b8f044f4735b08f5a422637cfdcef43ac1a824 Mon Sep 17 00:00:00 2001 From: Bob Lee Date: Fri, 10 Jul 2009 13:34:04 -0700 Subject: [PATCH] Uri.EMPTY.toString() was returning null due to an initialization order bug. Fixes internal issue #1957015. --- core/java/android/net/Uri.java | 21 +++++++++++-------- tests/AndroidTests/run_test.sh | 2 +- .../src/com/android/unit_tests/UriTest.java | 4 ++++ 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/core/java/android/net/Uri.java b/core/java/android/net/Uri.java index c23df217a856d..6a755c3a249ba 100644 --- a/core/java/android/net/Uri.java +++ b/core/java/android/net/Uri.java @@ -104,6 +104,18 @@ public abstract class Uri implements Parcelable, Comparable { /** Log tag. */ private static final String LOG = Uri.class.getSimpleName(); + /** + * NOTE: EMPTY accesses this field during its own initialization, so this + * field *must* be initialized first, or else EMPTY will see a null value! + * + * Placeholder for strings which haven't been cached. This enables us + * to cache null. We intentionally create a new String instance so we can + * compare its identity and there is no chance we will confuse it with + * user data. + */ + @SuppressWarnings("RedundantStringConstructorCall") + private static final String NOT_CACHED = new String("NOT CACHED"); + /** * The empty URI, equivalent to "". */ @@ -349,15 +361,6 @@ public abstract class Uri implements Parcelable, Comparable { /** Placeholder value for an index which hasn't been calculated yet. */ private final static int NOT_CALCULATED = -2; - /** - * Placeholder for strings which haven't been cached. This enables us - * to cache null. We intentionally create a new String instance so we can - * compare its identity and there is no chance we will confuse it with - * user data. - */ - @SuppressWarnings("RedundantStringConstructorCall") - private static final String NOT_CACHED = new String("NOT CACHED"); - /** * Error message presented when a user tries to treat an opaque URI as * hierarchical. diff --git a/tests/AndroidTests/run_test.sh b/tests/AndroidTests/run_test.sh index 0cdf63f538acc..7ada698db81a1 100755 --- a/tests/AndroidTests/run_test.sh +++ b/tests/AndroidTests/run_test.sh @@ -1,4 +1,4 @@ framework=/system/framework bpath=$framework/core.jar:$framework/ext.jar:$framework/framework.jar:$framework/android.test.runner.jar -adb shell exec dalvikvm -Xbootclasspath:$bpath -cp system/app/AndroidTests.apk \ +adb shell exec dalvikvm -Xbootclasspath:$bpath -cp /system/app/AndroidTests.apk:/data/app/com.android.unit_tests.apk \ com.android.internal.util.WithFramework junit.textui.TestRunner $* diff --git a/tests/AndroidTests/src/com/android/unit_tests/UriTest.java b/tests/AndroidTests/src/com/android/unit_tests/UriTest.java index 130beeb3d9893..e9d3cda43773a 100644 --- a/tests/AndroidTests/src/com/android/unit_tests/UriTest.java +++ b/tests/AndroidTests/src/com/android/unit_tests/UriTest.java @@ -499,4 +499,8 @@ public class UriTest extends TestCase { assertEquals(uriString, uri.toString()); } + + public void testEmptyToStringNotNull() { + assertNotNull(Uri.EMPTY.toString()); + } }