You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by rw...@apache.org on 2018/04/05 15:41:46 UTC

svn commit: r1828450 - /pivot/trunk/core/src/org/apache/pivot/json/JSONSerializer.java

Author: rwhitcomb
Date: Thu Apr  5 15:41:46 2018
New Revision: 1828450

URL: http://svn.apache.org/viewvc?rev=1828450&view=rev
Log:
PIVOT-960: Add an attribute to JSONSerializer as to whether to allow
macros (which are a non-standard feature) to the processing.  Not
allowing macros also should speed up the process.
Note: the default is still "true" so that the existing behavior is
maintained.


Modified:
    pivot/trunk/core/src/org/apache/pivot/json/JSONSerializer.java

Modified: pivot/trunk/core/src/org/apache/pivot/json/JSONSerializer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/json/JSONSerializer.java?rev=1828450&r1=1828449&r2=1828450&view=diff
==============================================================================
--- pivot/trunk/core/src/org/apache/pivot/json/JSONSerializer.java (original)
+++ pivot/trunk/core/src/org/apache/pivot/json/JSONSerializer.java Thu Apr  5 15:41:46 2018
@@ -59,6 +59,7 @@ public class JSONSerializer implements S
 
     private boolean alwaysDelimitMapKeys = false;
     private boolean verbose = false;
+    private boolean macros = true;
 
     private int c = -1;
 
@@ -112,7 +113,7 @@ public class JSONSerializer implements S
      * Returns a flag indicating whether or not map keys will always be
      * quote-delimited.
      * <p> Note: the JSON "standard" requires keys to be delimited.
-     * @return <tt>true</tt> if map keys must always be delmited (that is,
+     * @return <tt>true</tt> if map keys must always be delimited (that is,
      * enclosed in double quotes), <tt>false</tt> for the default behavior
      * that does not require double quotes.
      */
@@ -149,6 +150,27 @@ public class JSONSerializer implements S
     }
 
     /**
+     * Returns the flag indicating whether this serializer will allow macros in the text.
+     * @return The "macros allowed" flag.
+     */
+    public boolean getAllowMacros() {
+        return macros;
+    }
+
+    /**
+     * Sets the flag indicating whether macros are allowed in the text.  This is definitely
+     * a non-standard feature.  See the documentation in {@link MacroReader} for more details
+     * on the specification of macros.
+     * <p> Note: must be called before {@link #readObject} is called.
+     * @param macros Flag indicating whether macros are allowed (default is {@code true}).
+     * Setting the flag to false will maintain standards-compliant behavior and possibly
+     * speed up operation as well.
+     */
+    public void setAllowMacros(boolean macros) {
+        this.macros = macros;
+    }
+
+    /**
      * Reads data from a JSON stream.
      *
      * @param inputStream The input stream from which data will be read.
@@ -189,20 +211,23 @@ public class JSONSerializer implements S
     public Object readObject(Reader reader) throws IOException, SerializationException {
         Utils.checkNull(reader, "reader");
 
-        // Move to the first character
         LineNumberReader lineNumberReader = new LineNumberReader(reader);
-        MacroReader macroReader = new MacroReader(lineNumberReader);
-        c = macroReader.read();
+        Reader realReader = lineNumberReader;
+        if (macros) {
+            realReader = new MacroReader(realReader);
+        }
+        // Move to the first character
+        c = realReader.read();
 
         // Ignore BOM (if present)
         if (c == 0xFEFF) {
-            c = macroReader.read();
+            c = realReader.read();
         }
 
         // Read the root value
         Object object;
         try {
-            object = readValue(macroReader, type, type.getTypeName());
+            object = readValue(realReader, type, type.getTypeName());
         } catch (SerializationException exception) {
             System.err.println("An error occurred while processing input at line number "
                 + (lineNumberReader.getLineNumber() + 1));