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