Coverage Report - org.webslinger.json.JSON
 
Classes in this File Line Coverage Branch Coverage Complexity
JSON
77%
180/233
82%
28/34
0
 
 1  
 /* Generated By:JavaCC: Do not edit this line. JSON.java */
 2  
 package org.webslinger.json;
 3  
 
 4  
 import java.io.File;
 5  
 import java.io.FileInputStream;
 6  
 import java.io.IOException;
 7  
 import java.util.ArrayList;
 8  
 import java.util.HashMap;
 9  
 import java.util.LinkedList;
 10  
 import java.util.List;
 11  
 import java.util.Map;
 12  
 
 13  
 import org.webslinger.io.IOUtil;
 14  
 
 15  
 public class JSON implements JSONConstants {
 16  
     private boolean allowResolve;
 17  
 
 18  
     public JSON(String fileName) {
 19  0
         this(System.in);
 20  0
         try { ReInit(new FileInputStream(new File(fileName))); }
 21  0
         catch(Exception e) { e.printStackTrace(); }
 22  
 //        allowed[TEXT] = 1;
 23  
 //        allowed[FIRST_COLUMN_TEXT] = 1;
 24  0
     }
 25  
 
 26  
     public JSON allowResolve(boolean allowResolve) {
 27  1
         this.allowResolve = allowResolve;
 28  1
         token_source.SwitchTo(allowResolve ? RESOLVE : DEFAULT);
 29  1
         return this;
 30  
     }
 31  
 
 32  
   final public Object JSONValue() throws ParseException {
 33  
   Object value;
 34  1029
     value = JSONItem();
 35  21
     jj_consume_token(0);
 36  18
     {if (true) return value;}
 37  
     throw new Error("Missing return statement in function");
 38  
   }
 39  
 
 40  
   final public Object JSONItem() throws ParseException {
 41  
   Object value;
 42  1055
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 43  
     case STRING_START:
 44  12
       value = JSONString();
 45  11
       break;
 46  
     case WHOLE_NUMBER:
 47  11
       value = JSONLong();
 48  11
       break;
 49  
     case FLOAT_NUMBER:
 50  6
       value = JSONFloat();
 51  6
       break;
 52  
     case OBJECT_BEGIN:
 53  5
       value = JSONObject();
 54  4
       break;
 55  
     case ARRAY_BEGIN:
 56  9
       value = JSONArray();
 57  8
       break;
 58  
     case TRUE:
 59  2
       value = True();
 60  2
       break;
 61  
     case FALSE:
 62  2
       value = False();
 63  2
       break;
 64  
     case NULL:
 65  2
       value = Null();
 66  2
       break;
 67  
     case RESOLVE_BEGIN:
 68  1
       value = JSONResolve();
 69  1
       break;
 70  
     default:
 71  8
       jj_la1[0] = jj_gen;
 72  8
       jj_consume_token(-1);
 73  0
       throw new ParseException();
 74  
     }
 75  47
     {if (true) return value;}
 76  
     throw new Error("Missing return statement in function");
 77  
   }
 78  
 
 79  
   final public Object JSONResolve() throws ParseException {
 80  
   String name, value;
 81  1
     jj_consume_token(RESOLVE_BEGIN);
 82  1
     name = JSONString();
 83  1
     jj_consume_token(CLOSE_PAREN);
 84  1
     value = JSONString();
 85  
     try {
 86  1
       {if (true) return IOUtil.readObject(name, IOUtil.getInputStream(value));}
 87  0
     } catch (IOException e) {
 88  0
       {if (true) throw generateParseException();}
 89  
     }
 90  
     throw new Error("Missing return statement in function");
 91  
   }
 92  
 
 93  
   final public String JSONString() throws ParseException {
 94  25
   StringBuilder sb = new StringBuilder();
 95  
   Token c, u;
 96  25
     jj_consume_token(STRING_START);
 97  
     label_1:
 98  
     while (true) {
 99  67
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 100  
       case CHARACTER:
 101  
       case CONTROL_CHAR:
 102  
       case UNICODE:
 103  
         ;
 104  42
         break;
 105  
       default:
 106  25
         jj_la1[1] = jj_gen;
 107  25
         break label_1;
 108  
       }
 109  42
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 110  
       case CHARACTER:
 111  33
         jj_consume_token(CHARACTER);
 112  33
                   sb.append(getToken(0).image);
 113  33
         break;
 114  
       case CONTROL_CHAR:
 115  8
         jj_consume_token(CONTROL_CHAR);
 116  8
     switch (getToken(0).image.charAt(1)) {
 117  1
       case '"': sb.append('"'); break;
 118  1
       case '\\': sb.append('\\'); break;
 119  1
       case '/': sb.append('/'); break;
 120  1
       case 'b': sb.append('\b'); break;
 121  1
       case 'f': sb.append('\f'); break;
 122  1
       case 'n': sb.append('\n'); break;
 123  1
       case 'r': sb.append('\r'); break;
 124  1
       case 't': sb.append('\t'); break;
 125  
     }
 126  8
         break;
 127  
       case UNICODE:
 128  1
         jj_consume_token(UNICODE);
 129  1
     int v = Integer.parseInt(getToken(0).image.substring(2), 16);
 130  1
     sb.append((char) v);
 131  1
         break;
 132  
       default:
 133  0
         jj_la1[2] = jj_gen;
 134  0
         jj_consume_token(-1);
 135  0
         throw new ParseException();
 136  
       }
 137  
     }
 138  25
     jj_consume_token(STRING_END);
 139  24
     {if (true) return sb.toString();}
 140  
     throw new Error("Missing return statement in function");
 141  
   }
 142  
 
 143  
   final public Long JSONLong() throws ParseException {
 144  
     try {
 145  11
       jj_consume_token(WHOLE_NUMBER);
 146  11
                      {if (true) return new Long(getToken(0).image);}
 147  0
     } catch (NumberFormatException e) {
 148  0
     {if (true) throw generateParseException();}
 149  
     }
 150  
     throw new Error("Missing return statement in function");
 151  
   }
 152  
 
 153  
   final public Double JSONFloat() throws ParseException {
 154  
     try {
 155  6
       jj_consume_token(FLOAT_NUMBER);
 156  6
                      {if (true) return new Double(getToken(0).image);}
 157  0
     } catch (NumberFormatException e) {
 158  0
     {if (true) throw generateParseException();}
 159  
     }
 160  
     throw new Error("Missing return statement in function");
 161  
   }
 162  
 
 163  
   final public Map<String, Object> JSONObject() throws ParseException {
 164  5
   HashMap<String, Object> map = new HashMap<String, Object>();
 165  5
     jj_consume_token(OBJECT_BEGIN);
 166  
     label_2:
 167  
     while (true) {
 168  11
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 169  
       case ITEM_SEP:
 170  
         ;
 171  6
         break;
 172  
       default:
 173  5
         jj_la1[3] = jj_gen;
 174  5
         break label_2;
 175  
       }
 176  6
       jj_consume_token(ITEM_SEP);
 177  
     }
 178  5
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 179  
     case STRING_START:
 180  3
       JSONObjectEntry(map);
 181  3
       break;
 182  
     default:
 183  2
       jj_la1[4] = jj_gen;
 184  
       ;
 185  
     }
 186  
     label_3:
 187  
     while (true) {
 188  14
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 189  
       case ITEM_SEP:
 190  
         ;
 191  9
         break;
 192  
       default:
 193  5
         jj_la1[5] = jj_gen;
 194  5
         break label_3;
 195  
       }
 196  9
       jj_consume_token(ITEM_SEP);
 197  9
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 198  
       case STRING_START:
 199  8
         JSONObjectEntry(map);
 200  8
         break;
 201  
       default:
 202  1
         jj_la1[6] = jj_gen;
 203  
         ;
 204  
       }
 205  
     }
 206  5
     jj_consume_token(OBJECT_END);
 207  4
     {if (true) return map;}
 208  
     throw new Error("Missing return statement in function");
 209  
   }
 210  
 
 211  
   final public void JSONObjectEntry(Map<String, Object> map) throws ParseException {
 212  
   String key;
 213  
   Object value;
 214  11
     key = JSONString();
 215  11
     jj_consume_token(KEY_SEP);
 216  11
     value = JSONItem();
 217  11
     map.put(key, value);
 218  11
   }
 219  
 
 220  
   final public List JSONArray() throws ParseException {
 221  9
   ArrayList<Object> list = new ArrayList<Object>();
 222  
   Object value;
 223  9
     jj_consume_token(ARRAY_BEGIN);
 224  
     label_4:
 225  
     while (true) {
 226  15
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 227  
       case ITEM_SEP:
 228  
         ;
 229  6
         break;
 230  
       default:
 231  9
         jj_la1[7] = jj_gen;
 232  9
         break label_4;
 233  
       }
 234  6
       jj_consume_token(ITEM_SEP);
 235  
     }
 236  9
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 237  
     case OBJECT_BEGIN:
 238  
     case ARRAY_BEGIN:
 239  
     case TRUE:
 240  
     case FALSE:
 241  
     case NULL:
 242  
     case WHOLE_NUMBER:
 243  
     case FLOAT_NUMBER:
 244  
     case STRING_START:
 245  
     case RESOLVE_BEGIN:
 246  6
       value = JSONItem();
 247  6
                        list.add(value);
 248  
       label_5:
 249  
       while (true) {
 250  16
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 251  
         case ITEM_SEP:
 252  
           ;
 253  10
           break;
 254  
         default:
 255  6
           jj_la1[8] = jj_gen;
 256  6
           break label_5;
 257  
         }
 258  10
         jj_consume_token(ITEM_SEP);
 259  10
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 260  
         case OBJECT_BEGIN:
 261  
         case ARRAY_BEGIN:
 262  
         case TRUE:
 263  
         case FALSE:
 264  
         case NULL:
 265  
         case WHOLE_NUMBER:
 266  
         case FLOAT_NUMBER:
 267  
         case STRING_START:
 268  
         case RESOLVE_BEGIN:
 269  9
           value = JSONItem();
 270  9
                           list.add(value);
 271  9
           break;
 272  
         default:
 273  1
           jj_la1[9] = jj_gen;
 274  
           ;
 275  
         }
 276  
       }
 277  
       break;
 278  
     default:
 279  3
       jj_la1[10] = jj_gen;
 280  
       ;
 281  
     }
 282  9
     jj_consume_token(ARRAY_END);
 283  8
     {if (true) return list;}
 284  
     throw new Error("Missing return statement in function");
 285  
   }
 286  
 
 287  
   final public Boolean True() throws ParseException {
 288  2
     jj_consume_token(TRUE);
 289  2
            {if (true) return Boolean.TRUE;}
 290  
     throw new Error("Missing return statement in function");
 291  
   }
 292  
 
 293  
   final public Boolean False() throws ParseException {
 294  2
     jj_consume_token(FALSE);
 295  2
             {if (true) return Boolean.FALSE;}
 296  
     throw new Error("Missing return statement in function");
 297  
   }
 298  
 
 299  
   final public Object Null() throws ParseException {
 300  2
     jj_consume_token(NULL);
 301  2
            {if (true) return null;}
 302  
     throw new Error("Missing return statement in function");
 303  
   }
 304  
 
 305  
   public JSONTokenManager token_source;
 306  
   SimpleCharStream jj_input_stream;
 307  
   public Token token, jj_nt;
 308  
   private int jj_ntk;
 309  
   private int jj_gen;
 310  1029
   final private int[] jj_la1 = new int[11];
 311  
   static private int[] jj_la1_0;
 312  
   static {
 313  1
       jj_la1_0();
 314  1
    }
 315  
    private static void jj_la1_0() {
 316  1
       jj_la1_0 = new int[] {0xaf8a,0xd0000,0xd0000,0x20,0x2000,0x20,0x2000,0x20,0x20,0xaf8a,0xaf8a,};
 317  1
    }
 318  
 
 319  
   public JSON(java.io.InputStream stream) {
 320  1
      this(stream, null);
 321  1
   }
 322  1
   public JSON(java.io.InputStream stream, String encoding) {
 323  1
     try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
 324  1
     token_source = new JSONTokenManager(jj_input_stream);
 325  1
     token = new Token();
 326  1
     jj_ntk = -1;
 327  1
     jj_gen = 0;
 328  1
     for (int i = 0; i < 11; i++) jj_la1[i] = -1;
 329  1
   }
 330  
 
 331  
   public void ReInit(java.io.InputStream stream) {
 332  0
      ReInit(stream, null);
 333  0
   }
 334  
   public void ReInit(java.io.InputStream stream, String encoding) {
 335  0
     try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
 336  0
     token_source.ReInit(jj_input_stream);
 337  0
     token = new Token();
 338  0
     jj_ntk = -1;
 339  0
     jj_gen = 0;
 340  0
     for (int i = 0; i < 11; i++) jj_la1[i] = -1;
 341  0
   }
 342  
 
 343  1028
   public JSON(java.io.Reader stream) {
 344  1028
     jj_input_stream = new SimpleCharStream(stream, 1, 1);
 345  1028
     token_source = new JSONTokenManager(jj_input_stream);
 346  1028
     token = new Token();
 347  1028
     jj_ntk = -1;
 348  1028
     jj_gen = 0;
 349  1028
     for (int i = 0; i < 11; i++) jj_la1[i] = -1;
 350  1028
   }
 351  
 
 352  
   public void ReInit(java.io.Reader stream) {
 353  0
     jj_input_stream.ReInit(stream, 1, 1);
 354  0
     token_source.ReInit(jj_input_stream);
 355  0
     token = new Token();
 356  0
     jj_ntk = -1;
 357  0
     jj_gen = 0;
 358  0
     for (int i = 0; i < 11; i++) jj_la1[i] = -1;
 359  0
   }
 360  
 
 361  0
   public JSON(JSONTokenManager tm) {
 362  0
     token_source = tm;
 363  0
     token = new Token();
 364  0
     jj_ntk = -1;
 365  0
     jj_gen = 0;
 366  0
     for (int i = 0; i < 11; i++) jj_la1[i] = -1;
 367  0
   }
 368  
 
 369  
   public void ReInit(JSONTokenManager tm) {
 370  0
     token_source = tm;
 371  0
     token = new Token();
 372  0
     jj_ntk = -1;
 373  0
     jj_gen = 0;
 374  0
     for (int i = 0; i < 11; i++) jj_la1[i] = -1;
 375  0
   }
 376  
 
 377  
   final private Token jj_consume_token(int kind) throws ParseException {
 378  
     Token oldToken;
 379  216
     if ((oldToken = token).next != null) token = token.next;
 380  35
     else token = token.next = token_source.getNextToken();
 381  216
     jj_ntk = -1;
 382  216
     if (token.kind == kind) {
 383  202
       jj_gen++;
 384  202
       return token;
 385  
     }
 386  14
     token = oldToken;
 387  14
     jj_kind = kind;
 388  14
     throw generateParseException();
 389  
   }
 390  
 
 391  
   final public Token getNextToken() {
 392  0
     if (token.next != null) token = token.next;
 393  0
     else token = token.next = token_source.getNextToken();
 394  0
     jj_ntk = -1;
 395  0
     jj_gen++;
 396  0
     return token;
 397  
   }
 398  
 
 399  
   final public Token getToken(int index) {
 400  59
     Token t = token;
 401  59
     for (int i = 0; i < index; i++) {
 402  0
       if (t.next != null) t = t.next;
 403  0
       else t = t.next = token_source.getNextToken();
 404  
     }
 405  59
     return t;
 406  
   }
 407  
 
 408  
   final private int jj_ntk() {
 409  1178
     if ((jj_nt=token.next) == null)
 410  1178
       return (jj_ntk = (token.next=token_source.getNextToken()).kind);
 411  
     else
 412  0
       return (jj_ntk = jj_nt.kind);
 413  
   }
 414  
 
 415  1029
   private java.util.Vector jj_expentries = new java.util.Vector();
 416  
   private int[] jj_expentry;
 417  1029
   private int jj_kind = -1;
 418  
 
 419  
   public ParseException generateParseException() {
 420  14
     jj_expentries.removeAllElements();
 421  14
     boolean[] la1tokens = new boolean[21];
 422  308
     for (int i = 0; i < 21; i++) {
 423  294
       la1tokens[i] = false;
 424  
     }
 425  14
     if (jj_kind >= 0) {
 426  6
       la1tokens[jj_kind] = true;
 427  6
       jj_kind = -1;
 428  
     }
 429  168
     for (int i = 0; i < 11; i++) {
 430  154
       if (jj_la1[i] == jj_gen) {
 431  462
         for (int j = 0; j < 32; j++) {
 432  448
           if ((jj_la1_0[i] & (1<<j)) != 0) {
 433  88
             la1tokens[j] = true;
 434  
           }
 435  
         }
 436  
       }
 437  
     }
 438  308
     for (int i = 0; i < 21; i++) {
 439  294
       if (la1tokens[i]) {
 440  93
         jj_expentry = new int[1];
 441  93
         jj_expentry[0] = i;
 442  93
         jj_expentries.addElement(jj_expentry);
 443  
       }
 444  
     }
 445  14
     int[][] exptokseq = new int[jj_expentries.size()][];
 446  107
     for (int i = 0; i < jj_expentries.size(); i++) {
 447  93
       exptokseq[i] = (int[])jj_expentries.elementAt(i);
 448  
     }
 449  14
     return new ParseException(token, exptokseq, tokenImage);
 450  
   }
 451  
 
 452  
   final public void enable_tracing() {
 453  0
   }
 454  
 
 455  
   final public void disable_tracing() {
 456  0
   }
 457  
 
 458  
 }