From 700d3c39075e05a6067ce901706dc160797a9859 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 8 Jan 2018 12:24:19 -0800 Subject: [PATCH] Relocate shaded JSON API in annotation-processor Move the 'shade' copy of the JSON API to a separate src folder to make it clearer that we don't own the code. Also polished some formatting and suppressed a few warnings. Closes gh-10307 --- .../pom.xml | 18 + .../src/json-shade/README.adoc | 5 + .../configurationprocessor/json/JSON.java | 39 +- .../json/JSONArray.java | 227 +++++------ .../json/JSONException.java | 22 +- .../json/JSONObject.java | 381 ++++++++---------- .../json/JSONStringer.java | 229 +++++------ .../json/JSONTokener.java | 351 ++++++++-------- 8 files changed, 612 insertions(+), 660 deletions(-) create mode 100644 spring-boot-tools/spring-boot-configuration-processor/src/json-shade/README.adoc rename spring-boot-tools/spring-boot-configuration-processor/src/{main => json-shade}/java/org/springframework/boot/configurationprocessor/json/JSON.java (76%) rename spring-boot-tools/spring-boot-configuration-processor/src/{main => json-shade}/java/org/springframework/boot/configurationprocessor/json/JSONArray.java (78%) rename spring-boot-tools/spring-boot-configuration-processor/src/{main => json-shade}/java/org/springframework/boot/configurationprocessor/json/JSONException.java (67%) rename spring-boot-tools/spring-boot-configuration-processor/src/{main => json-shade}/java/org/springframework/boot/configurationprocessor/json/JSONObject.java (70%) rename spring-boot-tools/spring-boot-configuration-processor/src/{main => json-shade}/java/org/springframework/boot/configurationprocessor/json/JSONStringer.java (72%) rename spring-boot-tools/spring-boot-configuration-processor/src/{main => json-shade}/java/org/springframework/boot/configurationprocessor/json/JSONTokener.java (63%) diff --git a/spring-boot-tools/spring-boot-configuration-processor/pom.xml b/spring-boot-tools/spring-boot-configuration-processor/pom.xml index c2bb79e469..965468403e 100644 --- a/spring-boot-tools/spring-boot-configuration-processor/pom.xml +++ b/spring-boot-tools/spring-boot-configuration-processor/pom.xml @@ -40,6 +40,24 @@ none + + org.codehaus.mojo + build-helper-maven-plugin + + + add-json-shade-source + generate-sources + + add-source + + + + ${basedir}/src/json-shade/java + + + + + diff --git a/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/README.adoc b/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/README.adoc new file mode 100644 index 0000000000..6548006945 --- /dev/null +++ b/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/README.adoc @@ -0,0 +1,5 @@ +## Shaded JSON + +This source was originally taken from `com.vaadin.external.google:android-json` which +provides a clean room re-implementation of the `org.json` APIs and does not include the +"Do not use for evil" clause. diff --git a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSON.java b/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSON.java similarity index 76% rename from spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSON.java rename to spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSON.java index 9b1af91d77..17130a1fc4 100644 --- a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSON.java +++ b/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSON.java @@ -17,9 +17,7 @@ package org.springframework.boot.configurationprocessor.json; class JSON { - /** - * Returns the input if it is a JSON-permissible value; throws otherwise. - */ + static double checkDouble(double d) throws JSONException { if (Double.isInfinite(d) || Double.isNaN(d)) { throw new JSONException("Forbidden numeric value: " + d); @@ -31,12 +29,12 @@ class JSON { if (value instanceof Boolean) { return (Boolean) value; } - else if (value instanceof String) { + if (value instanceof String) { String stringValue = (String) value; if ("true".equalsIgnoreCase(stringValue)) { return true; } - else if ("false".equalsIgnoreCase(stringValue)) { + if ("false".equalsIgnoreCase(stringValue)) { return false; } } @@ -47,10 +45,10 @@ class JSON { if (value instanceof Double) { return (Double) value; } - else if (value instanceof Number) { + if (value instanceof Number) { return ((Number) value).doubleValue(); } - else if (value instanceof String) { + if (value instanceof String) { try { return Double.valueOf((String) value); } @@ -64,10 +62,10 @@ class JSON { if (value instanceof Integer) { return (Integer) value; } - else if (value instanceof Number) { + if (value instanceof Number) { return ((Number) value).intValue(); } - else if (value instanceof String) { + if (value instanceof String) { try { return (int) Double.parseDouble((String) value); } @@ -81,10 +79,10 @@ class JSON { if (value instanceof Long) { return (Long) value; } - else if (value instanceof Number) { + if (value instanceof Number) { return ((Number) value).longValue(); } - else if (value instanceof String) { + if (value instanceof String) { try { return (long) Double.parseDouble((String) value); } @@ -98,7 +96,7 @@ class JSON { if (value instanceof String) { return (String) value; } - else if (value != null) { + if (value != null) { return String.valueOf(value); } return null; @@ -109,11 +107,9 @@ class JSON { if (actual == null) { throw new JSONException("Value at " + indexOrName + " is null."); } - else { - throw new JSONException("Value " + actual + " at " + indexOrName - + " of type " + actual.getClass().getName() - + " cannot be converted to " + requiredType); - } + throw new JSONException("Value " + actual + " at " + indexOrName + " of type " + + actual.getClass().getName() + " cannot be converted to " + + requiredType); } public static JSONException typeMismatch(Object actual, String requiredType) @@ -121,10 +117,9 @@ class JSON { if (actual == null) { throw new JSONException("Value is null."); } - else { - throw new JSONException("Value " + actual - + " of type " + actual.getClass().getName() - + " cannot be converted to " + requiredType); - } + throw new JSONException( + "Value " + actual + " of type " + actual.getClass().getName() + + " cannot be converted to " + requiredType); } + } diff --git a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSONArray.java b/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONArray.java similarity index 78% rename from spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSONArray.java rename to spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONArray.java index 0a05fdda0b..6773e44070 100644 --- a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSONArray.java +++ b/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONArray.java @@ -25,26 +25,24 @@ import java.util.List; // Note: this class was written without inspecting the non-free org.json sourcecode. /** - * A dense indexed sequence of values. Values may be any mix of - * {@link JSONObject JSONObjects}, other {@link JSONArray JSONArrays}, Strings, - * Booleans, Integers, Longs, Doubles, {@code null} or {@link JSONObject#NULL}. - * Values may not be {@link Double#isNaN() NaNs}, {@link Double#isInfinite() - * infinities}, or of any type not listed here. - * - *

{@code JSONArray} has the same type coercion behavior and - * optional/mandatory accessors as {@link JSONObject}. See that class' - * documentation for details. - * - *

