You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by yo...@apache.org on 2010/05/15 03:23:18 UTC

svn commit: r944541 - /labs/noggit/src/main/java/org/apache/noggit/JSONParser.java

Author: yonik
Date: Sat May 15 01:23:18 2010
New Revision: 944541

URL: http://svn.apache.org/viewvc?rev=944541&view=rev
Log:
show surrounding text for parse errors

Modified:
    labs/noggit/src/main/java/org/apache/noggit/JSONParser.java

Modified: labs/noggit/src/main/java/org/apache/noggit/JSONParser.java
URL: http://svn.apache.org/viewvc/labs/noggit/src/main/java/org/apache/noggit/JSONParser.java?rev=944541&r1=944540&r2=944541&view=diff
==============================================================================
--- labs/noggit/src/main/java/org/apache/noggit/JSONParser.java (original)
+++ labs/noggit/src/main/java/org/apache/noggit/JSONParser.java Sat May 15 01:23:18 2010
@@ -197,8 +197,7 @@ public class JSONParser {
     for (int i=1; i<arr.length; i++) {
       int ch = getChar();
       if (ch != arr[i]) {
-        if (ch==-1) throw new RuntimeException("Unexpected EOF");
-        throw new RuntimeException("Expected " + new String(arr));
+        throw err("Expected " + new String(arr));
       }
     }
   }
@@ -210,7 +209,7 @@ public class JSONParser {
     if (!eof && start>0) start--;  // backup one char
     String chs = "char=" + ((start>=end) ? "(EOF)" : "" + (char)buf[start]);
     String pos = "position=" + (gpos+start);
-    String tot = chs + ',' + pos;
+    String tot = chs + ',' + pos + getContext();
     if (msg==null) {
       if (start>=end) msg = "Unexpected EOF";
       else msg="JSON Parse Error";
@@ -218,6 +217,24 @@ public class JSONParser {
     return new RuntimeException(msg + ": " + tot);
   }
 
+  private String getContext() {
+    String context = "";
+    if (start>=0) {
+      context += " BEFORE='" + errEscape(Math.max(start-40,0), start+1) + "'";
+    }
+    if (start<end) {
+      context += " AFTER='" + errEscape(start+1, start+40) + "'";
+    }
+    return context;
+  }
+
+  private String errEscape(int a, int b) {
+    StringBuilder sb = new StringBuilder();
+    b = Math.min(b, end);
+    if (a>=b) return "";
+    return new String(buf, a, b-a).replaceAll("\\s+"," ");
+  }
+
 
   private boolean bool; // boolean value read
   private long lval;    // long value read
@@ -554,7 +571,7 @@ public class JSONParser {
           expect(JSONUtil.NULL_CHARS);
           return NULL;
         case -1:
-          if (getLevel()>0) throw new RuntimeException("Premature EOF");
+          if (getLevel()>0) throw err("Premature EOF");
           return EOF;
         default: throw err(null);
       }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org