Bug 1384829 - 2. Add more user-friendly debugging output; r?esawin
Translate non-ASCII characters into hex instead of trying to print them
out.
MozReview-Commit-ID: 1aABRy6J1nm
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoEditable.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoEditable.java
@@ -1394,27 +1394,48 @@ final class GeckoEditable extends IGecko
return fld.getName();
}
} catch (IllegalAccessException e) {
}
}
return String.valueOf(value);
}
+ private static String getPrintableChar(char chr) {
+ if (chr >= 0x20 && chr <= 0x7e) {
+ return String.valueOf(chr);
+ } else if (chr == '\n') {
+ return "\u21b2";
+ }
+ return String.format("%04x", (int) chr);
+ }
+
static StringBuilder debugAppend(StringBuilder sb, Object obj) {
if (obj == null) {
sb.append("null");
} else if (obj instanceof GeckoEditable) {
sb.append("GeckoEditable");
} else if (obj instanceof GeckoEditableChild) {
sb.append("GeckoEditableChild");
} else if (Proxy.isProxyClass(obj.getClass())) {
debugAppend(sb, Proxy.getInvocationHandler(obj));
+ } else if (obj instanceof Character) {
+ sb.append('\'').append(getPrintableChar((Character) obj)).append('\'');
} else if (obj instanceof CharSequence) {
- sb.append('"').append(obj.toString().replace('\n', '\u21b2')).append('"');
+ final String str = obj.toString();
+ sb.append('"');
+ for (int i = 0; i < str.length(); i++) {
+ final char chr = str.charAt(i);
+ if (chr >= 0x20 && chr <= 0x7e) {
+ sb.append(chr);
+ } else {
+ sb.append(getPrintableChar(chr));
+ }
+ }
+ sb.append('"');
} else if (obj.getClass().isArray()) {
sb.append(obj.getClass().getComponentType().getSimpleName()).append('[')
.append(Array.getLength(obj)).append(']');
} else {
sb.append(obj);
}
return sb;
}