Merge "Add messages to the ArrayStoreExceptions thrown by arraycopy()." into dalvik-dev
diff --git a/luni/src/main/java/java/io/File.java b/luni/src/main/java/java/io/File.java
index 553206d..2910f91 100644
--- a/luni/src/main/java/java/io/File.java
+++ b/luni/src/main/java/java/io/File.java
@@ -200,7 +200,8 @@
         // Keep a copy of the cleaned-up string path.
         this.path = fixSlashes(dirtyPath);
         // Cache the UTF-8 bytes we need for the JNI.
-        if (isAbsolute()) {
+        // TODO: we shouldn't do this caching at all; the RI demonstrably doesn't.
+        if (path.length() > 0 && path.charAt(0) == separatorChar) { // http://b/2486943
             this.pathBytes = newCString(path);
             return;
         }
diff --git a/luni/src/test/java/java/io/FileTest.java b/luni/src/test/java/java/io/FileTest.java
index d7ffaac..0518c26 100644
--- a/luni/src/test/java/java/io/FileTest.java
+++ b/luni/src/test/java/java/io/FileTest.java
@@ -115,4 +115,21 @@
         assertEquals(new File(cwd), f.getCanonicalFile());
         assertEquals(cwd, f.getCanonicalPath());
     }
+
+    // http://b/2486943 - between eclair and froyo, we added a call to
+    // isAbsolute from the File constructor, potentially breaking subclasses.
+    public void test_subclassing() throws Exception {
+        class MyFile extends File {
+            private String field;
+            MyFile(String s) {
+                super(s);
+                field = "";
+            }
+            @Override public boolean isAbsolute() {
+                field.length();
+                return super.isAbsolute();
+            }
+        }
+        new MyFile("");
+    }
 }
diff --git a/text/src/main/java/java/text/Normalizer.java b/text/src/main/java/java/text/Normalizer.java
index c395715..cc9819c 100644
--- a/text/src/main/java/java/text/Normalizer.java
+++ b/text/src/main/java/java/text/Normalizer.java
@@ -78,4 +78,6 @@
     public static String normalize(CharSequence src, Form form) {
         return NativeNormalizer.normalize(src, form);
     }
+
+    private Normalizer() {}
 }