Clover coverage report - XJavaDoc - 1.1
Coverage timestamp: Mon Oct 4 2004 23:49:51 BST
file stats: LOC: 7,948   Methods: 570
NCLOC: 7,245   Classes: 3
30 day Evaluation Version distributed via the Maven Jar Repository. Clover is not free. You have 30 days to evaluate it. Please visit http://www.thecortex.net/clover to obtain a licensed version of Clover
 
 Source file Conditionals Statements Methods TOTAL
SimpleParser.java 29.2% 44.3% 64.7% 40.1%
coverage coverage
 1   
 /* Generated By:JavaCC: Do not edit this line. SimpleParser.java */
 2   
 package xjavadoc;
 3   
 
 4   
 import java.lang.reflect.Modifier;
 5   
 import java.util.*;
 6   
 import java.io.InputStream;
 7   
 import java.io.ByteArrayInputStream;
 8   
 
 9   
 public class SimpleParser implements JavaParser, SimpleParserConstants {
 10   
    private XJavaDoc _xJavaDoc;
 11   
    private XTagFactory _tagFactory;
 12   
 
 13   
    private String _packageName = "";
 14   
    // The class we're currently parsing
 15   
    private SourceClass _sourceClass;
 16   
    private Stack _sourceClassStack = new Stack();
 17   
 
 18   
    // Flag that tells us if the main class/interface has been parsed.
 19   
    // Needed to support more than one "outer" class in one source.
 20   
    private boolean _hasParsedMain = false;
 21   
 
 22   
 
 23  10699
    private static final void setToken(AbstractProgramElement element, Token token) {
 24  10699
        element.setToken( token );
 25   
        //element.setDoc(getJavaDocSpecialToken( token ));
 26   
    }
 27   
 
 28  27674
    private final void clearNameBuffer() {
 29  27674
       if( _nameBuffer.length() > 0 ) {
 30  27002
          _nameBuffer.delete(0, _nameBuffer.length());
 31   
       }
 32   
    }
 33   
 
 34   
    private final StringBuffer _nameBuffer = new StringBuffer();
 35   
 
 36   
    private static class Parameter {
 37   
       public String type;
 38   
       public String name;
 39   
       public int dimension;
 40   
    }
 41   
    private Parameter _parameter;
 42   
 
 43   
    // Reference to the first token in a Name() production.
 44   
    private Token _nameToken;
 45   
 
 46   
    /**
 47   
     * Should be called before UnmodifiedClassDeclaration or UnmodifiedInterfaceDeclaration
 48   
     */
 49  470
    private SourceClass pushAndGet() {
 50   
        // Push a source class onto the stack. If the stack is empty,
 51   
        // push the outer class. Otherwise, instantiate a new (inner) class
 52   
        // and push that instead.
 53  470
        SourceClass clazz = null;
 54  470
        if( _sourceClassStack.isEmpty() ) {
 55   
           // It's an outer class. In rare cases there is more than one outer classes
 56   
           // in one source. handle that here.
 57  356
           if( !_hasParsedMain ) {
 58   
              // the usual case
 59  336
              clazz = _sourceClass;
 60   
           } else {
 61   
              // the source contains more than one classes
 62  20
              clazz = new SourceClass(_sourceClass, 0, _tagFactory);
 63   
           }
 64   
        } else {
 65  114
           clazz = new SourceClass(currentClass(), _tagFactory);
 66   
        }
 67  470
        _sourceClassStack.push(clazz);
 68  470
        return clazz;
 69   
    }
 70   
 
 71   
    /**
 72   
     * Should be called after UnmodifiedClassDeclaration or UnmodifiedInterfaceDeclaration
 73   
     */
 74  470
    private void popAndAddInner() {
 75  470
     SourceClass clazz = (SourceClass) _sourceClassStack.pop();
 76  470
     if( clazz.getContainingClass() != null ) {
 77   
         // Add the class as an inner class
 78  114
         currentClass().addInnerClass(clazz);
 79  114
         _xJavaDoc.addSourceClass(clazz);
 80   
     }
 81   
    }
 82   
 
 83  10168
    private SourceClass currentClass() {
 84  10168
        return (SourceClass)_sourceClassStack.peek();
 85   
    }
 86   
 
 87   
     /** 
 88   
      * This constructor was added to allow the re-use of parsers.
 89   
      * The normal constructor takes a single argument which 
 90   
      * an InputStream. This simply creates a re-usable parser
 91   
      * object, we satisfy the requirement of an InputStream
 92   
      * by using a newline character as an input stream.
 93   
      */
 94  336
     public SimpleParser( XJavaDoc xJavaDoc, XTagFactory tagFactory )
 95   
     {
 96  336
         this(new ByteArrayInputStream("\n".getBytes()));
 97  336
         _xJavaDoc = xJavaDoc;
 98  336
         _tagFactory = tagFactory;
 99   
     }
 100   
 
 101   
     /** 
 102   
      * This was also added to allow parsers to be
 103   
      * re-usable. Normal JavaCC use entails passing an
 104   
      * input stream to the constructor and the parsing
 105   
      * process is carried out once. We want to be able
 106   
      * to re-use parsers: we do this by adding this
 107   
      * method and re-initializing the lexer with
 108   
      * the new stream that we want parsed.
 109   
      */
 110  336
     public void populate(SourceClass sourceClass)
 111   
         throws ParseException
 112   
     {
 113  336
         _sourceClass = sourceClass;
 114   
 
 115   
         // Reset state
 116  336
         _sourceClassStack.clear();
 117  336
         _packageName = "";
 118  336
         _parameter = new Parameter();
 119  336
         _nameToken = null;
 120  336
         clearNameBuffer();
 121   
 
 122  336
         try
 123   
         {
 124   
 
 125   
             // now reinit the Parser with this CharStream
 126   
             // 
 127  336
             ReInit(sourceClass.getReader());
 128   
 
 129   
             // Start the parsing.
 130  336
             CompilationUnit( sourceClass );
 131   
         }
 132   
         catch (ParseException pe)
 133   
         {
 134  0
             throw new ParseException (pe.currentToken,
 135   
                 pe.expectedTokenSequences, pe.tokenImage);
 136   
         }
 137   
         catch (TokenMgrError tme)
 138   
         {
 139  0
             throw new ParseException("Lexical error: " + tme.toString());
 140   
         }
 141   
     }
 142   
 
 143   
 /*****************************************
 144   
  * THE JAVA LANGUAGE GRAMMAR STARTS HERE *
 145   
  *****************************************/
 146   
 
 147   
 /*
 148   
  * Program structuring syntax follows.
 149   
  */
 150  336
   final public void CompilationUnit(SourceClass sourceClass) throws ParseException {
 151  336
     switch (jj_nt.kind) {
 152   
     case PACKAGE:
 153  308
       PackageDeclaration();
 154  308
       break;
 155   
     default:
 156  28
       jj_la1[0] = jj_gen;
 157   
       ;
 158   
     }
 159  336
     label_1:
 160   
     while (true) {
 161  1233
       switch (jj_nt.kind) {
 162   
       case IMPORT:
 163   
         ;
 164  897
         break;
 165   
       default:
 166  336
         jj_la1[1] = jj_gen;
 167  336
         break label_1;
 168   
       }
 169  897
       ImportDeclaration();
 170   
     }
 171  336
     label_2:
 172   
     while (true) {
 173  692
       switch (jj_nt.kind) {
 174   
       case ABSTRACT:
 175   
       case CLASS:
 176   
       case FINAL:
 177   
       case INTERFACE:
 178   
       case PUBLIC:
 179   
       case STRICTFP:
 180   
       case SEMICOLON:
 181   
         ;
 182  356
         break;
 183   
       default:
 184  336
         jj_la1[2] = jj_gen;
 185  336
         break label_2;
 186   
       }
 187  356
       TypeDeclaration();
 188   
     }
 189  336
     jj_consume_token(0);
 190   
       // sourceClass must know about the CompilationUnit node
 191   
       // if it wants to mutate or print the code
 192   
       // In SimpleParser we can't use nodes
 193   
 
 194  336
     if( _sourceClassStack.size() != 0 ) {
 195  0
        {if (true) throw new IllegalStateException("There should be no more classes on the stack:" + _sourceClassStack.size());}
 196   
     }
 197   
   }
 198   
 
 199  308
   final public void PackageDeclaration() throws ParseException {
 200  308
     jj_consume_token(PACKAGE);
 201  308
     _packageName = Name();
 202  308
     jj_consume_token(SEMICOLON);
 203  308
      _sourceClass.setContainingPackage( _packageName );
 204   
   }
 205   
 
 206  897
   final public void ImportDeclaration() throws ParseException {
 207  897
    String importedElement;
 208  897
    boolean isPackage = false;
 209  897
     jj_consume_token(IMPORT);
 210  897
     importedElement = Name();
 211  897
     switch (jj_nt.kind) {
 212   
     case DOT:
 213  124
       jj_consume_token(DOT);
 214  124
       jj_consume_token(STAR);
 215  124
      isPackage = true;
 216  124
       break;
 217   
     default:
 218  773
       jj_la1[3] = jj_gen;
 219   
       ;
 220   
     }
 221  897
     jj_consume_token(SEMICOLON);
 222  897
      if( isPackage ) {
 223  124
         _sourceClass.addImportedPackage(importedElement);
 224   
      } else {
 225  773
         _sourceClass.addImportedClass(importedElement);
 226   
      }
 227   
   }
 228   
 
 229  356
   final public void TypeDeclaration() throws ParseException {
 230  356
     if (jj_2_1(2147483647)) {
 231  171
       ClassDeclaration();
 232  171
     _hasParsedMain = true;
 233   
     } else {
 234  185
       switch (jj_nt.kind) {
 235   
       case ABSTRACT:
 236   
       case INTERFACE:
 237   
       case PUBLIC:
 238   
       case STRICTFP:
 239  185
         InterfaceDeclaration();
 240  185
     _hasParsedMain = true;
 241  185
         break;
 242   
       case SEMICOLON:
 243  0
         jj_consume_token(SEMICOLON);
 244  0
         break;
 245   
       default:
 246  0
         jj_la1[4] = jj_gen;
 247  0
         jj_consume_token(-1);
 248  0
         throw new ParseException();
 249   
       }
 250   
     }
 251   
   }
 252   
 
 253   
 /*
 254   
  * Declaration syntax follows.
 255   
  */
 256   
 
 257   
 /*
 258   
 Javadoc is stored in special tokens, and will either be
 259   
 attached to the first modifier token (if there are any modifiers)
 260   
 or to the first token in UnmodifiedClassDeclaration
 261   
 */
 262  171
   final public void ClassDeclaration() throws ParseException {
 263  171
    SourceClass sourceClass = pushAndGet();
 264  171
    Token t = null;
 265  171
     label_3:
 266   
     while (true) {
 267  355
       switch (jj_nt.kind) {
 268   
       case ABSTRACT:
 269   
       case FINAL:
 270   
       case PUBLIC:
 271   
       case STRICTFP:
 272   
         ;
 273  184
         break;
 274   
       default:
 275  171
         jj_la1[5] = jj_gen;
 276  171
         break label_3;
 277   
       }
 278  184
       switch (jj_nt.kind) {
 279   
       case ABSTRACT:
 280  38
         t = jj_consume_token(ABSTRACT);
 281  38
        setToken(sourceClass, t);
 282  38
        sourceClass.addModifier( Modifier.ABSTRACT );
 283  38
         break;
 284   
       case FINAL:
 285  39
         t = jj_consume_token(FINAL);
 286  39
        setToken(sourceClass, t);
 287  39
        sourceClass.addModifier( Modifier.FINAL );
 288  39
         break;
 289   
       case PUBLIC:
 290  107
         t = jj_consume_token(PUBLIC);
 291  107
        setToken(sourceClass, t);
 292  107
        sourceClass.addModifier( Modifier.PUBLIC );
 293  107
         break;
 294   
       case STRICTFP:
 295  0
         t = jj_consume_token(STRICTFP);
 296  0
        setToken(sourceClass, t);
 297  0
        sourceClass.addModifier( Modifier.STRICT );
 298  0
         break;
 299   
       default:
 300  0
         jj_la1[6] = jj_gen;
 301  0
         jj_consume_token(-1);
 302  0
         throw new ParseException();
 303   
       }
 304   
     }
 305  171
     UnmodifiedClassDeclaration();
 306  171
      popAndAddInner();
 307   
   }
 308   
 
 309  251
   final public void UnmodifiedClassDeclaration() throws ParseException {
 310   
    // Get a ref to the containing class
 311  251
    SourceClass sourceClass = currentClass();
 312   
 
 313  251
    Token ct;
 314  251
    Token name = null;
 315  251
    String superclass = null;
 316  251
     ct = jj_consume_token(CLASS);
 317  251
         if(sourceClass!=null) {
 318  251
             setToken( sourceClass, ct );
 319  251
             sourceClass.setInterface( false );
 320   
         }
 321  251
     name = jj_consume_token(IDENTIFIER);
 322  251
     if(sourceClass.isInner()) {
 323  80
         sourceClass.setName(name.image);
 324  80
         _xJavaDoc.addPackageMaybe( _packageName ).addClass(sourceClass);
 325  80
         _xJavaDoc.addSourceClass( sourceClass );
 326   
     } else {
 327  171
         sourceClass.setQualifiedName(Util.getQualifiedNameFor(_packageName,name.image));
 328  171
         _xJavaDoc.addPackageMaybe( _packageName ).addClass(sourceClass);
 329  171
         _xJavaDoc.addSourceClass( sourceClass );
 330  171
         sourceClass.resolveImportedClasses();
 331   
 
 332   
         // we're adding to xjavadoc in case we're an "extra" class (XJD-8).
 333  171
         _xJavaDoc.addSourceClass(sourceClass);
 334   
     }
 335  251
     switch (jj_nt.kind) {
 336   
     case EXTENDS:
 337  117
       jj_consume_token(EXTENDS);
 338  117
       superclass = Name();
 339  117
       break;
 340   
     default:
 341  134
       jj_la1[7] = jj_gen;
 342   
       ;
 343   
     }
 344  251
     switch (jj_nt.kind) {
 345   
     case IMPLEMENTS:
 346  106
       jj_consume_token(IMPLEMENTS);
 347  106
       Interfaces_NameList();
 348  106
       break;
 349   
     default:
 350  145
       jj_la1[8] = jj_gen;
 351   
       ;
 352   
     }
 353  251
     ClassBody();
 354  251
     if( superclass != null ) {
 355  117
         sourceClass.setSuperclass(superclass);
 356   
     } else {
 357  134
         sourceClass.setSuperclass("java.lang.Object");
 358   
     }
 359   
   }
 360   
 
 361  271
   final public void ClassBody() throws ParseException {
 362  271
     jj_consume_token(LBRACE);
 363  271
     label_4:
 364   
     while (true) {
 365  4053
       switch (jj_nt.kind) {
 366   
       case ABSTRACT:
 367   
       case BOOLEAN:
 368   
       case BYTE:
 369   
       case CHAR:
 370   
       case CLASS:
 371   
       case DOUBLE:
 372   
       case FINAL:
 373   
       case FLOAT:
 374   
       case INT:
 375   
       case INTERFACE:
 376   
       case LONG:
 377   
       case NATIVE:
 378   
       case PRIVATE:
 379   
       case PROTECTED:
 380   
       case PUBLIC:
 381   
       case SHORT:
 382   
       case STATIC:
 383   
       case SYNCHRONIZED:
 384   
       case TRANSIENT:
 385   
       case VOID:
 386   
       case VOLATILE:
 387   
       case STRICTFP:
 388   
       case IDENTIFIER:
 389   
       case LBRACE:
 390   
         ;
 391  3782
         break;
 392   
       default:
 393  271
         jj_la1[9] = jj_gen;
 394  271
         break label_4;
 395   
       }
 396  3782
       ClassBodyDeclaration();
 397   
     }
 398  271
     jj_consume_token(RBRACE);
 399   
   }
 400   
 
 401  64
   final public void NestedClassDeclaration() throws ParseException {
 402  64
    SourceClass sourceClass = pushAndGet();
 403  64
    Token t;
 404  64
     label_5:
 405   
     while (true) {
 406  142
       switch (jj_nt.kind) {
 407   
       case ABSTRACT:
 408   
       case FINAL:
 409   
       case PRIVATE:
 410   
       case PROTECTED:
 411   
       case PUBLIC:
 412   
       case STATIC:
 413   
       case STRICTFP:
 414   
         ;
 415  78
         break;
 416   
       default:
 417  64
         jj_la1[10] = jj_gen;
 418  64
         break label_5;
 419   
       }
 420  78
       switch (jj_nt.kind) {
 421   
       case STATIC:
 422  22
         t = jj_consume_token(STATIC);
 423  22
        sourceClass.addModifier( Modifier.STATIC );
 424  22
        sourceClass.setToken( t );
 425  22
         break;
 426   
       case ABSTRACT:
 427  2
         t = jj_consume_token(ABSTRACT);
 428  2
        sourceClass.addModifier( Modifier.ABSTRACT );
 429  2
        sourceClass.setToken( t );
 430  2
         break;
 431   
       case FINAL:
 432  6
         t = jj_consume_token(FINAL);
 433  6
        sourceClass.addModifier( Modifier.FINAL );
 434  6
        sourceClass.setToken( t );
 435  6
         break;
 436   
       case PUBLIC:
 437  48
         t = jj_consume_token(PUBLIC);
 438  48
        sourceClass.addModifier( Modifier.PUBLIC );
 439  48
        sourceClass.setToken( t );
 440  48
         break;
 441   
       case PROTECTED:
 442  0
         t = jj_consume_token(PROTECTED);
 443  0
        sourceClass.addModifier( Modifier.PROTECTED );
 444  0
        sourceClass.setToken( t );
 445  0
         break;
 446   
       case PRIVATE:
 447  0
         t = jj_consume_token(PRIVATE);
 448  0
        sourceClass.addModifier( Modifier.PRIVATE );
 449  0
        sourceClass.setToken( t );
 450  0
         break;
 451   
       case STRICTFP:
 452  0
         t = jj_consume_token(STRICTFP);
 453  0
        sourceClass.addModifier( Modifier.STRICT );
 454  0
        sourceClass.setToken( t );
 455  0
         break;
 456   
       default:
 457  0
         jj_la1[11] = jj_gen;
 458  0
         jj_consume_token(-1);
 459  0
         throw new ParseException();
 460   
       }
 461   
     }
 462  64
     UnmodifiedClassDeclaration();
 463  64
     popAndAddInner();
 464   
   }
 465   
 
 466  3782
   final public void ClassBodyDeclaration() throws ParseException {
 467  3782
    SourceClass sourceClass = currentClass();
 468  3782
     if (jj_2_2(2)) {
 469  16
       Initializer();
 470  3766
     } else if (jj_2_3(2147483647)) {
 471  54
       NestedClassDeclaration();
 472  3712
     } else if (jj_2_4(2147483647)) {
 473  4
       NestedInterfaceDeclaration();
 474  3708
     } else if (jj_2_5(2147483647)) {
 475  233
       ConstructorDeclaration();
 476  3475
     } else if (jj_2_6(2147483647)) {
 477  2474
       MethodDeclaration();
 478   
     } else {
 479  1001
       switch (jj_nt.kind) {
 480   
       case BOOLEAN:
 481   
       case BYTE:
 482   
       case CHAR:
 483   
       case DOUBLE:
 484   
       case FINAL:
 485   
       case FLOAT:
 486   
       case INT:
 487   
       case LONG:
 488   
       case PRIVATE:
 489   
       case PROTECTED:
 490   
       case PUBLIC:
 491   
       case SHORT:
 492   
       case STATIC:
 493   
       case TRANSIENT:
 494   
       case VOLATILE:
 495   
       case IDENTIFIER:
 496  1001
         FieldDeclaration();
 497  1001
         break;
 498   
       default:
 499  0
         jj_la1[12] = jj_gen;
 500  0
         jj_consume_token(-1);
 501  0
         throw new ParseException();
 502   
       }
 503   
     }
 504   
   }
 505   
 
 506   
 // This production is to determine lookahead only.
 507  0
   final public void MethodDeclarationLookahead() throws ParseException {
 508  0
     label_6:
 509   
     while (true) {
 510  0
       switch (jj_nt.kind) {
 511   
       case ABSTRACT:
 512   
       case FINAL:
 513   
       case NATIVE:
 514   
       case PRIVATE:
 515   
       case PROTECTED:
 516   
       case PUBLIC:
 517   
       case STATIC:
 518   
       case SYNCHRONIZED:
 519   
       case STRICTFP:
 520   
         ;
 521  0
         break;
 522   
       default:
 523  0
         jj_la1[13] = jj_gen;
 524  0
         break label_6;
 525   
       }
 526  0
       switch (jj_nt.kind) {
 527   
       case PUBLIC:
 528  0
         jj_consume_token(PUBLIC);
 529  0
         break;
 530   
       case PROTECTED:
 531  0
         jj_consume_token(PROTECTED);
 532  0
         break;
 533   
       case PRIVATE:
 534  0
         jj_consume_token(PRIVATE);
 535  0
         break;
 536   
       case STATIC:
 537  0
         jj_consume_token(STATIC);
 538  0
         break;
 539   
       case ABSTRACT:
 540  0
         jj_consume_token(ABSTRACT);
 541  0
         break;
 542   
       case FINAL:
 543  0
         jj_consume_token(FINAL);
 544  0
         break;
 545   
       case NATIVE:
 546  0
         jj_consume_token(NATIVE);
 547  0
         break;
 548   
       case SYNCHRONIZED:
 549  0
         jj_consume_token(SYNCHRONIZED);
 550  0
         break;
 551   
       case STRICTFP:
 552  0
         jj_consume_token(STRICTFP);
 553  0
         break;
 554   
       default:
 555  0
         jj_la1[14] = jj_gen;
 556  0
         jj_consume_token(-1);
 557  0
         throw new ParseException();
 558   
       }
 559   
     }
 560  0
     ResultType(null);
 561  0
     jj_consume_token(IDENTIFIER);
 562  0
     jj_consume_token(LPAREN);
 563   
   }
 564   
 
 565  185
   final public void InterfaceDeclaration() throws ParseException {
 566  185
    SourceClass sourceClass = pushAndGet();
 567  185
    Token t = null;
 568  185
     label_7:
 569   
     while (true) {
 570  360
       switch (jj_nt.kind) {
 571   
       case ABSTRACT:
 572   
       case PUBLIC:
 573   
       case STRICTFP:
 574   
         ;
 575  175
         break;
 576   
       default:
 577  185
         jj_la1[15] = jj_gen;
 578  185
         break label_7;
 579   
       }
 580  175
       switch (jj_nt.kind) {
 581   
       case ABSTRACT:
 582  0
         t = jj_consume_token(ABSTRACT);
 583  0
        sourceClass.addModifier( Modifier.ABSTRACT );
 584  0
        sourceClass.setToken( t );
 585  0
         break;
 586   
       case PUBLIC:
 587  175
         t = jj_consume_token(PUBLIC);
 588  175
        sourceClass.addModifier( Modifier.PUBLIC );
 589  175
        sourceClass.setToken( t );
 590  175
         break;
 591   
       case STRICTFP:
 592  0
         t = jj_consume_token(STRICTFP);
 593  0
        sourceClass.addModifier( Modifier.STRICT );
 594  0
        sourceClass.setToken( t );
 595  0
         break;
 596   
       default:
 597  0
         jj_la1[16] = jj_gen;
 598  0
         jj_consume_token(-1);
 599  0
         throw new ParseException();
 600   
       }
 601   
     }
 602  185
     UnmodifiedInterfaceDeclaration();
 603  185
      popAndAddInner();
 604   
   }
 605   
 
 606  14
   final public void NestedInterfaceDeclaration() throws ParseException {
 607  14
    SourceClass sourceClass = pushAndGet();
 608  14
    Token t;
 609  14
     label_8:
 610   
     while (true) {
 611  24
       switch (jj_nt.kind) {
 612   
       case ABSTRACT:
 613   
       case FINAL:
 614   
       case PRIVATE:
 615   
       case PROTECTED:
 616   
       case PUBLIC:
 617   
       case STATIC:
 618   
       case STRICTFP:
 619   
         ;
 620  10
         break;
 621   
       default:
 622  14
         jj_la1[17] = jj_gen;
 623  14
         break label_8;
 624   
       }
 625  10
       switch (jj_nt.kind) {
 626   
       case STATIC:
 627  0
         t = jj_consume_token(STATIC);
 628  0
        sourceClass.addModifier( Modifier.STATIC );
 629  0
        sourceClass.setToken( t );
 630  0
         break;
 631   
       case ABSTRACT:
 632  0
         t = jj_consume_token(ABSTRACT);
 633  0
        sourceClass.addModifier( Modifier.ABSTRACT );
 634  0
        sourceClass.setToken( t );
 635  0
         break;
 636   
       case FINAL:
 637  0
         t = jj_consume_token(FINAL);
 638  0
        sourceClass.addModifier( Modifier.FINAL );
 639  0
        sourceClass.setToken( t );
 640  0
         break;
 641   
       case PUBLIC:
 642  10
         t = jj_consume_token(PUBLIC);
 643  10
        sourceClass.addModifier( Modifier.PUBLIC );
 644  10
        sourceClass.setToken( t );
 645  10
         break;
 646   
       case PROTECTED:
 647  0
         t = jj_consume_token(PROTECTED);
 648  0
        sourceClass.addModifier( Modifier.PROTECTED );
 649  0
        sourceClass.setToken( t );
 650  0
         break;
 651   
       case PRIVATE:
 652  0
         t = jj_consume_token(PRIVATE);
 653  0
        sourceClass.addModifier( Modifier.PRIVATE );
 654  0
        sourceClass.setToken( t );
 655  0
         break;
 656   
       case STRICTFP:
 657  0
         t = jj_consume_token(STRICTFP);
 658  0
        sourceClass.addModifier( Modifier.STRICT );
 659  0
        sourceClass.setToken( t );
 660  0
         break;
 661   
       default:
 662  0
         jj_la1[18] = jj_gen;
 663  0
         jj_consume_token(-1);
 664  0
         throw new ParseException();
 665   
       }
 666   
     }
 667  14
     UnmodifiedInterfaceDeclaration();
 668  14
     popAndAddInner();
 669   
   }
 670   
 
 671  199
   final public void UnmodifiedInterfaceDeclaration() throws ParseException {
 672  199
    SourceClass sourceClass = currentClass();
 673  199
    Token it;
 674  199
    Token name = null;
 675  199
     it = jj_consume_token(INTERFACE);
 676  199
     name = jj_consume_token(IDENTIFIER);
 677   
       // interfaces are always abstract
 678  199
       sourceClass.addModifier( Modifier.ABSTRACT );
 679   
 
 680  199
       if(sourceClass.isInner()) {
 681  14
         sourceClass.setName(name.image);
 682  14
         _xJavaDoc.addPackageMaybe( _packageName ).addClass(sourceClass);
 683  14
         _xJavaDoc.addSourceClass( sourceClass );
 684   
       } else {
 685  185
         sourceClass.setQualifiedName(Util.getQualifiedNameFor(_packageName,name.image));
 686  185
         _xJavaDoc.addPackageMaybe( _packageName ).addClass(sourceClass);
 687  185
         _xJavaDoc.addSourceClass( sourceClass );
 688  185
         sourceClass.resolveImportedClasses();
 689   
       }
 690   
 
 691  199
       sourceClass.setInterface( true );
 692  199
       setToken(sourceClass,it);
 693  199
     switch (jj_nt.kind) {
 694   
     case EXTENDS:
 695  122
       jj_consume_token(EXTENDS);
 696  122
       Interfaces_NameList();
 697  122
       break;
 698   
     default:
 699  77
       jj_la1[19] = jj_gen;
 700   
       ;
 701   
     }
 702  199
     jj_consume_token(LBRACE);
 703  199
     label_9:
 704   
     while (true) {
 705  1871
       switch (jj_nt.kind) {
 706   
       case ABSTRACT:
 707   
       case BOOLEAN:
 708   
       case BYTE:
 709   
       case CHAR:
 710   
       case CLASS:
 711   
       case DOUBLE:
 712   
       case FINAL:
 713   
       case FLOAT:
 714   
       case INT:
 715   
       case INTERFACE:
 716   
       case LONG:
 717   
       case NATIVE:
 718   
       case PRIVATE:
 719   
       case PROTECTED:
 720   
       case PUBLIC:
 721   
       case SHORT:
 722   
       case STATIC:
 723   
       case SYNCHRONIZED:
 724   
       case TRANSIENT:
 725   
       case VOID:
 726   
       case VOLATILE:
 727   
       case STRICTFP:
 728   
       case IDENTIFIER:
 729   
         ;
 730  1672
         break;
 731   
       default:
 732  199
         jj_la1[20] = jj_gen;
 733  199
         break label_9;
 734   
       }
 735  1672
       InterfaceMemberDeclaration();
 736   
     }
 737  199
     jj_consume_token(RBRACE);
 738  199
     if(sourceClass.isInner()) {
 739  14
         sourceClass.setName(name.image);
 740   
     }
 741   
   }
 742   
 
 743  1672
   final public void InterfaceMemberDeclaration() throws ParseException {
 744  1672
     if (jj_2_7(2147483647)) {
 745  10
       NestedClassDeclaration();
 746  1662
     } else if (jj_2_8(2147483647)) {
 747  10
       NestedInterfaceDeclaration();
 748  1652
     } else if (jj_2_9(2147483647)) {
 749  1626
       MethodDeclaration();
 750   
     } else {
 751  26
       switch (jj_nt.kind) {
 752   
       case BOOLEAN:
 753   
       case BYTE:
 754   
       case CHAR:
 755   
       case DOUBLE:
 756   
       case FINAL:
 757   
       case FLOAT:
 758   
       case INT:
 759   
       case LONG:
 760   
       case PRIVATE:
 761   
       case PROTECTED:
 762   
       case PUBLIC:
 763   
       case SHORT:
 764   
       case STATIC:
 765   
       case TRANSIENT:
 766   
       case VOLATILE:
 767   
       case IDENTIFIER:
 768  26
         FieldDeclaration();
 769  26
         break;
 770   
       default:
 771  0
         jj_la1[21] = jj_gen;
 772  0
         jj_consume_token(-1);
 773  0
         throw new ParseException();
 774   
       }
 775   
     }
 776   
   }
 777   
 
 778  1027
   final public void FieldDeclaration() throws ParseException {
 779  1027
    SourceClass sourceClass = currentClass();
 780   
 
 781   
    /* NOTE: We also support lame style like
 782   
 
 783   
    private static int a,b,c,d;
 784   
 
 785   
    They should share the same javadoc, type and modifiers
 786   
    */
 787   
 
 788  1027
    Token t = null;
 789  1027
    FieldImpl fieldImpl = null;
 790  1027
    fieldImpl = new FieldImpl(sourceClass, _tagFactory);
 791  1027
     label_10:
 792   
     while (true) {
 793  2433
       switch (jj_nt.kind) {
 794   
       case FINAL:
 795   
       case PRIVATE:
 796   
       case PROTECTED:
 797   
       case PUBLIC:
 798   
       case STATIC:
 799   
       case TRANSIENT:
 800   
       case VOLATILE:
 801   
         ;
 802  1406
         break;
 803   
       default:
 804  1027
         jj_la1[22] = jj_gen;
 805  1027
         break label_10;
 806   
       }
 807  1406
       switch (jj_nt.kind) {
 808   
       case PUBLIC:
 809  87
         t = jj_consume_token(PUBLIC);
 810  87
        fieldImpl.addModifier( Modifier.PUBLIC );
 811  87
        setToken(fieldImpl,t);
 812  87
         break;
 813   
       case PROTECTED:
 814  30
         t = jj_consume_token(PROTECTED);
 815  30
        fieldImpl.addModifier( Modifier.PROTECTED );
 816  30
        setToken(fieldImpl,t);
 817  30
         break;
 818   
       case PRIVATE:
 819  894
         t = jj_consume_token(PRIVATE);
 820  894
        fieldImpl.addModifier( Modifier.PRIVATE );
 821  894
        setToken(fieldImpl,t);
 822  894
         break;
 823   
       case STATIC:
 824  116
         t = jj_consume_token(STATIC);
 825  116
        fieldImpl.addModifier( Modifier.STATIC );
 826  116
        setToken(fieldImpl,t);
 827  116
         break;
 828   
       case FINAL:
 829  279
         t = jj_consume_token(FINAL);
 830  279
        fieldImpl.addModifier( Modifier.FINAL );
 831  279
        setToken(fieldImpl,t);
 832  279
         break;
 833   
       case TRANSIENT:
 834  0
         t = jj_consume_token(TRANSIENT);
 835  0
        fieldImpl.addModifier( Modifier.TRANSIENT );
 836  0
        setToken(fieldImpl,t);
 837  0
         break;
 838   
       case VOLATILE:
 839  0
         t = jj_consume_token(VOLATILE);
 840  0
        fieldImpl.addModifier( Modifier.VOLATILE );
 841  0
        setToken(fieldImpl,t);
 842  0
         break;
 843   
       default:
 844  0
         jj_la1[23] = jj_gen;
 845  0
         jj_consume_token(-1);
 846  0
         throw new ParseException();
 847   
       }
 848   
     }
 849  1027
     Field_Type(fieldImpl);
 850  1027
     FieldDeclarator(fieldImpl);
 851  1027
     label_11:
 852   
     while (true) {
 853  1029
       switch (jj_nt.kind) {
 854   
       case COMMA:
 855   
         ;
 856  2
         break;
 857   
       default:
 858  1027
         jj_la1[24] = jj_gen;
 859  1027
         break label_11;
 860   
       }
 861  2
       jj_consume_token(COMMA);
 862  2
         FieldImpl badProgrammingStyleFieldImpl = new FieldImpl(sourceClass, _tagFactory);
 863  2
         badProgrammingStyleFieldImpl.setType(fieldImpl.getTypeAsString());
 864  2
       FieldDeclarator(badProgrammingStyleFieldImpl);
 865  2
         sourceClass.addField(badProgrammingStyleFieldImpl);
 866   
     }
 867  1027
     jj_consume_token(SEMICOLON);
 868   
     // we must add the field after parsing the field because the name must be set
 869  1027
     sourceClass.addField(fieldImpl);
 870   
   }
 871   
 
 872  1029
   final public void FieldDeclarator(FieldImpl fieldImpl) throws ParseException {
 873  1029
     Field_VariableDeclaratorId(fieldImpl);
 874  1029
     switch (jj_nt.kind) {
 875   
     case ASSIGN:
 876  384
       jj_consume_token(ASSIGN);
 877  384
       VariableInitializer();
 878  384
       break;
 879   
     default:
 880  645
       jj_la1[25] = jj_gen;
 881   
       ;
 882   
     }
 883   
   }
 884   
 
 885  2223
   final public void VariableDeclarator() throws ParseException {
 886  2223
     VariableDeclaratorId();
 887  2223
     switch (jj_nt.kind) {
 888   
     case ASSIGN:
 889  2143
       jj_consume_token(ASSIGN);
 890  2143
       VariableInitializer();
 891  2143
       break;
 892   
     default:
 893  80
       jj_la1[26] = jj_gen;
 894   
       ;
 895   
     }
 896   
   }
 897   
 
 898  1029
   final public void Field_VariableDeclaratorId(FieldImpl fieldImpl) throws ParseException {
 899  1029
    Token t = null;
 900  1029
     t = jj_consume_token(IDENTIFIER);
 901  1029
     label_12:
 902   
     while (true) {
 903  1029
       switch (jj_nt.kind) {
 904   
       case LBRACKET:
 905   
         ;
 906  0
         break;
 907   
       default:
 908  1029
         jj_la1[27] = jj_gen;
 909  1029
         break label_12;
 910   
       }
 911  0
       jj_consume_token(LBRACKET);
 912  0
       jj_consume_token(RBRACKET);
 913  0
                              fieldImpl.setDimension(fieldImpl.getDimension() + 1);
 914   
     }
 915  1029
      fieldImpl.setName( t.image );
 916   
   }
 917   
 
 918  2623
   final public void Parameter_VariableDeclaratorId() throws ParseException {
 919  2623
    Token t = null;
 920  2623
     t = jj_consume_token(IDENTIFIER);
 921  2623
     label_13:
 922   
     while (true) {
 923  2639
       switch (jj_nt.kind) {
 924   
       case LBRACKET:
 925   
         ;
 926  16
         break;
 927   
       default:
 928  2623
         jj_la1[28] = jj_gen;
 929  2623
         break label_13;
 930   
       }
 931  16
       jj_consume_token(LBRACKET);
 932  16
       jj_consume_token(RBRACKET);
 933  16
                              _parameter.dimension++;
 934   
     }
 935  2623
      _parameter.name = t.image;
 936   
   }
 937   
 
 938  2223
   final public void VariableDeclaratorId() throws ParseException {
 939  2223
     jj_consume_token(IDENTIFIER);
 940  2223
     label_14:
 941   
     while (true) {
 942  2225
       switch (jj_nt.kind) {
 943   
       case LBRACKET:
 944   
         ;
 945  2
         break;
 946   
       default:
 947  2223
         jj_la1[29] = jj_gen;
 948  2223
         break label_14;
 949   
       }
 950  2
       jj_consume_token(LBRACKET);
 951  2
       jj_consume_token(RBRACKET);
 952   
     }
 953   
   }
 954   
 
 955  2641
   final public void VariableInitializer() throws ParseException {
 956  2641
     switch (jj_nt.kind) {
 957   
     case LBRACE:
 958  0
       ArrayInitializer();
 959  0
       break;
 960   
     case BOOLEAN:
 961   
     case BYTE:
 962   
     case CHAR:
 963   
     case DOUBLE:
 964   
     case FALSE:
 965   
     case FLOAT:
 966   
     case INT:
 967   
     case LONG:
 968   
     case NEW:
 969   
     case NULL:
 970   
     case SHORT:
 971   
     case SUPER:
 972   
     case THIS:
 973   
     case TRUE:
 974   
     case VOID:
 975   
     case INTEGER_LITERAL:
 976   
     case FLOATING_POINT_LITERAL:
 977   
     case CHARACTER_LITERAL:
 978   
     case STRING_LITERAL:
 979   
     case IDENTIFIER:
 980   
     case LPAREN:
 981   
     case BANG:
 982   
     case TILDE:
 983   
     case INCR:
 984   
     case DECR:
 985   
     case PLUS:
 986   
     case MINUS:
 987  2641
       Expression();
 988  2641
       break;
 989   
     default:
 990  0
       jj_la1[30] = jj_gen;
 991  0
       jj_consume_token(-1);
 992  0
       throw new ParseException();
 993   
     }
 994   
   }
 995   
 
 996  12
   final public void ArrayInitializer() throws ParseException {
 997  12
     jj_consume_token(LBRACE);
 998  12
     switch (jj_nt.kind) {
 999   
     case BOOLEAN:
 1000   
     case BYTE:
 1001   
     case CHAR:
 1002   
     case DOUBLE:
 1003   
     case FALSE:
 1004   
     case FLOAT:
 1005   
     case INT:
 1006   
     case LONG:
 1007   
     case NEW:
 1008   
     case NULL:
 1009   
     case SHORT:
 1010   
     case SUPER:
 1011   
     case THIS:
 1012   
     case TRUE:
 1013   
     case VOID:
 1014   
     case INTEGER_LITERAL:
 1015   
     case FLOATING_POINT_LITERAL:
 1016   
     case CHARACTER_LITERAL:
 1017   
     case STRING_LITERAL:
 1018   
     case IDENTIFIER:
 1019   
     case LPAREN:
 1020   
     case LBRACE:
 1021   
     case BANG:
 1022   
     case TILDE:
 1023   
     case INCR:
 1024   
     case DECR:
 1025   
     case PLUS:
 1026   
     case MINUS:
 1027  12
       VariableInitializer();
 1028  12
       label_15:
 1029   
       while (true) {
 1030  114
         if (jj_2_10(2)) {
 1031   
           ;
 1032   
         } else {
 1033  12
           break label_15;
 1034   
         }
 1035  102
         jj_consume_token(COMMA);
 1036  102
         VariableInitializer();
 1037   
       }
 1038  12
       break;
 1039   
     default:
 1040  0
       jj_la1[31] = jj_gen;
 1041   
       ;
 1042   
     }
 1043  12
     switch (jj_nt.kind) {
 1044   
     case COMMA:
 1045  0
       jj_consume_token(COMMA);
 1046  0
       break;
 1047   
     default:
 1048  12
       jj_la1[32] = jj_gen;
 1049   
       ;
 1050   
     }
 1051  12
     jj_consume_token(RBRACE);
 1052   
   }
 1053   
 
 1054  4100
   final public void MethodDeclaration() throws ParseException {
 1055  4100
    SourceClass sourceClass = currentClass();
 1056   
 
 1057  4100
    Token t = null;
 1058  4100
    String exceptions = null;
 1059   
 
 1060   
    //this may remain null for anonymous inner classes (sourceClass==null), not a problem because we're not going to access class structure of an anonymous inner class
 1061  4100
    MethodImpl methodImpl = null;
 1062   
 
 1063  4100
     if(sourceClass!=null) {
 1064  4100
        methodImpl = new MethodImpl(sourceClass, _tagFactory);
 1065   
     }
 1066  4100
     label_16:
 1067   
     while (true) {
 1068  7421
       switch (jj_nt.kind) {
 1069   
       case ABSTRACT:
 1070   
       case FINAL:
 1071   
       case NATIVE:
 1072   
       case PRIVATE:
 1073   
       case PROTECTED:
 1074   
       case PUBLIC:
 1075   
       case STATIC:
 1076   
       case SYNCHRONIZED:
 1077   
       case STRICTFP:
 1078   
         ;
 1079  3321
         break;
 1080   
       default:
 1081  4100
         jj_la1[33] = jj_gen;
 1082  4100
         break label_16;
 1083   
       }
 1084  3321
       switch (jj_nt.kind) {
 1085   
       case PUBLIC:
 1086  1974
         t = jj_consume_token(PUBLIC);
 1087  1974
         if(methodImpl!=null) {
 1088  1974
             methodImpl.addModifier( Modifier.PUBLIC );
 1089  1974
             setToken( methodImpl, t );
 1090   
         }
 1091  1974
         break;
 1092   
       case PROTECTED:
 1093  87
         t = jj_consume_token(PROTECTED);
 1094  87
         if(methodImpl!=null) {
 1095  87
             methodImpl.addModifier( Modifier.PROTECTED );
 1096  87
             setToken( methodImpl, t );
 1097   
         }
 1098  87
         break;
 1099   
       case PRIVATE:
 1100  341
         t = jj_consume_token(PRIVATE);
 1101  341
         if(methodImpl!=null) {
 1102  341
             methodImpl.addModifier( Modifier.PRIVATE );
 1103  341
             setToken( methodImpl, t );
 1104   
         }
 1105  341
         break;
 1106   
       case STATIC:
 1107  61
         t = jj_consume_token(STATIC);
 1108  61
         if(methodImpl!=null) {
 1109  61
             methodImpl.addModifier( Modifier.STATIC );
 1110  61
             setToken( methodImpl, t );
 1111   
         }
 1112  61
         break;
 1113   
       case ABSTRACT:
 1114  7
         t = jj_consume_token(ABSTRACT);
 1115  7
         if(methodImpl!=null) {
 1116  7
             methodImpl.addModifier( Modifier.ABSTRACT );
 1117  7
             setToken( methodImpl, t );
 1118   
         }
 1119  7
         break;
 1120   
       case FINAL:
 1121  851
         t = jj_consume_token(FINAL);
 1122  851
         if(methodImpl!=null) {
 1123  851
             methodImpl.addModifier( Modifier.FINAL );
 1124  851
             setToken( methodImpl, t );
 1125   
         }
 1126  851
         break;
 1127   
       case NATIVE:
 1128  0
         t = jj_consume_token(NATIVE);
 1129  0
         if(methodImpl!=null) {
 1130  0
             methodImpl.addModifier( Modifier.NATIVE );
 1131  0
             setToken( methodImpl, t );
 1132   
         }
 1133  0
         break;
 1134   
       case SYNCHRONIZED:
 1135  0
         t = jj_consume_token(SYNCHRONIZED);
 1136  0
         if(methodImpl!=null) {
 1137  0
             methodImpl.addModifier( Modifier.SYNCHRONIZED );
 1138  0
             setToken( methodImpl, t );
 1139   
         }
 1140  0
         break;
 1141   
       case STRICTFP:
 1142  0
         t = jj_consume_token(STRICTFP);
 1143  0
         if(methodImpl!=null) {
 1144  0
             methodImpl.addModifier( Modifier.STRICT );
 1145  0
             setToken( methodImpl, t );
 1146   
         }
 1147  0
         break;
 1148   
       default:
 1149  0
         jj_la1[34] = jj_gen;
 1150  0
         jj_consume_token(-1);
 1151  0
         throw new ParseException();
 1152   
       }
 1153   
     }
 1154  4100
     ResultType(methodImpl);
 1155  4100
     MethodDeclarator(methodImpl);
 1156  4100
     switch (jj_nt.kind) {
 1157   
     case THROWS:
 1158  228
       jj_consume_token(THROWS);
 1159  228
       ExecutableMemberThrows_NameList(methodImpl);
 1160  228
       break;
 1161   
     default:
 1162  3872
       jj_la1[35] = jj_gen;
 1163   
       ;
 1164   
     }
 1165  4100
     switch (jj_nt.kind) {
 1166   
     case LBRACE:
 1167  2467
       Method_Block();
 1168  2467
       break;
 1169   
     case SEMICOLON:
 1170  1633
       jj_consume_token(SEMICOLON);
 1171  1633
       break;
 1172   
     default:
 1173  0
       jj_la1[36] = jj_gen;
 1174  0
       jj_consume_token(-1);
 1175  0
       throw new ParseException();
 1176   
     }
 1177   
     // we must add the method after the fields are in, because the
 1178   
     // signature must be complete when adding
 1179  4100
     sourceClass.addMethod(methodImpl);
 1180   
   }
 1181   
 
 1182  4100
   final public void MethodDeclarator(MethodImpl methodImpl) throws ParseException {
 1183  4100
    Token t = null;
 1184  4100
     t = jj_consume_token(IDENTIFIER);
 1185  4100
      if( methodImpl != null ) {
 1186  4100
         methodImpl.setName( t.image );
 1187   
      }
 1188  4100
     FormalParameters(methodImpl);
 1189  4100
     label_17:
 1190   
     while (true) {
 1191  4100
       switch (jj_nt.kind) {
 1192   
       case LBRACKET:
 1193   
         ;
 1194  0
         break;
 1195   
       default:
 1196  4100
         jj_la1[37] = jj_gen;
 1197  4100
         break label_17;
 1198   
       }
 1199  0
       jj_consume_token(LBRACKET);
 1200  0
       jj_consume_token(RBRACKET);
 1201  0
      methodImpl.setReturnDimension( methodImpl.getReturnType().getDimension() + 1 );
 1202   
     }
 1203   
   }
 1204   
 
 1205  4333
   final public void FormalParameters(AbstractExecutableMember member) throws ParseException {
 1206  4333
     jj_consume_token(LPAREN);
 1207  4333
     switch (jj_nt.kind) {
 1208   
     case BOOLEAN:
 1209   
     case BYTE:
 1210   
     case CHAR:
 1211   
     case DOUBLE:
 1212   
     case FINAL:
 1213   
     case FLOAT:
 1214   
     case INT:
 1215   
     case LONG:
 1216   
     case SHORT:
 1217   
     case IDENTIFIER:
 1218  1790
       FormalParameter(member);
 1219  1790
       label_18:
 1220   
       while (true) {
 1221  2536
         switch (jj_nt.kind) {
 1222   
         case COMMA:
 1223   
           ;
 1224  746
           break;
 1225   
         default:
 1226  1790
           jj_la1[38] = jj_gen;
 1227  1790
           break label_18;
 1228   
         }
 1229  746
         jj_consume_token(COMMA);
 1230  746
         FormalParameter(member);
 1231   
       }
 1232  1790
       break;
 1233   
     default:
 1234  2543
       jj_la1[39] = jj_gen;
 1235   
       ;
 1236   
     }
 1237  4333
     jj_consume_token(RPAREN);
 1238   
   }
 1239   
 
 1240  2623
   final public void FormalParameter(AbstractExecutableMember member) throws ParseException {
 1241  2623
    if(member != null) {
 1242   
       // reset the _parameter helper's dimension
 1243  2536
       _parameter.dimension = 0;
 1244   
    }
 1245  2623
     switch (jj_nt.kind) {
 1246   
     case FINAL:
 1247  104
       jj_consume_token(FINAL);
 1248  104
       break;
 1249   
     default:
 1250  2519
       jj_la1[40] = jj_gen;
 1251   
       ;
 1252   
     }
 1253  2623
     Parameter_Type();
 1254  2623
     Parameter_VariableDeclaratorId();
 1255  2623
      if( member != null ) {
 1256  2536
         member.addParameterData(_parameter.type, _parameter.name, _parameter.dimension);
 1257   
      }
 1258   
   }
 1259   
 
 1260  233
   final public void ConstructorDeclaration() throws ParseException {
 1261  233
    SourceClass sourceClass = currentClass();
 1262  233
    Token t = null;
 1263  233
    ConstructorImpl constructor = constructor = new ConstructorImpl(sourceClass, _tagFactory);
 1264  233
     switch (jj_nt.kind) {
 1265   
     case PRIVATE:
 1266   
     case PROTECTED:
 1267   
     case PUBLIC:
 1268  211
       switch (jj_nt.kind) {
 1269   
       case PUBLIC:
 1270  131
         t = jj_consume_token(PUBLIC);
 1271  131
        constructor.addModifier( Modifier.PUBLIC );
 1272  131
        setToken( constructor, t );
 1273  131
         break;
 1274   
       case PROTECTED:
 1275  80
         t = jj_consume_token(PROTECTED);
 1276  80
        constructor.addModifier( Modifier.PROTECTED );
 1277  80
        setToken( constructor, t );
 1278  80
         break;
 1279   
       case PRIVATE:
 1280  0
         t = jj_consume_token(PRIVATE);
 1281  0
        constructor.addModifier( Modifier.PRIVATE );
 1282  0
        setToken( constructor, t );
 1283  0
         break;
 1284   
       default:
 1285  0
         jj_la1[41] = jj_gen;
 1286  0
         jj_consume_token(-1);
 1287  0
         throw new ParseException();
 1288   
       }
 1289  211
       break;
 1290   
     default:
 1291  22
       jj_la1[42] = jj_gen;
 1292   
       ;
 1293   
     }
 1294  233
     jj_consume_token(IDENTIFIER);
 1295  233
     FormalParameters(constructor);
 1296  233
     switch (jj_nt.kind) {
 1297   
     case THROWS:
 1298  0
       jj_consume_token(THROWS);
 1299  0
       ExecutableMemberThrows_NameList(constructor);
 1300  0
       break;
 1301   
     default:
 1302  233
       jj_la1[43] = jj_gen;
 1303   
       ;
 1304   
     }
 1305  233
     jj_consume_token(LBRACE);
 1306  233
     if (jj_2_11(2147483647)) {
 1307  90
       ExplicitConstructorInvocation();
 1308   
     } else {
 1309   
       ;
 1310   
     }
 1311  233
     label_19:
 1312   
     while (true) {
 1313  525
       switch (jj_nt.kind) {
 1314   
       case BOOLEAN:
 1315   
       case BREAK:
 1316   
       case BYTE:
 1317   
       case CHAR:
 1318   
       case CLASS:
 1319   
       case CONTINUE:
 1320   
       case DO:
 1321   
       case DOUBLE:
 1322   
       case FALSE:
 1323   
       case FINAL:
 1324   
       case FLOAT:
 1325   
       case FOR:
 1326   
       case IF:
 1327   
       case INT:
 1328   
       case INTERFACE:
 1329   
       case LONG:
 1330   
       case NEW:
 1331   
       case NULL:
 1332   
       case RETURN:
 1333   
       case SHORT:
 1334   
       case SUPER:
 1335   
       case SWITCH:
 1336   
       case SYNCHRONIZED:
 1337   
       case THIS:
 1338   
       case THROW:
 1339   
       case TRUE:
 1340   
       case TRY:
 1341   
       case VOID:
 1342   
       case WHILE:
 1343   
       case ASSERT:
 1344   
       case INTEGER_LITERAL:
 1345   
       case FLOATING_POINT_LITERAL:
 1346   
       case CHARACTER_LITERAL:
 1347   
       case STRING_LITERAL:
 1348   
       case IDENTIFIER:
 1349   
       case LPAREN:
 1350   
       case LBRACE:
 1351   
       case SEMICOLON:
 1352   
       case INCR:
 1353   
       case DECR:
 1354   
         ;
 1355  292
         break;
 1356   
       default:
 1357  233
         jj_la1[44] = jj_gen;
 1358  233
         break label_19;
 1359   
       }
 1360  292
       BlockStatement();
 1361   
     }
 1362  233
     jj_consume_token(RBRACE);
 1363   
     // we must add the method after the fields are in, because the
 1364   
     // signature must be complete when adding
 1365  233
     sourceClass.addConstructor(constructor);
 1366   
   }
 1367   
 
 1368  90
   final public void ExplicitConstructorInvocation() throws ParseException {
 1369  90
     if (jj_2_13(2147483647)) {
 1370  20
       jj_consume_token(THIS);
 1371  20
       Arguments();
 1372  20
       jj_consume_token(SEMICOLON);
 1373   
     } else {
 1374  70
       switch (jj_nt.kind) {
 1375   
       case BOOLEAN:
 1376   
       case BYTE:
 1377   
       case CHAR:
 1378   
       case DOUBLE:
 1379   
       case FALSE:
 1380   
       case FLOAT:
 1381   
       case INT:
 1382   
       case LONG:
 1383   
       case NEW:
 1384   
       case NULL:
 1385   
       case SHORT:
 1386   
       case SUPER:
 1387   
       case THIS:
 1388   
       case TRUE:
 1389   
       case VOID:
 1390   
       case INTEGER_LITERAL:
 1391   
       case FLOATING_POINT_LITERAL:
 1392   
       case CHARACTER_LITERAL:
 1393   
       case STRING_LITERAL:
 1394   
       case IDENTIFIER:
 1395   
       case LPAREN:
 1396  70
         if (jj_2_12(2)) {
 1397  0
           PrimaryExpression();
 1398  0
           jj_consume_token(DOT);
 1399   
         } else {
 1400   
           ;
 1401   
         }
 1402  70
         jj_consume_token(SUPER);
 1403  70
         Arguments();
 1404  70
         jj_consume_token(SEMICOLON);
 1405  70
         break;
 1406   
       default:
 1407  0
         jj_la1[45] = jj_gen;
 1408  0
         jj_consume_token(-1);
 1409  0
         throw new ParseException();
 1410   
       }
 1411   
     }
 1412   
   }
 1413   
 
 1414  16
   final public void Initializer() throws ParseException {
 1415  16
     switch (jj_nt.kind) {
 1416   
     case STATIC:
 1417  16
       jj_consume_token(STATIC);
 1418  16
       break;
 1419   
     default:
 1420  0
       jj_la1[46] = jj_gen;
 1421   
       ;
 1422   
     }
 1423  16
     Block();
 1424   
   }
 1425   
 
 1426   
 /*
 1427   
  * Type, name and expression syntax follows.
 1428   
  */
 1429  1027
   final public void Field_Type(FieldImpl fieldImpl) throws ParseException {
 1430  1027
    Token typeToken;
 1431  1027
    String type;
 1432  1027
     switch (jj_nt.kind) {
 1433   
     case BOOLEAN:
 1434   
     case BYTE:
 1435   
     case CHAR:
 1436   
     case DOUBLE:
 1437   
     case FLOAT:
 1438   
     case INT:
 1439   
     case LONG:
 1440   
     case SHORT:
 1441  170
       typeToken = PrimitiveType();
 1442  170
       if( fieldImpl != null ) {
 1443  170
         fieldImpl.setType(typeToken.image);
 1444  170
         setToken( fieldImpl, typeToken );
 1445   
       }
 1446  170
       break;
 1447   
     case IDENTIFIER:
 1448  857
       type = Name();
 1449  857
       if( fieldImpl != null ) {
 1450  857
         fieldImpl.setType(type);
 1451  857
         setToken( fieldImpl, _nameToken );
 1452   
       }
 1453  857
       break;
 1454   
     default:
 1455  0
       jj_la1[47] = jj_gen;
 1456  0
       jj_consume_token(-1);
 1457  0
       throw new ParseException();
 1458   
     }
 1459  1027
     label_20:
 1460   
     while (true) {
 1461  1039
       switch (jj_nt.kind) {
 1462   
       case LBRACKET:
 1463   
         ;
 1464  12
         break;
 1465   
       default:
 1466  1027
         jj_la1[48] = jj_gen;
 1467  1027
         break label_20;
 1468   
       }
 1469  12
       jj_consume_token(LBRACKET);
 1470  12
       jj_consume_token(RBRACKET);
 1471  12
      if( fieldImpl != null ) {
 1472  12
         fieldImpl.setDimension(fieldImpl.getDimension() + 1);
 1473   
      }
 1474   
     }
 1475   
   }
 1476   
 
 1477  3192
   final public void MethodResult_Type(MethodImpl methodImpl) throws ParseException {
 1478  3192
    Token typeToken;
 1479  3192
    String type;
 1480  3192
     switch (jj_nt.kind) {
 1481   
     case BOOLEAN:
 1482   
     case BYTE:
 1483   
     case CHAR:
 1484   
     case DOUBLE:
 1485   
     case FLOAT:
 1486   
     case INT:
 1487   
     case LONG:
 1488   
     case SHORT:
 1489  1088
       typeToken = PrimitiveType();
 1490  1088
       if( methodImpl != null ) {
 1491  1082
         methodImpl.setReturnType(typeToken.image);
 1492  1082
         setToken( methodImpl, typeToken );
 1493   
       }
 1494  1088
       break;
 1495   
     case IDENTIFIER:
 1496  2104
       type = Name();
 1497  2104
       if( methodImpl != null ) {
 1498  2083
         methodImpl.setReturnType(type);
 1499  2083
         setToken( methodImpl, _nameToken );
 1500   
       }
 1501  2104
       break;
 1502   
     default:
 1503  0
       jj_la1[49] = jj_gen;
 1504  0
       jj_consume_token(-1);
 1505  0
       throw new ParseException();
 1506   
     }
 1507  3192
     label_21:
 1508   
     while (true) {
 1509  3213
       switch (jj_nt.kind) {
 1510   
       case LBRACKET:
 1511   
         ;
 1512  21
         break;
 1513   
       default:
 1514  3192
         jj_la1[50] = jj_gen;
 1515  3192
         break label_21;
 1516   
       }
 1517  21
       jj_consume_token(LBRACKET);
 1518  21
       jj_consume_token(RBRACKET);
 1519  21
      if( methodImpl != null ) {
 1520  9
         methodImpl.setReturnDimension(methodImpl.getReturnType().getDimension() + 1);
 1521   
      }
 1522   
     }
 1523   
   }
 1524   
 
 1525  2623
   final public void Parameter_Type() throws ParseException {
 1526  2623
    Token primitive;
 1527  2623
    String name;
 1528  2623
     switch (jj_nt.kind) {
 1529   
     case BOOLEAN:
 1530   
     case BYTE:
 1531   
     case CHAR:
 1532   
     case DOUBLE:
 1533   
     case FLOAT:
 1534   
     case INT:
 1535   
     case LONG:
 1536   
     case SHORT:
 1537  528
       primitive = PrimitiveType();
 1538  528
        _parameter.type = primitive.image;
 1539  528
       break;
 1540   
     case IDENTIFIER:
 1541  2095
       name = Name();
 1542  2095
        _parameter.type = name;
 1543  2095
       break;
 1544   
     default:
 1545  0
       jj_la1[51] = jj_gen;
 1546  0
       jj_consume_token(-1);
 1547  0
       throw new ParseException();
 1548   
     }
 1549  2623
     label_22:
 1550   
     while (true) {
 1551  2663
       switch (jj_nt.kind) {
 1552   
       case LBRACKET:
 1553   
         ;
 1554  40
         break;
 1555   
       default:
 1556  2623
         jj_la1[52] = jj_gen;
 1557  2623
         break label_22;
 1558   
       }
 1559  40
       jj_consume_token(LBRACKET);
 1560  40
       jj_consume_token(RBRACKET);
 1561  40
               _parameter.dimension++;
 1562   
     }
 1563   
   }
 1564   
 
 1565  3032
   final public void Type() throws ParseException {
 1566  3032
     switch (jj_nt.kind) {
 1567   
     case BOOLEAN:
 1568   
     case BYTE:
 1569   
     case CHAR:
 1570   
     case DOUBLE:
 1571   
     case FLOAT:
 1572   
     case INT:
 1573   
     case LONG:
 1574   
     case SHORT:
 1575  270
       PrimitiveType();
 1576  270
       break;
 1577   
     case IDENTIFIER:
 1578  2762
       Name();
 1579  2762
       break;
 1580   
     default:
 1581  0
       jj_la1[53] = jj_gen;
 1582  0
       jj_consume_token(-1);
 1583  0
       throw new ParseException();
 1584   
     }
 1585  3032
     label_23:
 1586   
     while (true) {
 1587  3041
       switch (jj_nt.kind) {
 1588   
       case LBRACKET:
 1589   
         ;
 1590  9
         break;
 1591   
       default:
 1592  3032
         jj_la1[54] = jj_gen;
 1593  3032
         break label_23;
 1594   
       }
 1595  9
       jj_consume_token(LBRACKET);
 1596  9
       jj_consume_token(RBRACKET);
 1597   
     }
 1598   
   }
 1599   
 
 1600  2056
   final public Token PrimitiveType() throws ParseException {
 1601  2056
    Token t = null;
 1602  2056
     switch (jj_nt.kind) {
 1603   
     case BOOLEAN:
 1604  1358
       t = jj_consume_token(BOOLEAN);
 1605  1358
                 {if (true) return t;}
 1606  0
       break;
 1607   
     case CHAR:
 1608  0
       t = jj_consume_token(CHAR);
 1609  0
              {if (true) return t;}
 1610  0
       break;
 1611   
     case BYTE:
 1612  0
       t = jj_consume_token(BYTE);
 1613  0
              {if (true) return t;}
 1614  0
       break;
 1615   
     case SHORT:
 1616  0
       t = jj_consume_token(SHORT);
 1617  0
               {if (true) return t;}
 1618  0
       break;
 1619   
     case INT:
 1620  632
       t = jj_consume_token(INT);
 1621  632
             {if (true) return t;}
 1622  0
       break;
 1623   
     case LONG:
 1624  66
       t = jj_consume_token(LONG);
 1625  66
              {if (true) return t;}
 1626  0
       break;
 1627   
     case FLOAT:
 1628  0
       t = jj_consume_token(FLOAT);
 1629  0
               {if (true) return t;}
 1630  0
       break;
 1631   
     case DOUBLE:
 1632  0
       t = jj_consume_token(DOUBLE);
 1633  0
                {if (true) return t;}
 1634  0
       break;
 1635   
     default:
 1636  0
       jj_la1[55] = jj_gen;
 1637  0
       jj_consume_token(-1);
 1638  0
       throw new ParseException();
 1639   
     }
 1640  0
     throw new Error("Missing return statement in function");
 1641   
   }
 1642   
 
 1643  4127
   final public void ResultType(MethodImpl methodImpl) throws ParseException {
 1644  4127
    Token t = null;
 1645  4127
     switch (jj_nt.kind) {
 1646   
     case VOID:
 1647  935
       t = jj_consume_token(VOID);
 1648  935
      if( methodImpl != null ) {
 1649  935
         methodImpl.setReturnType( "void" );
 1650  935
         methodImpl.setReturnDimension( 0 );
 1651  935
         setToken( methodImpl, t );
 1652   
      }
 1653  935
       break;
 1654   
     case BOOLEAN:
 1655   
     case BYTE:
 1656   
     case CHAR:
 1657   
     case DOUBLE:
 1658   
     case FLOAT:
 1659   
     case INT:
 1660   
     case LONG:
 1661   
     case SHORT:
 1662   
     case IDENTIFIER:
 1663  3192
       MethodResult_Type(methodImpl);
 1664  3192
       break;
 1665   
     default:
 1666  0
       jj_la1[56] = jj_gen;
 1667  0
       jj_consume_token(-1);
 1668  0
       throw new ParseException();
 1669   
     }
 1670   
   }
 1671   
 
 1672  26795
   final public String Name() throws ParseException {
 1673   
    // reset the buffer
 1674  26795
    clearNameBuffer();
 1675  26795
    Token t = null;
 1676  26795
     _nameToken = jj_consume_token(IDENTIFIER);
 1677  26795
      _nameBuffer.append(_nameToken.image);
 1678  26795
     label_24:
 1679   
     while (true) {
 1680  34177
       if (jj_2_14(2)) {
 1681   
         ;
 1682   
       } else {
 1683  26795
         break label_24;
 1684   
       }
 1685  7382
       jj_consume_token(DOT);
 1686  7382
       t = jj_consume_token(IDENTIFIER);
 1687  7382
      _nameBuffer.append(".").append(t.image);
 1688   
     }
 1689  26795
      {if (true) return _nameBuffer.toString();}
 1690  0
     throw new Error("Missing return statement in function");
 1691   
   }
 1692   
 
 1693  255
   final public void ExecutableMemberThrows_Name(AbstractExecutableMember member) throws ParseException {
 1694   
    // reset the buffer
 1695  255
    clearNameBuffer();
 1696  255
    Token t = null;
 1697  255
     t = jj_consume_token(IDENTIFIER);
 1698  255
      _nameBuffer.append(t.image);
 1699  255
     label_25:
 1700   
     while (true) {
 1701  255
       switch (jj_nt.kind) {
 1702   
       case DOT:
 1703   
         ;
 1704  0
         break;
 1705   
       default:
 1706  255
         jj_la1[57] = jj_gen;
 1707  255
         break label_25;
 1708   
       }
 1709  0
       jj_consume_token(DOT);
 1710  0
       t = jj_consume_token(IDENTIFIER);
 1711  0
      _nameBuffer.append(".").append(t.image);
 1712   
     }
 1713  255
      if( member != null ) {
 1714  255
         member.addThrownException( _nameBuffer.toString() );
 1715   
      }
 1716   
   }
 1717   
 
 1718  288
   final public void Interfaces_Name() throws ParseException {
 1719  288
    SourceClass sourceClass = currentClass();
 1720   
 
 1721   
    // reset the buffer
 1722  288
    clearNameBuffer();
 1723  288
    Token t = null;
 1724  288
     t = jj_consume_token(IDENTIFIER);
 1725  288
      _nameBuffer.append(t.image);
 1726  288
     label_26:
 1727   
     while (true) {
 1728  364
       switch (jj_nt.kind) {
 1729   
       case DOT:
 1730   
         ;
 1731  76
         break;
 1732   
       default:
 1733  288
         jj_la1[58] = jj_gen;
 1734  288
         break label_26;
 1735   
       }
 1736  76
       jj_consume_token(DOT);
 1737  76
       t = jj_consume_token(IDENTIFIER);
 1738  76
      _nameBuffer.append(".").append(t.image);
 1739   
     }
 1740  288
      sourceClass.addInterface( _nameBuffer.toString() );
 1741   
   }
 1742   
 
 1743  0
   final public void NameList() throws ParseException {
 1744  0
     Name();
 1745  0
     label_27:
 1746   
     while (true) {
 1747  0
       switch (jj_nt.kind) {
 1748   
       case COMMA:
 1749   
         ;
 1750  0
         break;
 1751   
       default:
 1752  0
         jj_la1[59] = jj_gen;
 1753  0
         break label_27;
 1754   
       }
 1755  0
       jj_consume_token(COMMA);
 1756  0
       Name();
 1757   
     }
 1758   
   }
 1759   
 
 1760  228
   final public void ExecutableMemberThrows_NameList(AbstractExecutableMember member) throws ParseException {
 1761  228
     ExecutableMemberThrows_Name(member);
 1762  228
     label_28:
 1763   
     while (true) {
 1764  255
       switch (jj_nt.kind) {
 1765   
       case COMMA:
 1766   
         ;
 1767  27
         break;
 1768   
       default:
 1769  228
         jj_la1[60] = jj_gen;
 1770  228
         break label_28;
 1771   
       }
 1772  27
       jj_consume_token(COMMA);
 1773  27
       ExecutableMemberThrows_Name(member);
 1774   
     }
 1775   
   }
 1776   
 
 1777  228
   final public void Interfaces_NameList() throws ParseException {
 1778  228
     Interfaces_Name();
 1779  228
     label_29:
 1780   
     while (true) {
 1781  288
       switch (jj_nt.kind) {
 1782   
       case COMMA:
 1783   
         ;
 1784  60
         break;
 1785   
       default:
 1786  228
         jj_la1[61] = jj_gen;
 1787  228
         break label_29;
 1788   
       }
 1789  60
       jj_consume_token(COMMA);
 1790  60
       Interfaces_Name();
 1791   
     }
 1792   
   }
 1793   
 
 1794   
 /*
 1795   
  * Expression syntax follows.
 1796   
  */
 1797  15679
   final public void Expression() throws ParseException {
 1798  15679
     ConditionalExpression();
 1799  15679
     switch (jj_nt.kind) {
 1800   
     case ASSIGN:
 1801   
     case PLUSASSIGN:
 1802   
     case MINUSASSIGN:
 1803   
     case STARASSIGN:
 1804   
     case SLASHASSIGN:
 1805   
     case ANDASSIGN:
 1806   
     case ORASSIGN:
 1807   
     case XORASSIGN:
 1808   
     case REMASSIGN:
 1809   
     case LSHIFTASSIGN:
 1810   
     case RSIGNEDSHIFTASSIGN:
 1811   
     case RUNSIGNEDSHIFTASSIGN:
 1812  91
       AssignmentOperator();
 1813  91
       Expression();
 1814  91
       break;
 1815   
     default:
 1816  15588
       jj_la1[62] = jj_gen;
 1817   
       ;
 1818   
     }
 1819   
   }
 1820   
 
 1821  2099
   final public void AssignmentOperator() throws ParseException {
 1822  2099
     switch (jj_nt.kind) {
 1823   
     case ASSIGN:
 1824  2060
       jj_consume_token(ASSIGN);
 1825  2060
       break;
 1826   
     case STARASSIGN:
 1827  0
       jj_consume_token(STARASSIGN);
 1828  0
       break;
 1829   
     case SLASHASSIGN:
 1830  0
       jj_consume_token(SLASHASSIGN);
 1831  0
       break;
 1832   
     case REMASSIGN:
 1833  0
       jj_consume_token(REMASSIGN);
 1834  0
       break;
 1835   
     case PLUSASSIGN:
 1836  23
       jj_consume_token(PLUSASSIGN);
 1837  23
       break;
 1838   
     case MINUSASSIGN:
 1839  0
       jj_consume_token(MINUSASSIGN);
 1840  0
       break;
 1841   
     case LSHIFTASSIGN:
 1842  0
       jj_consume_token(LSHIFTASSIGN);
 1843  0
       break;
 1844   
     case RSIGNEDSHIFTASSIGN:
 1845  0
       jj_consume_token(RSIGNEDSHIFTASSIGN);
 1846  0
       break;
 1847   
     case RUNSIGNEDSHIFTASSIGN:
 1848  0
       jj_consume_token(RUNSIGNEDSHIFTASSIGN);
 1849  0
       break;
 1850   
     case ANDASSIGN:
 1851  0
       jj_consume_token(ANDASSIGN);
 1852  0
       break;
 1853   
     case XORASSIGN:
 1854  0
       jj_consume_token(XORASSIGN);
 1855  0
       break;
 1856   
     case ORASSIGN:
 1857  16
       jj_consume_token(ORASSIGN);
 1858  16
       break;
 1859   
     default:
 1860  0
       jj_la1[63] = jj_gen;
 1861  0
       jj_consume_token(-1);
 1862  0
       throw new ParseException();
 1863   
     }
 1864   
   }
 1865   
 
 1866  15821
   final public void ConditionalExpression() throws ParseException {
 1867  15821
     ConditionalOrExpression();
 1868  15821
     switch (jj_nt.kind) {
 1869   
     case HOOK:
 1870  142
       jj_consume_token(HOOK);
 1871  142
       Expression();
 1872  142
       jj_consume_token(COLON);
 1873  142
       ConditionalExpression();
 1874  142
       break;
 1875   
     default:
 1876  15679
       jj_la1[64] = jj_gen;
 1877   
       ;
 1878   
     }
 1879   
   }
 1880   
 
 1881  15821
   final public void ConditionalOrExpression() throws ParseException {
 1882  15821
     ConditionalAndExpression();
 1883  15821
     label_30:
 1884   
     while (true) {
 1885  15905
       switch (jj_nt.kind) {
 1886   
       case SC_OR:
 1887   
         ;
 1888  84
         break;
 1889   
       default:
 1890  15821
         jj_la1[65] = jj_gen;
 1891  15821
         break label_30;
 1892   
       }
 1893  84
       jj_consume_token(SC_OR);
 1894  84
       ConditionalAndExpression();
 1895   
     }
 1896   
   }
 1897   
 
 1898  15905
   final public void ConditionalAndExpression() throws ParseException {
 1899  15905
     InclusiveOrExpression();
 1900  15905
     label_31:
 1901   
     while (true) {
 1902  16096
       switch (jj_nt.kind) {
 1903   
       case SC_AND:
 1904   
         ;
 1905  191
         break;
 1906   
       default:
 1907  15905
         jj_la1[66] = jj_gen;
 1908  15905
         break label_31;
 1909   
       }
 1910  191
       jj_consume_token(SC_AND);
 1911  191
       InclusiveOrExpression();
 1912   
     }
 1913   
   }
 1914   
 
 1915  16096
   final public void InclusiveOrExpression() throws ParseException {
 1916  16096
     ExclusiveOrExpression();
 1917  16096
     label_32:
 1918   
     while (true) {
 1919  16096
       switch (jj_nt.kind) {
 1920   
       case BIT_OR:
 1921   
         ;
 1922  0
         break;
 1923   
       default:
 1924  16096
         jj_la1[67] = jj_gen;
 1925  16096
         break label_32;
 1926   
       }
 1927  0
       jj_consume_token(BIT_OR);
 1928  0
       ExclusiveOrExpression();
 1929   
     }
 1930   
   }
 1931   
 
 1932  16096
   final public void ExclusiveOrExpression() throws ParseException {
 1933  16096
     AndExpression();
 1934  16096
     label_33:
 1935   
     while (true) {
 1936  16096
       switch (jj_nt.kind) {
 1937   
       case XOR:
 1938   
         ;
 1939  0
         break;
 1940   
       default:
 1941  16096
         jj_la1[68] = jj_gen;
 1942  16096
         break label_33;
 1943   
       }
 1944  0
       jj_consume_token(XOR);
 1945  0
       AndExpression();
 1946   
     }
 1947   
   }
 1948   
 
 1949  16096
   final public void AndExpression() throws ParseException {
 1950  16096
     EqualityExpression();
 1951  16096
     label_34:
 1952   
     while (true) {
 1953  16202
       switch (jj_nt.kind) {
 1954   
       case BIT_AND:
 1955   
         ;
 1956  106
         break;
 1957   
       default:
 1958  16096
         jj_la1[69] = jj_gen;
 1959  16096
         break label_34;
 1960   
       }
 1961  106
       jj_consume_token(BIT_AND);
 1962  106
       EqualityExpression();
 1963   
     }
 1964   
   }
 1965   
 
 1966  16202
   final public void EqualityExpression() throws ParseException {
 1967  16202
     InstanceOfExpression();
 1968  16202
     label_35:
 1969   
     while (true) {
 1970  17914
       switch (jj_nt.kind) {
 1971   
       case EQ:
 1972   
       case NE:
 1973   
         ;
 1974  1712
         break;
 1975   
       default:
 1976  16202
         jj_la1[70] = jj_gen;
 1977  16202
         break label_35;
 1978   
       }
 1979  1712
       switch (jj_nt.kind) {
 1980   
       case EQ:
 1981  837
         jj_consume_token(EQ);
 1982  837
         break;
 1983   
       case NE:
 1984  875
         jj_consume_token(NE);
 1985  875
         break;
 1986   
       default:
 1987  0
         jj_la1[71] = jj_gen;
 1988  0
         jj_consume_token(-1);
 1989  0
         throw new ParseException();
 1990   
       }
 1991  1712
       InstanceOfExpression();
 1992   
     }
 1993   
   }
 1994   
 
 1995  17914
   final public void InstanceOfExpression() throws ParseException {
 1996  17914
     RelationalExpression();
 1997  17914
     switch (jj_nt.kind) {
 1998   
     case INSTANCEOF:
 1999  43
       jj_consume_token(INSTANCEOF);
 2000  43
       Type();
 2001  43
       break;
 2002   
     default:
 2003  17871
       jj_la1[72] = jj_gen;
 2004   
       ;
 2005   
     }
 2006   
   }
 2007   
 
 2008  17914
   final public void RelationalExpression() throws ParseException {
 2009  17914
     ShiftExpression();
 2010  17914
     label_36:
 2011   
     while (true) {
 2012  18106
       switch (jj_nt.kind) {
 2013   
       case GT:
 2014   
       case LT:
 2015   
       case LE:
 2016   
       case GE:
 2017   
         ;
 2018  192
         break;
 2019   
       default:
 2020  17914
         jj_la1[73] = jj_gen;
 2021  17914
         break label_36;
 2022   
       }
 2023  192
       switch (jj_nt.kind) {
 2024   
       case LT:
 2025  153
         jj_consume_token(LT);
 2026  153
         break;
 2027   
       case GT:
 2028  12
         jj_consume_token(GT);
 2029  12
         break;
 2030   
       case LE:
 2031  7
         jj_consume_token(LE);
 2032  7
         break;
 2033   
       case GE:
 2034  20
         jj_consume_token(GE);
 2035  20
         break;
 2036   
       default:
 2037  0
         jj_la1[74] = jj_gen;
 2038  0
         jj_consume_token(-1);
 2039  0
         throw new ParseException();
 2040   
       }
 2041  192
       ShiftExpression();
 2042   
     }
 2043   
   }
 2044   
 
 2045  18106
   final public void ShiftExpression() throws ParseException {
 2046  18106
     AdditiveExpression();
 2047  18106
     label_37:
 2048   
     while (true) {
 2049  18106
       switch (jj_nt.kind) {
 2050   
       case LSHIFT:
 2051   
       case RSIGNEDSHIFT:
 2052   
       case RUNSIGNEDSHIFT:
 2053   
         ;
 2054  0
         break;
 2055   
       default:
 2056  18106
         jj_la1[75] = jj_gen;
 2057  18106
         break label_37;
 2058   
       }
 2059  0
       switch (jj_nt.kind) {
 2060   
       case LSHIFT:
 2061  0
         jj_consume_token(LSHIFT);
 2062  0
         break;
 2063   
       case RSIGNEDSHIFT:
 2064  0
         jj_consume_token(RSIGNEDSHIFT);
 2065  0
         break;
 2066   
       case RUNSIGNEDSHIFT:
 2067  0
         jj_consume_token(RUNSIGNEDSHIFT);
 2068  0
         break;
 2069   
       default:
 2070  0
         jj_la1[76] = jj_gen;
 2071  0
         jj_consume_token(-1);
 2072  0
         throw new ParseException();
 2073   
       }
 2074  0
       AdditiveExpression();
 2075   
     }
 2076   
   }
 2077   
 
 2078  18106
   final public void AdditiveExpression() throws ParseException {
 2079  18106
     MultiplicativeExpression();
 2080  18106
     label_38:
 2081   
     while (true) {
 2082  19228
       switch (jj_nt.kind) {
 2083   
       case PLUS:
 2084   
       case MINUS:
 2085   
         ;
 2086  1122
         break;
 2087   
       default:
 2088  18106
         jj_la1[77] = jj_gen;
 2089  18106
         break label_38;
 2090   
       }
 2091  1122
       switch (jj_nt.kind) {
 2092   
       case PLUS:
 2093  1084
         jj_consume_token(PLUS);
 2094  1084
         break;
 2095   
       case MINUS:
 2096  38
         jj_consume_token(MINUS);
 2097  38
         break;
 2098   
       default:
 2099  0
         jj_la1[78] = jj_gen;
 2100  0
         jj_consume_token(-1);
 2101  0
         throw new ParseException();
 2102   
       }
 2103  1122
       MultiplicativeExpression();
 2104   
     }
 2105   
   }
 2106   
 
 2107  19228
   final public void MultiplicativeExpression() throws ParseException {
 2108  19228
     UnaryExpression();
 2109  19228
     label_39:
 2110   
     while (true) {
 2111  19289
       switch (jj_nt.kind) {
 2112   
       case STAR:
 2113   
       case SLASH:
 2114   
       case REM:
 2115   
         ;
 2116  61
         break;
 2117   
       default:
 2118  19228
         jj_la1[79] = jj_gen;
 2119  19228
         break label_39;
 2120   
       }
 2121  61
       switch (jj_nt.kind) {
 2122   
       case STAR:
 2123  44
         jj_consume_token(STAR);
 2124  44
         break;
 2125   
       case SLASH:
 2126  17
         jj_consume_token(SLASH);
 2127  17
         break;
 2128   
       case REM:
 2129  0
         jj_consume_token(REM);
 2130  0
         break;
 2131   
       default:
 2132  0
         jj_la1[80] = jj_gen;
 2133  0
         jj_consume_token(-1);
 2134  0
         throw new ParseException();
 2135   
       }
 2136  61
       UnaryExpression();
 2137   
     }
 2138   
   }
 2139   
 
 2140  19684
   final public void UnaryExpression() throws ParseException {
 2141  19684
     switch (jj_nt.kind) {
 2142   
     case PLUS:
 2143   
     case MINUS:
 2144  54
       switch (jj_nt.kind) {
 2145   
       case PLUS:
 2146  6
         jj_consume_token(PLUS);
 2147  6
         break;
 2148   
       case MINUS:
 2149  48
         jj_consume_token(MINUS);
 2150  48
         break;
 2151   
       default:
 2152  0
         jj_la1[81] = jj_gen;
 2153  0
         jj_consume_token(-1);
 2154  0
         throw new ParseException();
 2155   
       }
 2156  54
       UnaryExpression();
 2157  54
       break;
 2158   
     case INCR:
 2159  0
       PreIncrementExpression();
 2160  0
       break;
 2161   
     case DECR:
 2162  0
       PreDecrementExpression();
 2163  0
       break;
 2164   
     case BOOLEAN:
 2165   
     case BYTE:
 2166   
     case CHAR:
 2167   
     case DOUBLE:
 2168   
     case FALSE:
 2169   
     case FLOAT:
 2170   
     case INT:
 2171   
     case LONG:
 2172   
     case NEW:
 2173   
     case NULL:
 2174   
     case SHORT:
 2175   
     case SUPER:
 2176   
     case THIS:
 2177   
     case TRUE:
 2178   
     case VOID:
 2179   
     case INTEGER_LITERAL:
 2180   
     case FLOATING_POINT_LITERAL:
 2181   
     case CHARACTER_LITERAL:
 2182   
     case STRING_LITERAL:
 2183   
     case IDENTIFIER:
 2184   
     case LPAREN:
 2185   
     case BANG:
 2186   
     case TILDE:
 2187  19630
       UnaryExpressionNotPlusMinus();
 2188  19630
       break;
 2189   
     default:
 2190  0
       jj_la1[82] = jj_gen;
 2191  0
       jj_consume_token(-1);
 2192  0
       throw new ParseException();
 2193   
     }
 2194   
   }
 2195   
 
 2196  2
   final public void PreIncrementExpression() throws ParseException {
 2197  2
     jj_consume_token(INCR);
 2198  2
     PrimaryExpression();
 2199   
   }
 2200   
 
 2201  0
   final public void PreDecrementExpression() throws ParseException {
 2202  0
     jj_consume_token(DECR);
 2203  0
     PrimaryExpression();
 2204   
   }
 2205   
 
 2206  20372
   final public void UnaryExpressionNotPlusMinus() throws ParseException {
 2207  20372
     switch (jj_nt.kind) {
 2208   
     case BANG:
 2209   
     case TILDE:
 2210  317
       switch (jj_nt.kind) {
 2211   
       case TILDE:
 2212  0
         jj_consume_token(TILDE);
 2213  0
         break;
 2214   
       case BANG:
 2215  317
         jj_consume_token(BANG);
 2216  317
         break;
 2217   
       default:
 2218  0
         jj_la1[83] = jj_gen;
 2219  0
         jj_consume_token(-1);
 2220  0
         throw new ParseException();
 2221   
       }
 2222  317
       UnaryExpression();
 2223  317
       break;
 2224   
     default:
 2225  20055
       jj_la1[84] = jj_gen;
 2226  20055
       if (jj_2_15(2147483647)) {
 2227  766
         CastExpression();
 2228   
       } else {
 2229  19289
         switch (jj_nt.kind) {
 2230   
         case BOOLEAN:
 2231   
         case BYTE:
 2232   
         case CHAR:
 2233   
         case DOUBLE:
 2234   
         case FALSE:
 2235   
         case FLOAT:
 2236   
         case INT:
 2237   
         case LONG:
 2238   
         case NEW:
 2239   
         case NULL:
 2240   
         case SHORT:
 2241   
         case SUPER:
 2242   
         case THIS:
 2243   
         case TRUE:
 2244   
         case VOID:
 2245   
         case INTEGER_LITERAL:
 2246   
         case FLOATING_POINT_LITERAL:
 2247   
         case CHARACTER_LITERAL:
 2248   
         case STRING_LITERAL:
 2249   
         case IDENTIFIER:
 2250   
         case LPAREN:
 2251  19289
           PostfixExpression();
 2252  19289
           break;
 2253   
         default:
 2254  0
           jj_la1[85] = jj_gen;
 2255  0
           jj_consume_token(-1);
 2256  0
           throw new ParseException();
 2257   
         }
 2258   
       }
 2259   
     }
 2260   
   }
 2261   
 
 2262   
 // This production is to determine lookahead only.  The LOOKAHEAD specifications
 2263   
 // below are not used, but they are there just to indicate that we know about
 2264   
 // this.
 2265  0
   final public void CastLookahead() throws ParseException {
 2266  0
     if (jj_2_16(2)) {
 2267  0
       jj_consume_token(LPAREN);
 2268  0
       PrimitiveType();
 2269  0
     } else if (jj_2_17(2147483647)) {
 2270  0
       jj_consume_token(LPAREN);
 2271  0
       Name();
 2272  0
       jj_consume_token(LBRACKET);
 2273  0
       jj_consume_token(RBRACKET);
 2274   
     } else {
 2275  0
       switch (jj_nt.kind) {
 2276   
       case LPAREN:
 2277  0
         jj_consume_token(LPAREN);
 2278  0
         Name();
 2279  0
         jj_consume_token(RPAREN);
 2280  0
         switch (jj_nt.kind) {
 2281   
         case TILDE:
 2282  0
           jj_consume_token(TILDE);
 2283  0
           break;
 2284   
         case BANG:
 2285  0
           jj_consume_token(BANG);
 2286  0
           break;
 2287   
         case LPAREN:
 2288  0
           jj_consume_token(LPAREN);
 2289  0
           break;
 2290   
         case IDENTIFIER:
 2291  0
           jj_consume_token(IDENTIFIER);
 2292  0
           break;
 2293   
         case THIS:
 2294  0
           jj_consume_token(THIS);
 2295  0
           break;
 2296   
         case SUPER:
 2297  0
           jj_consume_token(SUPER);
 2298  0
           break;
 2299   
         case NEW:
 2300  0
           jj_consume_token(NEW);
 2301  0
           break;
 2302   
         case FALSE:
 2303   
         case NULL:
 2304   
         case TRUE:
 2305   
         case INTEGER_LITERAL:
 2306   
         case FLOATING_POINT_LITERAL:
 2307   
         case CHARACTER_LITERAL:
 2308   
         case STRING_LITERAL:
 2309  0
           Literal();
 2310  0
           break;
 2311   
         default:
 2312  0
           jj_la1[86] = jj_gen;
 2313  0
           jj_consume_token(-1);
 2314  0
           throw new ParseException();
 2315   
         }
 2316  0
         break;
 2317   
       default:
 2318  0
         jj_la1[87] = jj_gen;
 2319  0
         jj_consume_token(-1);
 2320  0
         throw new ParseException();
 2321   
       }
 2322   
     }
 2323   
   }
 2324   
 
 2325  19289
   final public void PostfixExpression() throws ParseException {
 2326  19289
     PrimaryExpression();
 2327  19289
     switch (jj_nt.kind) {
 2328   
     case INCR:
 2329   
     case DECR:
 2330  0
       switch (jj_nt.kind) {
 2331   
       case INCR:
 2332  0
         jj_consume_token(INCR);
 2333  0
         break;
 2334   
       case DECR:
 2335  0
         jj_consume_token(DECR);
 2336  0
         break;
 2337   
       default:
 2338  0
         jj_la1[88] = jj_gen;
 2339  0
         jj_consume_token(-1);
 2340  0
         throw new ParseException();
 2341   
       }
 2342  0
       break;
 2343   
     default:
 2344  19289
       jj_la1[89] = jj_gen;
 2345   
       ;
 2346   
     }
 2347   
   }
 2348   
 
 2349  766
   final public void CastExpression() throws ParseException {
 2350  766
     if (jj_2_18(2147483647)) {
 2351  24
       jj_consume_token(LPAREN);
 2352  24
       Type();
 2353  24
       jj_consume_token(RPAREN);
 2354  24
       UnaryExpression();
 2355   
     } else {
 2356  742
       switch (jj_nt.kind) {
 2357   
       case LPAREN:
 2358  742
         jj_consume_token(LPAREN);
 2359  742
         Type();
 2360  742
         jj_consume_token(RPAREN);
 2361  742
         UnaryExpressionNotPlusMinus();
 2362  742
         break;
 2363   
       default:
 2364  0
         jj_la1[90] = jj_gen;
 2365  0
         jj_consume_token(-1);
 2366  0
         throw new ParseException();
 2367   
       }
 2368   
     }
 2369   
   }
 2370   
 
 2371  23227
   final public void PrimaryExpression() throws ParseException {
 2372  23227
     PrimaryPrefix();
 2373  23227
     label_40:
 2374   
     while (true) {
 2375  32532
       if (jj_2_19(2)) {
 2376   
         ;
 2377   
       } else {
 2378  23227
         break label_40;
 2379   
       }
 2380  9305
       PrimarySuffix();
 2381   
     }
 2382   
   }
 2383   
 
 2384  23227
   final public void PrimaryPrefix() throws ParseException {
 2385  23227
     switch (jj_nt.kind) {
 2386   
     case FALSE:
 2387   
     case NULL:
 2388   
     case TRUE:
 2389   
     case INTEGER_LITERAL:
 2390   
     case FLOATING_POINT_LITERAL:
 2391   
     case CHARACTER_LITERAL:
 2392   
     case STRING_LITERAL:
 2393  4882
       Literal();
 2394  4882
       break;
 2395   
     case THIS:
 2396  250
       jj_consume_token(THIS);
 2397  250
       break;
 2398   
     case SUPER:
 2399  34
       jj_consume_token(SUPER);
 2400  34
       jj_consume_token(DOT);
 2401  34
       jj_consume_token(IDENTIFIER);
 2402  34
       break;
 2403   
     case LPAREN:
 2404  385
       jj_consume_token(LPAREN);
 2405  385
       Expression();
 2406  385
       jj_consume_token(RPAREN);
 2407  385
       break;
 2408   
     case NEW:
 2409  1262
       AllocationExpression();
 2410  1262
       break;
 2411   
     default:
 2412  16414
       jj_la1[91] = jj_gen;
 2413  16414
       if (jj_2_20(2147483647)) {
 2414  27
         ResultType(null);
 2415  27
         jj_consume_token(DOT);
 2416  27
         jj_consume_token(CLASS);
 2417   
       } else {
 2418  16387
         switch (jj_nt.kind) {
 2419   
         case IDENTIFIER:
 2420  16387
           Name();
 2421  16387
           break;
 2422   
         default:
 2423  0
           jj_la1[92] = jj_gen;
 2424  0
           jj_consume_token(-1);
 2425  0
           throw new ParseException();
 2426   
         }
 2427   
       }
 2428   
     }
 2429   
   }
 2430   
 
 2431  9305
   final public void PrimarySuffix() throws ParseException {
 2432  9305
     if (jj_2_21(2)) {
 2433  0
       jj_consume_token(DOT);
 2434  0
       jj_consume_token(THIS);
 2435  9305
     } else if (jj_2_22(2)) {
 2436  0
       jj_consume_token(DOT);
 2437  0
       jj_consume_token(SUPER);
 2438  9305
     } else if (jj_2_23(2)) {
 2439  6
       jj_consume_token(DOT);
 2440  6
       AllocationExpression();
 2441   
     } else {
 2442  9299
       switch (jj_nt.kind) {
 2443   
       case LBRACKET:
 2444  42
         jj_consume_token(LBRACKET);
 2445  42
         Expression();
 2446  42
         jj_consume_token(RBRACKET);
 2447  42
         break;
 2448   
       case DOT:
 2449  1268
         jj_consume_token(DOT);
 2450  1268
         jj_consume_token(IDENTIFIER);
 2451  1268
         break;
 2452   
       case LPAREN:
 2453  7989
         Arguments();
 2454  7989
         break;
 2455   
       default:
 2456  0
         jj_la1[93] = jj_gen;
 2457  0
         jj_consume_token(-1);
 2458  0
         throw new ParseException();
 2459   
       }
 2460   
     }
 2461   
   }
 2462   
 
 2463  4882
   final public void Literal() throws ParseException {
 2464  4882
     switch (jj_nt.kind) {
 2465   
     case INTEGER_LITERAL:
 2466  659
       jj_consume_token(INTEGER_LITERAL);
 2467  659
       break;
 2468   
     case FLOATING_POINT_LITERAL:
 2469  0
       jj_consume_token(FLOATING_POINT_LITERAL);
 2470  0
       break;
 2471   
     case CHARACTER_LITERAL:
 2472  251
       jj_consume_token(CHARACTER_LITERAL);
 2473  251
       break;
 2474   
     case STRING_LITERAL:
 2475  1321
       jj_consume_token(STRING_LITERAL);
 2476  1321
       break;
 2477   
     case FALSE:
 2478   
     case TRUE:
 2479  588
       BooleanLiteral();
 2480  588
       break;
 2481   
     case NULL:
 2482  2063
       NullLiteral();
 2483  2063
       break;
 2484   
     default:
 2485  0
       jj_la1[94] = jj_gen;
 2486  0
       jj_consume_token(-1);
 2487  0
       throw new ParseException();
 2488   
     }
 2489   
   }
 2490   
 
 2491  588
   final public void BooleanLiteral() throws ParseException {
 2492  588
     switch (jj_nt.kind) {
 2493   
     case TRUE:
 2494  274
       jj_consume_token(TRUE);
 2495  274
       break;
 2496   
     case FALSE:
 2497  314
       jj_consume_token(FALSE);
 2498  314
       break;
 2499   
     default:
 2500  0
       jj_la1[95] = jj_gen;
 2501  0
       jj_consume_token(-1);
 2502  0
       throw new ParseException();
 2503   
     }
 2504   
   }
 2505   
 
 2506  2063
   final public void NullLiteral() throws ParseException {
 2507  2063
     jj_consume_token(NULL);
 2508   
   }
 2509   
 
 2510  9312
   final public void Arguments() throws ParseException {
 2511  9312
     jj_consume_token(LPAREN);
 2512  9312
     switch (jj_nt.kind) {
 2513   
     case BOOLEAN:
 2514   
     case BYTE:
 2515   
     case CHAR:
 2516   
     case DOUBLE:
 2517   
     case FALSE:
 2518   
     case FLOAT:
 2519   
     case INT:
 2520   
     case LONG:
 2521   
     case NEW:
 2522   
     case NULL:
 2523   
     case SHORT:
 2524   
     case SUPER:
 2525   
     case THIS:
 2526   
     case TRUE:
 2527   
     case VOID:
 2528   
     case INTEGER_LITERAL:
 2529   
     case FLOATING_POINT_LITERAL:
 2530   
     case CHARACTER_LITERAL:
 2531   
     case STRING_LITERAL:
 2532   
     case IDENTIFIER:
 2533   
     case LPAREN:
 2534   
     case BANG:
 2535   
     case TILDE:
 2536   
     case INCR:
 2537   
     case DECR:
 2538   
     case PLUS:
 2539   
     case MINUS:
 2540  4265
       ArgumentList();
 2541  4265
       break;
 2542   
     default:
 2543  5047
       jj_la1[96] = jj_gen;
 2544   
       ;
 2545   
     }
 2546  9312
     jj_consume_token(RPAREN);
 2547   
   }
 2548   
 
 2549  4265
   final public void ArgumentList() throws ParseException {
 2550  4265
     Expression();
 2551  4265
     label_41:
 2552   
     while (true) {
 2553  5413
       switch (jj_nt.kind) {
 2554   
       case COMMA:
 2555   
         ;
 2556  1148
         break;
 2557   
       default:
 2558  4265
         jj_la1[97] = jj_gen;
 2559  4265
         break label_41;
 2560   
       }
 2561  1148
       jj_consume_token(COMMA);
 2562  1148
       Expression();
 2563   
     }
 2564   
   }
 2565   
 
 2566   
 /**
 2567   
  * @todo Anonymous classes will cause NPE. Need to check for nullity in a lot of places
 2568   
  */
 2569  1268
   final public void AllocationExpression() throws ParseException {
 2570  1268
    String realisedClass;
 2571  1268
     if (jj_2_24(2)) {
 2572  0
       jj_consume_token(NEW);
 2573  0
       PrimitiveType();
 2574  0
       ArrayDimsAndInits();
 2575   
     } else {
 2576  1268
       switch (jj_nt.kind) {
 2577   
       case NEW:
 2578  1268
         jj_consume_token(NEW);
 2579  1268
         realisedClass = Name();
 2580  1268
         switch (jj_nt.kind) {
 2581   
         case LBRACKET:
 2582  35
           ArrayDimsAndInits();
 2583  35
           break;
 2584   
         case LPAREN:
 2585  1233
           Arguments();
 2586  1233
           switch (jj_nt.kind) {
 2587   
           case LBRACE:
 2588   
             // ANONYMOUS CLASS
 2589  20
             SourceClass containingClass = currentClass();
 2590  20
         pushAndGet();
 2591  20
             ClassBody();
 2592   
         // Don't care about anonymous classes. They don't have javadocs
 2593   
         // _xJavaDoc.addSourceClass(anonymousClass);
 2594  20
         currentClass().setName(containingClass.getNextAnonymousClassName());
 2595  20
         currentClass().setRealised(realisedClass);
 2596  20
         popAndAddInner();
 2597  20
             break;
 2598   
           default:
 2599  1213
             jj_la1[98] = jj_gen;
 2600   
             ;
 2601   
           }
 2602  1233
           break;
 2603   
         default:
 2604  0
           jj_la1[99] = jj_gen;
 2605  0
           jj_consume_token(-1);
 2606  0
           throw new ParseException();
 2607   
         }
 2608  1268
         break;
 2609   
       default:
 2610  0
         jj_la1[100] = jj_gen;
 2611  0
         jj_consume_token(-1);
 2612  0
         throw new ParseException();
 2613   
       }
 2614   
     }
 2615   
   }
 2616   
 
 2617   
 /*
 2618   
  * The second LOOKAHEAD specification below is to parse to PrimarySuffix
 2619   
  * if there is an expression between the "[...]".
 2620   
  */
 2621  35
   final public void ArrayDimsAndInits() throws ParseException {
 2622  35
     if (jj_2_27(2)) {
 2623  23
       label_42:
 2624   
       while (true) {
 2625  23
         jj_consume_token(LBRACKET);
 2626  23
         Expression();
 2627  23
         jj_consume_token(RBRACKET);
 2628  23
         if (jj_2_25(2)) {
 2629   
           ;
 2630   
         } else {
 2631  23
           break label_42;
 2632   
         }
 2633   
       }
 2634  23
       label_43:
 2635   
       while (true) {
 2636  23
         if (jj_2_26(2)) {
 2637   
           ;
 2638   
         } else {
 2639  23
           break label_43;
 2640   
         }
 2641  0
         jj_consume_token(LBRACKET);
 2642  0
         jj_consume_token(RBRACKET);
 2643   
       }
 2644   
     } else {
 2645  12
       switch (jj_nt.kind) {
 2646   
       case LBRACKET:
 2647  12
         label_44:
 2648   
         while (true) {
 2649  12
           jj_consume_token(LBRACKET);
 2650  12
           jj_consume_token(RBRACKET);
 2651  12
           switch (jj_nt.kind) {
 2652   
           case LBRACKET:
 2653   
             ;
 2654  0
             break;
 2655   
           default:
 2656  12
             jj_la1[101] = jj_gen;
 2657  12
             break label_44;
 2658   
           }
 2659   
         }
 2660  12
         ArrayInitializer();
 2661  12
         break;
 2662   
       default:
 2663  0
         jj_la1[102] = jj_gen;
 2664  0
         jj_consume_token(-1);
 2665  0
         throw new ParseException();
 2666   
       }
 2667   
     }
 2668   
   }
 2669   
 
 2670   
 /*
 2671   
  * Statement syntax follows.
 2672   
  */
 2673  11851
   final public void Statement() throws ParseException {
 2674  11851
     if (jj_2_28(2)) {
 2675  0
       LabeledStatement();
 2676   
     } else {
 2677  11851
       switch (jj_nt.kind) {
 2678   
       case LBRACE:
 2679  2910
         Block();
 2680  2910
         break;
 2681   
       case SEMICOLON:
 2682  0
         EmptyStatement();
 2683  0
         break;
 2684   
       case BOOLEAN:
 2685   
       case BYTE:
 2686   
       case CHAR:
 2687   
       case DOUBLE:
 2688   
       case FALSE:
 2689   
       case FLOAT:
 2690   
       case INT:
 2691   
       case LONG:
 2692   
       case NEW:
 2693   
       case NULL:
 2694   
       case SHORT:
 2695   
       case SUPER:
 2696   
       case THIS:
 2697   
       case TRUE:
 2698   
       case VOID:
 2699   
       case INTEGER_LITERAL:
 2700   
       case FLOATING_POINT_LITERAL:
 2701   
       case CHARACTER_LITERAL:
 2702   
       case STRING_LITERAL:
 2703   
       case IDENTIFIER:
 2704   
       case LPAREN:
 2705   
       case INCR:
 2706   
       case DECR:
 2707  3856
         StatementExpression();
 2708  3856
         jj_consume_token(SEMICOLON);
 2709  3856
         break;
 2710   
       case SWITCH:
 2711  0
         SwitchStatement();
 2712  0
         break;
 2713   
       case IF:
 2714  1952
         IfStatement();
 2715  1952
         break;
 2716   
       case WHILE:
 2717  163
         WhileStatement();
 2718  163
         break;
 2719   
       case DO:
 2720  22
         DoStatement();
 2721  22
         break;
 2722   
       case FOR:
 2723  450
         ForStatement();
 2724  450
         break;
 2725   
       case BREAK:
 2726  37
         BreakStatement();
 2727  37
         break;
 2728   
       case CONTINUE:
 2729  6
         ContinueStatement();
 2730  6
         break;
 2731   
       case RETURN:
 2732  2030
         ReturnStatement();
 2733  2030
         break;
 2734   
       case THROW:
 2735  326
         ThrowStatement();
 2736  326
         break;
 2737   
       case SYNCHRONIZED:
 2738  0
         SynchronizedStatement();
 2739  0
         break;
 2740   
       case TRY:
 2741  67
         TryStatement();
 2742  67
         break;
 2743   
       case ASSERT:
 2744  32
         AssertStatement();
 2745  32
         break;
 2746   
       default:
 2747  0
         jj_la1[103] = jj_gen;
 2748  0
         jj_consume_token(-1);
 2749  0
         throw new ParseException();
 2750   
       }
 2751   
     }
 2752   
   }
 2753   
 
 2754  0
   final public void LabeledStatement() throws ParseException {
 2755  0
     jj_consume_token(IDENTIFIER);
 2756  0
     jj_consume_token(COLON);
 2757  0
     Statement();
 2758   
   }
 2759   
 
 2760  3080
   final public void Block() throws ParseException {
 2761  3080
     jj_consume_token(LBRACE);
 2762  3080
     label_45:
 2763   
     while (true) {
 2764  8276
       switch (jj_nt.kind) {
 2765   
       case BOOLEAN:
 2766   
       case BREAK:
 2767   
       case BYTE:
 2768   
       case CHAR:
 2769   
       case CLASS:
 2770   
       case CONTINUE:
 2771   
       case DO:
 2772   
       case DOUBLE:
 2773   
       case FALSE:
 2774   
       case FINAL:
 2775   
       case FLOAT:
 2776   
       case FOR:
 2777   
       case IF:
 2778   
       case INT:
 2779   
       case INTERFACE:
 2780   
       case LONG:
 2781   
       case NEW:
 2782   
       case NULL:
 2783   
       case RETURN:
 2784   
       case SHORT:
 2785   
       case SUPER:
 2786   
       case SWITCH:
 2787   
       case SYNCHRONIZED:
 2788   
       case THIS:
 2789   
       case THROW:
 2790   
       case TRUE:
 2791   
       case TRY:
 2792   
       case VOID:
 2793   
       case WHILE:
 2794   
       case ASSERT:
 2795   
       case INTEGER_LITERAL:
 2796   
       case FLOATING_POINT_LITERAL:
 2797   
       case CHARACTER_LITERAL:
 2798   
       case STRING_LITERAL:
 2799   
       case IDENTIFIER:
 2800   
       case LPAREN:
 2801   
       case LBRACE:
 2802   
       case SEMICOLON:
 2803   
       case INCR:
 2804   
       case DECR:
 2805   
         ;
 2806  5196
         break;
 2807   
       default:
 2808  3080
         jj_la1[104] = jj_gen;
 2809  3080
         break label_45;
 2810   
       }
 2811  5196
       BlockStatement();
 2812   
     }
 2813  3080
     jj_consume_token(RBRACE);
 2814   
   }
 2815   
 
 2816  2467
   final public void Method_Block() throws ParseException {
 2817  2467
     jj_consume_token(LBRACE);
 2818  2467
     label_46:
 2819   
     while (true) {
 2820  7466
       switch (jj_nt.kind) {
 2821   
       case BOOLEAN:
 2822   
       case BREAK:
 2823   
       case BYTE:
 2824   
       case CHAR:
 2825   
       case CLASS:
 2826   
       case CONTINUE:
 2827   
       case DO:
 2828   
       case DOUBLE:
 2829   
       case FALSE:
 2830   
       case FINAL:
 2831   
       case FLOAT:
 2832   
       case FOR:
 2833   
       case IF:
 2834   
       case INT:
 2835   
       case INTERFACE:
 2836   
       case LONG:
 2837   
       case NEW:
 2838   
       case NULL:
 2839   
       case RETURN:
 2840   
       case SHORT:
 2841   
       case SUPER:
 2842   
       case SWITCH:
 2843   
       case SYNCHRONIZED:
 2844   
       case THIS:
 2845   
       case THROW:
 2846   
       case TRUE:
 2847   
       case TRY:
 2848   
       case VOID:
 2849   
       case WHILE:
 2850   
       case ASSERT:
 2851   
       case INTEGER_LITERAL:
 2852   
       case FLOATING_POINT_LITERAL:
 2853   
       case CHARACTER_LITERAL:
 2854   
       case STRING_LITERAL:
 2855   
       case IDENTIFIER:
 2856   
       case LPAREN:
 2857   
       case LBRACE:
 2858   
       case SEMICOLON:
 2859   
       case INCR:
 2860   
       case DECR:
 2861   
         ;
 2862  4999
         break;
 2863   
       default:
 2864  2467
         jj_la1[105] = jj_gen;
 2865  2467
         break label_46;
 2866   
       }
 2867  4999
       Method_BlockStatement();
 2868   
     }
 2869  2467
     jj_consume_token(RBRACE);
 2870  2467
     switch (jj_nt.kind) {
 2871   
     case SEMICOLON:
 2872  16
       jj_consume_token(SEMICOLON);
 2873  16
       break;
 2874   
     default:
 2875  2451
       jj_la1[106] = jj_gen;
 2876   
       ;
 2877   
     }
 2878   
   }
 2879   
 
 2880   
 /**
 2881   
  * @todo not sure if the UnmodifiedClassDeclaration/UnmodifiedInterfaceDeclaration
 2882   
  * ever get called, now that we have two different blocks. It would be nice to remove them
 2883   
  */
 2884  5488
   final public void BlockStatement() throws ParseException {
 2885  5488
     if (jj_2_29(2147483647)) {
 2886  1032
       LocalVariableDeclaration();
 2887  1032
       jj_consume_token(SEMICOLON);
 2888   
     } else {
 2889  4456
       switch (jj_nt.kind) {
 2890   
       case BOOLEAN:
 2891   
       case BREAK:
 2892   
       case BYTE:
 2893   
       case CHAR:
 2894   
       case CONTINUE:
 2895   
       case DO:
 2896   
       case DOUBLE:
 2897   
       case FALSE:
 2898   
       case FLOAT:
 2899   
       case FOR:
 2900   
       case IF:
 2901   
       case INT:
 2902   
       case LONG:
 2903   
       case NEW:
 2904   
       case NULL:
 2905   
       case RETURN:
 2906   
       case SHORT:
 2907   
       case SUPER:
 2908   
       case SWITCH:
 2909   
       case SYNCHRONIZED:
 2910   
       case THIS:
 2911   
       case THROW:
 2912   
       case TRUE:
 2913   
       case TRY:
 2914   
       case VOID:
 2915   
       case WHILE:
 2916   
       case ASSERT:
 2917   
       case INTEGER_LITERAL:
 2918   
       case FLOATING_POINT_LITERAL:
 2919   
       case CHARACTER_LITERAL:
 2920   
       case STRING_LITERAL:
 2921   
       case IDENTIFIER:
 2922   
       case LPAREN:
 2923   
       case LBRACE:
 2924   
       case SEMICOLON:
 2925   
       case INCR:
 2926   
       case DECR:
 2927  4456
         Statement();
 2928  4456
         break;
 2929   
       case CLASS:
 2930  0
      pushAndGet();
 2931  0
         UnmodifiedClassDeclaration();
 2932  0
      popAndAddInner();
 2933  0
         break;
 2934   
       case INTERFACE:
 2935  0
      pushAndGet();
 2936  0
         UnmodifiedInterfaceDeclaration();
 2937  0
      popAndAddInner();
 2938  0
         break;
 2939   
       default:
 2940  0
         jj_la1[107] = jj_gen;
 2941  0
         jj_consume_token(-1);
 2942  0
         throw new ParseException();
 2943   
       }
 2944   
     }
 2945   
   }
 2946   
 
 2947  4999
   final public void Method_BlockStatement() throws ParseException {
 2948  4999
     if (jj_2_30(2147483647)) {
 2949  743
       LocalVariableDeclaration();
 2950  743
       jj_consume_token(SEMICOLON);
 2951   
     } else {
 2952  4256
       switch (jj_nt.kind) {
 2953   
       case BOOLEAN:
 2954   
       case BREAK:
 2955   
       case BYTE:
 2956   
       case CHAR:
 2957   
       case CONTINUE:
 2958   
       case DO:
 2959   
       case DOUBLE:
 2960   
       case FALSE:
 2961   
       case FLOAT:
 2962   
       case FOR:
 2963   
       case IF:
 2964   
       case INT:
 2965   
       case LONG:
 2966   
       case NEW:
 2967   
       case NULL:
 2968   
       case RETURN:
 2969   
       case SHORT:
 2970   
       case SUPER:
 2971   
       case SWITCH:
 2972   
       case SYNCHRONIZED:
 2973   
       case THIS:
 2974   
       case THROW:
 2975   
       case TRUE:
 2976   
       case TRY:
 2977   
       case VOID:
 2978   
       case WHILE:
 2979   
       case ASSERT:
 2980   
       case INTEGER_LITERAL:
 2981   
       case FLOATING_POINT_LITERAL:
 2982   
       case CHARACTER_LITERAL:
 2983   
       case STRING_LITERAL:
 2984   
       case IDENTIFIER:
 2985   
       case LPAREN:
 2986   
       case LBRACE:
 2987   
       case SEMICOLON:
 2988   
       case INCR:
 2989   
       case DECR:
 2990  4240
         Statement();
 2991  4240
         break;
 2992   
       case CLASS:
 2993  16
      pushAndGet();
 2994  16
         UnmodifiedClassDeclaration();
 2995  16
      popAndAddInner();
 2996  16
         break;
 2997   
       case INTERFACE:
 2998  0
      pushAndGet();
 2999  0
         UnmodifiedInterfaceDeclaration();
 3000  0
      popAndAddInner();
 3001  0
         break;
 3002   
       default:
 3003  0
         jj_la1[108] = jj_gen;
 3004  0
         jj_consume_token(-1);
 3005  0
         throw new ParseException();
 3006   
       }
 3007   
     }
 3008   
   }
 3009   
 
 3010  2223
   final public void LocalVariableDeclaration() throws ParseException {
 3011  2223
     switch (jj_nt.kind) {
 3012   
     case FINAL:
 3013  51
       jj_consume_token(FINAL);
 3014  51
       break;
 3015   
     default:
 3016  2172
       jj_la1[109] = jj_gen;
 3017   
       ;
 3018   
     }
 3019  2223
     Type();
 3020  2223
     VariableDeclarator();
 3021  2223
     label_47:
 3022   
     while (true) {
 3023  2223
       switch (jj_nt.kind) {
 3024   
       case COMMA:
 3025   
         ;
 3026  0
         break;
 3027   
       default:
 3028  2223
         jj_la1[110] = jj_gen;
 3029  2223
         break label_47;
 3030   
       }
 3031  0
       jj_consume_token(COMMA);
 3032  0
       VariableDeclarator();
 3033   
     }
 3034   
   }
 3035   
 
 3036  0
   final public void EmptyStatement() throws ParseException {
 3037  0
     jj_consume_token(SEMICOLON);
 3038   
   }
 3039   
 
 3040  3938
   final public void StatementExpression() throws ParseException {
 3041  3938
     switch (jj_nt.kind) {
 3042   
     case INCR:
 3043  2
       PreIncrementExpression();
 3044  2
       break;
 3045   
     case DECR:
 3046  0
       PreDecrementExpression();
 3047  0
       break;
 3048   
     case BOOLEAN:
 3049   
     case BYTE:
 3050   
     case CHAR:
 3051   
     case DOUBLE:
 3052   
     case FALSE:
 3053   
     case FLOAT:
 3054   
     case INT:
 3055   
     case LONG:
 3056   
     case NEW:
 3057   
     case NULL:
 3058   
     case SHORT:
 3059   
     case SUPER:
 3060   
     case THIS:
 3061   
     case TRUE:
 3062   
     case VOID:
 3063   
     case INTEGER_LITERAL:
 3064   
     case FLOATING_POINT_LITERAL:
 3065   
     case CHARACTER_LITERAL:
 3066   
     case STRING_LITERAL:
 3067   
     case IDENTIFIER:
 3068   
     case LPAREN:
 3069  3936
       PrimaryExpression();
 3070  3936
       switch (jj_nt.kind) {
 3071   
       case ASSIGN:
 3072   
       case INCR:
 3073   
       case DECR:
 3074   
       case PLUSASSIGN:
 3075   
       case MINUSASSIGN:
 3076   
       case STARASSIGN:
 3077   
       case SLASHASSIGN:
 3078   
       case ANDASSIGN:
 3079   
       case ORASSIGN:
 3080   
       case XORASSIGN:
 3081   
       case REMASSIGN:
 3082   
       case LSHIFTASSIGN:
 3083   
       case RSIGNEDSHIFTASSIGN:
 3084   
       case RUNSIGNEDSHIFTASSIGN:
 3085  2139
         switch (jj_nt.kind) {
 3086   
         case INCR:
 3087  131
           jj_consume_token(INCR);
 3088  131
           break;
 3089   
         case DECR:
 3090  0
           jj_consume_token(DECR);
 3091  0
           break;
 3092   
         case ASSIGN:
 3093   
         case PLUSASSIGN:
 3094   
         case MINUSASSIGN:
 3095   
         case STARASSIGN:
 3096   
         case SLASHASSIGN:
 3097   
         case ANDASSIGN:
 3098   
         case ORASSIGN:
 3099   
         case XORASSIGN:
 3100   
         case REMASSIGN:
 3101   
         case LSHIFTASSIGN:
 3102   
         case RSIGNEDSHIFTASSIGN:
 3103   
         case RUNSIGNEDSHIFTASSIGN:
 3104  2008
           AssignmentOperator();
 3105  2008
           Expression();
 3106  2008
           break;
 3107   
         default:
 3108  0
           jj_la1[111] = jj_gen;
 3109  0
           jj_consume_token(-1);
 3110  0
           throw new ParseException();
 3111   
         }
 3112  2139
         break;
 3113   
       default:
 3114  1797
         jj_la1[112] = jj_gen;
 3115   
         ;
 3116   
       }
 3117  3936
       break;
 3118   
     default:
 3119  0
       jj_la1[113] = jj_gen;
 3120  0
       jj_consume_token(-1);
 3121  0
       throw new ParseException();
 3122   
     }
 3123   
   }
 3124   
 
 3125  0
   final public void SwitchStatement() throws ParseException {
 3126  0
     jj_consume_token(SWITCH);
 3127  0
     jj_consume_token(LPAREN);
 3128  0
     Expression();
 3129  0
     jj_consume_token(RPAREN);
 3130  0
     jj_consume_token(LBRACE);
 3131  0
     label_48:
 3132   
     while (true) {
 3133  0
       switch (jj_nt.kind) {
 3134   
       case CASE:
 3135   
       case _DEFAULT:
 3136   
         ;
 3137  0
         break;
 3138   
       default:
 3139  0
         jj_la1[114] = jj_gen;
 3140  0
         break label_48;
 3141   
       }
 3142  0
       SwitchLabel();
 3143  0
       label_49:
 3144   
       while (true) {
 3145  0
         switch (jj_nt.kind) {
 3146   
         case BOOLEAN:
 3147   
         case BREAK:
 3148   
         case BYTE:
 3149   
         case CHAR:
 3150   
         case CLASS:
 3151   
         case CONTINUE:
 3152   
         case DO:
 3153   
         case DOUBLE:
 3154   
         case FALSE:
 3155   
         case FINAL:
 3156   
         case FLOAT:
 3157   
         case FOR:
 3158   
         case IF:
 3159   
         case INT:
 3160   
         case INTERFACE:
 3161   
         case LONG:
 3162   
         case NEW:
 3163   
         case NULL:
 3164   
         case RETURN:
 3165   
         case SHORT:
 3166   
         case SUPER:
 3167   
         case SWITCH:
 3168   
         case SYNCHRONIZED:
 3169   
         case THIS:
 3170   
         case THROW:
 3171   
         case TRUE:
 3172   
         case TRY:
 3173   
         case VOID:
 3174   
         case WHILE:
 3175   
         case ASSERT:
 3176   
         case INTEGER_LITERAL:
 3177   
         case FLOATING_POINT_LITERAL:
 3178   
         case CHARACTER_LITERAL:
 3179   
         case STRING_LITERAL:
 3180   
         case IDENTIFIER:
 3181   
         case LPAREN:
 3182   
         case LBRACE:
 3183   
         case SEMICOLON:
 3184   
         case INCR:
 3185   
         case DECR:
 3186   
           ;
 3187  0
           break;
 3188   
         default:
 3189  0
           jj_la1[115] = jj_gen;
 3190  0
           break label_49;
 3191   
         }
 3192  0
         BlockStatement();
 3193   
       }
 3194   
     }
 3195  0
     jj_consume_token(RBRACE);
 3196   
   }
 3197   
 
 3198  0
   final public void SwitchLabel() throws ParseException {
 3199  0
     switch (jj_nt.kind) {
 3200   
     case CASE:
 3201  0
       jj_consume_token(CASE);
 3202  0
       Expression();
 3203  0
       jj_consume_token(COLON);
 3204  0
       break;
 3205   
     case _DEFAULT:
 3206  0
       jj_consume_token(_DEFAULT);
 3207  0
       jj_consume_token(COLON);
 3208  0
       break;
 3209   
     default:
 3210  0
       jj_la1[116] = jj_gen;
 3211