Warning: this class represents null in two incompatible - * ways: the standard Java {@code null} reference, and the sentinel value {@link - * JSONObject#NULL}. In particular, {@code get} fails if the requested index - * holds the null reference, but succeeds if it holds {@code JSONObject.NULL}. - * - *

Instances of this class are not thread safe. Although this class is - * nonfinal, it was not designed for inheritance and should not be subclassed. - * In particular, self-use by overridable methods is not specified. See - * Effective Java Item 17, "Design and Document or inheritance or else - * prohibit it" for further information. + * A dense indexed sequence of values. Values may be any mix of {@link JSONObject + * JSONObjects}, other {@link JSONArray JSONArrays}, Strings, Booleans, Integers, Longs, + * Doubles, {@code null} or {@link JSONObject#NULL}. Values may not be + * {@link Double#isNaN() NaNs}, {@link Double#isInfinite() infinities}, or of any type not + * listed here. + *

+ * {@code JSONArray} has the same type coercion behavior and optional/mandatory accessors + * as {@link JSONObject}. See that class' documentation for details. + *

+ * Warning: this class represents null in two incompatible ways: the + * standard Java {@code null} reference, and the sentinel value {@link JSONObject#NULL}. + * In particular, {@code get} fails if the requested index holds the null reference, but + * succeeds if it holds {@code JSONObject.NULL}. + *

+ * Instances of this class are not thread safe. Although this class is nonfinal, it was + * not designed for inheritance and should not be subclassed. In particular, self-use by + * overridable methods is not specified. See Effective Java Item 17, "Design and + * Document or inheritance or else prohibit it" for further information. */ public class JSONArray { @@ -58,37 +56,31 @@ public class JSONArray { } /** - * Creates a new {@code JSONArray} by copying all values from the given - * collection. - * - * @param copyFrom a collection whose values are of supported types. - * Unsupported values are not permitted and will yield an array in an - * inconsistent state. + * Creates a new {@code JSONArray} by copying all values from the given collection. + * @param copyFrom a collection whose values are of supported types. Unsupported + * values are not permitted and will yield an array in an inconsistent state. */ /* Accept a raw type for API compatibility */ + @SuppressWarnings("rawtypes") public JSONArray(Collection copyFrom) { this(); if (copyFrom != null) { - for (Iterator it = copyFrom.iterator(); it.hasNext(); ) { + for (Iterator it = copyFrom.iterator(); it.hasNext();) { put(JSONObject.wrap(it.next())); } } } /** - * Creates a new {@code JSONArray} with values from the next array in the - * tokener. - * - * @param readFrom a tokener whose nextValue() method will yield a - * {@code JSONArray}. - * @throws JSONException if the parse fails or doesn't yield a - * {@code JSONArray}. + * Creates a new {@code JSONArray} with values from the next array in the tokener. + * @param readFrom a tokener whose nextValue() method will yield a {@code JSONArray}. + * @throws JSONException if the parse fails or doesn't yield a {@code JSONArray}. * @throws JSONException if processing of json failed */ public JSONArray(JSONTokener readFrom) throws JSONException { /* - * Getting the parser to populate this could get tricky. Instead, just - * parse to temporary JSONArray and then steal the data from that. + * Getting the parser to populate this could get tricky. Instead, just parse to + * temporary JSONArray and then steal the data from that. */ Object object = readFrom.nextValue(); if (object instanceof JSONArray) { @@ -101,7 +93,6 @@ public class JSONArray { /** * Creates a new {@code JSONArray} with values from the JSON string. - * * @param json a JSON-encoded string containing an array. * @throws JSONException if the parse fails or doesn't yield a {@code * JSONArray}. @@ -149,7 +140,7 @@ public class JSONArray { * Appends {@code value} to the end of this array. * * @param value a finite value. May not be {@link Double#isNaN() NaNs} or - * {@link Double#isInfinite() infinities}. + * {@link Double#isInfinite() infinities}. * @return this array. * @throws JSONException if processing of json failed */ @@ -181,11 +172,10 @@ public class JSONArray { /** * Appends {@code value} to the end of this array. * - * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, - * Integer, Long, Double, {@link JSONObject#NULL}, or {@code null}. May - * not be {@link Double#isNaN() NaNs} or {@link Double#isInfinite() - * infinities}. Unsupported values are not permitted and will cause the - * array to be in an inconsistent state. + * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, Integer, + * Long, Double, {@link JSONObject#NULL}, or {@code null}. May not be + * {@link Double#isNaN() NaNs} or {@link Double#isInfinite() infinities}. Unsupported + * values are not permitted and will cause the array to be in an inconsistent state. * @return this array. */ public JSONArray put(Object value) { @@ -194,8 +184,8 @@ public class JSONArray { } /** - * Sets the value at {@code index} to {@code value}, null padding this array - * to the required length if necessary. If a value already exists at {@code + * Sets the value at {@code index} to {@code value}, null padding this array to the + * required length if necessary. If a value already exists at {@code * index}, it will be replaced. * @param index the index to set the value to * @param value the value @@ -207,12 +197,12 @@ public class JSONArray { } /** - * Sets the value at {@code index} to {@code value}, null padding this array - * to the required length if necessary. If a value already exists at {@code + * Sets the value at {@code index} to {@code value}, null padding this array to the + * required length if necessary. If a value already exists at {@code * index}, it will be replaced. * @param index the index to set the value to * @param value a finite value. May not be {@link Double#isNaN() NaNs} or - * {@link Double#isInfinite() infinities}. + * {@link Double#isInfinite() infinities}. * @return this array. * @throws JSONException if processing of json failed */ @@ -221,8 +211,8 @@ public class JSONArray { } /** - * Sets the value at {@code index} to {@code value}, null padding this array - * to the required length if necessary. If a value already exists at {@code + * Sets the value at {@code index} to {@code value}, null padding this array to the + * required length if necessary. If a value already exists at {@code * index}, it will be replaced. * @param index the index to set the value to * @param value the value @@ -234,8 +224,8 @@ public class JSONArray { } /** - * Sets the value at {@code index} to {@code value}, null padding this array - * to the required length if necessary. If a value already exists at {@code + * Sets the value at {@code index} to {@code value}, null padding this array to the + * required length if necessary. If a value already exists at {@code * index}, it will be replaced. * @param index the index to set the value to * @param value the value @@ -247,20 +237,20 @@ public class JSONArray { } /** - * Sets the value at {@code index} to {@code value}, null padding this array - * to the required length if necessary. If a value already exists at {@code + * Sets the value at {@code index} to {@code value}, null padding this array to the + * required length if necessary. If a value already exists at {@code * index}, it will be replaced. * @param index the index to set the value to - * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, - * Integer, Long, Double, {@link JSONObject#NULL}, or {@code null}. May - * not be {@link Double#isNaN() NaNs} or {@link Double#isInfinite() - * infinities}. + * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, Integer, + * Long, Double, {@link JSONObject#NULL}, or {@code null}. May not be + * {@link Double#isNaN() NaNs} or {@link Double#isInfinite() infinities}. * @return this array. * @throws JSONException if processing of json failed */ public JSONArray put(int index, Object value) throws JSONException { if (value instanceof Number) { - // deviate from the original by checking all Numbers, not just floats & doubles + // deviate from the original by checking all Numbers, not just floats & + // doubles JSON.checkDouble(((Number) value).doubleValue()); } while (this.values.size() <= index) { @@ -271,8 +261,8 @@ public class JSONArray { } /** - * Returns true if this array has no value at {@code index}, or if its value - * is the {@code null} reference or {@link JSONObject#NULL}. + * Returns true if this array has no value at {@code index}, or if its value is the + * {@code null} reference or {@link JSONObject#NULL}. * @param index the index to set the value to * @return true if this array has no value at {@code index} */ @@ -285,9 +275,9 @@ public class JSONArray { * Returns the value at {@code index}. * @param index the index to get the value from * @return the value at {@code index}. - * @throws JSONException if this array has no value at {@code index}, or if - * that value is the {@code null} reference. This method returns - * normally if the value is {@code JSONObject#NULL}. + * @throws JSONException if this array has no value at {@code index}, or if that value + * is the {@code null} reference. This method returns normally if the value is + * {@code JSONObject#NULL}. */ public Object get(int index) throws JSONException { try { @@ -298,13 +288,14 @@ public class JSONArray { return value; } catch (IndexOutOfBoundsException e) { - throw new JSONException("Index " + index + " out of range [0.." + this.values.size() + ")"); + throw new JSONException( + "Index " + index + " out of range [0.." + this.values.size() + ")"); } } /** - * Returns the value at {@code index}, or null if the array has no value - * at {@code index}. + * Returns the value at {@code index}, or null if the array has no value at + * {@code index}. * @param index the index to get the value from * @return the value at {@code index} or {@code null} */ @@ -329,12 +320,12 @@ public class JSONArray { } /** - * Returns the value at {@code index} if it exists and is a boolean or can - * be coerced to a boolean. + * Returns the value at {@code index} if it exists and is a boolean or can be coerced + * to a boolean. * @param index the index to get the value from * @return the value at {@code index} - * @throws JSONException if the value at {@code index} doesn't exist or - * cannot be coerced to a boolean. + * @throws JSONException if the value at {@code index} doesn't exist or cannot be + * coerced to a boolean. */ public boolean getBoolean(int index) throws JSONException { Object object = get(index); @@ -346,8 +337,8 @@ public class JSONArray { } /** - * Returns the value at {@code index} if it exists and is a boolean or can - * be coerced to a boolean. Returns false otherwise. + * Returns the value at {@code index} if it exists and is a boolean or can be coerced + * to a boolean. Returns false otherwise. * @param index the index to get the value from * @return the {@code value} or {@code false} */ @@ -356,8 +347,8 @@ public class JSONArray { } /** - * Returns the value at {@code index} if it exists and is a boolean or can - * be coerced to a boolean. Returns {@code fallback} otherwise. + * Returns the value at {@code index} if it exists and is a boolean or can be coerced + * to a boolean. Returns {@code fallback} otherwise. * @param index the index to get the value from * @param fallback the fallback value * @return the value at {@code index} of {@code fallback} @@ -369,12 +360,12 @@ public class JSONArray { } /** - * Returns the value at {@code index} if it exists and is a double or can - * be coerced to a double. + * Returns the value at {@code index} if it exists and is a double or can be coerced + * to a double. * @param index the index to get the value from * @return the {@code value} - * @throws JSONException if the value at {@code index} doesn't exist or - * cannot be coerced to a double. + * @throws JSONException if the value at {@code index} doesn't exist or cannot be + * coerced to a double. */ public double getDouble(int index) throws JSONException { Object object = get(index); @@ -386,8 +377,8 @@ public class JSONArray { } /** - * Returns the value at {@code index} if it exists and is a double or can - * be coerced to a double. Returns {@code NaN} otherwise. + * Returns the value at {@code index} if it exists and is a double or can be coerced + * to a double. Returns {@code NaN} otherwise. * @param index the index to get the value from * @return the {@code value} or {@code NaN} */ @@ -396,8 +387,8 @@ public class JSONArray { } /** - * Returns the value at {@code index} if it exists and is a double or can - * be coerced to a double. Returns {@code fallback} otherwise. + * Returns the value at {@code index} if it exists and is a double or can be coerced + * to a double. Returns {@code fallback} otherwise. * @param index the index to get the value from * @param fallback the fallback value * @return the value at {@code index} of {@code fallback} @@ -409,12 +400,12 @@ public class JSONArray { } /** - * Returns the value at {@code index} if it exists and is an int or - * can be coerced to an int. + * Returns the value at {@code index} if it exists and is an int or can be coerced to + * an int. * @param index the index to get the value from * @return the {@code value} - * @throws JSONException if the value at {@code index} doesn't exist or - * cannot be coerced to a int. + * @throws JSONException if the value at {@code index} doesn't exist or cannot be + * coerced to a int. */ public int getInt(int index) throws JSONException { Object object = get(index); @@ -426,8 +417,8 @@ public class JSONArray { } /** - * Returns the value at {@code index} if it exists and is an int or - * can be coerced to an int. Returns 0 otherwise. + * Returns the value at {@code index} if it exists and is an int or can be coerced to + * an int. Returns 0 otherwise. * @param index the index to get the value from * @return the {@code value} or {@code 0} */ @@ -436,8 +427,8 @@ public class JSONArray { } /** - * Returns the value at {@code index} if it exists and is an int or - * can be coerced to an int. Returns {@code fallback} otherwise. + * Returns the value at {@code index} if it exists and is an int or can be coerced to + * an int. Returns {@code fallback} otherwise. * @param index the index to get the value from * @param fallback the fallback value * @return the value at {@code index} of {@code fallback} @@ -449,13 +440,13 @@ public class JSONArray { } /** - * Returns the value at {@code index} if it exists and is a long or - * can be coerced to a long. + * Returns the value at {@code index} if it exists and is a long or can be coerced to + * a long. * @param index the index to get the value from * @return the {@code value} * - * @throws JSONException if the value at {@code index} doesn't exist or - * cannot be coerced to a long. + * @throws JSONException if the value at {@code index} doesn't exist or cannot be + * coerced to a long. */ public long getLong(int index) throws JSONException { Object object = get(index); @@ -467,8 +458,8 @@ public class JSONArray { } /** - * Returns the value at {@code index} if it exists and is a long or - * can be coerced to a long. Returns 0 otherwise. + * Returns the value at {@code index} if it exists and is a long or can be coerced to + * a long. Returns 0 otherwise. * @param index the index to get the value from * @return the {@code value} or {@code 0} */ @@ -477,8 +468,8 @@ public class JSONArray { } /** - * Returns the value at {@code index} if it exists and is a long or - * can be coerced to a long. Returns {@code fallback} otherwise. + * Returns the value at {@code index} if it exists and is a long or can be coerced to + * a long. Returns {@code fallback} otherwise. * @param index the index to get the value from * @param fallback the fallback value * @return the value at {@code index} of {@code fallback} @@ -490,8 +481,7 @@ public class JSONArray { } /** - * Returns the value at {@code index} if it exists, coercing it if - * necessary. + * Returns the value at {@code index} if it exists, coercing it if necessary. * @param index the index to get the value from * @return the {@code value} * @throws JSONException if no such value exists. @@ -506,8 +496,8 @@ public class JSONArray { } /** - * Returns the value at {@code index} if it exists, coercing it if - * necessary. Returns the empty string if no such value exists. + * Returns the value at {@code index} if it exists, coercing it if necessary. Returns + * the empty string if no such value exists. * @param index the index to get the value from * @return the {@code value} or an empty string */ @@ -516,8 +506,8 @@ public class JSONArray { } /** - * Returns the value at {@code index} if it exists, coercing it if - * necessary. Returns {@code fallback} if no such value exists. + * Returns the value at {@code index} if it exists, coercing it if necessary. Returns + * {@code fallback} if no such value exists. * @param index the index to get the value from * @param fallback the fallback value * @return the value at {@code index} of {@code fallback} @@ -587,11 +577,10 @@ public class JSONArray { } /** - * Returns a new object whose values are the values in this array, and whose - * names are the values in {@code names}. Names and values are paired up by - * index from 0 through to the shorter array's length. Names that are not - * strings will be coerced to strings. This method returns null if either - * array is empty. + * Returns a new object whose values are the values in this array, and whose names are + * the values in {@code names}. Names and values are paired up by index from 0 through + * to the shorter array's length. Names that are not strings will be coerced to + * strings. This method returns null if either array is empty. * @param names the property names * @return a json object * @throws JSONException if processing of json failed @@ -611,10 +600,9 @@ public class JSONArray { /** * Returns a new string by alternating this array's values with {@code - * separator}. This array's string values are quoted and have their special - * characters escaped. For example, the array containing the strings '12" - * pizza', 'taco' and 'soda' joined on '+' returns this: - *

"12\" pizza"+"taco"+"soda"
+ * separator}. This array's string values are quoted and have their special characters + * escaped. For example, the array containing the strings '12" pizza', 'taco' and + * 'soda' joined on '+' returns this:
"12\" pizza"+"taco"+"soda"
* @param separator the separator to use * @return the joined value * @throws JSONException if processing of json failed @@ -633,8 +621,7 @@ public class JSONArray { } /** - * Encodes this array as a compact JSON string, such as: - *
[94043,90210]
+ * Encodes this array as a compact JSON string, such as:
[94043,90210]
* @return a compact JSON string representation of this array */ @Override @@ -650,16 +637,13 @@ public class JSONArray { } /** - * Encodes this array as a human readable JSON string for debugging, such - * as: - *
+	 * Encodes this array as a human readable JSON string for debugging, such as: 
 	 * [
 	 *     94043,
 	 *     90210
 	 * ]
* - * @param indentSpaces the number of spaces to indent for each level of - * nesting. + * @param indentSpaces the number of spaces to indent for each level of nesting. * @return a human readable JSON string of this array * @throws JSONException if processing of json failed */ @@ -687,4 +671,5 @@ public class JSONArray { // diverge from the original, which doesn't implement hashCode return this.values.hashCode(); } + } diff --git a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSONException.java b/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONException.java similarity index 67% rename from spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSONException.java rename to spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONException.java index d9806b6505..b90362dae9 100644 --- a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSONException.java +++ b/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONException.java @@ -21,18 +21,17 @@ package org.springframework.boot.configurationprocessor.json; /** * Thrown to indicate a problem with the JSON API. Such problems include: * - * - *

Although this is a checked exception, it is rarely recoverable. Most - * callers should simply wrap this exception in an unchecked exception and - * rethrow: - *

  public JSONArray toJSONObject() {
+ * 

+ * Although this is a checked exception, it is rarely recoverable. Most callers should + * simply wrap this exception in an unchecked exception and rethrow:

+ *     public JSONArray toJSONObject() {
  *     try {
  *         JSONObject result = new JSONObject();
  *         ...
@@ -46,4 +45,5 @@ public class JSONException extends Exception {
 	public JSONException(String s) {
 		super(s);
 	}
+
 }
diff --git a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSONObject.java b/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONObject.java
similarity index 70%
rename from spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSONObject.java
rename to spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONObject.java
index ed3f9e8b7d..c3c816e530 100644
--- a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSONObject.java
+++ b/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONObject.java
@@ -25,56 +25,52 @@ import java.util.Map;
 // Note: this class was written without inspecting the non-free org.json sourcecode.
 
 /**
- * A modifiable set of name/value mappings. Names are unique, non-null strings.
- * Values may be any mix of {@link JSONObject JSONObjects}, {@link JSONArray
- * JSONArrays}, Strings, Booleans, Integers, Longs, Doubles or {@link #NULL}.
- * Values may not be {@code null}, {@link Double#isNaN() NaNs}, {@link
- * Double#isInfinite() infinities}, or of any type not listed here.
- *
- * 

This class can coerce values to another type when requested. + * A modifiable set of name/value mappings. Names are unique, non-null strings. Values may + * be any mix of {@link JSONObject JSONObjects}, {@link JSONArray JSONArrays}, Strings, + * Booleans, Integers, Longs, Doubles or {@link #NULL}. Values may not be {@code null}, + * {@link Double#isNaN() NaNs}, {@link Double#isInfinite() infinities}, or of any type not + * listed here. + *

+ * This class can coerce values to another type when requested. *

- * - *

This class can look up both mandatory and optional values: + *

+ * This class can look up both mandatory and optional values: *

    - *
  • Use getType() to retrieve a mandatory value. This - * fails with a {@code JSONException} if the requested name has no value - * or if the value cannot be coerced to the requested type. - *
  • Use optType() to retrieve an optional value. This - * returns a system- or user-supplied default if the requested name has no - * value or if the value cannot be coerced to the requested type. + *
  • Use getType() to retrieve a mandatory value. This fails with a + * {@code JSONException} if the requested name has no value or if the value cannot be + * coerced to the requested type. + *
  • Use optType() to retrieve an optional value. This returns a + * system- or user-supplied default if the requested name has no value or if the value + * cannot be coerced to the requested type. *
- * - *

Warning: this class represents null in two incompatible - * ways: the standard Java {@code null} reference, and the sentinel value {@link - * JSONObject#NULL}. In particular, calling {@code put(name, null)} removes the - * named entry from the object but {@code put(name, JSONObject.NULL)} stores an - * entry whose value is {@code JSONObject.NULL}. - * - *

Instances of this class are not thread safe. Although this class is - * nonfinal, it was not designed for inheritance and should not be subclassed. - * In particular, self-use by overrideable methods is not specified. See - * Effective Java Item 17, "Design and Document or inheritance or else - * prohibit it" for further information. + *

+ * Warning: this class represents null in two incompatible ways: the + * standard Java {@code null} reference, and the sentinel value {@link JSONObject#NULL}. + * In particular, calling {@code put(name, null)} removes the named entry from the object + * but {@code put(name, JSONObject.NULL)} stores an entry whose value is + * {@code JSONObject.NULL}. + *

+ * Instances of this class are not thread safe. Although this class is nonfinal, it was + * not designed for inheritance and should not be subclassed. In particular, self-use by + * overrideable methods is not specified. See Effective Java Item 17, "Design and + * Document or inheritance or else prohibit it" for further information. */ public class JSONObject { @@ -84,27 +80,29 @@ public class JSONObject { * A sentinel value used to explicitly define a name with no value. Unlike * {@code null}, names with this value: *

    - *
  • show up in the {@link #names} array - *
  • show up in the {@link #keys} iterator - *
  • return {@code true} for {@link #has(String)} - *
  • do not throw on {@link #get(String)} - *
  • are included in the encoded JSON string. + *
  • show up in the {@link #names} array + *
  • show up in the {@link #keys} iterator + *
  • return {@code true} for {@link #has(String)} + *
  • do not throw on {@link #get(String)} + *
  • are included in the encoded JSON string. *
- * - *

This value violates the general contract of {@link Object#equals} by - * returning true when compared to {@code null}. Its {@link #toString} - * method returns "null". + *

+ * This value violates the general contract of {@link Object#equals} by returning true + * when compared to {@code null}. Its {@link #toString} method returns "null". */ public static final Object NULL = new Object() { + @Override public boolean equals(Object o) { - return o == this || o == null; // API specifies this broken equals implementation + return o == this || o == null; // API specifies this broken equals + // implementation } @Override public String toString() { return "null"; } + }; private final Map nameValuePairs; @@ -117,21 +115,22 @@ public class JSONObject { } /** - * Creates a new {@code JSONObject} by copying all name/value mappings from - * the given map. + * Creates a new {@code JSONObject} by copying all name/value mappings from the given + * map. * - * @param copyFrom a map whose keys are of type {@link String} and whose - * values are of supported types. + * @param copyFrom a map whose keys are of type {@link String} and whose values are of + * supported types. * @throws NullPointerException if any of the map's keys are null. */ /* (accept a raw type for API compatibility) */ + @SuppressWarnings("rawtypes") public JSONObject(Map copyFrom) { this(); - Map contentsTyped = (Map) copyFrom; + Map contentsTyped = copyFrom; for (Map.Entry entry : contentsTyped.entrySet()) { /* - * Deviate from the original by checking that keys are non-null and - * of the proper type. (We still defer validating the values). + * Deviate from the original by checking that keys are non-null and of the + * proper type. (We still defer validating the values). */ String key = (String) entry.getKey(); if (key == null) { @@ -142,18 +141,15 @@ public class JSONObject { } /** - * Creates a new {@code JSONObject} with name/value mappings from the next - * object in the tokener. - * - * @param readFrom a tokener whose nextValue() method will yield a - * {@code JSONObject}. - * @throws JSONException if the parse fails or doesn't yield a - * {@code JSONObject}. + * Creates a new {@code JSONObject} with name/value mappings from the next object in + * the tokener. + * @param readFrom a tokener whose nextValue() method will yield a {@code JSONObject}. + * @throws JSONException if the parse fails or doesn't yield a {@code JSONObject}. */ public JSONObject(JSONTokener readFrom) throws JSONException { /* - * Getting the parser to populate this could get tricky. Instead, just - * parse to temporary JSONObject and then steal the data from that. + * Getting the parser to populate this could get tricky. Instead, just parse to + * temporary JSONObject and then steal the data from that. */ Object object = readFrom.nextValue(); if (object instanceof JSONObject) { @@ -165,9 +161,7 @@ public class JSONObject { } /** - * Creates a new {@code JSONObject} with name/value mappings from the JSON - * string. - * + * Creates a new {@code JSONObject} with name/value mappings from the JSON string. * @param json a JSON-encoded string containing an object. * @throws JSONException if the parse fails or doesn't yield a {@code * JSONObject}. @@ -177,9 +171,8 @@ public class JSONObject { } /** - * Creates a new {@code JSONObject} by copying mappings for the listed names - * from the given object. Names that aren't present in {@code copyFrom} will - * be skipped. + * Creates a new {@code JSONObject} by copying mappings for the listed names from the + * given object. Names that aren't present in {@code copyFrom} will be skipped. * @param copyFrom the source * @param names the property names * @throws JSONException if an error occurs @@ -203,8 +196,8 @@ public class JSONObject { } /** - * Maps {@code name} to {@code value}, clobbering any existing name/value - * mapping with the same name. + * Maps {@code name} to {@code value}, clobbering any existing name/value mapping with + * the same name. * @param name the name of the property * @param value the value of the property * @return this object. @@ -216,12 +209,11 @@ public class JSONObject { } /** - * Maps {@code name} to {@code value}, clobbering any existing name/value - * mapping with the same name. - * + * Maps {@code name} to {@code value}, clobbering any existing name/value mapping with + * the same name. * @param name the name of the property * @param value a finite value. May not be {@link Double#isNaN() NaNs} or - * {@link Double#isInfinite() infinities}. + * {@link Double#isInfinite() infinities}. * @return this object. * @throws JSONException if an error occurs */ @@ -231,9 +223,8 @@ public class JSONObject { } /** - * Maps {@code name} to {@code value}, clobbering any existing name/value - * mapping with the same name. - * + * Maps {@code name} to {@code value}, clobbering any existing name/value mapping with + * the same name. * @param name the name of the property * @param value the value of the property * @return this object. @@ -245,9 +236,8 @@ public class JSONObject { } /** - * Maps {@code name} to {@code value}, clobbering any existing name/value - * mapping with the same name. - * + * Maps {@code name} to {@code value}, clobbering any existing name/value mapping with + * the same name. * @param name the name of the property * @param value the value of the property * @return this object. @@ -259,15 +249,13 @@ public class JSONObject { } /** - * Maps {@code name} to {@code value}, clobbering any existing name/value - * mapping with the same name. If the value is {@code null}, any existing - * mapping for {@code name} is removed. - * + * Maps {@code name} to {@code value}, clobbering any existing name/value mapping with + * the same name. If the value is {@code null}, any existing mapping for {@code name} + * is removed. * @param name the name of the property - * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, - * Integer, Long, Double, {@link #NULL}, or {@code null}. May not be - * {@link Double#isNaN() NaNs} or {@link Double#isInfinite() - * infinities}. + * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, Integer, + * Long, Double, {@link #NULL}, or {@code null}. May not be {@link Double#isNaN() + * NaNs} or {@link Double#isInfinite() infinities}. * @return this object. * @throws JSONException if an error occurs */ @@ -277,7 +265,8 @@ public class JSONObject { return this; } if (value instanceof Number) { - // deviate from the original by checking all Numbers, not just floats & doubles + // deviate from the original by checking all Numbers, not just floats & + // doubles JSON.checkDouble(((Number) value).doubleValue()); } this.nameValuePairs.put(checkName(name), value); @@ -285,8 +274,8 @@ public class JSONObject { } /** - * Equivalent to {@code put(name, value)} when both parameters are non-null; - * does nothing otherwise. + * Equivalent to {@code put(name, value)} when both parameters are non-null; does + * nothing otherwise. * @param name the name of the property * @param value the value of the property * @return this object. @@ -300,17 +289,15 @@ public class JSONObject { } /** - * Appends {@code value} to the array already mapped to {@code name}. If - * this object has no mapping for {@code name}, this inserts a new mapping. - * If the mapping exists but its value is not an array, the existing - * and new values are inserted in order into a new array which is itself - * mapped to {@code name}. In aggregate, this allows values to be added to a - * mapping one at a time. - * + * Appends {@code value} to the array already mapped to {@code name}. If this object + * has no mapping for {@code name}, this inserts a new mapping. If the mapping exists + * but its value is not an array, the existing and new values are inserted in order + * into a new array which is itself mapped to {@code name}. In aggregate, this allows + * values to be added to a mapping one at a time. * @param name the name of the property - * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, - * Integer, Long, Double, {@link #NULL} or null. May not be {@link - * Double#isNaN() NaNs} or {@link Double#isInfinite() infinities}. + * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, Integer, + * Long, Double, {@link #NULL} or null. May not be {@link Double#isNaN() NaNs} or + * {@link Double#isInfinite() infinities}. * @return this object. * @throws JSONException if an error occurs */ @@ -349,16 +336,16 @@ public class JSONObject { * Removes the named mapping if it exists; does nothing otherwise. * * @param name the name of the property - * @return the value previously mapped by {@code name}, or null if there was - * no such mapping. + * @return the value previously mapped by {@code name}, or null if there was no such + * mapping. */ public Object remove(String name) { return this.nameValuePairs.remove(name); } /** - * Returns true if this object has no mapping for {@code name} or if it has - * a mapping whose value is {@link #NULL}. + * Returns true if this object has no mapping for {@code name} or if it has a mapping + * whose value is {@link #NULL}. * @param name the name of the property * @return true if this object has no mapping for {@code name} */ @@ -368,8 +355,8 @@ public class JSONObject { } /** - * Returns true if this object has a mapping for {@code name}. The mapping - * may be {@link #NULL}. + * Returns true if this object has a mapping for {@code name}. The mapping may be + * {@link #NULL}. * @param name the name of the property * @return true if this object has a mapping for {@code name} */ @@ -392,8 +379,7 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name}, or null if no such mapping - * exists. + * Returns the value mapped by {@code name}, or null if no such mapping exists. * @param name the name of the property * @return the value or {@code null} */ @@ -402,13 +388,12 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name} if it exists and is a boolean or - * can be coerced to a boolean. - * + * Returns the value mapped by {@code name} if it exists and is a boolean or can be + * coerced to a boolean. * @param name the name of the property * @return the value - * @throws JSONException if the mapping doesn't exist or cannot be coerced - * to a boolean. + * @throws JSONException if the mapping doesn't exist or cannot be coerced to a + * boolean. */ public boolean getBoolean(String name) throws JSONException { Object object = get(name); @@ -420,8 +405,8 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name} if it exists and is a boolean or - * can be coerced to a boolean. Returns false otherwise. + * Returns the value mapped by {@code name} if it exists and is a boolean or can be + * coerced to a boolean. Returns false otherwise. * @param name the name of the property * @return the value or {@code null} */ @@ -430,8 +415,8 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name} if it exists and is a boolean or - * can be coerced to a boolean. Returns {@code fallback} otherwise. + * Returns the value mapped by {@code name} if it exists and is a boolean or can be + * coerced to a boolean. Returns {@code fallback} otherwise. * @param name the name of the property * @param fallback a fallback value * @return the value or {@code fallback} @@ -443,13 +428,13 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name} if it exists and is a double or - * can be coerced to a double. + * Returns the value mapped by {@code name} if it exists and is a double or can be + * coerced to a double. * * @param name the name of the property * @return the value - * @throws JSONException if the mapping doesn't exist or cannot be coerced - * to a double. + * @throws JSONException if the mapping doesn't exist or cannot be coerced to a + * double. */ public double getDouble(String name) throws JSONException { Object object = get(name); @@ -461,8 +446,8 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name} if it exists and is a double or - * can be coerced to a double. Returns {@code NaN} otherwise. + * Returns the value mapped by {@code name} if it exists and is a double or can be + * coerced to a double. Returns {@code NaN} otherwise. * @param name the name of the property * @return the value or {@code NaN} */ @@ -471,8 +456,8 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name} if it exists and is a double or - * can be coerced to a double. Returns {@code fallback} otherwise. + * Returns the value mapped by {@code name} if it exists and is a double or can be + * coerced to a double. Returns {@code fallback} otherwise. * @param name the name of the property * @param fallback a fallback value * @return the value or {@code fallback} @@ -484,12 +469,11 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name} if it exists and is an int or - * can be coerced to an int. + * Returns the value mapped by {@code name} if it exists and is an int or can be + * coerced to an int. * @param name the name of the property * @return the value - * @throws JSONException if the mapping doesn't exist or cannot be coerced - * to an int. + * @throws JSONException if the mapping doesn't exist or cannot be coerced to an int. */ public int getInt(String name) throws JSONException { Object object = get(name); @@ -501,8 +485,8 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name} if it exists and is an int or - * can be coerced to an int. Returns 0 otherwise. + * Returns the value mapped by {@code name} if it exists and is an int or can be + * coerced to an int. Returns 0 otherwise. * @param name the name of the property * @return the value of {@code 0} */ @@ -511,8 +495,8 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name} if it exists and is an int or - * can be coerced to an int. Returns {@code fallback} otherwise. + * Returns the value mapped by {@code name} if it exists and is an int or can be + * coerced to an int. Returns {@code fallback} otherwise. * @param name the name of the property * @param fallback a fallback value * @return the value or {@code fallback} @@ -524,14 +508,12 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name} if it exists and is a long or - * can be coerced to a long. Note that JSON represents numbers as doubles, - * so this is lossy; use strings to transfer numbers via JSON. - * + * Returns the value mapped by {@code name} if it exists and is a long or can be + * coerced to a long. Note that JSON represents numbers as doubles, so this is + * lossy; use strings to transfer numbers via JSON. * @param name the name of the property * @return the value - * @throws JSONException if the mapping doesn't exist or cannot be coerced - * to a long. + * @throws JSONException if the mapping doesn't exist or cannot be coerced to a long. */ public long getLong(String name) throws JSONException { Object object = get(name); @@ -543,9 +525,10 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name} if it exists and is a long or - * can be coerced to a long. Returns 0 otherwise. Note that JSON represents numbers as doubles, - * so this is lossy; use strings to transfer numbers via JSON. + * Returns the value mapped by {@code name} if it exists and is a long or can be + * coerced to a long. Returns 0 otherwise. Note that JSON represents numbers as + * doubles, so this is lossy; use strings to transfer numbers via + * JSON. * @param name the name of the property * @return the value or {@code 0L} */ @@ -554,8 +537,8 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name} if it exists and is a long or - * can be coerced to a long. Returns {@code fallback} otherwise. Note that JSON represents + * Returns the value mapped by {@code name} if it exists and is a long or can be + * coerced to a long. Returns {@code fallback} otherwise. Note that JSON represents * numbers as doubles, so this is lossy; use strings to transfer * numbers via JSON. * @param name the name of the property @@ -569,8 +552,7 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name} if it exists, coercing it if - * necessary. + * Returns the value mapped by {@code name} if it exists, coercing it if necessary. * @param name the name of the property * @return the value * @throws JSONException if no such mapping exists. @@ -585,8 +567,8 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name} if it exists, coercing it if - * necessary. Returns the empty string if no such mapping exists. + * Returns the value mapped by {@code name} if it exists, coercing it if necessary. + * Returns the empty string if no such mapping exists. * @param name the name of the property * @return the value or an empty string */ @@ -595,8 +577,8 @@ public class JSONObject { } /** - * Returns the value mapped by {@code name} if it exists, coercing it if - * necessary. Returns {@code fallback} if no such mapping exists. + * Returns the value mapped by {@code name} if it exists, coercing it if necessary. + * Returns {@code fallback} if no such mapping exists. * @param name the name of the property * @param fallback a fallback value * @return the value or {@code fallback} @@ -666,9 +648,9 @@ public class JSONObject { } /** - * Returns an array with the values corresponding to {@code names}. The - * array contains null for names that aren't mapped. This method returns - * null if {@code names} is either null or empty. + * Returns an array with the values corresponding to {@code names}. The array contains + * null for names that aren't mapped. This method returns null if {@code names} is + * either null or empty. * @param names the names of the properties * @return the array */ @@ -689,26 +671,26 @@ public class JSONObject { } /** - * Returns an iterator of the {@code String} names in this object. The - * returned iterator supports {@link Iterator#remove() remove}, which will - * remove the corresponding mapping from this object. If this object is - * modified after the iterator is returned, the iterator's behavior is - * undefined. The order of the keys is undefined. + * Returns an iterator of the {@code String} names in this object. The returned + * iterator supports {@link Iterator#remove() remove}, which will remove the + * corresponding mapping from this object. If this object is modified after the + * iterator is returned, the iterator's behavior is undefined. The order of the keys + * is undefined. * @return the keys */ /* Return a raw type for API compatibility */ + @SuppressWarnings("rawtypes") public Iterator keys() { return this.nameValuePairs.keySet().iterator(); } /** - * Returns an array containing the string names in this object. This method - * returns null if this object contains no mappings. + * Returns an array containing the string names in this object. This method returns + * null if this object contains no mappings. * @return the array */ public JSONArray names() { - return this.nameValuePairs.isEmpty() - ? null + return this.nameValuePairs.isEmpty() ? null : new JSONArray(new ArrayList(this.nameValuePairs.keySet())); } @@ -730,9 +712,7 @@ public class JSONObject { } /** - * Encodes this object as a human readable JSON string for debugging, such - * as: - *

+	 * Encodes this object as a human readable JSON string for debugging, such as: 
 	 * {
 	 *     "query": "Pizza",
 	 *     "locations": [
@@ -740,9 +720,7 @@ public class JSONObject {
 	 *         90210
 	 *     ]
 	 * }
- * - * @param indentSpaces the number of spaces to indent for each level of - * nesting. + * @param indentSpaces the number of spaces to indent for each level of nesting. * @return a string representation of the object. * @throws JSONException if an error occurs */ @@ -762,9 +740,8 @@ public class JSONObject { /** * Encodes the number as a JSON string. - * * @param number a finite value. May not be {@link Double#isNaN() NaNs} or - * {@link Double#isInfinite() infinities}. + * {@link Double#isInfinite() infinities}. * @return the encoded value * @throws JSONException if an error occurs */ @@ -782,7 +759,7 @@ public class JSONObject { } long longValue = number.longValue(); - if (doubleValue == (double) longValue) { + if (doubleValue == longValue) { return Long.toString(longValue); } @@ -790,11 +767,9 @@ public class JSONObject { } /** - * Encodes {@code data} as a JSON string. This applies quotes and any - * necessary character escaping. - * - * @param data the string to encode. Null will be interpreted as an empty - * string. + * Encodes {@code data} as a JSON string. This applies quotes and any necessary + * character escaping. + * @param data the string to encode. Null will be interpreted as an empty string. * @return the quoted value */ public static String quote(String data) { @@ -815,18 +790,19 @@ public class JSONObject { /** * Wraps the given object if necessary. - * - *

If the object is null or , returns {@link #NULL}. - * If the object is a {@code JSONArray} or {@code JSONObject}, no wrapping is necessary. - * If the object is {@code NULL}, no wrapping is necessary. - * If the object is an array or {@code Collection}, returns an equivalent {@code JSONArray}. - * If the object is a {@code Map}, returns an equivalent {@code JSONObject}. - * If the object is a primitive wrapper type or {@code String}, returns the object. - * Otherwise if the object is from a {@code java} package, returns the result of {@code toString}. - * If wrapping fails, returns null. + *

+ * If the object is null or , returns {@link #NULL}. If the object is a + * {@code JSONArray} or {@code JSONObject}, no wrapping is necessary. If the object is + * {@code NULL}, no wrapping is necessary. If the object is an array or + * {@code Collection}, returns an equivalent {@code JSONArray}. If the object is a + * {@code Map}, returns an equivalent {@code JSONObject}. If the object is a primitive + * wrapper type or {@code String}, returns the object. Otherwise if the object is from + * a {@code java} package, returns the result of {@code toString}. If wrapping fails, + * returns null. * @param o the object to wrap * @return the wrapped object */ + @SuppressWarnings("rawtypes") public static Object wrap(Object o) { if (o == null) { return NULL; @@ -847,15 +823,9 @@ public class JSONObject { if (o instanceof Map) { return new JSONObject((Map) o); } - if (o instanceof Boolean || - o instanceof Byte || - o instanceof Character || - o instanceof Double || - o instanceof Float || - o instanceof Integer || - o instanceof Long || - o instanceof Short || - o instanceof String) { + if (o instanceof Boolean || o instanceof Byte || o instanceof Character + || o instanceof Double || o instanceof Float || o instanceof Integer + || o instanceof Long || o instanceof Short || o instanceof String) { return o; } if (o.getClass().getPackage().getName().startsWith("java.")) { @@ -866,4 +836,5 @@ public class JSONObject { } return null; } + } diff --git a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSONStringer.java b/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONStringer.java similarity index 72% rename from spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSONStringer.java rename to spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONStringer.java index 7269ece1e8..69ccc6d8fb 100644 --- a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSONStringer.java +++ b/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONStringer.java @@ -23,80 +23,77 @@ import java.util.List; // Note: this class was written without inspecting the non-free org.json sourcecode. /** - * Implements {@link JSONObject#toString} and {@link JSONArray#toString}. Most - * application developers should use those methods directly and disregard this - * API. For example:

+ * Implements {@link JSONObject#toString} and {@link JSONArray#toString}. Most application
+ * developers should use those methods directly and disregard this API. For example:
  * JSONObject object = ...
  * String json = object.toString();
- * - *

Stringers only encode well-formed JSON strings. In particular: + *

+ * Stringers only encode well-formed JSON strings. In particular: *

    - *
  • The stringer must have exactly one top-level array or object. - *
  • Lexical scopes must be balanced: every call to {@link #array} must - * have a matching call to {@link #endArray} and every call to {@link - * #object} must have a matching call to {@link #endObject}. - *
  • Arrays may not contain keys (property names). - *
  • Objects must alternate keys (property names) and values. - *
  • Values are inserted with either literal {@link #value(Object) value} - * calls, or by nesting arrays or objects. + *
  • The stringer must have exactly one top-level array or object. + *
  • Lexical scopes must be balanced: every call to {@link #array} must have a matching + * call to {@link #endArray} and every call to {@link #object} must have a matching call + * to {@link #endObject}. + *
  • Arrays may not contain keys (property names). + *
  • Objects must alternate keys (property names) and values. + *
  • Values are inserted with either literal {@link #value(Object) value} calls, or by + * nesting arrays or objects. *
* Calls that would result in a malformed JSON string will fail with a * {@link JSONException}. - * - *

This class provides no facility for pretty-printing (ie. indenting) - * output. To encode indented output, use {@link JSONObject#toString(int)} or + *

+ * This class provides no facility for pretty-printing (ie. indenting) output. To encode + * indented output, use {@link JSONObject#toString(int)} or * {@link JSONArray#toString(int)}. - * - *

Some implementations of the API support at most 20 levels of nesting. - * Attempts to create more than 20 levels of nesting may fail with a {@link - * JSONException}. - * - *

Each stringer may be used to encode a single top level value. Instances of - * this class are not thread safe. Although this class is nonfinal, it was not - * designed for inheritance and should not be subclassed. In particular, - * self-use by overrideable methods is not specified. See Effective Java - * Item 17, "Design and Document or inheritance or else prohibit it" for further - * information. + *

+ * Some implementations of the API support at most 20 levels of nesting. Attempts to + * create more than 20 levels of nesting may fail with a {@link JSONException}. + *

+ * Each stringer may be used to encode a single top level value. Instances of this class + * are not thread safe. Although this class is nonfinal, it was not designed for + * inheritance and should not be subclassed. In particular, self-use by overrideable + * methods is not specified. See Effective Java Item 17, + * "Design and Document or inheritance or else prohibit it" for further information. */ public class JSONStringer { - /** The output data, containing at most one top-level array or object. */ + /** + * The output data, containing at most one top-level array or object. + */ final StringBuilder out = new StringBuilder(); /** - * Lexical scoping elements within this stringer, necessary to insert the - * appropriate separator characters (ie. commas and colons) and to detect - * nesting errors. + * Lexical scoping elements within this stringer, necessary to insert the appropriate + * separator characters (ie. commas and colons) and to detect nesting errors. */ enum Scope { /** - * An array with no elements requires no separators or newlines before - * it is closed. + * An array with no elements requires no separators or newlines before it is + * closed. */ EMPTY_ARRAY, /** - * A array with at least one value requires a comma and newline before - * the next element. + * A array with at least one value requires a comma and newline before the next + * element. */ NONEMPTY_ARRAY, /** - * An object with no keys or values requires no separators or newlines - * before it is closed. + * An object with no keys or values requires no separators or newlines before it + * is closed. */ EMPTY_OBJECT, /** - * An object whose most recent element is a key. The next element must - * be a value. + * An object whose most recent element is a key. The next element must be a value. */ DANGLING_KEY, /** - * An object with at least one name/value pair requires a comma and - * newline before the next element. + * An object with at least one name/value pair requires a comma and newline before + * the next element. */ NONEMPTY_OBJECT, @@ -104,18 +101,19 @@ public class JSONStringer { * A special bracketless array needed by JSONStringer.join() and * JSONObject.quote() only. Not used for JSON encoding. */ - NULL, + NULL + } /** - * Unlike the original implementation, this stack isn't limited to 20 - * levels of nesting. + * Unlike the original implementation, this stack isn't limited to 20 levels of + * nesting. */ private final List stack = new ArrayList(); /** - * A string containing a full set of spaces for a single level of - * indentation, or null for no pretty printing. + * A string containing a full set of spaces for a single level of indentation, or null + * for no pretty printing. */ private final String indent; @@ -130,9 +128,8 @@ public class JSONStringer { } /** - * Begins encoding a new array. Each call to this method must be paired with - * a call to {@link #endArray}. - * + * Begins encoding a new array. Each call to this method must be paired with a call to + * {@link #endArray}. * @return this stringer. * @throws JSONException if processing of json failed */ @@ -142,7 +139,6 @@ public class JSONStringer { /** * Ends encoding the current array. - * * @return this stringer. * @throws JSONException if processing of json failed */ @@ -151,9 +147,8 @@ public class JSONStringer { } /** - * Begins encoding a new object. Each call to this method must be paired - * with a call to {@link #endObject}. - * + * Begins encoding a new object. Each call to this method must be paired with a call + * to {@link #endObject}. * @return this stringer. * @throws JSONException if processing of json failed */ @@ -163,7 +158,6 @@ public class JSONStringer { /** * Ends encoding the current object. - * * @return this stringer. * @throws JSONException if processing of json failed */ @@ -172,8 +166,7 @@ public class JSONStringer { } /** - * Enters a new scope by appending any necessary whitespace and the given - * bracket. + * Enters a new scope by appending any necessary whitespace and the given bracket. * @param empty any necessary whitespace * @param openBracket the open bracket * @return this object @@ -190,14 +183,16 @@ public class JSONStringer { } /** - * Closes the current scope by appending any necessary whitespace and the - * given bracket. + * Closes the current scope by appending any necessary whitespace and the given + * bracket. * @param empty any necessary whitespace * @param nonempty the current scope * @param closeBracket the close bracket + * @return the JSON stringer * @throws JSONException if processing of json failed */ - JSONStringer close(Scope empty, Scope nonempty, String closeBracket) throws JSONException { + JSONStringer close(Scope empty, Scope nonempty, String closeBracket) + throws JSONException { Scope context = peek(); if (context != nonempty && context != empty) { throw new JSONException("Nesting problem"); @@ -233,10 +228,9 @@ public class JSONStringer { /** * Encodes {@code value}. - * - * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, - * Integer, Long, Double or null. May not be {@link Double#isNaN() NaNs} - * or {@link Double#isInfinite() infinities}. + * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, Integer, + * Long, Double or null. May not be {@link Double#isNaN() NaNs} or + * {@link Double#isInfinite() infinities}. * @return this stringer. * @throws JSONException if processing of json failed */ @@ -257,9 +251,7 @@ public class JSONStringer { beforeValue(); - if (value == null - || value instanceof Boolean - || value == JSONObject.NULL) { + if (value == null || value instanceof Boolean || value == JSONObject.NULL) { this.out.append(value); } @@ -276,7 +268,6 @@ public class JSONStringer { /** * Encodes {@code value} to this stringer. - * * @param value the value to encode * @return this stringer. * @throws JSONException if processing of json failed @@ -292,9 +283,8 @@ public class JSONStringer { /** * Encodes {@code value} to this stringer. - * * @param value a finite value. May not be {@link Double#isNaN() NaNs} or - * {@link Double#isInfinite() infinities}. + * {@link Double#isInfinite() infinities}. * @return this stringer. * @throws JSONException if processing of json failed */ @@ -309,7 +299,6 @@ public class JSONStringer { /** * Encodes {@code value} to this stringer. - * * @param value the value to encode * @return this stringer. * @throws JSONException if processing of json failed @@ -329,46 +318,45 @@ public class JSONStringer { char c = value.charAt(i); /* - * From RFC 4627, "All Unicode characters may be placed within the - * quotation marks except for the characters that must be escaped: - * quotation mark, reverse solidus, and the control characters - * (U+0000 through U+001F)." + * From RFC 4627, "All Unicode characters may be placed within the quotation + * marks except for the characters that must be escaped: quotation mark, + * reverse solidus, and the control characters (U+0000 through U+001F)." */ switch (c) { - case '"': - case '\\': - case '/': - this.out.append('\\').append(c); - break; - - case '\t': - this.out.append("\\t"); - break; - - case '\b': - this.out.append("\\b"); - break; - - case '\n': - this.out.append("\\n"); - break; - - case '\r': - this.out.append("\\r"); - break; - - case '\f': - this.out.append("\\f"); - break; - - default: - if (c <= 0x1F) { - this.out.append(String.format("\\u%04x", (int) c)); - } - else { - this.out.append(c); - } - break; + case '"': + case '\\': + case '/': + this.out.append('\\').append(c); + break; + + case '\t': + this.out.append("\\t"); + break; + + case '\b': + this.out.append("\\b"); + break; + + case '\n': + this.out.append("\\n"); + break; + + case '\r': + this.out.append("\\r"); + break; + + case '\f': + this.out.append("\\f"); + break; + + default: + if (c <= 0x1F) { + this.out.append(String.format("\\u%04x", (int) c)); + } + else { + this.out.append(c); + } + break; } } @@ -388,7 +376,6 @@ public class JSONStringer { /** * Encodes the key (property name) to this stringer. - * * @param name the name of the forthcoming value. May not be null. * @return this stringer. * @throws JSONException if processing of json failed @@ -403,8 +390,8 @@ public class JSONStringer { } /** - * Inserts any necessary separators and whitespace before a name. Also - * adjusts the stack to expect the key's value. + * Inserts any necessary separators and whitespace before a name. Also adjusts the + * stack to expect the key's value. * @throws JSONException if processing of json failed */ private void beforeKey() throws JSONException { @@ -420,9 +407,9 @@ public class JSONStringer { } /** - * Inserts any necessary separators and whitespace before a literal value, - * inline array, or inline object. Also adjusts the stack to expect either a - * closing bracket or another element. + * Inserts any necessary separators and whitespace before a literal value, inline + * array, or inline object. Also adjusts the stack to expect either a closing bracket + * or another element. * @throws JSONException if processing of json failed */ private void beforeValue() throws JSONException { @@ -450,17 +437,17 @@ public class JSONStringer { /** * Returns the encoded JSON string. - * - *

If invoked with unterminated arrays or unclosed objects, this method's - * return value is undefined. - * - *

Warning: although it contradicts the general contract - * of {@link Object#toString}, this method returns null if the stringer - * contains no data. + *

+ * If invoked with unterminated arrays or unclosed objects, this method's return value + * is undefined. + *

+ * Warning: although it contradicts the general contract of + * {@link Object#toString}, this method returns null if the stringer contains no data. * @return the encoded JSON string. */ @Override public String toString() { return this.out.length() == 0 ? null : this.out.toString(); } + } diff --git a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSONTokener.java b/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONTokener.java similarity index 63% rename from spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSONTokener.java rename to spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONTokener.java index b54fc6b617..ea98a4e0fb 100644 --- a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/json/JSONTokener.java +++ b/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONTokener.java @@ -19,10 +19,10 @@ package org.springframework.boot.configurationprocessor.json; // Note: this class was written without inspecting the non-free org.json sourcecode. /** - * Parses a JSON (RFC 4627) - * encoded string into the corresponding object. Most clients of - * this class will use only need the {@link #JSONTokener(String) constructor} - * and {@link #nextValue} method. Example usage:

+ * Parses a JSON (RFC 4627) encoded
+ * string into the corresponding object. Most clients of this class will use only need the
+ * {@link #JSONTokener(String) constructor} and {@link #nextValue} method. Example usage:
+ * 
  * String json = "{"
  *         + "  \"query\": \"Pizza\", "
  *         + "  \"locations\": [ 94043, 90210 ] "
@@ -31,49 +31,48 @@ package org.springframework.boot.configurationprocessor.json;
  * JSONObject object = (JSONObject) new JSONTokener(json).nextValue();
  * String query = object.getString("query");
  * JSONArray locations = object.getJSONArray("locations");
- * - *

For best interoperability and performance use JSON that complies with - * RFC 4627, such as that generated by {@link JSONStringer}. For legacy reasons - * this parser is lenient, so a successful parse does not indicate that the - * input string was valid JSON. All of the following syntax errors will be - * ignored: + *

+ * For best interoperability and performance use JSON that complies with RFC 4627, such as + * that generated by {@link JSONStringer}. For legacy reasons this parser is lenient, so a + * successful parse does not indicate that the input string was valid JSON. All of the + * following syntax errors will be ignored: *

    - *
  • End of line comments starting with {@code //} or {@code #} and ending - * with a newline character. - *
  • C-style comments starting with {@code /*} and ending with - * {@code *}{@code /}. Such comments may not be nested. - *
  • Strings that are unquoted or {@code 'single quoted'}. - *
  • Hexadecimal integers prefixed with {@code 0x} or {@code 0X}. - *
  • Octal integers prefixed with {@code 0}. - *
  • Array elements separated by {@code ;}. - *
  • Unnecessary array separators. These are interpreted as if null was the - * omitted value. - *
  • Key-value pairs separated by {@code =} or {@code =>}. - *
  • Key-value pairs separated by {@code ;}. + *
  • End of line comments starting with {@code //} or {@code #} and ending with a + * newline character. + *
  • C-style comments starting with {@code /*} and ending with {@code *}{@code /}. Such + * comments may not be nested. + *
  • Strings that are unquoted or {@code 'single quoted'}. + *
  • Hexadecimal integers prefixed with {@code 0x} or {@code 0X}. + *
  • Octal integers prefixed with {@code 0}. + *
  • Array elements separated by {@code ;}. + *
  • Unnecessary array separators. These are interpreted as if null was the omitted + * value. + *
  • Key-value pairs separated by {@code =} or {@code =>}. + *
  • Key-value pairs separated by {@code ;}. *
- * - *

Each tokener may be used to parse a single JSON string. Instances of this - * class are not thread safe. Although this class is nonfinal, it was not - * designed for inheritance and should not be subclassed. In particular, - * self-use by overrideable methods is not specified. See Effective Java - * Item 17, "Design and Document or inheritance or else prohibit it" for further - * information. + *

+ * Each tokener may be used to parse a single JSON string. Instances of this class are not + * thread safe. Although this class is nonfinal, it was not designed for inheritance and + * should not be subclassed. In particular, self-use by overrideable methods is not + * specified. See Effective Java Item 17, + * "Design and Document or inheritance or else prohibit it" for further information. */ public class JSONTokener { - /** The input JSON. */ + /** + * The input JSON. + */ private final String in; /** - * The index of the next character to be returned by {@link #next}. When - * the input is exhausted, this equals the input's length. + * The index of the next character to be returned by {@link #next}. When the input is + * exhausted, this equals the input's length. */ private int pos; /** - * @param in JSON encoded string. Null is not permitted and will yield a - * tokener that throws {@code NullPointerExceptions} when methods are - * called. + * @param in JSON encoded string. Null is not permitted and will yield a tokener that + * throws {@code NullPointerExceptions} when methods are called. */ public JSONTokener(String in) { // consume an optional byte order mark (BOM) if it exists @@ -85,30 +84,29 @@ public class JSONTokener { /** * Returns the next value from the input. - * - * @return a {@link JSONObject}, {@link JSONArray}, String, Boolean, - * Integer, Long, Double or {@link JSONObject#NULL}. + * @return a {@link JSONObject}, {@link JSONArray}, String, Boolean, Integer, Long, + * Double or {@link JSONObject#NULL}. * @throws JSONException if the input is malformed. */ public Object nextValue() throws JSONException { int c = nextCleanInternal(); switch (c) { - case -1: - throw syntaxError("End of input"); + case -1: + throw syntaxError("End of input"); - case '{': - return readObject(); + case '{': + return readObject(); - case '[': - return readArray(); + case '[': + return readArray(); - case '\'': - case '"': - return nextString((char) c); + case '\'': + case '"': + return nextString((char) c); - default: - this.pos--; - return readLiteral(); + default: + this.pos--; + return readLiteral(); } } @@ -116,50 +114,50 @@ public class JSONTokener { while (this.pos < this.in.length()) { int c = this.in.charAt(this.pos++); switch (c) { - case '\t': - case ' ': - case '\n': - case '\r': - continue; + case '\t': + case ' ': + case '\n': + case '\r': + continue; - case '/': - if (this.pos == this.in.length()) { - return c; - } + case '/': + if (this.pos == this.in.length()) { + return c; + } - char peek = this.in.charAt(this.pos); - switch (peek) { - case '*': - // skip a /* c-style comment */ - this.pos++; - int commentEnd = this.in.indexOf("*/", this.pos); - if (commentEnd == -1) { - throw syntaxError("Unterminated comment"); - } - this.pos = commentEnd + 2; - continue; - - case '/': - // skip a // end-of-line comment - this.pos++; - skipToEndOfLine(); - continue; - - default: - return c; + char peek = this.in.charAt(this.pos); + switch (peek) { + case '*': + // skip a /* c-style comment */ + this.pos++; + int commentEnd = this.in.indexOf("*/", this.pos); + if (commentEnd == -1) { + throw syntaxError("Unterminated comment"); } + this.pos = commentEnd + 2; + continue; - case '#': - /* - * Skip a # hash end-of-line comment. The JSON RFC doesn't - * specify this behavior, but it's required to parse - * existing documents. See http://b/2571423. - */ + case '/': + // skip a // end-of-line comment + this.pos++; skipToEndOfLine(); continue; default: return c; + } + + case '#': + /* + * Skip a # hash end-of-line comment. The JSON RFC doesn't specify this + * behavior, but it's required to parse existing documents. See + * http://b/2571423. + */ + skipToEndOfLine(); + continue; + + default: + return c; } } @@ -167,9 +165,8 @@ public class JSONTokener { } /** - * Advances the position until after the next newline character. If the line - * is terminated by "\r\n", the '\n' must be consumed as whitespace by the - * caller. + * Advances the position until after the next newline character. If the line is + * terminated by "\r\n", the '\n' must be consumed as whitespace by the caller. */ private void skipToEndOfLine() { for (; this.pos < this.in.length(); this.pos++) { @@ -182,22 +179,20 @@ public class JSONTokener { } /** - * Returns the string up to but not including {@code quote}, unescaping any - * character escape sequences encountered along the way. The opening quote - * should have already been read. This consumes the closing quote, but does - * not include it in the returned string. - * + * Returns the string up to but not including {@code quote}, unescaping any character + * escape sequences encountered along the way. The opening quote should have already + * been read. This consumes the closing quote, but does not include it in the returned + * string. * @param quote either ' or ". * @return the string up to but not including {@code quote} - * @throws NumberFormatException if any unicode escape sequences are - * malformed. + * @throws NumberFormatException if any unicode escape sequences are malformed. * @throws JSONException if processing of json failed */ public String nextString(char quote) throws JSONException { /* - * For strings that are free of escape sequences, we can just extract - * the result as a substring of the input. But if we encounter an escape - * sequence, we need to use a StringBuilder to compose the result. + * For strings that are free of escape sequences, we can just extract the result + * as a substring of the input. But if we encounter an escape sequence, we need to + * use a StringBuilder to compose the result. */ StringBuilder builder = null; @@ -234,54 +229,50 @@ public class JSONTokener { } /** - * Unescapes the character identified by the character or characters that - * immediately follow a backslash. The backslash '\' should have already - * been read. This supports both unicode escapes "u000A" and two-character - * escapes "\n". - * + * Unescapes the character identified by the character or characters that immediately + * follow a backslash. The backslash '\' should have already been read. This supports + * both unicode escapes "u000A" and two-character escapes "\n". * @return the unescaped char - * @throws NumberFormatException if any unicode escape sequences are - * malformed. + * @throws NumberFormatException if any unicode escape sequences are malformed. * @throws JSONException if processing of json failed */ private char readEscapeCharacter() throws JSONException { char escaped = this.in.charAt(this.pos++); switch (escaped) { - case 'u': - if (this.pos + 4 > this.in.length()) { - throw syntaxError("Unterminated escape sequence"); - } - String hex = this.in.substring(this.pos, this.pos + 4); - this.pos += 4; - return (char) Integer.parseInt(hex, 16); + case 'u': + if (this.pos + 4 > this.in.length()) { + throw syntaxError("Unterminated escape sequence"); + } + String hex = this.in.substring(this.pos, this.pos + 4); + this.pos += 4; + return (char) Integer.parseInt(hex, 16); - case 't': - return '\t'; + case 't': + return '\t'; - case 'b': - return '\b'; + case 'b': + return '\b'; - case 'n': - return '\n'; + case 'n': + return '\n'; - case 'r': - return '\r'; + case 'r': + return '\r'; - case 'f': - return '\f'; + case 'f': + return '\f'; - case '\'': - case '"': - case '\\': - default: - return escaped; + case '\'': + case '"': + case '\\': + default: + return escaped; } } /** - * Reads a null, boolean, numeric or unquoted string literal value. Numeric - * values will be returned as an Integer, Long, or Double, in that order of - * preference. + * Reads a null, boolean, numeric or unquoted string literal value. Numeric values + * will be returned as an Integer, Long, or Double, in that order of preference. * @return a literal value * @throws JSONException if processing of json failed */ @@ -324,9 +315,9 @@ public class JSONTokener { } catch (NumberFormatException e) { /* - * This only happens for integral numbers greater than - * Long.MAX_VALUE, numbers in exponential form (5e-10) and - * unquoted strings. Fall through to try floating point. + * This only happens for integral numbers greater than Long.MAX_VALUE, + * numbers in exponential form (5e-10) and unquoted strings. Fall through + * to try floating point. */ } } @@ -343,10 +334,10 @@ public class JSONTokener { } /** - * Returns the string up to but not including any of the given characters or - * a newline character. This does not consume the excluded character. - * @return the string up to but not including any of the given characters or - * a newline character + * Returns the string up to but not including any of the given characters or a newline + * character. This does not consume the excluded character. + * @return the string up to but not including any of the given characters or a newline + * character */ private String nextToInternal(String excluded) { int start = this.pos; @@ -360,8 +351,8 @@ public class JSONTokener { } /** - * Reads a sequence of key/value pairs and the trailing closing brace '}' of - * an object. The opening brace '{' should have already been read. + * Reads a sequence of key/value pairs and the trailing closing brace '}' of an + * object. The opening brace '{' should have already been read. * @return an object * @throws JSONException if processing of json failed */ @@ -390,9 +381,9 @@ public class JSONTokener { } /* - * Expect the name/value separator to be either a colon ':', an - * equals sign '=', or an arrow "=>". The last two are bogus but we - * include them because that's what the original implementation did. + * Expect the name/value separator to be either a colon ':', an equals sign + * '=', or an arrow "=>". The last two are bogus but we include them because + * that's what the original implementation did. */ int separator = nextCleanInternal(); if (separator != ':' && separator != '=') { @@ -405,22 +396,21 @@ public class JSONTokener { result.put((String) name, nextValue()); switch (nextCleanInternal()) { - case '}': - return result; - case ';': - case ',': - continue; - default: - throw syntaxError("Unterminated object"); + case '}': + return result; + case ';': + case ',': + continue; + default: + throw syntaxError("Unterminated object"); } } } /** - * Reads a sequence of values and the trailing closing brace ']' of an - * array. The opening brace '[' should have already been read. Note that - * "[]" yields an empty array, but "[,]" returns a two-element array - * equivalent to "[null,null]". + * Reads a sequence of values and the trailing closing brace ']' of an array. The + * opening brace '[' should have already been read. Note that "[]" yields an empty + * array, but "[,]" returns a two-element array equivalent to "[null,null]". * @return an array * @throws JSONException if processing of json failed */ @@ -432,41 +422,41 @@ public class JSONTokener { while (true) { switch (nextCleanInternal()) { - case -1: - throw syntaxError("Unterminated array"); - case ']': - if (hasTrailingSeparator) { - result.put(null); - } - return result; - case ',': - case ';': - /* A separator without a value first means "null". */ + case -1: + throw syntaxError("Unterminated array"); + case ']': + if (hasTrailingSeparator) { result.put(null); - hasTrailingSeparator = true; - continue; - default: - this.pos--; + } + return result; + case ',': + case ';': + /* A separator without a value first means "null". */ + result.put(null); + hasTrailingSeparator = true; + continue; + default: + this.pos--; } result.put(nextValue()); switch (nextCleanInternal()) { - case ']': - return result; - case ',': - case ';': - hasTrailingSeparator = true; - continue; - default: - throw syntaxError("Unterminated array"); + case ']': + return result; + case ',': + case ';': + hasTrailingSeparator = true; + continue; + default: + throw syntaxError("Unterminated array"); } } } /** - * Returns an exception containing the given message plus the current - * position and the entire input string. + * Returns an exception containing the given message plus the current position and the + * entire input string. * @param message the message * @return an exception */ @@ -487,9 +477,9 @@ public class JSONTokener { /* * Legacy APIs. * - * None of the methods below are on the critical path of parsing JSON - * documents. They exist only because they were exposed by the original - * implementation and may be used by some clients. + * None of the methods below are on the critical path of parsing JSON documents. They + * exist only because they were exposed by the original implementation and may be used + * by some clients. */ public boolean more() { @@ -569,4 +559,5 @@ public class JSONTokener { return -1; } } + }