X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altoslib%2FAltosJson.java;h=1c3a342df12504130095def04323323e59877253;hp=52c9b41e6d7d81f8dcd5d804eacad421568d3098;hb=HEAD;hpb=c8dbcaf69cd538a31ab6e2b568237ae7c8656a9a diff --git a/altoslib/AltosJson.java b/altoslib/AltosJson.java index 52c9b41e..1c3a342d 100644 --- a/altoslib/AltosJson.java +++ b/altoslib/AltosJson.java @@ -16,7 +16,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_12; +package org.altusmetrum.altoslib_14; import java.io.*; import java.util.*; @@ -63,18 +63,22 @@ class JsonUtil { result.append("\t"); return result; } - static NumberFormat get_nf_json() { - DecimalFormat nf = (DecimalFormat) NumberFormat.getNumberInstance(Locale.ROOT); - nf.setParseIntegerOnly(false); - nf.setGroupingUsed(false); - nf.setMaximumFractionDigits(17); - nf.setMinimumFractionDigits(0); - nf.setMinimumIntegerDigits(1); - nf.setDecimalSeparatorAlwaysShown(false); - return nf; - } - static NumberFormat nf_json = get_nf_json(); + NumberFormat _nf_json; + + NumberFormat nf_json() { + if (_nf_json == null) { + DecimalFormat nf = (DecimalFormat) NumberFormat.getNumberInstance(Locale.ROOT); + nf.setParseIntegerOnly(false); + nf.setGroupingUsed(false); + nf.setMaximumFractionDigits(17); + nf.setMinimumFractionDigits(0); + nf.setMinimumIntegerDigits(1); + nf.setDecimalSeparatorAlwaysShown(false); + _nf_json = nf; + } + return _nf_json; + } } class JsonHash extends JsonUtil { @@ -372,7 +376,7 @@ class JsonLexer extends JsonUtil { String dstr = dbuf.toString(); double dval; try { - dval = nf_json.parse(dstr).doubleValue(); + dval = nf_json().parse(dstr).doubleValue(); } catch (ParseException pe) { return new JsonToken(JsonToken._error, dstr); } @@ -612,14 +616,14 @@ public class AltosJson extends JsonUtil { } else if (Double.isNaN(d_number)) { result.append("NaN"); } else { - String dval = nf_json.format(d_number); + String dval = nf_json().format(d_number); if (dval.equals("-0")) dval = "0"; result.append(dval); } break; case type_long: - result.append(new Long(l_number).toString()); + result.append(Long.valueOf(l_number).toString()); break; case type_string: quote(result, string); @@ -1032,6 +1036,7 @@ public class AltosJson extends JsonUtil { * all inner classes are only members of their immediate outer * class */ + @SuppressWarnings("unchecked") private Object make(Class c, Class enclosing_class, Object enclosing_object) { Object ret; if (c == Boolean.TYPE) { @@ -1101,7 +1106,7 @@ public class AltosJson extends JsonUtil { Constructor ctor = ((Class)c).getDeclaredConstructor((Class) enclosing_class); object = ctor.newInstance(enclosing_object); } else { - object = c.newInstance(); + object = c.getDeclaredConstructor().newInstance(); } for (; c != Object.class; c = c.getSuperclass()) { for (Field field : c.getDeclaredFields()) { @@ -1213,6 +1218,10 @@ public class AltosJson extends JsonUtil { } else if (object instanceof String) { type = type_string; string = (String) object; + } else if (object == null) { + System.out.printf("unexpected null object\n"); + } else if (object.getClass() == null) { + System.out.printf("unexpected null object class\n"); } else if (object.getClass().isArray()) { assert_array(true);