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() {}
}