JavaParser.java

// $ANTLR 3.5.2 org/argouml/language/java/reveng/Java.g 2025-01-03 08:59:46

package org.argouml.language.java.reveng;


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;

/**
 * This is the Java 1.5 grammar for reverse engineering Java source code
 * to a UML model.
 * 
 * <p>It is generated by the ANTLR V.3 parser generator (www.antlr.org).
 *    Antlr uses the Java.g grammar file to generate the JavaParser.java
 *    parser.
 * 
 * <p><strong>DO NOT MODIFY JavaParser.java</strong>
 * 
 * <p>If you need to modify how Argo parses Java files then:
 * <ol>
 *     <li>modify <strong>Java.g</strong>. See the antlr website
 *         for examples of how to modify a antlr grammar file</li>
 *     <li>save Java.g and run argo's build script with the 
 *         "<strong>generateparser</strong>" target.</li>
 *     <li>build argo again.</li>
 * </ol>
 * 
 * <pre>
 * --------- original notes: -------------------------------------------
 *
 *  This is a very close representation of the spec; the changes
 *  are comestic (remove left recursion) and also fixes (the spec
 *  isn't exactly perfect).  I have run this on the 1.4.2 source
 *  and some nasty looking enums from 1.5, but have not really
 *  tested for 1.5 compatibility.
 *
 *  I built this with: java -Xmx100M org.antlr.Tool java.g 
 *  and got two errors that are ok (for now):
 *  java.g:691:9: Decision can match input such as
 *    "'0'..'9'{'E', 'e'}{'+', '-'}'0'..'9'{'D', 'F', 'd', 'f'}"
 *    using multiple alternatives: 3, 4
 *  As a result, alternative(s) 4 were disabled for that input
 *  java.g:734:35: Decision can match input such as "{'$', 'A'..'Z',
 *    '_', 'a'..'z', '\u00C0'..'\u00D6', '\u00D8'..'\u00F6',
 *    '\u00F8'..'\u1FFF', '\u3040'..'\u318F', '\u3300'..'\u337F',
 *    '\u3400'..'\u3D2D', '\u4E00'..'\u9FFF', '\uF900'..'\uFAFF'}"
 *    using multiple alternatives: 1, 2
 *  As a result, alternative(s) 2 were disabled for that input
 *
 *  You can turn enum on/off as a keyword :)
 *
 *  Version 1.0 -- initial release July 5, 2006 (requires 3.0b2 or higher)
 *
 *  Primary author: Terence Parr, July 2006
 *
 *  Version 1.0.1 -- corrections by Koen Vanderkimpen & Marko van Dooren,
 *      October 25, 2006;
 *      fixed normalInterfaceDeclaration: now uses typeParameters instead
 *          of typeParameter (according to JLS, 3rd edition)
 *      fixed castExpression: no longer allows expression next to type
 *          (according to semantics in JLS, in contrast with syntax in JLS)
 *
 *  Version 1.0.2 -- Terence Parr, Nov 27, 2006
 *      java spec I built this from had some bizarre for-loop control.
 *          Looked weird and so I looked elsewhere...Yep, it's messed up.
 *          simplified.
 *
 *  Version 1.0.3 -- Chris Hogue, Feb 26, 2007
 *      Factored out an annotationName rule and used it in the annotation rule.
 *          Not sure why, but typeName wasn't recognizing references to inner
 *          annotations (e.g. @InterfaceName.InnerAnnotation())
 *      Factored out the elementValue section of an annotation reference.  Created 
 *          elementValuePair and elementValuePairs rules, then used them in the 
 *          annotation rule.  Allows it to recognize annotation references with 
 *          multiple, comma separated attributes.
 *      Updated elementValueArrayInitializer so that it allows multiple elements.
 *          (It was only allowing 0 or 1 element).
 *      Updated localVariableDeclaration to allow annotations.  Interestingly the JLS
 *          doesn't appear to indicate this is legal, but it does work as of at least
 *          JDK 1.5.0_06.
 *      Moved the Identifier portion of annotationTypeElementRest to annotationMethodRest.
 *          Because annotationConstantRest already references variableDeclarator which 
 *          has the Identifier portion in it, the parser would fail on constants in 
 *          annotation definitions because it expected two identifiers.  
 *      Added optional trailing ';' to the alternatives in annotationTypeElementRest.
 *          Wouldn't handle an inner interface that has a trailing ';'.
 *      Swapped the expression and type rule reference order in castExpression to 
 *          make it check for genericized casts first.  It was failing to recognize a
 *          statement like  "Class<Byte> TYPE = (Class<Byte>)...;" because it was seeing
 *          'Class<Byte' in the cast expression as a less than expression, then failing 
 *          on the '>'.
 *      Changed createdName to use typeArguments instead of nonWildcardTypeArguments.
 *          Again, JLS doesn't seem to allow this, but java.lang.Class has an example of
 *          of this construct.
 *      Changed the 'this' alternative in primary to allow 'identifierSuffix' rather than
 *          just 'arguments'.  The case it couldn't handle was a call to an explicit
 *          generic method invocation (e.g. this.<E>doSomething()).  Using identifierSuffix
 *          may be overly aggressive--perhaps should create a more constrained thisSuffix rule?
 *      
 *  Version 1.0.4 -- Hiroaki Nakamura, May 3, 2007
 *
 *  Fixed formalParameterDecls, localVariableDeclaration, forInit,
 *  and forVarControl to use variableModifier* not 'final'? (annotation)?
 *
 *  Version 1.0.5 -- Terence, June 21, 2007
 *  --a[i].foo didn't work. Fixed unaryExpression
 *
 *  Version 1.0.6 -- John Ridgway, March 17, 2008
 *      Made "assert" a switchable keyword like "enum".
 *      Fixed compilationUnit to disallow "annotation importDeclaration ...".
 *      Changed "Identifier ('.' Identifier)*" to "qualifiedName" in more 
 *          places.
 *      Changed modifier* and/or variableModifier* to classOrInterfaceModifiers,
 *          modifiers or variableModifiers, as appropriate.
 *      Renamed "bound" to "typeBound" to better match language in the JLS.
 *      Added "memberDeclaration" which rewrites to methodDeclaration or 
 *      fieldDeclaration and pulled type into memberDeclaration.  So we parse 
 *          type and then move on to decide whether we're dealing with a field
 *          or a method.
 *      Modified "constructorDeclaration" to use "constructorBody" instead of
 *          "methodBody".  constructorBody starts with explicitConstructorInvocation,
 *          then goes on to blockStatement*.  Pulling explicitConstructorInvocation
 *          out of expressions allowed me to simplify "primary".
 *      Changed variableDeclarator to simplify it.
 *      Changed type to use classOrInterfaceType, thus simplifying it; of course
 *          I then had to add classOrInterfaceType, but it is used in several 
 *          places.
 *      Fixed annotations, old version allowed "@X(y,z)", which is illegal.
 *      Added optional comma to end of "elementValueArrayInitializer"; as per JLS.
 *      Changed annotationTypeElementRest to use normalClassDeclaration and 
 *          normalInterfaceDeclaration rather than classDeclaration and 
 *          interfaceDeclaration, thus getting rid of a couple of grammar ambiguities.
 *      Split localVariableDeclaration into localVariableDeclarationStatement
 *          (includes the terminating semi-colon) and localVariableDeclaration.  
 *          This allowed me to use localVariableDeclaration in "forInit" clauses,
 *           simplifying them.
 *      Changed switchBlockStatementGroup to use multiple labels.  This adds an
 *          ambiguity, but if one uses appropriately greedy parsing it yields the
 *           parse that is closest to the meaning of the switch statement.
 *      Renamed "forVarControl" to "enhancedForControl" -- JLS language.
 *      Added semantic predicates to test for shift operations rather than other
 *          things.  Thus, for instance, the string "< <" will never be treated
 *          as a left-shift operator.
 *      In "creator" we rule out "nonWildcardTypeArguments" on arrayCreation, 
 *          which are illegal.
 *      Moved "nonWildcardTypeArguments into innerCreator.
 *      Removed 'super' superSuffix from explicitGenericInvocation, since that
 *          is only used in explicitConstructorInvocation at the beginning of a
 *           constructorBody.  (This is part of the simplification of expressions
 *           mentioned earlier.)
 *      Simplified primary (got rid of those things that are only used in
 *          explicitConstructorInvocation).
 *      Lexer -- removed "Exponent?" from FloatingPointLiteral choice 4, since it
 *          led to an ambiguity.
 *
 *      This grammar successfully parses every .java file in the JDK 1.5 source 
 *          tree (excluding those whose file names include '-', which are not
 *          valid Java compilation units).
 *
 *  Known remaining problems:
 *      "Letter" and "JavaIDDigit" are wrong.  The actual specification of
 *      "Letter" should be "a character for which the method
 *      Character.isJavaIdentifierStart(int) returns true."  A "Java 
 *      letter-or-digit is a character for which the method 
 *      Character.isJavaIdentifierPart(int) returns true."
 * 
 * --------- further ArgoUML notes: -----------------------------------
 *
 * Modified by Thomas Neustupny (April 18, 2008)
 *    o Added a lot of stuff for the UML Modeler from the former Antlr 2 grammar
 *    o Not passing typeArguments and typeParameters to the Modeler (don't how they map to UML)
 *    o from Tom Morris, who did this in the former Antlr 2 grammar:
 *      Added support to pass variableLengthParameterDeclaration to Modeler
 *    o from Tom Morris, who did this in the former Antlr 2 grammar:
 *      Added stubs for typeParameters, typeArguments, annotations and
 *      annotationDefinitions and so we can warn when they're skipped.
 *
 * This grammar is in the PUBLIC DOMAIN
 * </pre>
 */
@SuppressWarnings("all")
public class JavaParser extends Parser {
	public static final String[] tokenNames = new String[] {
		"<invalid>", "<EOR>", "<DOWN>", "<UP>", "ASSERT", "COMMENT", "CharacterLiteral", 
		"DecimalLiteral", "EMPTY_COMMENT", "ENUM", "EscapeSequence", "Exponent", 
		"FloatTypeSuffix", "FloatingPointLiteral", "HexDigit", "HexLiteral", "Identifier", 
		"IntegerTypeSuffix", "JAVADOC", "JavaIDDigit", "LINE_COMMENT", "Letter", 
		"OctalEscape", "OctalLiteral", "StringLiteral", "UnicodeEscape", "WS", 
		"'!'", "'!='", "'%'", "'%='", "'&&'", "'&'", "'&='", "'('", "')'", "'*'", 
		"'*='", "'+'", "'++'", "'+='", "','", "'-'", "'--'", "'-='", "'.'", "'...'", 
		"'/'", "'/='", "':'", "';'", "'<'", "'='", "'=='", "'>'", "'?'", "'@'", 
		"'['", "']'", "'^'", "'^='", "'abstract'", "'boolean'", "'break'", "'byte'", 
		"'case'", "'catch'", "'char'", "'class'", "'continue'", "'default'", "'do'", 
		"'double'", "'else'", "'extends'", "'false'", "'final'", "'finally'", 
		"'float'", "'for'", "'if'", "'implements'", "'import'", "'instanceof'", 
		"'int'", "'interface'", "'long'", "'native'", "'new'", "'null'", "'package'", 
		"'private'", "'protected'", "'public'", "'return'", "'short'", "'static'", 
		"'strictfp'", "'super'", "'switch'", "'synchronized'", "'this'", "'throw'", 
		"'throws'", "'transient'", "'true'", "'try'", "'void'", "'volatile'", 
		"'while'", "'{'", "'|'", "'|='", "'||'", "'}'", "'~'"
	};
	public static final int EOF=-1;
	public static final int T__27=27;
	public static final int T__28=28;
	public static final int T__29=29;
	public static final int T__30=30;
	public static final int T__31=31;
	public static final int T__32=32;
	public static final int T__33=33;
	public static final int T__34=34;
	public static final int T__35=35;
	public static final int T__36=36;
	public static final int T__37=37;
	public static final int T__38=38;
	public static final int T__39=39;
	public static final int T__40=40;
	public static final int T__41=41;
	public static final int T__42=42;
	public static final int T__43=43;
	public static final int T__44=44;
	public static final int T__45=45;
	public static final int T__46=46;
	public static final int T__47=47;
	public static final int T__48=48;
	public static final int T__49=49;
	public static final int T__50=50;
	public static final int T__51=51;
	public static final int T__52=52;
	public static final int T__53=53;
	public static final int T__54=54;
	public static final int T__55=55;
	public static final int T__56=56;
	public static final int T__57=57;
	public static final int T__58=58;
	public static final int T__59=59;
	public static final int T__60=60;
	public static final int T__61=61;
	public static final int T__62=62;
	public static final int T__63=63;
	public static final int T__64=64;
	public static final int T__65=65;
	public static final int T__66=66;
	public static final int T__67=67;
	public static final int T__68=68;
	public static final int T__69=69;
	public static final int T__70=70;
	public static final int T__71=71;
	public static final int T__72=72;
	public static final int T__73=73;
	public static final int T__74=74;
	public static final int T__75=75;
	public static final int T__76=76;
	public static final int T__77=77;
	public static final int T__78=78;
	public static final int T__79=79;
	public static final int T__80=80;
	public static final int T__81=81;
	public static final int T__82=82;
	public static final int T__83=83;
	public static final int T__84=84;
	public static final int T__85=85;
	public static final int T__86=86;
	public static final int T__87=87;
	public static final int T__88=88;
	public static final int T__89=89;
	public static final int T__90=90;
	public static final int T__91=91;
	public static final int T__92=92;
	public static final int T__93=93;
	public static final int T__94=94;
	public static final int T__95=95;
	public static final int T__96=96;
	public static final int T__97=97;
	public static final int T__98=98;
	public static final int T__99=99;
	public static final int T__100=100;
	public static final int T__101=101;
	public static final int T__102=102;
	public static final int T__103=103;
	public static final int T__104=104;
	public static final int T__105=105;
	public static final int T__106=106;
	public static final int T__107=107;
	public static final int T__108=108;
	public static final int T__109=109;
	public static final int T__110=110;
	public static final int T__111=111;
	public static final int T__112=112;
	public static final int T__113=113;
	public static final int T__114=114;
	public static final int T__115=115;
	public static final int ASSERT=4;
	public static final int COMMENT=5;
	public static final int CharacterLiteral=6;
	public static final int DecimalLiteral=7;
	public static final int EMPTY_COMMENT=8;
	public static final int ENUM=9;
	public static final int EscapeSequence=10;
	public static final int Exponent=11;
	public static final int FloatTypeSuffix=12;
	public static final int FloatingPointLiteral=13;
	public static final int HexDigit=14;
	public static final int HexLiteral=15;
	public static final int Identifier=16;
	public static final int IntegerTypeSuffix=17;
	public static final int JAVADOC=18;
	public static final int JavaIDDigit=19;
	public static final int LINE_COMMENT=20;
	public static final int Letter=21;
	public static final int OctalEscape=22;
	public static final int OctalLiteral=23;
	public static final int StringLiteral=24;
	public static final int UnicodeEscape=25;
	public static final int WS=26;

	// delegates
	public Parser[] getDelegates() {
		return new Parser[] {};
	}

	// delegators


	public JavaParser(TokenStream input) {
		this(input, new RecognizerSharedState());
	}
	public JavaParser(TokenStream input, RecognizerSharedState state) {
		super(input, state);
		this.state.ruleMemo = new HashMap[409+1];


	}

	@Override public String[] getTokenNames() { return JavaParser.tokenNames; }
	@Override public String getGrammarFileName() { return "org/argouml/language/java/reveng/Java.g"; }


	    /**
	     * Counts the number of LT seen in the typeArguments production.
	     * It is used in semantic predicates to ensure we have seen
	     * enough closing '>' characters; which actually may have been
	     * either GT, SR or BSR tokens.
	     */
	    private int ltCounter = 0;

	    // Constants for access modifiers according to the JVM specs chapter 4
	    public static final short ACC_PUBLIC    = 0x0001;
	    public static final short ACC_PRIVATE   = 0x0002;
	    public static final short ACC_PROTECTED = 0x0004;
	    public static final short ACC_STATIC    = 0x0008;
	    public static final short ACC_FINAL     = 0x0010;
	    public static final short ACC_SUPER     = 0x0020;
	    public static final short ACC_VOLATILE  = 0x0040;
	    public static final short ACC_TRANSIENT = 0x0080;
	    public static final short ACC_NATIVE    = 0x0100;
	    public static final short ACC_INTERFACE = 0x0200;
	    public static final short ACC_ABSTRACT  = 0x0400;                     

	    /** Parser mode for the first pass of the import from sources */
	    public static final int MODE_IMPORT_PASS1 = 1;
	    /** Parser mode for the second pass of the import from sources */
	    public static final int MODE_IMPORT_PASS2 = 2;
	    /** Parser mode for the source code generation in update mode */
	    public static final int MODE_GENERATION_UPDATE = 4;
	    /** Parser mode for the reverse engineering of a sequence diagram */
	    public static final int MODE_REVENG_SEQUENCE = 8;

	    /** The parser mode, that controls which semantic expressions will be active */
	    private int parserMode = 0;

	    /** The name of the variable to which a created object (new...) is assigned to */
	    private String createdObjectVarName = null;
	   
	    /** Import details level */
	    private int level = 2;

	    /** Set the parser mode, to control which semantic expressions will be active */
	    public void setParserMode(int mode) {
	        parserMode = mode;
	    }
	    
	    // This one is not(!) in the JVM specs, but required
	    public static final short ACC_SYNCHRONIZED  = 0x0020;

	    /**
	     * To get direct access to the lexer (for the javadoc
	     * comments), we store a reference to it.
	     */
	    private JavaLexer _lexer = null;

	    /**
	     * A buffer to hold the last parsed javadoc comment.
	     */
	    String _javadocComment = null;

	    /**
	     * Return (and consume) the last available Javadoc Comment.
	     *
	     * @return The last parsed javadoc comment.
	     */
	    protected String getJavadocComment() {
	        String result = _javadocComment;
	        _javadocComment = null;  // Since we consume the comment, the buffer is reset.
	        return result;
	    }

	    /**
	     * Updates the last parsed javadoc comment.
	     */
	    private void updateJavadocComment() {
	        int i = input.index();
	        if (i == 0) {
	            return;
	        }
	        Token t = (Token)input.get(--i);
	        while (i > 0 && t.getType()== _lexer.WS) {
	            t = (Token)input.get(--i);
	        }
	        if (t.getType() == _lexer.JAVADOC) {
	            _javadocComment = t.getText();
	        }
	    }
	    
	    private Modeller _modeller;

	    public Modeller getModeller() {
	        return _modeller;
	    }

	    public void setModeller(Modeller modeller) {
	        _modeller = modeller;
	        Object lvl = modeller.getAttribute("level");
	        if (lvl != null) {
	          level = ((Integer)lvl).intValue();
	        }
	    }
	    
	        // A reference to the last added Operation (here: method)
	        private Object _currentMethod = null;

	    /**
	     * get reference to the last added Operation (here: method)
	     */
	    Object getMethod() {
	        return _currentMethod;
	    }

	    /**
	     * set reference to the last added Operation (here: method)
	     */
	    void setMethod(Object method) {
	        _currentMethod = method;
	    }

	    // A method body
	    private String _methodBody = null;

	    /**
	     * get last method body
	     */
	    String getBody() {
	        return _methodBody;
	    }

	    /**
	     * set last method body
	     */
	    void setBody(String body) {
	        _methodBody = body;
	    }

	    // A flag to indicate if we are inside a compoundStatement
	    private boolean      _inCompoundStatement  = false;    

	    /**
	     * set if we are inside a compoundStatement
	     */
	    void setIsInCompoundStatement(boolean flag) {
	        _inCompoundStatement = flag;
	    }

	    /**
	     * check if we are inside a compoundStatement
	     */
	    boolean isInCompoundStatement() {
	        return _inCompoundStatement;
	    }

	    /**
	     * Add a call that appears after a dot. This is needed for the RE of
	     * sequence diagrams and is currently not used. Should be called in the
	     * identifierSuffix rule.
	     */
	    private void addDotCall(String id, String thisOrSuper, boolean parenths) {
	        StringBuffer sb = new StringBuffer();
	        List<String> calls = getModeller().getMethodCalls();
	        String prev = calls.get(calls.size() - 1);
	        if (thisOrSuper != null) {
	            sb.append(thisOrSuper);
	        } else if (prev != null) {
	            if (parenths) {
	                sb.append('(');
	            }
	            sb.append(prev).append("()");
	            if (parenths) {
	                sb.append(')');
	            }
	            sb.append('.');
	        }
	        sb.append(id);
	        getModeller().addCall(sb.toString());
	    }



	// $ANTLR start "compilationUnit"
	// org/argouml/language/java/reveng/Java.g:425:1: compilationUnit[Modeller modeller, JavaLexer lexer] : ( ( '@' )=> annotations ( packageDeclaration ( importDeclaration )* ( typeDeclaration )* | classOrInterfaceDeclaration ( typeDeclaration )* ) | ( packageDeclaration )? ( importDeclaration )* ( typeDeclaration )* );
	public final void compilationUnit(Modeller modeller, JavaLexer lexer) throws RecognitionException {
		int compilationUnit_StartIndex = input.index();


		        setModeller(modeller);
		        _lexer = lexer;
		        if (state.backtracking == 0) {
		            getModeller().addComponent();
		        }
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 1) ) { return; }

			// org/argouml/language/java/reveng/Java.g:433:5: ( ( '@' )=> annotations ( packageDeclaration ( importDeclaration )* ( typeDeclaration )* | classOrInterfaceDeclaration ( typeDeclaration )* ) | ( packageDeclaration )? ( importDeclaration )* ( typeDeclaration )* )
			int alt8=2;
			int LA8_0 = input.LA(1);
			if ( (LA8_0==56) ) {
				int LA8_1 = input.LA(2);
				if ( (LA8_1==85) ) {
					alt8=2;
				}
				else if ( (LA8_1==Identifier) ) {
					int LA8_17 = input.LA(3);
					if ( (synpred1_Java()) ) {
						alt8=1;
					}
					else if ( (true) ) {
						alt8=2;
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 8, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA8_0==EOF||LA8_0==ENUM||LA8_0==50||LA8_0==61||LA8_0==68||LA8_0==76||LA8_0==82||LA8_0==85||(LA8_0 >= 90 && LA8_0 <= 93)||(LA8_0 >= 96 && LA8_0 <= 97)) ) {
				alt8=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 8, 0, input);
				throw nvae;
			}

			switch (alt8) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:433:9: ( '@' )=> annotations ( packageDeclaration ( importDeclaration )* ( typeDeclaration )* | classOrInterfaceDeclaration ( typeDeclaration )* )
					{
					pushFollow(FOLLOW_annotations_in_compilationUnit112);
					annotations();
					state._fsp--;
					if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:434:9: ( packageDeclaration ( importDeclaration )* ( typeDeclaration )* | classOrInterfaceDeclaration ( typeDeclaration )* )
					int alt4=2;
					int LA4_0 = input.LA(1);
					if ( (LA4_0==90) ) {
						alt4=1;
					}
					else if ( (LA4_0==ENUM||LA4_0==56||LA4_0==61||LA4_0==68||LA4_0==76||LA4_0==85||(LA4_0 >= 91 && LA4_0 <= 93)||(LA4_0 >= 96 && LA4_0 <= 97)) ) {
						alt4=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						NoViableAltException nvae =
							new NoViableAltException("", 4, 0, input);
						throw nvae;
					}

					switch (alt4) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:434:13: packageDeclaration ( importDeclaration )* ( typeDeclaration )*
							{
							pushFollow(FOLLOW_packageDeclaration_in_compilationUnit126);
							packageDeclaration();
							state._fsp--;
							if (state.failed) return;
							// org/argouml/language/java/reveng/Java.g:434:32: ( importDeclaration )*
							loop1:
							while (true) {
								int alt1=2;
								int LA1_0 = input.LA(1);
								if ( (LA1_0==82) ) {
									alt1=1;
								}

								switch (alt1) {
								case 1 :
									// org/argouml/language/java/reveng/Java.g:434:32: importDeclaration
									{
									pushFollow(FOLLOW_importDeclaration_in_compilationUnit128);
									importDeclaration();
									state._fsp--;
									if (state.failed) return;
									}
									break;

								default :
									break loop1;
								}
							}

							// org/argouml/language/java/reveng/Java.g:434:51: ( typeDeclaration )*
							loop2:
							while (true) {
								int alt2=2;
								int LA2_0 = input.LA(1);
								if ( (LA2_0==ENUM||LA2_0==50||LA2_0==56||LA2_0==61||LA2_0==68||LA2_0==76||LA2_0==85||(LA2_0 >= 91 && LA2_0 <= 93)||(LA2_0 >= 96 && LA2_0 <= 97)) ) {
									alt2=1;
								}

								switch (alt2) {
								case 1 :
									// org/argouml/language/java/reveng/Java.g:434:51: typeDeclaration
									{
									pushFollow(FOLLOW_typeDeclaration_in_compilationUnit131);
									typeDeclaration();
									state._fsp--;
									if (state.failed) return;
									}
									break;

								default :
									break loop2;
								}
							}

							}
							break;
						case 2 :
							// org/argouml/language/java/reveng/Java.g:435:13: classOrInterfaceDeclaration ( typeDeclaration )*
							{
							pushFollow(FOLLOW_classOrInterfaceDeclaration_in_compilationUnit146);
							classOrInterfaceDeclaration();
							state._fsp--;
							if (state.failed) return;
							// org/argouml/language/java/reveng/Java.g:435:41: ( typeDeclaration )*
							loop3:
							while (true) {
								int alt3=2;
								int LA3_0 = input.LA(1);
								if ( (LA3_0==ENUM||LA3_0==50||LA3_0==56||LA3_0==61||LA3_0==68||LA3_0==76||LA3_0==85||(LA3_0 >= 91 && LA3_0 <= 93)||(LA3_0 >= 96 && LA3_0 <= 97)) ) {
									alt3=1;
								}

								switch (alt3) {
								case 1 :
									// org/argouml/language/java/reveng/Java.g:435:41: typeDeclaration
									{
									pushFollow(FOLLOW_typeDeclaration_in_compilationUnit148);
									typeDeclaration();
									state._fsp--;
									if (state.failed) return;
									}
									break;

								default :
									break loop3;
								}
							}

							}
							break;

					}

					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:437:9: ( packageDeclaration )? ( importDeclaration )* ( typeDeclaration )*
					{
					// org/argouml/language/java/reveng/Java.g:437:9: ( packageDeclaration )?
					int alt5=2;
					int LA5_0 = input.LA(1);
					if ( (LA5_0==90) ) {
						alt5=1;
					}
					switch (alt5) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:437:10: packageDeclaration
							{
							pushFollow(FOLLOW_packageDeclaration_in_compilationUnit169);
							packageDeclaration();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					// org/argouml/language/java/reveng/Java.g:437:31: ( importDeclaration )*
					loop6:
					while (true) {
						int alt6=2;
						int LA6_0 = input.LA(1);
						if ( (LA6_0==82) ) {
							alt6=1;
						}

						switch (alt6) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:437:31: importDeclaration
							{
							pushFollow(FOLLOW_importDeclaration_in_compilationUnit173);
							importDeclaration();
							state._fsp--;
							if (state.failed) return;
							}
							break;

						default :
							break loop6;
						}
					}

					// org/argouml/language/java/reveng/Java.g:437:50: ( typeDeclaration )*
					loop7:
					while (true) {
						int alt7=2;
						int LA7_0 = input.LA(1);
						if ( (LA7_0==ENUM||LA7_0==50||LA7_0==56||LA7_0==61||LA7_0==68||LA7_0==76||LA7_0==85||(LA7_0 >= 91 && LA7_0 <= 93)||(LA7_0 >= 96 && LA7_0 <= 97)) ) {
							alt7=1;
						}

						switch (alt7) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:437:50: typeDeclaration
							{
							pushFollow(FOLLOW_typeDeclaration_in_compilationUnit176);
							typeDeclaration();
							state._fsp--;
							if (state.failed) return;
							}
							break;

						default :
							break loop7;
						}
					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 1, compilationUnit_StartIndex); }

		}
	}
	// $ANTLR end "compilationUnit"



	// $ANTLR start "packageDeclaration"
	// org/argouml/language/java/reveng/Java.g:441:1: packageDeclaration : 'package' packageName= qualifiedName ';' ;
	public final void packageDeclaration() throws RecognitionException {
		int packageDeclaration_StartIndex = input.index();

		ParserRuleReturnScope packageName =null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 2) ) { return; }

			// org/argouml/language/java/reveng/Java.g:442:5: ( 'package' packageName= qualifiedName ';' )
			// org/argouml/language/java/reveng/Java.g:442:9: 'package' packageName= qualifiedName ';'
			{
			match(input,90,FOLLOW_90_in_packageDeclaration197); if (state.failed) return;
			pushFollow(FOLLOW_qualifiedName_in_packageDeclaration201);
			packageName=qualifiedName();
			state._fsp--;
			if (state.failed) return;
			match(input,50,FOLLOW_50_in_packageDeclaration203); if (state.failed) return;
			if ( state.backtracking==0 ) {
			            getModeller().addPackage((packageName!=null?input.toString(packageName.start,packageName.stop):null));
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 2, packageDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "packageDeclaration"



	// $ANTLR start "importDeclaration"
	// org/argouml/language/java/reveng/Java.g:449:1: importDeclaration : 'import' ( 'static' )? importName= qualifiedName ( '.' '*' )? ';' ;
	public final void importDeclaration() throws RecognitionException {
		int importDeclaration_StartIndex = input.index();

		ParserRuleReturnScope importName =null;


		        StringBuffer sb = new StringBuffer(80);
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 3) ) { return; }

			// org/argouml/language/java/reveng/Java.g:453:5: ( 'import' ( 'static' )? importName= qualifiedName ( '.' '*' )? ';' )
			// org/argouml/language/java/reveng/Java.g:453:9: 'import' ( 'static' )? importName= qualifiedName ( '.' '*' )? ';'
			{
			match(input,82,FOLLOW_82_in_importDeclaration250); if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:453:18: ( 'static' )?
			int alt9=2;
			int LA9_0 = input.LA(1);
			if ( (LA9_0==96) ) {
				alt9=1;
			}
			switch (alt9) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:453:18: 'static'
					{
					match(input,96,FOLLOW_96_in_importDeclaration252); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_qualifiedName_in_importDeclaration265);
			importName=qualifiedName();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { sb.append((importName!=null?input.toString(importName.start,importName.stop):null)); }
			// org/argouml/language/java/reveng/Java.g:455:9: ( '.' '*' )?
			int alt10=2;
			int LA10_0 = input.LA(1);
			if ( (LA10_0==45) ) {
				alt10=1;
			}
			switch (alt10) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:455:10: '.' '*'
					{
					match(input,45,FOLLOW_45_in_importDeclaration278); if (state.failed) return;
					match(input,36,FOLLOW_36_in_importDeclaration280); if (state.failed) return;
					if ( state.backtracking==0 ) { sb.append(".*"); }
					}
					break;

			}

			match(input,50,FOLLOW_50_in_importDeclaration287); if (state.failed) return;
			if ( state.backtracking==0 ) {
			            getModeller().addImport(sb.toString(),
			                (parserMode == MODE_IMPORT_PASS2));
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 3, importDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "importDeclaration"



	// $ANTLR start "typeDeclaration"
	// org/argouml/language/java/reveng/Java.g:463:1: typeDeclaration : ( classOrInterfaceDeclaration | ';' );
	public final void typeDeclaration() throws RecognitionException {
		int typeDeclaration_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 4) ) { return; }

			// org/argouml/language/java/reveng/Java.g:464:5: ( classOrInterfaceDeclaration | ';' )
			int alt11=2;
			int LA11_0 = input.LA(1);
			if ( (LA11_0==ENUM||LA11_0==56||LA11_0==61||LA11_0==68||LA11_0==76||LA11_0==85||(LA11_0 >= 91 && LA11_0 <= 93)||(LA11_0 >= 96 && LA11_0 <= 97)) ) {
				alt11=1;
			}
			else if ( (LA11_0==50) ) {
				alt11=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 11, 0, input);
				throw nvae;
			}

			switch (alt11) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:464:9: classOrInterfaceDeclaration
					{
					pushFollow(FOLLOW_classOrInterfaceDeclaration_in_typeDeclaration317);
					classOrInterfaceDeclaration();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:465:9: ';'
					{
					match(input,50,FOLLOW_50_in_typeDeclaration327); if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 4, typeDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "typeDeclaration"



	// $ANTLR start "classOrInterfaceDeclaration"
	// org/argouml/language/java/reveng/Java.g:468:1: classOrInterfaceDeclaration : m= classOrInterfaceModifiers ( classDeclaration[getJavadocComment(), m] | interfaceDeclaration[getJavadocComment(), m] ) ;
	public final void classOrInterfaceDeclaration() throws RecognitionException {
		int classOrInterfaceDeclaration_StartIndex = input.index();

		short m =0;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 5) ) { return; }

			// org/argouml/language/java/reveng/Java.g:469:5: (m= classOrInterfaceModifiers ( classDeclaration[getJavadocComment(), m] | interfaceDeclaration[getJavadocComment(), m] ) )
			// org/argouml/language/java/reveng/Java.g:469:9: m= classOrInterfaceModifiers ( classDeclaration[getJavadocComment(), m] | interfaceDeclaration[getJavadocComment(), m] )
			{
			pushFollow(FOLLOW_classOrInterfaceModifiers_in_classOrInterfaceDeclaration348);
			m=classOrInterfaceModifiers();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:470:9: ( classDeclaration[getJavadocComment(), m] | interfaceDeclaration[getJavadocComment(), m] )
			int alt12=2;
			int LA12_0 = input.LA(1);
			if ( (LA12_0==ENUM||LA12_0==68) ) {
				alt12=1;
			}
			else if ( (LA12_0==56||LA12_0==85) ) {
				alt12=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 12, 0, input);
				throw nvae;
			}

			switch (alt12) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:470:13: classDeclaration[getJavadocComment(), m]
					{
					pushFollow(FOLLOW_classDeclaration_in_classOrInterfaceDeclaration362);
					classDeclaration(getJavadocComment(), m);
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:471:13: interfaceDeclaration[getJavadocComment(), m]
					{
					pushFollow(FOLLOW_interfaceDeclaration_in_classOrInterfaceDeclaration377);
					interfaceDeclaration(getJavadocComment(), m);
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 5, classOrInterfaceDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "classOrInterfaceDeclaration"



	// $ANTLR start "classOrInterfaceModifiers"
	// org/argouml/language/java/reveng/Java.g:475:1: classOrInterfaceModifiers returns [short m = 0] : (sub_m= classOrInterfaceModifier )* ;
	public final short classOrInterfaceModifiers() throws RecognitionException {
		short m =  0;

		int classOrInterfaceModifiers_StartIndex = input.index();

		short sub_m =0;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 6) ) { return m; }

			// org/argouml/language/java/reveng/Java.g:476:5: ( (sub_m= classOrInterfaceModifier )* )
			// org/argouml/language/java/reveng/Java.g:476:9: (sub_m= classOrInterfaceModifier )*
			{
			if ( state.backtracking==0 ) {
			            updateJavadocComment();
			        }
			// org/argouml/language/java/reveng/Java.g:479:9: (sub_m= classOrInterfaceModifier )*
			loop13:
			while (true) {
				int alt13=2;
				int LA13_0 = input.LA(1);
				if ( (LA13_0==56) ) {
					int LA13_4 = input.LA(2);
					if ( (LA13_4==Identifier) ) {
						alt13=1;
					}

				}
				else if ( (LA13_0==61||LA13_0==76||(LA13_0 >= 91 && LA13_0 <= 93)||(LA13_0 >= 96 && LA13_0 <= 97)) ) {
					alt13=1;
				}

				switch (alt13) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:479:13: sub_m= classOrInterfaceModifier
					{
					pushFollow(FOLLOW_classOrInterfaceModifier_in_classOrInterfaceModifiers431);
					sub_m=classOrInterfaceModifier();
					state._fsp--;
					if (state.failed) return m;
					if ( state.backtracking==0 ) {
					                m |= sub_m;
					            }
					}
					break;

				default :
					break loop13;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 6, classOrInterfaceModifiers_StartIndex); }

		}
		return m;
	}
	// $ANTLR end "classOrInterfaceModifiers"



	// $ANTLR start "classOrInterfaceModifier"
	// org/argouml/language/java/reveng/Java.g:486:1: classOrInterfaceModifier returns [short m = 0] : ( annotation | 'public' | 'protected' | 'private' | 'abstract' | 'static' | 'final' | 'strictfp' );
	public final short classOrInterfaceModifier() throws RecognitionException {
		short m =  0;

		int classOrInterfaceModifier_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 7) ) { return m; }

			// org/argouml/language/java/reveng/Java.g:487:5: ( annotation | 'public' | 'protected' | 'private' | 'abstract' | 'static' | 'final' | 'strictfp' )
			int alt14=8;
			switch ( input.LA(1) ) {
			case 56:
				{
				alt14=1;
				}
				break;
			case 93:
				{
				alt14=2;
				}
				break;
			case 92:
				{
				alt14=3;
				}
				break;
			case 91:
				{
				alt14=4;
				}
				break;
			case 61:
				{
				alt14=5;
				}
				break;
			case 96:
				{
				alt14=6;
				}
				break;
			case 76:
				{
				alt14=7;
				}
				break;
			case 97:
				{
				alt14=8;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return m;}
				NoViableAltException nvae =
					new NoViableAltException("", 14, 0, input);
				throw nvae;
			}
			switch (alt14) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:487:9: annotation
					{
					pushFollow(FOLLOW_annotation_in_classOrInterfaceModifier479);
					annotation();
					state._fsp--;
					if (state.failed) return m;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:488:9: 'public'
					{
					match(input,93,FOLLOW_93_in_classOrInterfaceModifier489); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_PUBLIC; }
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:489:9: 'protected'
					{
					match(input,92,FOLLOW_92_in_classOrInterfaceModifier505); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_PROTECTED; }
					}
					break;
				case 4 :
					// org/argouml/language/java/reveng/Java.g:490:9: 'private'
					{
					match(input,91,FOLLOW_91_in_classOrInterfaceModifier518); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_PRIVATE; }
					}
					break;
				case 5 :
					// org/argouml/language/java/reveng/Java.g:491:9: 'abstract'
					{
					match(input,61,FOLLOW_61_in_classOrInterfaceModifier533); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_ABSTRACT; }
					}
					break;
				case 6 :
					// org/argouml/language/java/reveng/Java.g:492:9: 'static'
					{
					match(input,96,FOLLOW_96_in_classOrInterfaceModifier547); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_STATIC; }
					}
					break;
				case 7 :
					// org/argouml/language/java/reveng/Java.g:493:9: 'final'
					{
					match(input,76,FOLLOW_76_in_classOrInterfaceModifier563); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_FINAL; }
					}
					break;
				case 8 :
					// org/argouml/language/java/reveng/Java.g:494:9: 'strictfp'
					{
					match(input,97,FOLLOW_97_in_classOrInterfaceModifier581); if (state.failed) return m;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 7, classOrInterfaceModifier_StartIndex); }

		}
		return m;
	}
	// $ANTLR end "classOrInterfaceModifier"



	// $ANTLR start "modifiers"
	// org/argouml/language/java/reveng/Java.g:497:1: modifiers returns [short m = 0] : (sub_m= modifier )* ;
	public final short modifiers() throws RecognitionException {
		short m =  0;

		int modifiers_StartIndex = input.index();

		short sub_m =0;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 8) ) { return m; }

			// org/argouml/language/java/reveng/Java.g:498:5: ( (sub_m= modifier )* )
			// org/argouml/language/java/reveng/Java.g:498:9: (sub_m= modifier )*
			{
			if ( state.backtracking==0 ) {
			            updateJavadocComment();
			        }
			// org/argouml/language/java/reveng/Java.g:501:9: (sub_m= modifier )*
			loop15:
			while (true) {
				int alt15=2;
				int LA15_0 = input.LA(1);
				if ( (LA15_0==56) ) {
					int LA15_6 = input.LA(2);
					if ( (LA15_6==Identifier) ) {
						alt15=1;
					}

				}
				else if ( (LA15_0==61||LA15_0==76||LA15_0==87||(LA15_0 >= 91 && LA15_0 <= 93)||(LA15_0 >= 96 && LA15_0 <= 97)||LA15_0==100||LA15_0==104||LA15_0==108) ) {
					alt15=1;
				}

				switch (alt15) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:501:13: sub_m= modifier
					{
					pushFollow(FOLLOW_modifier_in_modifiers620);
					sub_m=modifier();
					state._fsp--;
					if (state.failed) return m;
					if ( state.backtracking==0 ) {
					                m |= sub_m;
					            }
					}
					break;

				default :
					break loop15;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 8, modifiers_StartIndex); }

		}
		return m;
	}
	// $ANTLR end "modifiers"



	// $ANTLR start "classDeclaration"
	// org/argouml/language/java/reveng/Java.g:509:1: classDeclaration[String javadoc, short modifiers] : ( normalClassDeclaration[javadoc, modifiers] | enumDeclaration[javadoc, modifiers] );
	public final void classDeclaration(String javadoc, short modifiers) throws RecognitionException {
		int classDeclaration_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 9) ) { return; }

			// org/argouml/language/java/reveng/Java.g:510:5: ( normalClassDeclaration[javadoc, modifiers] | enumDeclaration[javadoc, modifiers] )
			int alt16=2;
			int LA16_0 = input.LA(1);
			if ( (LA16_0==68) ) {
				alt16=1;
			}
			else if ( (LA16_0==ENUM) ) {
				alt16=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 16, 0, input);
				throw nvae;
			}

			switch (alt16) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:510:9: normalClassDeclaration[javadoc, modifiers]
					{
					pushFollow(FOLLOW_normalClassDeclaration_in_classDeclaration666);
					normalClassDeclaration(javadoc, modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:511:9: enumDeclaration[javadoc, modifiers]
					{
					pushFollow(FOLLOW_enumDeclaration_in_classDeclaration677);
					enumDeclaration(javadoc, modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 9, classDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "classDeclaration"



	// $ANTLR start "normalClassDeclaration"
	// org/argouml/language/java/reveng/Java.g:514:1: normalClassDeclaration[String javadoc, short modifiers] : 'class' className= Identifier (tp= typeParameters )? ( 'extends' t= type )? ( 'implements' tl= typeList )? classBody ;
	public final void normalClassDeclaration(String javadoc, short modifiers) throws RecognitionException {
		int normalClassDeclaration_StartIndex = input.index();

		Token className=null;
		List<String> tp =null;
		String t =null;
		List<String> tl =null;


		        String superClassName = null;
		        List<String> ic = new ArrayList<String>();
		        List<String> tparam = new ArrayList<String>();
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 10) ) { return; }

			// org/argouml/language/java/reveng/Java.g:520:5: ( 'class' className= Identifier (tp= typeParameters )? ( 'extends' t= type )? ( 'implements' tl= typeList )? classBody )
			// org/argouml/language/java/reveng/Java.g:520:9: 'class' className= Identifier (tp= typeParameters )? ( 'extends' t= type )? ( 'implements' tl= typeList )? classBody
			{
			match(input,68,FOLLOW_68_in_normalClassDeclaration710); if (state.failed) return;
			className=(Token)match(input,Identifier,FOLLOW_Identifier_in_normalClassDeclaration714); if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:521:9: (tp= typeParameters )?
			int alt17=2;
			int LA17_0 = input.LA(1);
			if ( (LA17_0==51) ) {
				alt17=1;
			}
			switch (alt17) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:521:10: tp= typeParameters
					{
					pushFollow(FOLLOW_typeParameters_in_normalClassDeclaration727);
					tp=typeParameters();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { tparam = tp; }
					}
					break;

			}

			// org/argouml/language/java/reveng/Java.g:522:9: ( 'extends' t= type )?
			int alt18=2;
			int LA18_0 = input.LA(1);
			if ( (LA18_0==74) ) {
				alt18=1;
			}
			switch (alt18) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:522:10: 'extends' t= type
					{
					match(input,74,FOLLOW_74_in_normalClassDeclaration743); if (state.failed) return;
					pushFollow(FOLLOW_type_in_normalClassDeclaration747);
					t=type();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { superClassName = t; }
					}
					break;

			}

			// org/argouml/language/java/reveng/Java.g:523:9: ( 'implements' tl= typeList )?
			int alt19=2;
			int LA19_0 = input.LA(1);
			if ( (LA19_0==81) ) {
				alt19=1;
			}
			switch (alt19) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:523:10: 'implements' tl= typeList
					{
					match(input,81,FOLLOW_81_in_normalClassDeclaration763); if (state.failed) return;
					pushFollow(FOLLOW_typeList_in_normalClassDeclaration767);
					tl=typeList();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { ic = tl; }
					}
					break;

			}

			if ( state.backtracking==0 ) {
			            if (!isInCompoundStatement()) {
			                getModeller().addClass((className!=null?className.getText():null), modifiers, tparam,
			                    superClassName, ic, javadoc,
			                    (parserMode == MODE_IMPORT_PASS2));
			            }
			        }
			pushFollow(FOLLOW_classBody_in_normalClassDeclaration801);
			classBody();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {
			            if (!isInCompoundStatement()) {
			                getModeller().popClassifier();
			            }
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 10, normalClassDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "normalClassDeclaration"



	// $ANTLR start "typeParameters"
	// org/argouml/language/java/reveng/Java.g:540:1: typeParameters returns [List<String> names = new ArrayList<String>()] : '<' n= typeParameter ( ',' n= typeParameter )* '>' {...}?;
	public final List<String> typeParameters() throws RecognitionException {
		List<String> names =  new ArrayList<String>();

		int typeParameters_StartIndex = input.index();

		String n =null;


		        int currentLtLevel = ltCounter;
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 11) ) { return names; }

			// org/argouml/language/java/reveng/Java.g:544:5: ( '<' n= typeParameter ( ',' n= typeParameter )* '>' {...}?)
			// org/argouml/language/java/reveng/Java.g:545:9: '<' n= typeParameter ( ',' n= typeParameter )* '>' {...}?
			{
			match(input,51,FOLLOW_51_in_typeParameters848); if (state.failed) return names;
			if ( state.backtracking==0 ) { ltCounter++; }
			pushFollow(FOLLOW_typeParameter_in_typeParameters879);
			n=typeParameter();
			state._fsp--;
			if (state.failed) return names;
			if ( state.backtracking==0 ) { names.add(n); }
			// org/argouml/language/java/reveng/Java.g:547:9: ( ',' n= typeParameter )*
			loop20:
			while (true) {
				int alt20=2;
				int LA20_0 = input.LA(1);
				if ( (LA20_0==41) ) {
					alt20=1;
				}

				switch (alt20) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:547:10: ',' n= typeParameter
					{
					match(input,41,FOLLOW_41_in_typeParameters897); if (state.failed) return names;
					pushFollow(FOLLOW_typeParameter_in_typeParameters901);
					n=typeParameter();
					state._fsp--;
					if (state.failed) return names;
					if ( state.backtracking==0 ) { names.add(n); }
					}
					break;

				default :
					break loop20;
				}
			}

			match(input,54,FOLLOW_54_in_typeParameters924); if (state.failed) return names;
			if ( state.backtracking==0 ) { ltCounter--; }
			if ( !(( currentLtLevel != 0 || ltCounter == currentLtLevel )) ) {
				if (state.backtracking>0) {state.failed=true; return names;}
				throw new FailedPredicateException(input, "typeParameters", " currentLtLevel != 0 || ltCounter == currentLtLevel ");
			}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 11, typeParameters_StartIndex); }

		}
		return names;
	}
	// $ANTLR end "typeParameters"



	// $ANTLR start "typeParameter"
	// org/argouml/language/java/reveng/Java.g:555:1: typeParameter returns [String type = null] : t= Identifier ( 'extends' name= typeBound )? ( 'super' name= typeBound )? ;
	public final String typeParameter() throws RecognitionException {
		String type =  null;

		int typeParameter_StartIndex = input.index();

		Token t=null;
		String name =null;


		        StringBuffer sb = new StringBuffer();
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 12) ) { return type; }

			// org/argouml/language/java/reveng/Java.g:559:5: (t= Identifier ( 'extends' name= typeBound )? ( 'super' name= typeBound )? )
			// org/argouml/language/java/reveng/Java.g:559:9: t= Identifier ( 'extends' name= typeBound )? ( 'super' name= typeBound )?
			{
			t=(Token)match(input,Identifier,FOLLOW_Identifier_in_typeParameter1004); if (state.failed) return type;
			if ( state.backtracking==0 ) { sb.append((t!=null?t.getText():null)); }
			// org/argouml/language/java/reveng/Java.g:560:9: ( 'extends' name= typeBound )?
			int alt21=2;
			int LA21_0 = input.LA(1);
			if ( (LA21_0==74) ) {
				alt21=1;
			}
			switch (alt21) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:560:10: 'extends' name= typeBound
					{
					match(input,74,FOLLOW_74_in_typeParameter1030); if (state.failed) return type;
					pushFollow(FOLLOW_typeBound_in_typeParameter1034);
					name=typeBound();
					state._fsp--;
					if (state.failed) return type;
					if ( state.backtracking==0 ) { sb.append(" extends ").append(name); }
					}
					break;

			}

			// org/argouml/language/java/reveng/Java.g:562:9: ( 'super' name= typeBound )?
			int alt22=2;
			int LA22_0 = input.LA(1);
			if ( (LA22_0==98) ) {
				alt22=1;
			}
			switch (alt22) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:562:10: 'super' name= typeBound
					{
					match(input,98,FOLLOW_98_in_typeParameter1058); if (state.failed) return type;
					pushFollow(FOLLOW_typeBound_in_typeParameter1062);
					name=typeBound();
					state._fsp--;
					if (state.failed) return type;
					if ( state.backtracking==0 ) { sb.append(" super ").append(name); }
					}
					break;

			}

			if ( state.backtracking==0 ) {
			            type = sb.toString();
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 12, typeParameter_StartIndex); }

		}
		return type;
	}
	// $ANTLR end "typeParameter"



	// $ANTLR start "typeBound"
	// org/argouml/language/java/reveng/Java.g:569:1: typeBound returns [String type = null] : name= type ( '&' name= type )* ;
	public final String typeBound() throws RecognitionException {
		String type =  null;

		int typeBound_StartIndex = input.index();

		String name =null;


		        StringBuffer sb = new StringBuffer();
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 13) ) { return type; }

			// org/argouml/language/java/reveng/Java.g:573:5: (name= type ( '&' name= type )* )
			// org/argouml/language/java/reveng/Java.g:573:9: name= type ( '&' name= type )*
			{
			pushFollow(FOLLOW_type_in_typeBound1126);
			name=type();
			state._fsp--;
			if (state.failed) return type;
			if ( state.backtracking==0 ) { sb.append(name); }
			// org/argouml/language/java/reveng/Java.g:574:9: ( '&' name= type )*
			loop23:
			while (true) {
				int alt23=2;
				int LA23_0 = input.LA(1);
				if ( (LA23_0==32) ) {
					alt23=1;
				}

				switch (alt23) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:574:10: '&' name= type
					{
					match(input,32,FOLLOW_32_in_typeBound1144); if (state.failed) return type;
					pushFollow(FOLLOW_type_in_typeBound1148);
					name=type();
					state._fsp--;
					if (state.failed) return type;
					if ( state.backtracking==0 ) { sb.append("&").append(name); }
					}
					break;

				default :
					break loop23;
				}
			}

			if ( state.backtracking==0 ) {
			            type = sb.toString();
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 13, typeBound_StartIndex); }

		}
		return type;
	}
	// $ANTLR end "typeBound"



	// $ANTLR start "enumDeclaration"
	// org/argouml/language/java/reveng/Java.g:582:1: enumDeclaration[String javadoc, short modifiers] : ENUM enumName= Identifier ( 'implements' tl= typeList )? enumBody ;
	public final void enumDeclaration(String javadoc, short modifiers) throws RecognitionException {
		int enumDeclaration_StartIndex = input.index();

		Token enumName=null;
		List<String> tl =null;


		        List<String> ic = new ArrayList<String>();
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 14) ) { return; }

			// org/argouml/language/java/reveng/Java.g:586:5: ( ENUM enumName= Identifier ( 'implements' tl= typeList )? enumBody )
			// org/argouml/language/java/reveng/Java.g:586:9: ENUM enumName= Identifier ( 'implements' tl= typeList )? enumBody
			{
			match(input,ENUM,FOLLOW_ENUM_in_enumDeclaration1200); if (state.failed) return;
			enumName=(Token)match(input,Identifier,FOLLOW_Identifier_in_enumDeclaration1204); if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:586:34: ( 'implements' tl= typeList )?
			int alt24=2;
			int LA24_0 = input.LA(1);
			if ( (LA24_0==81) ) {
				alt24=1;
			}
			switch (alt24) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:586:35: 'implements' tl= typeList
					{
					match(input,81,FOLLOW_81_in_enumDeclaration1207); if (state.failed) return;
					pushFollow(FOLLOW_typeList_in_enumDeclaration1211);
					tl=typeList();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { ic = tl; }
					}
					break;

			}

			if ( state.backtracking==0 ) {
			            if (!isInCompoundStatement()) {
			                getModeller().addEnumeration((enumName!=null?enumName.getText():null), modifiers,
			                    ic, javadoc, (parserMode == MODE_IMPORT_PASS2));
			            }
			        }
			pushFollow(FOLLOW_enumBody_in_enumDeclaration1245);
			enumBody();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {
			            getModeller().popClassifier();
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 14, enumDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "enumDeclaration"



	// $ANTLR start "enumBody"
	// org/argouml/language/java/reveng/Java.g:600:1: enumBody : '{' ( enumConstants )? ( ',' )? ( enumBodyDeclarations )? '}' ;
	public final void enumBody() throws RecognitionException {
		int enumBody_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 15) ) { return; }

			// org/argouml/language/java/reveng/Java.g:601:5: ( '{' ( enumConstants )? ( ',' )? ( enumBodyDeclarations )? '}' )
			// org/argouml/language/java/reveng/Java.g:601:9: '{' ( enumConstants )? ( ',' )? ( enumBodyDeclarations )? '}'
			{
			match(input,110,FOLLOW_110_in_enumBody1274); if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:601:13: ( enumConstants )?
			int alt25=2;
			int LA25_0 = input.LA(1);
			if ( (LA25_0==Identifier||LA25_0==56) ) {
				alt25=1;
			}
			switch (alt25) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:601:13: enumConstants
					{
					pushFollow(FOLLOW_enumConstants_in_enumBody1276);
					enumConstants();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// org/argouml/language/java/reveng/Java.g:601:28: ( ',' )?
			int alt26=2;
			int LA26_0 = input.LA(1);
			if ( (LA26_0==41) ) {
				alt26=1;
			}
			switch (alt26) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:601:28: ','
					{
					match(input,41,FOLLOW_41_in_enumBody1279); if (state.failed) return;
					}
					break;

			}

			// org/argouml/language/java/reveng/Java.g:601:33: ( enumBodyDeclarations )?
			int alt27=2;
			int LA27_0 = input.LA(1);
			if ( (LA27_0==50) ) {
				alt27=1;
			}
			switch (alt27) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:601:33: enumBodyDeclarations
					{
					pushFollow(FOLLOW_enumBodyDeclarations_in_enumBody1282);
					enumBodyDeclarations();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			match(input,114,FOLLOW_114_in_enumBody1285); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 15, enumBody_StartIndex); }

		}
	}
	// $ANTLR end "enumBody"



	// $ANTLR start "enumConstants"
	// org/argouml/language/java/reveng/Java.g:604:1: enumConstants : enumConstant ( ',' enumConstant )* ;
	public final void enumConstants() throws RecognitionException {
		int enumConstants_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 16) ) { return; }

			// org/argouml/language/java/reveng/Java.g:605:5: ( enumConstant ( ',' enumConstant )* )
			// org/argouml/language/java/reveng/Java.g:605:9: enumConstant ( ',' enumConstant )*
			{
			pushFollow(FOLLOW_enumConstant_in_enumConstants1304);
			enumConstant();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:605:22: ( ',' enumConstant )*
			loop28:
			while (true) {
				int alt28=2;
				int LA28_0 = input.LA(1);
				if ( (LA28_0==41) ) {
					int LA28_1 = input.LA(2);
					if ( (LA28_1==Identifier||LA28_1==56) ) {
						alt28=1;
					}

				}

				switch (alt28) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:605:23: ',' enumConstant
					{
					match(input,41,FOLLOW_41_in_enumConstants1307); if (state.failed) return;
					pushFollow(FOLLOW_enumConstant_in_enumConstants1309);
					enumConstant();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop28;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 16, enumConstants_StartIndex); }

		}
	}
	// $ANTLR end "enumConstants"



	// $ANTLR start "enumConstant"
	// org/argouml/language/java/reveng/Java.g:608:1: enumConstant : ( annotations )? name= Identifier ( arguments )? ( classBody )? ;
	public final void enumConstant() throws RecognitionException {
		int enumConstant_StartIndex = input.index();

		Token name=null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 17) ) { return; }

			// org/argouml/language/java/reveng/Java.g:609:5: ( ( annotations )? name= Identifier ( arguments )? ( classBody )? )
			// org/argouml/language/java/reveng/Java.g:609:9: ( annotations )? name= Identifier ( arguments )? ( classBody )?
			{
			// org/argouml/language/java/reveng/Java.g:609:9: ( annotations )?
			int alt29=2;
			int LA29_0 = input.LA(1);
			if ( (LA29_0==56) ) {
				alt29=1;
			}
			switch (alt29) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:609:9: annotations
					{
					pushFollow(FOLLOW_annotations_in_enumConstant1330);
					annotations();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			name=(Token)match(input,Identifier,FOLLOW_Identifier_in_enumConstant1343); if (state.failed) return;
			if ( state.backtracking==0 ) {
			            getModeller().addEnumerationLiteral((name!=null?name.getText():null));
			        }
			// org/argouml/language/java/reveng/Java.g:616:9: ( arguments )?
			int alt30=2;
			int LA30_0 = input.LA(1);
			if ( (LA30_0==34) ) {
				alt30=1;
			}
			switch (alt30) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:616:10: arguments
					{
					pushFollow(FOLLOW_arguments_in_enumConstant1382);
					arguments();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// org/argouml/language/java/reveng/Java.g:617:9: ( classBody )?
			int alt31=2;
			int LA31_0 = input.LA(1);
			if ( (LA31_0==110) ) {
				alt31=1;
			}
			switch (alt31) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:617:10: classBody
					{
					pushFollow(FOLLOW_classBody_in_enumConstant1395);
					classBody();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 17, enumConstant_StartIndex); }

		}
	}
	// $ANTLR end "enumConstant"



	// $ANTLR start "enumBodyDeclarations"
	// org/argouml/language/java/reveng/Java.g:620:1: enumBodyDeclarations : ';' ( classBodyDeclaration )* ;
	public final void enumBodyDeclarations() throws RecognitionException {
		int enumBodyDeclarations_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 18) ) { return; }

			// org/argouml/language/java/reveng/Java.g:621:5: ( ';' ( classBodyDeclaration )* )
			// org/argouml/language/java/reveng/Java.g:621:9: ';' ( classBodyDeclaration )*
			{
			match(input,50,FOLLOW_50_in_enumBodyDeclarations1416); if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:621:13: ( classBodyDeclaration )*
			loop32:
			while (true) {
				int alt32=2;
				int LA32_0 = input.LA(1);
				if ( (LA32_0==ENUM||LA32_0==Identifier||(LA32_0 >= 50 && LA32_0 <= 51)||LA32_0==56||(LA32_0 >= 61 && LA32_0 <= 62)||LA32_0==64||(LA32_0 >= 67 && LA32_0 <= 68)||LA32_0==72||LA32_0==76||LA32_0==78||(LA32_0 >= 84 && LA32_0 <= 87)||(LA32_0 >= 91 && LA32_0 <= 93)||(LA32_0 >= 95 && LA32_0 <= 97)||LA32_0==100||LA32_0==104||(LA32_0 >= 107 && LA32_0 <= 108)||LA32_0==110) ) {
					alt32=1;
				}

				switch (alt32) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:621:14: classBodyDeclaration
					{
					pushFollow(FOLLOW_classBodyDeclaration_in_enumBodyDeclarations1419);
					classBodyDeclaration();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop32;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 18, enumBodyDeclarations_StartIndex); }

		}
	}
	// $ANTLR end "enumBodyDeclarations"



	// $ANTLR start "interfaceDeclaration"
	// org/argouml/language/java/reveng/Java.g:625:1: interfaceDeclaration[String javadoc, short modifiers] : ( normalInterfaceDeclaration[javadoc, modifiers] | annotationTypeDeclaration[javadoc, modifiers] );
	public final void interfaceDeclaration(String javadoc, short modifiers) throws RecognitionException {
		int interfaceDeclaration_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 19) ) { return; }

			// org/argouml/language/java/reveng/Java.g:626:5: ( normalInterfaceDeclaration[javadoc, modifiers] | annotationTypeDeclaration[javadoc, modifiers] )
			int alt33=2;
			int LA33_0 = input.LA(1);
			if ( (LA33_0==85) ) {
				alt33=1;
			}
			else if ( (LA33_0==56) ) {
				alt33=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 33, 0, input);
				throw nvae;
			}

			switch (alt33) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:626:9: normalInterfaceDeclaration[javadoc, modifiers]
					{
					pushFollow(FOLLOW_normalInterfaceDeclaration_in_interfaceDeclaration1446);
					normalInterfaceDeclaration(javadoc, modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:627:9: annotationTypeDeclaration[javadoc, modifiers]
					{
					pushFollow(FOLLOW_annotationTypeDeclaration_in_interfaceDeclaration1457);
					annotationTypeDeclaration(javadoc, modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 19, interfaceDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "interfaceDeclaration"



	// $ANTLR start "normalInterfaceDeclaration"
	// org/argouml/language/java/reveng/Java.g:630:1: normalInterfaceDeclaration[String javadoc, short modifiers] : 'interface' interfaceName= Identifier (tparam= typeParameters )? ( 'extends' ie= typeList )? interfaceBody ;
	public final void normalInterfaceDeclaration(String javadoc, short modifiers) throws RecognitionException {
		int normalInterfaceDeclaration_StartIndex = input.index();

		Token interfaceName=null;
		List<String> tparam =null;
		List<String> ie =null;


		        List<String> names = new ArrayList<String>();
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 20) ) { return; }

			// org/argouml/language/java/reveng/Java.g:634:5: ( 'interface' interfaceName= Identifier (tparam= typeParameters )? ( 'extends' ie= typeList )? interfaceBody )
			// org/argouml/language/java/reveng/Java.g:634:9: 'interface' interfaceName= Identifier (tparam= typeParameters )? ( 'extends' ie= typeList )? interfaceBody
			{
			match(input,85,FOLLOW_85_in_normalInterfaceDeclaration1486); if (state.failed) return;
			interfaceName=(Token)match(input,Identifier,FOLLOW_Identifier_in_normalInterfaceDeclaration1490); if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:634:46: (tparam= typeParameters )?
			int alt34=2;
			int LA34_0 = input.LA(1);
			if ( (LA34_0==51) ) {
				alt34=1;
			}
			switch (alt34) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:634:47: tparam= typeParameters
					{
					pushFollow(FOLLOW_typeParameters_in_normalInterfaceDeclaration1495);
					tparam=typeParameters();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// org/argouml/language/java/reveng/Java.g:635:9: ( 'extends' ie= typeList )?
			int alt35=2;
			int LA35_0 = input.LA(1);
			if ( (LA35_0==74) ) {
				alt35=1;
			}
			switch (alt35) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:635:10: 'extends' ie= typeList
					{
					match(input,74,FOLLOW_74_in_normalInterfaceDeclaration1508); if (state.failed) return;
					pushFollow(FOLLOW_typeList_in_normalInterfaceDeclaration1512);
					ie=typeList();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { names = ie; }
					}
					break;

			}

			if ( state.backtracking==0 ) {
			            getModeller().addInterface((interfaceName!=null?interfaceName.getText():null), modifiers,
			                tparam, names, javadoc, (parserMode == MODE_IMPORT_PASS2));
			        }
			pushFollow(FOLLOW_interfaceBody_in_normalInterfaceDeclaration1546);
			interfaceBody();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {
			            getModeller().popClassifier();
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 20, normalInterfaceDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "normalInterfaceDeclaration"



	// $ANTLR start "typeList"
	// org/argouml/language/java/reveng/Java.g:647:1: typeList returns [List<String> names = new ArrayList<String>()] : n= type ( ',' n= type )* ;
	public final List<String> typeList() throws RecognitionException {
		List<String> names =  new ArrayList<String>();

		int typeList_StartIndex = input.index();

		String n =null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 21) ) { return names; }

			// org/argouml/language/java/reveng/Java.g:648:5: (n= type ( ',' n= type )* )
			// org/argouml/language/java/reveng/Java.g:648:9: n= type ( ',' n= type )*
			{
			pushFollow(FOLLOW_type_in_typeList1581);
			n=type();
			state._fsp--;
			if (state.failed) return names;
			if ( state.backtracking==0 ) { names.add(n); }
			// org/argouml/language/java/reveng/Java.g:649:9: ( ',' n= type )*
			loop36:
			while (true) {
				int alt36=2;
				int LA36_0 = input.LA(1);
				if ( (LA36_0==41) ) {
					alt36=1;
				}

				switch (alt36) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:649:11: ',' n= type
					{
					match(input,41,FOLLOW_41_in_typeList1601); if (state.failed) return names;
					pushFollow(FOLLOW_type_in_typeList1605);
					n=type();
					state._fsp--;
					if (state.failed) return names;
					if ( state.backtracking==0 ) { names.add(n); }
					}
					break;

				default :
					break loop36;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 21, typeList_StartIndex); }

		}
		return names;
	}
	// $ANTLR end "typeList"



	// $ANTLR start "classBody"
	// org/argouml/language/java/reveng/Java.g:654:1: classBody : '{' ( classBodyDeclaration )* '}' ;
	public final void classBody() throws RecognitionException {
		int classBody_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 22) ) { return; }

			// org/argouml/language/java/reveng/Java.g:655:5: ( '{' ( classBodyDeclaration )* '}' )
			// org/argouml/language/java/reveng/Java.g:655:9: '{' ( classBodyDeclaration )* '}'
			{
			match(input,110,FOLLOW_110_in_classBody1638); if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:655:13: ( classBodyDeclaration )*
			loop37:
			while (true) {
				int alt37=2;
				int LA37_0 = input.LA(1);
				if ( (LA37_0==ENUM||LA37_0==Identifier||(LA37_0 >= 50 && LA37_0 <= 51)||LA37_0==56||(LA37_0 >= 61 && LA37_0 <= 62)||LA37_0==64||(LA37_0 >= 67 && LA37_0 <= 68)||LA37_0==72||LA37_0==76||LA37_0==78||(LA37_0 >= 84 && LA37_0 <= 87)||(LA37_0 >= 91 && LA37_0 <= 93)||(LA37_0 >= 95 && LA37_0 <= 97)||LA37_0==100||LA37_0==104||(LA37_0 >= 107 && LA37_0 <= 108)||LA37_0==110) ) {
					alt37=1;
				}

				switch (alt37) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:655:13: classBodyDeclaration
					{
					pushFollow(FOLLOW_classBodyDeclaration_in_classBody1640);
					classBodyDeclaration();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop37;
				}
			}

			match(input,114,FOLLOW_114_in_classBody1643); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 22, classBody_StartIndex); }

		}
	}
	// $ANTLR end "classBody"



	// $ANTLR start "interfaceBody"
	// org/argouml/language/java/reveng/Java.g:658:1: interfaceBody : '{' ( interfaceBodyDeclaration )* '}' ;
	public final void interfaceBody() throws RecognitionException {
		int interfaceBody_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 23) ) { return; }

			// org/argouml/language/java/reveng/Java.g:659:5: ( '{' ( interfaceBodyDeclaration )* '}' )
			// org/argouml/language/java/reveng/Java.g:659:9: '{' ( interfaceBodyDeclaration )* '}'
			{
			match(input,110,FOLLOW_110_in_interfaceBody1666); if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:659:13: ( interfaceBodyDeclaration )*
			loop38:
			while (true) {
				int alt38=2;
				int LA38_0 = input.LA(1);
				if ( (LA38_0==ENUM||LA38_0==Identifier||(LA38_0 >= 50 && LA38_0 <= 51)||LA38_0==56||(LA38_0 >= 61 && LA38_0 <= 62)||LA38_0==64||(LA38_0 >= 67 && LA38_0 <= 68)||LA38_0==72||LA38_0==76||LA38_0==78||(LA38_0 >= 84 && LA38_0 <= 87)||(LA38_0 >= 91 && LA38_0 <= 93)||(LA38_0 >= 95 && LA38_0 <= 97)||LA38_0==100||LA38_0==104||(LA38_0 >= 107 && LA38_0 <= 108)) ) {
					alt38=1;
				}

				switch (alt38) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:659:13: interfaceBodyDeclaration
					{
					pushFollow(FOLLOW_interfaceBodyDeclaration_in_interfaceBody1668);
					interfaceBodyDeclaration();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop38;
				}
			}

			match(input,114,FOLLOW_114_in_interfaceBody1671); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 23, interfaceBody_StartIndex); }

		}
	}
	// $ANTLR end "interfaceBody"



	// $ANTLR start "classBodyDeclaration"
	// org/argouml/language/java/reveng/Java.g:662:1: classBodyDeclaration : ( ';' | ( 'static' )? block |m= modifiers memberDecl[m] );
	public final void classBodyDeclaration() throws RecognitionException {
		int classBodyDeclaration_StartIndex = input.index();

		short m =0;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 24) ) { return; }

			// org/argouml/language/java/reveng/Java.g:663:5: ( ';' | ( 'static' )? block |m= modifiers memberDecl[m] )
			int alt40=3;
			switch ( input.LA(1) ) {
			case 50:
				{
				alt40=1;
				}
				break;
			case 96:
				{
				int LA40_2 = input.LA(2);
				if ( (LA40_2==110) ) {
					alt40=2;
				}
				else if ( (LA40_2==ENUM||LA40_2==Identifier||LA40_2==51||LA40_2==56||(LA40_2 >= 61 && LA40_2 <= 62)||LA40_2==64||(LA40_2 >= 67 && LA40_2 <= 68)||LA40_2==72||LA40_2==76||LA40_2==78||(LA40_2 >= 84 && LA40_2 <= 87)||(LA40_2 >= 91 && LA40_2 <= 93)||(LA40_2 >= 95 && LA40_2 <= 97)||LA40_2==100||LA40_2==104||(LA40_2 >= 107 && LA40_2 <= 108)) ) {
					alt40=3;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 40, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case 110:
				{
				alt40=2;
				}
				break;
			case ENUM:
			case Identifier:
			case 51:
			case 56:
			case 61:
			case 62:
			case 64:
			case 67:
			case 68:
			case 72:
			case 76:
			case 78:
			case 84:
			case 85:
			case 86:
			case 87:
			case 91:
			case 92:
			case 93:
			case 95:
			case 97:
			case 100:
			case 104:
			case 107:
			case 108:
				{
				alt40=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 40, 0, input);
				throw nvae;
			}
			switch (alt40) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:663:9: ';'
					{
					match(input,50,FOLLOW_50_in_classBodyDeclaration1690); if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:664:9: ( 'static' )? block
					{
					// org/argouml/language/java/reveng/Java.g:664:9: ( 'static' )?
					int alt39=2;
					int LA39_0 = input.LA(1);
					if ( (LA39_0==96) ) {
						alt39=1;
					}
					switch (alt39) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:664:9: 'static'
							{
							match(input,96,FOLLOW_96_in_classBodyDeclaration1700); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_block_in_classBodyDeclaration1703);
					block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:665:9: m= modifiers memberDecl[m]
					{
					pushFollow(FOLLOW_modifiers_in_classBodyDeclaration1715);
					m=modifiers();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_memberDecl_in_classBodyDeclaration1717);
					memberDecl(m);
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 24, classBodyDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "classBodyDeclaration"



	// $ANTLR start "memberDecl"
	// org/argouml/language/java/reveng/Java.g:668:1: memberDecl[short modifiers] : ( genericMethodOrConstructorDecl[modifiers] | memberDeclaration[modifiers] | 'void' name= Identifier voidMethodDeclaratorRest[$name.text, modifiers] |name= Identifier constructorDeclaratorRest[$name.text, modifiers] | interfaceDeclaration[getJavadocComment(), modifiers] | classDeclaration[getJavadocComment(), modifiers] );
	public final void memberDecl(short modifiers) throws RecognitionException {
		int memberDecl_StartIndex = input.index();

		Token name=null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 25) ) { return; }

			// org/argouml/language/java/reveng/Java.g:669:5: ( genericMethodOrConstructorDecl[modifiers] | memberDeclaration[modifiers] | 'void' name= Identifier voidMethodDeclaratorRest[$name.text, modifiers] |name= Identifier constructorDeclaratorRest[$name.text, modifiers] | interfaceDeclaration[getJavadocComment(), modifiers] | classDeclaration[getJavadocComment(), modifiers] )
			int alt41=6;
			switch ( input.LA(1) ) {
			case 51:
				{
				alt41=1;
				}
				break;
			case Identifier:
				{
				int LA41_2 = input.LA(2);
				if ( (LA41_2==Identifier||LA41_2==45||LA41_2==51||LA41_2==57) ) {
					alt41=2;
				}
				else if ( (LA41_2==34) ) {
					alt41=4;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 41, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case 62:
			case 64:
			case 67:
			case 72:
			case 78:
			case 84:
			case 86:
			case 95:
				{
				alt41=2;
				}
				break;
			case 107:
				{
				alt41=3;
				}
				break;
			case 56:
			case 85:
				{
				alt41=5;
				}
				break;
			case ENUM:
			case 68:
				{
				alt41=6;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 41, 0, input);
				throw nvae;
			}
			switch (alt41) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:669:9: genericMethodOrConstructorDecl[modifiers]
					{
					pushFollow(FOLLOW_genericMethodOrConstructorDecl_in_memberDecl1742);
					genericMethodOrConstructorDecl(modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:670:9: memberDeclaration[modifiers]
					{
					pushFollow(FOLLOW_memberDeclaration_in_memberDecl1753);
					memberDeclaration(modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:671:9: 'void' name= Identifier voidMethodDeclaratorRest[$name.text, modifiers]
					{
					match(input,107,FOLLOW_107_in_memberDecl1764); if (state.failed) return;
					name=(Token)match(input,Identifier,FOLLOW_Identifier_in_memberDecl1768); if (state.failed) return;
					pushFollow(FOLLOW_voidMethodDeclaratorRest_in_memberDecl1770);
					voidMethodDeclaratorRest((name!=null?name.getText():null), modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// org/argouml/language/java/reveng/Java.g:672:9: name= Identifier constructorDeclaratorRest[$name.text, modifiers]
					{
					name=(Token)match(input,Identifier,FOLLOW_Identifier_in_memberDecl1783); if (state.failed) return;
					pushFollow(FOLLOW_constructorDeclaratorRest_in_memberDecl1785);
					constructorDeclaratorRest((name!=null?name.getText():null), modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// org/argouml/language/java/reveng/Java.g:673:9: interfaceDeclaration[getJavadocComment(), modifiers]
					{
					pushFollow(FOLLOW_interfaceDeclaration_in_memberDecl1796);
					interfaceDeclaration(getJavadocComment(), modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 6 :
					// org/argouml/language/java/reveng/Java.g:674:9: classDeclaration[getJavadocComment(), modifiers]
					{
					pushFollow(FOLLOW_classDeclaration_in_memberDecl1807);
					classDeclaration(getJavadocComment(), modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 25, memberDecl_StartIndex); }

		}
	}
	// $ANTLR end "memberDecl"



	// $ANTLR start "memberDeclaration"
	// org/argouml/language/java/reveng/Java.g:677:1: memberDeclaration[short modifiers] : t= type ( methodDeclaration[modifiers, null, t] | fieldDeclaration[modifiers, t] ) ;
	public final void memberDeclaration(short modifiers) throws RecognitionException {
		int memberDeclaration_StartIndex = input.index();

		String t =null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 26) ) { return; }

			// org/argouml/language/java/reveng/Java.g:678:5: (t= type ( methodDeclaration[modifiers, null, t] | fieldDeclaration[modifiers, t] ) )
			// org/argouml/language/java/reveng/Java.g:678:9: t= type ( methodDeclaration[modifiers, null, t] | fieldDeclaration[modifiers, t] )
			{
			pushFollow(FOLLOW_type_in_memberDeclaration1834);
			t=type();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:679:9: ( methodDeclaration[modifiers, null, t] | fieldDeclaration[modifiers, t] )
			int alt42=2;
			int LA42_0 = input.LA(1);
			if ( (LA42_0==Identifier) ) {
				int LA42_1 = input.LA(2);
				if ( (LA42_1==34) ) {
					alt42=1;
				}
				else if ( (LA42_1==41||LA42_1==50||LA42_1==52||LA42_1==57) ) {
					alt42=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 42, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 42, 0, input);
				throw nvae;
			}

			switch (alt42) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:679:13: methodDeclaration[modifiers, null, t]
					{
					pushFollow(FOLLOW_methodDeclaration_in_memberDeclaration1848);
					methodDeclaration(modifiers, null, t);
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:680:13: fieldDeclaration[modifiers, t]
					{
					pushFollow(FOLLOW_fieldDeclaration_in_memberDeclaration1863);
					fieldDeclaration(modifiers, t);
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 26, memberDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "memberDeclaration"



	// $ANTLR start "genericMethodOrConstructorDecl"
	// org/argouml/language/java/reveng/Java.g:684:1: genericMethodOrConstructorDecl[short modifiers] : tparam= typeParameters genericMethodOrConstructorRest[modifiers, tparam] ;
	public final void genericMethodOrConstructorDecl(short modifiers) throws RecognitionException {
		int genericMethodOrConstructorDecl_StartIndex = input.index();

		List<String> tparam =null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 27) ) { return; }

			// org/argouml/language/java/reveng/Java.g:685:5: (tparam= typeParameters genericMethodOrConstructorRest[modifiers, tparam] )
			// org/argouml/language/java/reveng/Java.g:685:9: tparam= typeParameters genericMethodOrConstructorRest[modifiers, tparam]
			{
			pushFollow(FOLLOW_typeParameters_in_genericMethodOrConstructorDecl1896);
			tparam=typeParameters();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_genericMethodOrConstructorRest_in_genericMethodOrConstructorDecl1898);
			genericMethodOrConstructorRest(modifiers, tparam);
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 27, genericMethodOrConstructorDecl_StartIndex); }

		}
	}
	// $ANTLR end "genericMethodOrConstructorDecl"



	// $ANTLR start "genericMethodOrConstructorRest"
	// org/argouml/language/java/reveng/Java.g:688:1: genericMethodOrConstructorRest[short modifiers, List<String> tparam] : ( (ty= type | 'void' ) name= Identifier methodDeclaratorRest[$name.text, modifiers, tparam, t] |name= Identifier constructorDeclaratorRest[$name.text, modifiers] );
	public final void genericMethodOrConstructorRest(short modifiers, List<String> tparam) throws RecognitionException {
		int genericMethodOrConstructorRest_StartIndex = input.index();

		Token name=null;
		String ty =null;


		        String t = null;
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 28) ) { return; }

			// org/argouml/language/java/reveng/Java.g:692:5: ( (ty= type | 'void' ) name= Identifier methodDeclaratorRest[$name.text, modifiers, tparam, t] |name= Identifier constructorDeclaratorRest[$name.text, modifiers] )
			int alt44=2;
			int LA44_0 = input.LA(1);
			if ( (LA44_0==Identifier) ) {
				int LA44_1 = input.LA(2);
				if ( (LA44_1==Identifier||LA44_1==45||LA44_1==51||LA44_1==57) ) {
					alt44=1;
				}
				else if ( (LA44_1==34) ) {
					alt44=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 44, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA44_0==62||LA44_0==64||LA44_0==67||LA44_0==72||LA44_0==78||LA44_0==84||LA44_0==86||LA44_0==95||LA44_0==107) ) {
				alt44=1;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 44, 0, input);
				throw nvae;
			}

			switch (alt44) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:692:9: (ty= type | 'void' ) name= Identifier methodDeclaratorRest[$name.text, modifiers, tparam, t]
					{
					// org/argouml/language/java/reveng/Java.g:692:9: (ty= type | 'void' )
					int alt43=2;
					int LA43_0 = input.LA(1);
					if ( (LA43_0==Identifier||LA43_0==62||LA43_0==64||LA43_0==67||LA43_0==72||LA43_0==78||LA43_0==84||LA43_0==86||LA43_0==95) ) {
						alt43=1;
					}
					else if ( (LA43_0==107) ) {
						alt43=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						NoViableAltException nvae =
							new NoViableAltException("", 43, 0, input);
						throw nvae;
					}

					switch (alt43) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:692:10: ty= type
							{
							pushFollow(FOLLOW_type_in_genericMethodOrConstructorRest1930);
							ty=type();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) { t = ty; }
							}
							break;
						case 2 :
							// org/argouml/language/java/reveng/Java.g:692:32: 'void'
							{
							match(input,107,FOLLOW_107_in_genericMethodOrConstructorRest1936); if (state.failed) return;
							if ( state.backtracking==0 ) { t = "void"; }
							}
							break;

					}

					name=(Token)match(input,Identifier,FOLLOW_Identifier_in_genericMethodOrConstructorRest1952); if (state.failed) return;
					pushFollow(FOLLOW_methodDeclaratorRest_in_genericMethodOrConstructorRest1962);
					methodDeclaratorRest((name!=null?name.getText():null), modifiers, tparam, t);
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:695:9: name= Identifier constructorDeclaratorRest[$name.text, modifiers]
					{
					name=(Token)match(input,Identifier,FOLLOW_Identifier_in_genericMethodOrConstructorRest1975); if (state.failed) return;
					pushFollow(FOLLOW_constructorDeclaratorRest_in_genericMethodOrConstructorRest1985);
					constructorDeclaratorRest((name!=null?name.getText():null), modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 28, genericMethodOrConstructorRest_StartIndex); }

		}
	}
	// $ANTLR end "genericMethodOrConstructorRest"



	// $ANTLR start "methodDeclaration"
	// org/argouml/language/java/reveng/Java.g:699:1: methodDeclaration[short modifiers, List<String> tparam, String t] : name= Identifier methodDeclaratorRest[$name.text, modifiers, tparam, t] ;
	public final void methodDeclaration(short modifiers, List<String> tparam, String t) throws RecognitionException {
		int methodDeclaration_StartIndex = input.index();

		Token name=null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 29) ) { return; }

			// org/argouml/language/java/reveng/Java.g:700:5: (name= Identifier methodDeclaratorRest[$name.text, modifiers, tparam, t] )
			// org/argouml/language/java/reveng/Java.g:700:9: name= Identifier methodDeclaratorRest[$name.text, modifiers, tparam, t]
			{
			name=(Token)match(input,Identifier,FOLLOW_Identifier_in_methodDeclaration2008); if (state.failed) return;
			pushFollow(FOLLOW_methodDeclaratorRest_in_methodDeclaration2010);
			methodDeclaratorRest((name!=null?name.getText():null), modifiers, tparam, t);
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 29, methodDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "methodDeclaration"



	// $ANTLR start "fieldDeclaration"
	// org/argouml/language/java/reveng/Java.g:703:1: fieldDeclaration[short modifiers, String t] : variableDeclarators[getJavadocComment(), modifiers, t] ';' ;
	public final void fieldDeclaration(short modifiers, String t) throws RecognitionException {
		int fieldDeclaration_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 30) ) { return; }

			// org/argouml/language/java/reveng/Java.g:704:5: ( variableDeclarators[getJavadocComment(), modifiers, t] ';' )
			// org/argouml/language/java/reveng/Java.g:704:9: variableDeclarators[getJavadocComment(), modifiers, t] ';'
			{
			pushFollow(FOLLOW_variableDeclarators_in_fieldDeclaration2031);
			variableDeclarators(getJavadocComment(), modifiers, t);
			state._fsp--;
			if (state.failed) return;
			match(input,50,FOLLOW_50_in_fieldDeclaration2034); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 30, fieldDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "fieldDeclaration"



	// $ANTLR start "interfaceBodyDeclaration"
	// org/argouml/language/java/reveng/Java.g:707:1: interfaceBodyDeclaration : (m= modifiers interfaceMemberDecl[m] | ';' );
	public final void interfaceBodyDeclaration() throws RecognitionException {
		int interfaceBodyDeclaration_StartIndex = input.index();

		short m =0;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 31) ) { return; }

			// org/argouml/language/java/reveng/Java.g:708:5: (m= modifiers interfaceMemberDecl[m] | ';' )
			int alt45=2;
			int LA45_0 = input.LA(1);
			if ( (LA45_0==ENUM||LA45_0==Identifier||LA45_0==51||LA45_0==56||(LA45_0 >= 61 && LA45_0 <= 62)||LA45_0==64||(LA45_0 >= 67 && LA45_0 <= 68)||LA45_0==72||LA45_0==76||LA45_0==78||(LA45_0 >= 84 && LA45_0 <= 87)||(LA45_0 >= 91 && LA45_0 <= 93)||(LA45_0 >= 95 && LA45_0 <= 97)||LA45_0==100||LA45_0==104||(LA45_0 >= 107 && LA45_0 <= 108)) ) {
				alt45=1;
			}
			else if ( (LA45_0==50) ) {
				alt45=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 45, 0, input);
				throw nvae;
			}

			switch (alt45) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:708:9: m= modifiers interfaceMemberDecl[m]
					{
					pushFollow(FOLLOW_modifiers_in_interfaceBodyDeclaration2063);
					m=modifiers();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_interfaceMemberDecl_in_interfaceBodyDeclaration2065);
					interfaceMemberDecl(m);
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:709:9: ';'
					{
					match(input,50,FOLLOW_50_in_interfaceBodyDeclaration2076); if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 31, interfaceBodyDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "interfaceBodyDeclaration"



	// $ANTLR start "interfaceMemberDecl"
	// org/argouml/language/java/reveng/Java.g:712:1: interfaceMemberDecl[short modifiers] : ( interfaceMethodOrFieldDecl[modifiers] | interfaceGenericMethodDecl[modifiers] | 'void' name= Identifier voidInterfaceMethodDeclaratorRest[$name.text, modifiers] | interfaceDeclaration[getJavadocComment(), modifiers] | classDeclaration[getJavadocComment(), modifiers] );
	public final void interfaceMemberDecl(short modifiers) throws RecognitionException {
		int interfaceMemberDecl_StartIndex = input.index();

		Token name=null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 32) ) { return; }

			// org/argouml/language/java/reveng/Java.g:713:5: ( interfaceMethodOrFieldDecl[modifiers] | interfaceGenericMethodDecl[modifiers] | 'void' name= Identifier voidInterfaceMethodDeclaratorRest[$name.text, modifiers] | interfaceDeclaration[getJavadocComment(), modifiers] | classDeclaration[getJavadocComment(), modifiers] )
			int alt46=5;
			switch ( input.LA(1) ) {
			case Identifier:
			case 62:
			case 64:
			case 67:
			case 72:
			case 78:
			case 84:
			case 86:
			case 95:
				{
				alt46=1;
				}
				break;
			case 51:
				{
				alt46=2;
				}
				break;
			case 107:
				{
				alt46=3;
				}
				break;
			case 56:
			case 85:
				{
				alt46=4;
				}
				break;
			case ENUM:
			case 68:
				{
				alt46=5;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 46, 0, input);
				throw nvae;
			}
			switch (alt46) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:713:9: interfaceMethodOrFieldDecl[modifiers]
					{
					pushFollow(FOLLOW_interfaceMethodOrFieldDecl_in_interfaceMemberDecl2096);
					interfaceMethodOrFieldDecl(modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:714:9: interfaceGenericMethodDecl[modifiers]
					{
					pushFollow(FOLLOW_interfaceGenericMethodDecl_in_interfaceMemberDecl2107);
					interfaceGenericMethodDecl(modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:715:9: 'void' name= Identifier voidInterfaceMethodDeclaratorRest[$name.text, modifiers]
					{
					match(input,107,FOLLOW_107_in_interfaceMemberDecl2118); if (state.failed) return;
					name=(Token)match(input,Identifier,FOLLOW_Identifier_in_interfaceMemberDecl2122); if (state.failed) return;
					pushFollow(FOLLOW_voidInterfaceMethodDeclaratorRest_in_interfaceMemberDecl2132);
					voidInterfaceMethodDeclaratorRest((name!=null?name.getText():null), modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// org/argouml/language/java/reveng/Java.g:717:9: interfaceDeclaration[getJavadocComment(), modifiers]
					{
					pushFollow(FOLLOW_interfaceDeclaration_in_interfaceMemberDecl2143);
					interfaceDeclaration(getJavadocComment(), modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// org/argouml/language/java/reveng/Java.g:718:9: classDeclaration[getJavadocComment(), modifiers]
					{
					pushFollow(FOLLOW_classDeclaration_in_interfaceMemberDecl2154);
					classDeclaration(getJavadocComment(), modifiers);
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 32, interfaceMemberDecl_StartIndex); }

		}
	}
	// $ANTLR end "interfaceMemberDecl"



	// $ANTLR start "interfaceMethodOrFieldDecl"
	// org/argouml/language/java/reveng/Java.g:721:1: interfaceMethodOrFieldDecl[short modifiers] : t= type name= Identifier interfaceMethodOrFieldRest[$name.text, modifiers, t] ;
	public final void interfaceMethodOrFieldDecl(short modifiers) throws RecognitionException {
		int interfaceMethodOrFieldDecl_StartIndex = input.index();

		Token name=null;
		String t =null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 33) ) { return; }

			// org/argouml/language/java/reveng/Java.g:722:5: (t= type name= Identifier interfaceMethodOrFieldRest[$name.text, modifiers, t] )
			// org/argouml/language/java/reveng/Java.g:722:9: t= type name= Identifier interfaceMethodOrFieldRest[$name.text, modifiers, t]
			{
			pushFollow(FOLLOW_type_in_interfaceMethodOrFieldDecl2177);
			t=type();
			state._fsp--;
			if (state.failed) return;
			name=(Token)match(input,Identifier,FOLLOW_Identifier_in_interfaceMethodOrFieldDecl2181); if (state.failed) return;
			pushFollow(FOLLOW_interfaceMethodOrFieldRest_in_interfaceMethodOrFieldDecl2191);
			interfaceMethodOrFieldRest((name!=null?name.getText():null), modifiers, t);
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 33, interfaceMethodOrFieldDecl_StartIndex); }

		}
	}
	// $ANTLR end "interfaceMethodOrFieldDecl"



	// $ANTLR start "interfaceMethodOrFieldRest"
	// org/argouml/language/java/reveng/Java.g:726:1: interfaceMethodOrFieldRest[String name, short modifiers, String t] : ( constantDeclaratorsRest[getJavadocComment(), name, modifiers, t] ';' | interfaceMethodDeclaratorRest[name, modifiers, null, t] );
	public final void interfaceMethodOrFieldRest(String name, short modifiers, String t) throws RecognitionException {
		int interfaceMethodOrFieldRest_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 34) ) { return; }

			// org/argouml/language/java/reveng/Java.g:727:5: ( constantDeclaratorsRest[getJavadocComment(), name, modifiers, t] ';' | interfaceMethodDeclaratorRest[name, modifiers, null, t] )
			int alt47=2;
			int LA47_0 = input.LA(1);
			if ( (LA47_0==52||LA47_0==57) ) {
				alt47=1;
			}
			else if ( (LA47_0==34) ) {
				alt47=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 47, 0, input);
				throw nvae;
			}

			switch (alt47) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:727:9: constantDeclaratorsRest[getJavadocComment(), name, modifiers, t] ';'
					{
					pushFollow(FOLLOW_constantDeclaratorsRest_in_interfaceMethodOrFieldRest2212);
					constantDeclaratorsRest(getJavadocComment(), name, modifiers, t);
					state._fsp--;
					if (state.failed) return;
					match(input,50,FOLLOW_50_in_interfaceMethodOrFieldRest2215); if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:728:9: interfaceMethodDeclaratorRest[name, modifiers, null, t]
					{
					pushFollow(FOLLOW_interfaceMethodDeclaratorRest_in_interfaceMethodOrFieldRest2225);
					interfaceMethodDeclaratorRest(name, modifiers, null, t);
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 34, interfaceMethodOrFieldRest_StartIndex); }

		}
	}
	// $ANTLR end "interfaceMethodOrFieldRest"



	// $ANTLR start "methodDeclaratorRest"
	// org/argouml/language/java/reveng/Java.g:731:1: methodDeclaratorRest[String name, short modifiers, List<String> tparam, String t] : param= formalParameters ( '[' ']' )* ( 'throws' qualifiedNameList )? ( methodBody | ';' ) ;
	public final void methodDeclaratorRest(String name, short modifiers, List<String> tparam, String t) throws RecognitionException {
		int methodDeclaratorRest_StartIndex = input.index();

		List<ParameterDeclaration> param =null;


		        StringBuffer sb = new StringBuffer(80);
		        if (t != null) {
		            sb.append(t);
		        }
		        boolean isOutestCompStat = !isInCompoundStatement();
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 35) ) { return; }

			// org/argouml/language/java/reveng/Java.g:739:5: (param= formalParameters ( '[' ']' )* ( 'throws' qualifiedNameList )? ( methodBody | ';' ) )
			// org/argouml/language/java/reveng/Java.g:739:9: param= formalParameters ( '[' ']' )* ( 'throws' qualifiedNameList )? ( methodBody | ';' )
			{
			pushFollow(FOLLOW_formalParameters_in_methodDeclaratorRest2256);
			param=formalParameters();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:739:32: ( '[' ']' )*
			loop48:
			while (true) {
				int alt48=2;
				int LA48_0 = input.LA(1);
				if ( (LA48_0==57) ) {
					alt48=1;
				}

				switch (alt48) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:739:33: '[' ']'
					{
					match(input,57,FOLLOW_57_in_methodDeclaratorRest2259); if (state.failed) return;
					match(input,58,FOLLOW_58_in_methodDeclaratorRest2261); if (state.failed) return;
					if ( state.backtracking==0 ) { sb.append("[]"); }
					}
					break;

				default :
					break loop48;
				}
			}

			// org/argouml/language/java/reveng/Java.g:740:9: ( 'throws' qualifiedNameList )?
			int alt49=2;
			int LA49_0 = input.LA(1);
			if ( (LA49_0==103) ) {
				alt49=1;
			}
			switch (alt49) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:740:10: 'throws' qualifiedNameList
					{
					match(input,103,FOLLOW_103_in_methodDeclaratorRest2277); if (state.failed) return;
					pushFollow(FOLLOW_qualifiedNameList_in_methodDeclaratorRest2279);
					qualifiedNameList();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// org/argouml/language/java/reveng/Java.g:741:9: ( methodBody | ';' )
			int alt50=2;
			int LA50_0 = input.LA(1);
			if ( (LA50_0==110) ) {
				alt50=1;
			}
			else if ( (LA50_0==50) ) {
				alt50=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 50, 0, input);
				throw nvae;
			}

			switch (alt50) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:741:13: methodBody
					{
					pushFollow(FOLLOW_methodBody_in_methodDeclaratorRest2295);
					methodBody();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:742:13: ';'
					{
					match(input,50,FOLLOW_50_in_methodDeclaratorRest2309); if (state.failed) return;
					}
					break;

			}

			if ( state.backtracking==0 ) {
			            if (isOutestCompStat && level > 0) {
			                setMethod(getModeller().addOperation(modifiers, tparam,
			                    sb.toString(), name, param, getJavadocComment(),
			                    (parserMode == MODE_IMPORT_PASS2)));
			                getModeller().addBodyToOperation(getMethod(),
			                    (level > 1 ? getBody() : ""));
			                setMethod(null);
			                setBody(null);
			            }
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 35, methodDeclaratorRest_StartIndex); }

		}
	}
	// $ANTLR end "methodDeclaratorRest"



	// $ANTLR start "voidMethodDeclaratorRest"
	// org/argouml/language/java/reveng/Java.g:758:1: voidMethodDeclaratorRest[String name, short modifiers] : param= formalParameters ( 'throws' qualifiedNameList )? ( methodBody | ';' ) ;
	public final void voidMethodDeclaratorRest(String name, short modifiers) throws RecognitionException {
		int voidMethodDeclaratorRest_StartIndex = input.index();

		List<ParameterDeclaration> param =null;


		        boolean isOutestCompStat = !isInCompoundStatement();
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 36) ) { return; }

			// org/argouml/language/java/reveng/Java.g:762:5: (param= formalParameters ( 'throws' qualifiedNameList )? ( methodBody | ';' ) )
			// org/argouml/language/java/reveng/Java.g:762:9: param= formalParameters ( 'throws' qualifiedNameList )? ( methodBody | ';' )
			{
			pushFollow(FOLLOW_formalParameters_in_voidMethodDeclaratorRest2368);
			param=formalParameters();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:762:32: ( 'throws' qualifiedNameList )?
			int alt51=2;
			int LA51_0 = input.LA(1);
			if ( (LA51_0==103) ) {
				alt51=1;
			}
			switch (alt51) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:762:33: 'throws' qualifiedNameList
					{
					match(input,103,FOLLOW_103_in_voidMethodDeclaratorRest2371); if (state.failed) return;
					pushFollow(FOLLOW_qualifiedNameList_in_voidMethodDeclaratorRest2373);
					qualifiedNameList();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// org/argouml/language/java/reveng/Java.g:763:9: ( methodBody | ';' )
			int alt52=2;
			int LA52_0 = input.LA(1);
			if ( (LA52_0==110) ) {
				alt52=1;
			}
			else if ( (LA52_0==50) ) {
				alt52=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 52, 0, input);
				throw nvae;
			}

			switch (alt52) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:763:13: methodBody
					{
					pushFollow(FOLLOW_methodBody_in_voidMethodDeclaratorRest2389);
					methodBody();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:764:13: ';'
					{
					match(input,50,FOLLOW_50_in_voidMethodDeclaratorRest2403); if (state.failed) return;
					}
					break;

			}

			if ( state.backtracking==0 ) {
			            if (isOutestCompStat && level > 0) {
			                setMethod(getModeller().addOperation(modifiers, null,
			                    "void", name, param, getJavadocComment(),
			                    (parserMode == MODE_IMPORT_PASS2)));
			                getModeller().addBodyToOperation(getMethod(),
			                    (level > 1 ? getBody() : ""));
			                setMethod(null);
			                setBody(null);
			            }
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 36, voidMethodDeclaratorRest_StartIndex); }

		}
	}
	// $ANTLR end "voidMethodDeclaratorRest"



	// $ANTLR start "interfaceMethodDeclaratorRest"
	// org/argouml/language/java/reveng/Java.g:780:1: interfaceMethodDeclaratorRest[String name, short modifiers, List<String> tparam, String t] : param= formalParameters ( '[' ']' )* ( 'throws' qualifiedNameList )? ';' ;
	public final void interfaceMethodDeclaratorRest(String name, short modifiers, List<String> tparam, String t) throws RecognitionException {
		int interfaceMethodDeclaratorRest_StartIndex = input.index();

		List<ParameterDeclaration> param =null;


		        StringBuffer sb = new StringBuffer(80);
		        if (t != null) {
		            sb.append(t);
		        }
		        boolean isOutestCompStat = !isInCompoundStatement();
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 37) ) { return; }

			// org/argouml/language/java/reveng/Java.g:788:5: (param= formalParameters ( '[' ']' )* ( 'throws' qualifiedNameList )? ';' )
			// org/argouml/language/java/reveng/Java.g:788:9: param= formalParameters ( '[' ']' )* ( 'throws' qualifiedNameList )? ';'
			{
			pushFollow(FOLLOW_formalParameters_in_interfaceMethodDeclaratorRest2462);
			param=formalParameters();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:788:32: ( '[' ']' )*
			loop53:
			while (true) {
				int alt53=2;
				int LA53_0 = input.LA(1);
				if ( (LA53_0==57) ) {
					alt53=1;
				}

				switch (alt53) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:788:33: '[' ']'
					{
					match(input,57,FOLLOW_57_in_interfaceMethodDeclaratorRest2465); if (state.failed) return;
					match(input,58,FOLLOW_58_in_interfaceMethodDeclaratorRest2467); if (state.failed) return;
					if ( state.backtracking==0 ) { sb.append("[]"); }
					}
					break;

				default :
					break loop53;
				}
			}

			// org/argouml/language/java/reveng/Java.g:789:9: ( 'throws' qualifiedNameList )?
			int alt54=2;
			int LA54_0 = input.LA(1);
			if ( (LA54_0==103) ) {
				alt54=1;
			}
			switch (alt54) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:789:10: 'throws' qualifiedNameList
					{
					match(input,103,FOLLOW_103_in_interfaceMethodDeclaratorRest2483); if (state.failed) return;
					pushFollow(FOLLOW_qualifiedNameList_in_interfaceMethodDeclaratorRest2485);
					qualifiedNameList();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			match(input,50,FOLLOW_50_in_interfaceMethodDeclaratorRest2497); if (state.failed) return;
			if ( state.backtracking==0 ) {
			            if (isOutestCompStat && level > 0) {
			                setMethod(getModeller().addOperation(modifiers, tparam,
			                    sb.toString(), name, param, getJavadocComment(),
			                    (parserMode == MODE_IMPORT_PASS2)));
			                setMethod(null);
			            }
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 37, interfaceMethodDeclaratorRest_StartIndex); }

		}
	}
	// $ANTLR end "interfaceMethodDeclaratorRest"



	// $ANTLR start "interfaceGenericMethodDecl"
	// org/argouml/language/java/reveng/Java.g:802:1: interfaceGenericMethodDecl[short modifiers] : tparam= typeParameters (ty= type | 'void' ) name= Identifier interfaceMethodDeclaratorRest[$name.text, modifiers, tparam, t] ;
	public final void interfaceGenericMethodDecl(short modifiers) throws RecognitionException {
		int interfaceGenericMethodDecl_StartIndex = input.index();

		Token name=null;
		List<String> tparam =null;
		String ty =null;


		        String t = null;
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 38) ) { return; }

			// org/argouml/language/java/reveng/Java.g:806:5: (tparam= typeParameters (ty= type | 'void' ) name= Identifier interfaceMethodDeclaratorRest[$name.text, modifiers, tparam, t] )
			// org/argouml/language/java/reveng/Java.g:806:9: tparam= typeParameters (ty= type | 'void' ) name= Identifier interfaceMethodDeclaratorRest[$name.text, modifiers, tparam, t]
			{
			pushFollow(FOLLOW_typeParameters_in_interfaceGenericMethodDecl2546);
			tparam=typeParameters();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:806:31: (ty= type | 'void' )
			int alt55=2;
			int LA55_0 = input.LA(1);
			if ( (LA55_0==Identifier||LA55_0==62||LA55_0==64||LA55_0==67||LA55_0==72||LA55_0==78||LA55_0==84||LA55_0==86||LA55_0==95) ) {
				alt55=1;
			}
			else if ( (LA55_0==107) ) {
				alt55=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 55, 0, input);
				throw nvae;
			}

			switch (alt55) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:806:32: ty= type
					{
					pushFollow(FOLLOW_type_in_interfaceGenericMethodDecl2551);
					ty=type();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { t = ty; }
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:806:54: 'void'
					{
					match(input,107,FOLLOW_107_in_interfaceGenericMethodDecl2557); if (state.failed) return;
					if ( state.backtracking==0 ) { t = "void"; }
					}
					break;

			}

			name=(Token)match(input,Identifier,FOLLOW_Identifier_in_interfaceGenericMethodDecl2573); if (state.failed) return;
			pushFollow(FOLLOW_interfaceMethodDeclaratorRest_in_interfaceGenericMethodDecl2583);
			interfaceMethodDeclaratorRest((name!=null?name.getText():null), modifiers, tparam, t);
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 38, interfaceGenericMethodDecl_StartIndex); }

		}
	}
	// $ANTLR end "interfaceGenericMethodDecl"



	// $ANTLR start "voidInterfaceMethodDeclaratorRest"
	// org/argouml/language/java/reveng/Java.g:811:1: voidInterfaceMethodDeclaratorRest[String name, short modifiers] : param= formalParameters ( 'throws' qualifiedNameList )? ';' ;
	public final void voidInterfaceMethodDeclaratorRest(String name, short modifiers) throws RecognitionException {
		int voidInterfaceMethodDeclaratorRest_StartIndex = input.index();

		List<ParameterDeclaration> param =null;


		        boolean isOutestCompStat = !isInCompoundStatement();
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 39) ) { return; }

			// org/argouml/language/java/reveng/Java.g:815:5: (param= formalParameters ( 'throws' qualifiedNameList )? ';' )
			// org/argouml/language/java/reveng/Java.g:815:9: param= formalParameters ( 'throws' qualifiedNameList )? ';'
			{
			pushFollow(FOLLOW_formalParameters_in_voidInterfaceMethodDeclaratorRest2614);
			param=formalParameters();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:815:32: ( 'throws' qualifiedNameList )?
			int alt56=2;
			int LA56_0 = input.LA(1);
			if ( (LA56_0==103) ) {
				alt56=1;
			}
			switch (alt56) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:815:33: 'throws' qualifiedNameList
					{
					match(input,103,FOLLOW_103_in_voidInterfaceMethodDeclaratorRest2617); if (state.failed) return;
					pushFollow(FOLLOW_qualifiedNameList_in_voidInterfaceMethodDeclaratorRest2619);
					qualifiedNameList();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			match(input,50,FOLLOW_50_in_voidInterfaceMethodDeclaratorRest2631); if (state.failed) return;
			if ( state.backtracking==0 ) {
			            if (isOutestCompStat && level > 0) {
			                setMethod(getModeller().addOperation(modifiers, null,
			                    "void", name, param, getJavadocComment(),
			                    (parserMode == MODE_IMPORT_PASS2)));
			                setMethod(null);
			            }
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 39, voidInterfaceMethodDeclaratorRest_StartIndex); }

		}
	}
	// $ANTLR end "voidInterfaceMethodDeclaratorRest"



	// $ANTLR start "constructorDeclaratorRest"
	// org/argouml/language/java/reveng/Java.g:828:1: constructorDeclaratorRest[String name, short modifiers] : param= formalParameters ( 'throws' qualifiedNameList )? constructorBody ;
	public final void constructorDeclaratorRest(String name, short modifiers) throws RecognitionException {
		int constructorDeclaratorRest_StartIndex = input.index();

		List<ParameterDeclaration> param =null;


		        boolean isOutestCompStat = !isInCompoundStatement();
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 40) ) { return; }

			// org/argouml/language/java/reveng/Java.g:832:5: (param= formalParameters ( 'throws' qualifiedNameList )? constructorBody )
			// org/argouml/language/java/reveng/Java.g:832:9: param= formalParameters ( 'throws' qualifiedNameList )? constructorBody
			{
			pushFollow(FOLLOW_formalParameters_in_constructorDeclaratorRest2680);
			param=formalParameters();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {
			            if (isOutestCompStat && level > 0) {
			                setMethod(getModeller().addOperation(modifiers,
			                null, null, name, param, getJavadocComment(),
			                (parserMode == MODE_IMPORT_PASS2)));
			            }
			        }
			// org/argouml/language/java/reveng/Java.g:840:9: ( 'throws' qualifiedNameList )?
			int alt57=2;
			int LA57_0 = input.LA(1);
			if ( (LA57_0==103) ) {
				alt57=1;
			}
			switch (alt57) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:840:10: 'throws' qualifiedNameList
					{
					match(input,103,FOLLOW_103_in_constructorDeclaratorRest2701); if (state.failed) return;
					pushFollow(FOLLOW_qualifiedNameList_in_constructorDeclaratorRest2703);
					qualifiedNameList();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_constructorBody_in_constructorDeclaratorRest2715);
			constructorBody();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {
			            if (isOutestCompStat && level > 0) {
			                getModeller().addBodyToOperation(getMethod(),
			                    level > 1 ? getBody() : "");
			                setMethod(null);
			                setBody(null);
			            }
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 40, constructorDeclaratorRest_StartIndex); }

		}
	}
	// $ANTLR end "constructorDeclaratorRest"



	// $ANTLR start "constantDeclarator"
	// org/argouml/language/java/reveng/Java.g:853:1: constantDeclarator[String javadoc, short modifiers, String t] : id= Identifier constantDeclaratorRest[javadoc, name, modifiers, t] ;
	public final void constantDeclarator(String javadoc, short modifiers, String t) throws RecognitionException {
		int constantDeclarator_StartIndex = input.index();

		Token id=null;


		        String name = null;
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 41) ) { return; }

			// org/argouml/language/java/reveng/Java.g:857:5: (id= Identifier constantDeclaratorRest[javadoc, name, modifiers, t] )
			// org/argouml/language/java/reveng/Java.g:857:9: id= Identifier constantDeclaratorRest[javadoc, name, modifiers, t]
			{
			id=(Token)match(input,Identifier,FOLLOW_Identifier_in_constantDeclarator2764); if (state.failed) return;
			if ( state.backtracking==0 ) { name = (id!=null?id.getText():null); }
			pushFollow(FOLLOW_constantDeclaratorRest_in_constantDeclarator2776);
			constantDeclaratorRest(javadoc, name, modifiers, t);
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 41, constantDeclarator_StartIndex); }

		}
	}
	// $ANTLR end "constantDeclarator"



	// $ANTLR start "variableDeclarators"
	// org/argouml/language/java/reveng/Java.g:861:1: variableDeclarators[String javadoc, short modifiers, String t] : variableDeclarator[javadoc, modifiers, t] ( ',' variableDeclarator[javadoc, modifiers, t] )* ;
	public final void variableDeclarators(String javadoc, short modifiers, String t) throws RecognitionException {
		int variableDeclarators_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 42) ) { return; }

			// org/argouml/language/java/reveng/Java.g:862:5: ( variableDeclarator[javadoc, modifiers, t] ( ',' variableDeclarator[javadoc, modifiers, t] )* )
			// org/argouml/language/java/reveng/Java.g:862:9: variableDeclarator[javadoc, modifiers, t] ( ',' variableDeclarator[javadoc, modifiers, t] )*
			{
			pushFollow(FOLLOW_variableDeclarator_in_variableDeclarators2797);
			variableDeclarator(javadoc, modifiers, t);
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:863:9: ( ',' variableDeclarator[javadoc, modifiers, t] )*
			loop58:
			while (true) {
				int alt58=2;
				int LA58_0 = input.LA(1);
				if ( (LA58_0==41) ) {
					alt58=1;
				}

				switch (alt58) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:863:10: ',' variableDeclarator[javadoc, modifiers, t]
					{
					match(input,41,FOLLOW_41_in_variableDeclarators2809); if (state.failed) return;
					pushFollow(FOLLOW_variableDeclarator_in_variableDeclarators2811);
					variableDeclarator(javadoc, modifiers, t);
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop58;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 42, variableDeclarators_StartIndex); }

		}
	}
	// $ANTLR end "variableDeclarators"



	// $ANTLR start "variableDeclarator"
	// org/argouml/language/java/reveng/Java.g:866:1: variableDeclarator[String javadoc, short modifiers, String t] : vdi= variableDeclaratorId (eqvi= equalsVariableInitializer )? ;
	public final void variableDeclarator(String javadoc, short modifiers, String t) throws RecognitionException {
		int variableDeclarator_StartIndex = input.index();

		ParserRuleReturnScope vdi =null;
		ParserRuleReturnScope eqvi =null;


		        String b = "";
		        String id = null;
		        int ix;
		        String init = null;
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 43) ) { return; }

			// org/argouml/language/java/reveng/Java.g:873:5: (vdi= variableDeclaratorId (eqvi= equalsVariableInitializer )? )
			// org/argouml/language/java/reveng/Java.g:873:9: vdi= variableDeclaratorId (eqvi= equalsVariableInitializer )?
			{
			pushFollow(FOLLOW_variableDeclaratorId_in_variableDeclarator2844);
			vdi=variableDeclaratorId();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {
			            id = (vdi!=null?input.toString(vdi.start,vdi.stop):null);
			            ix = id.indexOf('[');
			            if (ix > 0) {
			                b = id.substring(ix);
			                id = id.substring(0, ix - 1);
			            }
			        }
			// org/argouml/language/java/reveng/Java.g:882:9: (eqvi= equalsVariableInitializer )?
			int alt59=2;
			int LA59_0 = input.LA(1);
			if ( (LA59_0==52) ) {
				alt59=1;
			}
			switch (alt59) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:883:13: eqvi= equalsVariableInitializer
					{
					if ( state.backtracking==0 ) {
					                if ((parserMode & MODE_REVENG_SEQUENCE) != 0
					                    && "new".equals(input.LT(2).getText())) {
					                    createdObjectVarName = input.LT(0).getText();
					                }
					            }
					pushFollow(FOLLOW_equalsVariableInitializer_in_variableDeclarator2896);
					eqvi=equalsVariableInitializer();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {
					                init = (eqvi!=null?input.toString(eqvi.start,eqvi.stop):null).substring(1);
					                createdObjectVarName = null;
					            }
					}
					break;

			}

			if ( state.backtracking==0 ) {
			            if (!isInCompoundStatement() && level > 0) {
			                getModeller().addAttribute(modifiers, t + b, id, init, javadoc,
			                    (parserMode == MODE_IMPORT_PASS2));
			            }
			            if ((parserMode & MODE_REVENG_SEQUENCE) != 0) {
			                getModeller().addLocalVariableDeclaration(t + b, id);
			            }
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 43, variableDeclarator_StartIndex); }

		}
	}
	// $ANTLR end "variableDeclarator"



	// $ANTLR start "constantDeclaratorsRest"
	// org/argouml/language/java/reveng/Java.g:906:1: constantDeclaratorsRest[String javadoc, String name, short modifiers, String t] : constantDeclaratorRest[javadoc, name, modifiers, t] ( ',' constantDeclarator[javadoc, modifiers, t] )* ;
	public final void constantDeclaratorsRest(String javadoc, String name, short modifiers, String t) throws RecognitionException {
		int constantDeclaratorsRest_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 44) ) { return; }

			// org/argouml/language/java/reveng/Java.g:907:5: ( constantDeclaratorRest[javadoc, name, modifiers, t] ( ',' constantDeclarator[javadoc, modifiers, t] )* )
			// org/argouml/language/java/reveng/Java.g:907:9: constantDeclaratorRest[javadoc, name, modifiers, t] ( ',' constantDeclarator[javadoc, modifiers, t] )*
			{
			pushFollow(FOLLOW_constantDeclaratorRest_in_constantDeclaratorsRest2951);
			constantDeclaratorRest(javadoc, name, modifiers, t);
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:908:9: ( ',' constantDeclarator[javadoc, modifiers, t] )*
			loop60:
			while (true) {
				int alt60=2;
				int LA60_0 = input.LA(1);
				if ( (LA60_0==41) ) {
					alt60=1;
				}

				switch (alt60) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:908:10: ',' constantDeclarator[javadoc, modifiers, t]
					{
					match(input,41,FOLLOW_41_in_constantDeclaratorsRest2963); if (state.failed) return;
					pushFollow(FOLLOW_constantDeclarator_in_constantDeclaratorsRest2965);
					constantDeclarator(javadoc, modifiers, t);
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop60;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 44, constantDeclaratorsRest_StartIndex); }

		}
	}
	// $ANTLR end "constantDeclaratorsRest"



	// $ANTLR start "constantDeclaratorRest"
	// org/argouml/language/java/reveng/Java.g:911:1: constantDeclaratorRest[String javadoc, String name, short modifiers, String t] : ( '[' ']' )* eqvi= equalsVariableInitializer ;
	public final void constantDeclaratorRest(String javadoc, String name, short modifiers, String t) throws RecognitionException {
		int constantDeclaratorRest_StartIndex = input.index();

		ParserRuleReturnScope eqvi =null;


		        StringBuffer sb = new StringBuffer(80);
		        if (t != null) {
		            sb.append(t);
		        }
		        String trackedSoFar = null;
		        String init = null;
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 45) ) { return; }

			// org/argouml/language/java/reveng/Java.g:920:5: ( ( '[' ']' )* eqvi= equalsVariableInitializer )
			// org/argouml/language/java/reveng/Java.g:920:9: ( '[' ']' )* eqvi= equalsVariableInitializer
			{
			// org/argouml/language/java/reveng/Java.g:920:9: ( '[' ']' )*
			loop61:
			while (true) {
				int alt61=2;
				int LA61_0 = input.LA(1);
				if ( (LA61_0==57) ) {
					alt61=1;
				}

				switch (alt61) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:920:10: '[' ']'
					{
					match(input,57,FOLLOW_57_in_constantDeclaratorRest2997); if (state.failed) return;
					match(input,58,FOLLOW_58_in_constantDeclaratorRest2999); if (state.failed) return;
					if ( state.backtracking==0 ) { sb.append("[]"); }
					}
					break;

				default :
					break loop61;
				}
			}

			if ( state.backtracking==0 ) {
			            if ((parserMode & MODE_REVENG_SEQUENCE) != 0
			                && "new".equals(input.LT(2).getText())) {
			                createdObjectVarName = input.LT(0).getText();
			            }
			        }
			pushFollow(FOLLOW_equalsVariableInitializer_in_constantDeclaratorRest3028);
			eqvi=equalsVariableInitializer();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {
			            init = (eqvi!=null?input.toString(eqvi.start,eqvi.stop):null).substring(1);
			            createdObjectVarName = null;
			            if (!isInCompoundStatement() && level > 0) {
			                getModeller().addAttribute(modifiers, sb.toString(), name,
			                    init, javadoc, (parserMode == MODE_IMPORT_PASS2));
			            }
			            if ((parserMode & MODE_REVENG_SEQUENCE) != 0) {
			                getModeller().addLocalVariableDeclaration(sb.toString(), name);
			            }
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 45, constantDeclaratorRest_StartIndex); }

		}
	}
	// $ANTLR end "constantDeclaratorRest"


	public static class variableDeclaratorId_return extends ParserRuleReturnScope {
	};


	// $ANTLR start "variableDeclaratorId"
	// org/argouml/language/java/reveng/Java.g:941:1: variableDeclaratorId : Identifier ( '[' ']' )* ;
	public final JavaParser.variableDeclaratorId_return variableDeclaratorId() throws RecognitionException {
		JavaParser.variableDeclaratorId_return retval = new JavaParser.variableDeclaratorId_return();
		retval.start = input.LT(1);
		int variableDeclaratorId_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 46) ) { return retval; }

			// org/argouml/language/java/reveng/Java.g:942:5: ( Identifier ( '[' ']' )* )
			// org/argouml/language/java/reveng/Java.g:942:9: Identifier ( '[' ']' )*
			{
			match(input,Identifier,FOLLOW_Identifier_in_variableDeclaratorId3057); if (state.failed) return retval;
			// org/argouml/language/java/reveng/Java.g:942:20: ( '[' ']' )*
			loop62:
			while (true) {
				int alt62=2;
				int LA62_0 = input.LA(1);
				if ( (LA62_0==57) ) {
					alt62=1;
				}

				switch (alt62) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:942:21: '[' ']'
					{
					match(input,57,FOLLOW_57_in_variableDeclaratorId3060); if (state.failed) return retval;
					match(input,58,FOLLOW_58_in_variableDeclaratorId3062); if (state.failed) return retval;
					}
					break;

				default :
					break loop62;
				}
			}

			}

			retval.stop = input.LT(-1);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 46, variableDeclaratorId_StartIndex); }

		}
		return retval;
	}
	// $ANTLR end "variableDeclaratorId"


	public static class equalsVariableInitializer_return extends ParserRuleReturnScope {
	};


	// $ANTLR start "equalsVariableInitializer"
	// org/argouml/language/java/reveng/Java.g:945:1: equalsVariableInitializer : '=' variableInitializer ;
	public final JavaParser.equalsVariableInitializer_return equalsVariableInitializer() throws RecognitionException {
		JavaParser.equalsVariableInitializer_return retval = new JavaParser.equalsVariableInitializer_return();
		retval.start = input.LT(1);
		int equalsVariableInitializer_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 47) ) { return retval; }

			// org/argouml/language/java/reveng/Java.g:946:5: ( '=' variableInitializer )
			// org/argouml/language/java/reveng/Java.g:947:9: '=' variableInitializer
			{
			match(input,52,FOLLOW_52_in_equalsVariableInitializer3092); if (state.failed) return retval;
			pushFollow(FOLLOW_variableInitializer_in_equalsVariableInitializer3094);
			variableInitializer();
			state._fsp--;
			if (state.failed) return retval;
			}

			retval.stop = input.LT(-1);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 47, equalsVariableInitializer_StartIndex); }

		}
		return retval;
	}
	// $ANTLR end "equalsVariableInitializer"



	// $ANTLR start "variableInitializer"
	// org/argouml/language/java/reveng/Java.g:950:1: variableInitializer : ( arrayInitializer | expression );
	public final void variableInitializer() throws RecognitionException {
		int variableInitializer_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 48) ) { return; }

			// org/argouml/language/java/reveng/Java.g:951:5: ( arrayInitializer | expression )
			int alt63=2;
			int LA63_0 = input.LA(1);
			if ( (LA63_0==110) ) {
				alt63=1;
			}
			else if ( ((LA63_0 >= CharacterLiteral && LA63_0 <= DecimalLiteral)||LA63_0==FloatingPointLiteral||(LA63_0 >= HexLiteral && LA63_0 <= Identifier)||(LA63_0 >= OctalLiteral && LA63_0 <= StringLiteral)||LA63_0==27||LA63_0==34||(LA63_0 >= 38 && LA63_0 <= 39)||(LA63_0 >= 42 && LA63_0 <= 43)||LA63_0==62||LA63_0==64||LA63_0==67||LA63_0==72||LA63_0==75||LA63_0==78||LA63_0==84||LA63_0==86||(LA63_0 >= 88 && LA63_0 <= 89)||LA63_0==95||LA63_0==98||LA63_0==101||LA63_0==105||LA63_0==107||LA63_0==115) ) {
				alt63=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 63, 0, input);
				throw nvae;
			}

			switch (alt63) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:951:9: arrayInitializer
					{
					pushFollow(FOLLOW_arrayInitializer_in_variableInitializer3113);
					arrayInitializer();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:952:9: expression
					{
					pushFollow(FOLLOW_expression_in_variableInitializer3123);
					expression();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 48, variableInitializer_StartIndex); }

		}
	}
	// $ANTLR end "variableInitializer"



	// $ANTLR start "arrayInitializer"
	// org/argouml/language/java/reveng/Java.g:955:1: arrayInitializer : '{' ( variableInitializer ( ',' variableInitializer )* ( ',' )? )? '}' ;
	public final void arrayInitializer() throws RecognitionException {
		int arrayInitializer_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 49) ) { return; }

			// org/argouml/language/java/reveng/Java.g:956:5: ( '{' ( variableInitializer ( ',' variableInitializer )* ( ',' )? )? '}' )
			// org/argouml/language/java/reveng/Java.g:956:9: '{' ( variableInitializer ( ',' variableInitializer )* ( ',' )? )? '}'
			{
			match(input,110,FOLLOW_110_in_arrayInitializer3150); if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:956:13: ( variableInitializer ( ',' variableInitializer )* ( ',' )? )?
			int alt66=2;
			int LA66_0 = input.LA(1);
			if ( ((LA66_0 >= CharacterLiteral && LA66_0 <= DecimalLiteral)||LA66_0==FloatingPointLiteral||(LA66_0 >= HexLiteral && LA66_0 <= Identifier)||(LA66_0 >= OctalLiteral && LA66_0 <= StringLiteral)||LA66_0==27||LA66_0==34||(LA66_0 >= 38 && LA66_0 <= 39)||(LA66_0 >= 42 && LA66_0 <= 43)||LA66_0==62||LA66_0==64||LA66_0==67||LA66_0==72||LA66_0==75||LA66_0==78||LA66_0==84||LA66_0==86||(LA66_0 >= 88 && LA66_0 <= 89)||LA66_0==95||LA66_0==98||LA66_0==101||LA66_0==105||LA66_0==107||LA66_0==110||LA66_0==115) ) {
				alt66=1;
			}
			switch (alt66) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:956:14: variableInitializer ( ',' variableInitializer )* ( ',' )?
					{
					pushFollow(FOLLOW_variableInitializer_in_arrayInitializer3153);
					variableInitializer();
					state._fsp--;
					if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:956:34: ( ',' variableInitializer )*
					loop64:
					while (true) {
						int alt64=2;
						int LA64_0 = input.LA(1);
						if ( (LA64_0==41) ) {
							int LA64_1 = input.LA(2);
							if ( ((LA64_1 >= CharacterLiteral && LA64_1 <= DecimalLiteral)||LA64_1==FloatingPointLiteral||(LA64_1 >= HexLiteral && LA64_1 <= Identifier)||(LA64_1 >= OctalLiteral && LA64_1 <= StringLiteral)||LA64_1==27||LA64_1==34||(LA64_1 >= 38 && LA64_1 <= 39)||(LA64_1 >= 42 && LA64_1 <= 43)||LA64_1==62||LA64_1==64||LA64_1==67||LA64_1==72||LA64_1==75||LA64_1==78||LA64_1==84||LA64_1==86||(LA64_1 >= 88 && LA64_1 <= 89)||LA64_1==95||LA64_1==98||LA64_1==101||LA64_1==105||LA64_1==107||LA64_1==110||LA64_1==115) ) {
								alt64=1;
							}

						}

						switch (alt64) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:956:35: ',' variableInitializer
							{
							match(input,41,FOLLOW_41_in_arrayInitializer3156); if (state.failed) return;
							pushFollow(FOLLOW_variableInitializer_in_arrayInitializer3158);
							variableInitializer();
							state._fsp--;
							if (state.failed) return;
							}
							break;

						default :
							break loop64;
						}
					}

					// org/argouml/language/java/reveng/Java.g:956:61: ( ',' )?
					int alt65=2;
					int LA65_0 = input.LA(1);
					if ( (LA65_0==41) ) {
						alt65=1;
					}
					switch (alt65) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:956:62: ','
							{
							match(input,41,FOLLOW_41_in_arrayInitializer3163); if (state.failed) return;
							}
							break;

					}

					}
					break;

			}

			match(input,114,FOLLOW_114_in_arrayInitializer3170); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 49, arrayInitializer_StartIndex); }

		}
	}
	// $ANTLR end "arrayInitializer"



	// $ANTLR start "modifier"
	// org/argouml/language/java/reveng/Java.g:959:1: modifier returns [short m = 0] : ( annotation | 'public' | 'protected' | 'private' | 'static' | 'abstract' | 'final' | 'native' | 'synchronized' | 'transient' | 'volatile' | 'strictfp' );
	public final short modifier() throws RecognitionException {
		short m =  0;

		int modifier_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 50) ) { return m; }

			// org/argouml/language/java/reveng/Java.g:960:5: ( annotation | 'public' | 'protected' | 'private' | 'static' | 'abstract' | 'final' | 'native' | 'synchronized' | 'transient' | 'volatile' | 'strictfp' )
			int alt67=12;
			switch ( input.LA(1) ) {
			case 56:
				{
				alt67=1;
				}
				break;
			case 93:
				{
				alt67=2;
				}
				break;
			case 92:
				{
				alt67=3;
				}
				break;
			case 91:
				{
				alt67=4;
				}
				break;
			case 96:
				{
				alt67=5;
				}
				break;
			case 61:
				{
				alt67=6;
				}
				break;
			case 76:
				{
				alt67=7;
				}
				break;
			case 87:
				{
				alt67=8;
				}
				break;
			case 100:
				{
				alt67=9;
				}
				break;
			case 104:
				{
				alt67=10;
				}
				break;
			case 108:
				{
				alt67=11;
				}
				break;
			case 97:
				{
				alt67=12;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return m;}
				NoViableAltException nvae =
					new NoViableAltException("", 67, 0, input);
				throw nvae;
			}
			switch (alt67) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:960:9: annotation
					{
					pushFollow(FOLLOW_annotation_in_modifier3193);
					annotation();
					state._fsp--;
					if (state.failed) return m;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:961:9: 'public'
					{
					match(input,93,FOLLOW_93_in_modifier3203); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_PUBLIC; }
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:962:9: 'protected'
					{
					match(input,92,FOLLOW_92_in_modifier3221); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_PROTECTED; }
					}
					break;
				case 4 :
					// org/argouml/language/java/reveng/Java.g:963:9: 'private'
					{
					match(input,91,FOLLOW_91_in_modifier3236); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_PRIVATE; }
					}
					break;
				case 5 :
					// org/argouml/language/java/reveng/Java.g:964:9: 'static'
					{
					match(input,96,FOLLOW_96_in_modifier3253); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_STATIC; }
					}
					break;
				case 6 :
					// org/argouml/language/java/reveng/Java.g:965:9: 'abstract'
					{
					match(input,61,FOLLOW_61_in_modifier3271); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_ABSTRACT; }
					}
					break;
				case 7 :
					// org/argouml/language/java/reveng/Java.g:966:9: 'final'
					{
					match(input,76,FOLLOW_76_in_modifier3287); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_FINAL; }
					}
					break;
				case 8 :
					// org/argouml/language/java/reveng/Java.g:967:9: 'native'
					{
					match(input,87,FOLLOW_87_in_modifier3306); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_NATIVE; }
					}
					break;
				case 9 :
					// org/argouml/language/java/reveng/Java.g:968:9: 'synchronized'
					{
					match(input,100,FOLLOW_100_in_modifier3324); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_SYNCHRONIZED; }
					}
					break;
				case 10 :
					// org/argouml/language/java/reveng/Java.g:969:9: 'transient'
					{
					match(input,104,FOLLOW_104_in_modifier3336); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_TRANSIENT; }
					}
					break;
				case 11 :
					// org/argouml/language/java/reveng/Java.g:970:9: 'volatile'
					{
					match(input,108,FOLLOW_108_in_modifier3351); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_VOLATILE; }
					}
					break;
				case 12 :
					// org/argouml/language/java/reveng/Java.g:971:9: 'strictfp'
					{
					match(input,97,FOLLOW_97_in_modifier3367); if (state.failed) return m;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 50, modifier_StartIndex); }

		}
		return m;
	}
	// $ANTLR end "modifier"



	// $ANTLR start "packageOrTypeName"
	// org/argouml/language/java/reveng/Java.g:974:1: packageOrTypeName : qualifiedName ;
	public final void packageOrTypeName() throws RecognitionException {
		int packageOrTypeName_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 51) ) { return; }

			// org/argouml/language/java/reveng/Java.g:975:5: ( qualifiedName )
			// org/argouml/language/java/reveng/Java.g:975:9: qualifiedName
			{
			pushFollow(FOLLOW_qualifiedName_in_packageOrTypeName3386);
			qualifiedName();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 51, packageOrTypeName_StartIndex); }

		}
	}
	// $ANTLR end "packageOrTypeName"



	// $ANTLR start "enumConstantName"
	// org/argouml/language/java/reveng/Java.g:978:1: enumConstantName : Identifier ;
	public final void enumConstantName() throws RecognitionException {
		int enumConstantName_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 52) ) { return; }

			// org/argouml/language/java/reveng/Java.g:979:5: ( Identifier )
			// org/argouml/language/java/reveng/Java.g:979:9: Identifier
			{
			match(input,Identifier,FOLLOW_Identifier_in_enumConstantName3405); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 52, enumConstantName_StartIndex); }

		}
	}
	// $ANTLR end "enumConstantName"



	// $ANTLR start "typeName"
	// org/argouml/language/java/reveng/Java.g:982:1: typeName : qualifiedName ;
	public final void typeName() throws RecognitionException {
		int typeName_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 53) ) { return; }

			// org/argouml/language/java/reveng/Java.g:983:5: ( qualifiedName )
			// org/argouml/language/java/reveng/Java.g:983:9: qualifiedName
			{
			pushFollow(FOLLOW_qualifiedName_in_typeName3424);
			qualifiedName();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 53, typeName_StartIndex); }

		}
	}
	// $ANTLR end "typeName"



	// $ANTLR start "type"
	// org/argouml/language/java/reveng/Java.g:986:1: type returns [String t = null] : (coit= classOrInterfaceType ( '[' ']' )* |pt= primitiveType ( '[' ']' )* ) ;
	public final String type() throws RecognitionException {
		String t =  null;

		int type_StartIndex = input.index();

		String coit =null;
		ParserRuleReturnScope pt =null;


		        StringBuffer sb = new StringBuffer();
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 54) ) { return t; }

			// org/argouml/language/java/reveng/Java.g:990:5: ( (coit= classOrInterfaceType ( '[' ']' )* |pt= primitiveType ( '[' ']' )* ) )
			// org/argouml/language/java/reveng/Java.g:990:9: (coit= classOrInterfaceType ( '[' ']' )* |pt= primitiveType ( '[' ']' )* )
			{
			// org/argouml/language/java/reveng/Java.g:990:9: (coit= classOrInterfaceType ( '[' ']' )* |pt= primitiveType ( '[' ']' )* )
			int alt70=2;
			int LA70_0 = input.LA(1);
			if ( (LA70_0==Identifier) ) {
				alt70=1;
			}
			else if ( (LA70_0==62||LA70_0==64||LA70_0==67||LA70_0==72||LA70_0==78||LA70_0==84||LA70_0==86||LA70_0==95) ) {
				alt70=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return t;}
				NoViableAltException nvae =
					new NoViableAltException("", 70, 0, input);
				throw nvae;
			}

			switch (alt70) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:991:13: coit= classOrInterfaceType ( '[' ']' )*
					{
					pushFollow(FOLLOW_classOrInterfaceType_in_type3471);
					coit=classOrInterfaceType();
					state._fsp--;
					if (state.failed) return t;
					if ( state.backtracking==0 ) { sb.append(coit); }
					// org/argouml/language/java/reveng/Java.g:992:13: ( '[' ']' )*
					loop68:
					while (true) {
						int alt68=2;
						int LA68_0 = input.LA(1);
						if ( (LA68_0==57) ) {
							alt68=1;
						}

						switch (alt68) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:992:14: '[' ']'
							{
							match(input,57,FOLLOW_57_in_type3488); if (state.failed) return t;
							match(input,58,FOLLOW_58_in_type3490); if (state.failed) return t;
							if ( state.backtracking==0 ) { sb.append("[]"); }
							}
							break;

						default :
							break loop68;
						}
					}

					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:994:13: pt= primitiveType ( '[' ']' )*
					{
					pushFollow(FOLLOW_primitiveType_in_type3540);
					pt=primitiveType();
					state._fsp--;
					if (state.failed) return t;
					if ( state.backtracking==0 ) { sb.append((pt!=null?input.toString(pt.start,pt.stop):null)); }
					// org/argouml/language/java/reveng/Java.g:995:13: ( '[' ']' )*
					loop69:
					while (true) {
						int alt69=2;
						int LA69_0 = input.LA(1);
						if ( (LA69_0==57) ) {
							alt69=1;
						}

						switch (alt69) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:995:14: '[' ']'
							{
							match(input,57,FOLLOW_57_in_type3566); if (state.failed) return t;
							match(input,58,FOLLOW_58_in_type3568); if (state.failed) return t;
							if ( state.backtracking==0 ) { sb.append("[]"); }
							}
							break;

						default :
							break loop69;
						}
					}

					}
					break;

			}

			if ( state.backtracking==0 ) {
			            t = sb.toString();
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 54, type_StartIndex); }

		}
		return t;
	}
	// $ANTLR end "type"



	// $ANTLR start "classOrInterfaceType"
	// org/argouml/language/java/reveng/Java.g:1003:1: classOrInterfaceType returns [String t = null] : t1= Identifier (ta= typeArguments )? ( '.' t3= Identifier (ta= typeArguments )? )* ;
	public final String classOrInterfaceType() throws RecognitionException {
		String t =  null;

		int classOrInterfaceType_StartIndex = input.index();

		Token t1=null;
		Token t3=null;
		ParserRuleReturnScope ta =null;


		        StringBuffer sb = new StringBuffer();
		        // TODO: type arguments not currently returned
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 55) ) { return t; }

			// org/argouml/language/java/reveng/Java.g:1008:5: (t1= Identifier (ta= typeArguments )? ( '.' t3= Identifier (ta= typeArguments )? )* )
			// org/argouml/language/java/reveng/Java.g:1008:9: t1= Identifier (ta= typeArguments )? ( '.' t3= Identifier (ta= typeArguments )? )*
			{
			t1=(Token)match(input,Identifier,FOLLOW_Identifier_in_classOrInterfaceType3655); if (state.failed) return t;
			// org/argouml/language/java/reveng/Java.g:1008:23: (ta= typeArguments )?
			int alt71=2;
			int LA71_0 = input.LA(1);
			if ( (LA71_0==51) ) {
				int LA71_1 = input.LA(2);
				if ( (LA71_1==Identifier||LA71_1==55||LA71_1==62||LA71_1==64||LA71_1==67||LA71_1==72||LA71_1==78||LA71_1==84||LA71_1==86||LA71_1==95) ) {
					alt71=1;
				}
			}
			switch (alt71) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1008:24: ta= typeArguments
					{
					pushFollow(FOLLOW_typeArguments_in_classOrInterfaceType3660);
					ta=typeArguments();
					state._fsp--;
					if (state.failed) return t;
					}
					break;

			}

			if ( state.backtracking==0 ) { sb.append((t1!=null?t1.getText():null)); }
			// org/argouml/language/java/reveng/Java.g:1009:9: ( '.' t3= Identifier (ta= typeArguments )? )*
			loop73:
			while (true) {
				int alt73=2;
				int LA73_0 = input.LA(1);
				if ( (LA73_0==45) ) {
					alt73=1;
				}

				switch (alt73) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1009:13: '.' t3= Identifier (ta= typeArguments )?
					{
					match(input,45,FOLLOW_45_in_classOrInterfaceType3681); if (state.failed) return t;
					t3=(Token)match(input,Identifier,FOLLOW_Identifier_in_classOrInterfaceType3685); if (state.failed) return t;
					if ( state.backtracking==0 ) { sb.append('.').append((t3!=null?t3.getText():null)); }
					// org/argouml/language/java/reveng/Java.g:1010:13: (ta= typeArguments )?
					int alt72=2;
					int LA72_0 = input.LA(1);
					if ( (LA72_0==51) ) {
						int LA72_1 = input.LA(2);
						if ( (LA72_1==Identifier||LA72_1==55||LA72_1==62||LA72_1==64||LA72_1==67||LA72_1==72||LA72_1==78||LA72_1==84||LA72_1==86||LA72_1==95) ) {
							alt72=1;
						}
					}
					switch (alt72) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1010:14: ta= typeArguments
							{
							pushFollow(FOLLOW_typeArguments_in_classOrInterfaceType3704);
							ta=typeArguments();
							state._fsp--;
							if (state.failed) return t;
							}
							break;

					}

					}
					break;

				default :
					break loop73;
				}
			}

			if ( state.backtracking==0 ) {
			            t = sb.toString()+((ta!=null?input.toString(ta.start,ta.stop):null) != null ? (ta!=null?input.toString(ta.start,ta.stop):null) : "");
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 55, classOrInterfaceType_StartIndex); }

		}
		return t;
	}
	// $ANTLR end "classOrInterfaceType"


	public static class primitiveType_return extends ParserRuleReturnScope {
	};


	// $ANTLR start "primitiveType"
	// org/argouml/language/java/reveng/Java.g:1017:1: primitiveType : ( 'boolean' | 'char' | 'byte' | 'short' | 'int' | 'long' | 'float' | 'double' );
	public final JavaParser.primitiveType_return primitiveType() throws RecognitionException {
		JavaParser.primitiveType_return retval = new JavaParser.primitiveType_return();
		retval.start = input.LT(1);
		int primitiveType_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 56) ) { return retval; }

			// org/argouml/language/java/reveng/Java.g:1018:5: ( 'boolean' | 'char' | 'byte' | 'short' | 'int' | 'long' | 'float' | 'double' )
			// org/argouml/language/java/reveng/Java.g:
			{
			if ( input.LA(1)==62||input.LA(1)==64||input.LA(1)==67||input.LA(1)==72||input.LA(1)==78||input.LA(1)==84||input.LA(1)==86||input.LA(1)==95 ) {
				input.consume();
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

			retval.stop = input.LT(-1);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 56, primitiveType_StartIndex); }

		}
		return retval;
	}
	// $ANTLR end "primitiveType"



	// $ANTLR start "variableModifier"
	// org/argouml/language/java/reveng/Java.g:1028:1: variableModifier returns [short m = 0] : ( 'final' | annotation );
	public final short variableModifier() throws RecognitionException {
		short m =  0;

		int variableModifier_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 57) ) { return m; }

			// org/argouml/language/java/reveng/Java.g:1029:5: ( 'final' | annotation )
			int alt74=2;
			int LA74_0 = input.LA(1);
			if ( (LA74_0==76) ) {
				alt74=1;
			}
			else if ( (LA74_0==56) ) {
				alt74=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return m;}
				NoViableAltException nvae =
					new NoViableAltException("", 74, 0, input);
				throw nvae;
			}

			switch (alt74) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1029:9: 'final'
					{
					match(input,76,FOLLOW_76_in_variableModifier3839); if (state.failed) return m;
					if ( state.backtracking==0 ) { m = ACC_FINAL; }
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1030:9: annotation
					{
					pushFollow(FOLLOW_annotation_in_variableModifier3851);
					annotation();
					state._fsp--;
					if (state.failed) return m;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 57, variableModifier_StartIndex); }

		}
		return m;
	}
	// $ANTLR end "variableModifier"


	public static class typeArguments_return extends ParserRuleReturnScope {
	};


	// $ANTLR start "typeArguments"
	// org/argouml/language/java/reveng/Java.g:1033:1: typeArguments : '<' typeArgument ( ',' typeArgument )* '>' ;
	public final JavaParser.typeArguments_return typeArguments() throws RecognitionException {
		JavaParser.typeArguments_return retval = new JavaParser.typeArguments_return();
		retval.start = input.LT(1);
		int typeArguments_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 58) ) { return retval; }

			// org/argouml/language/java/reveng/Java.g:1034:5: ( '<' typeArgument ( ',' typeArgument )* '>' )
			// org/argouml/language/java/reveng/Java.g:1034:9: '<' typeArgument ( ',' typeArgument )* '>'
			{
			match(input,51,FOLLOW_51_in_typeArguments3870); if (state.failed) return retval;
			pushFollow(FOLLOW_typeArgument_in_typeArguments3872);
			typeArgument();
			state._fsp--;
			if (state.failed) return retval;
			// org/argouml/language/java/reveng/Java.g:1034:26: ( ',' typeArgument )*
			loop75:
			while (true) {
				int alt75=2;
				int LA75_0 = input.LA(1);
				if ( (LA75_0==41) ) {
					alt75=1;
				}

				switch (alt75) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1034:27: ',' typeArgument
					{
					match(input,41,FOLLOW_41_in_typeArguments3875); if (state.failed) return retval;
					pushFollow(FOLLOW_typeArgument_in_typeArguments3877);
					typeArgument();
					state._fsp--;
					if (state.failed) return retval;
					}
					break;

				default :
					break loop75;
				}
			}

			match(input,54,FOLLOW_54_in_typeArguments3881); if (state.failed) return retval;
			}

			retval.stop = input.LT(-1);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 58, typeArguments_StartIndex); }

		}
		return retval;
	}
	// $ANTLR end "typeArguments"



	// $ANTLR start "typeArgument"
	// org/argouml/language/java/reveng/Java.g:1037:1: typeArgument : ( type | '?' ( ( 'extends' | 'super' ) type )? );
	public final void typeArgument() throws RecognitionException {
		int typeArgument_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 59) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1038:5: ( type | '?' ( ( 'extends' | 'super' ) type )? )
			int alt77=2;
			int LA77_0 = input.LA(1);
			if ( (LA77_0==Identifier||LA77_0==62||LA77_0==64||LA77_0==67||LA77_0==72||LA77_0==78||LA77_0==84||LA77_0==86||LA77_0==95) ) {
				alt77=1;
			}
			else if ( (LA77_0==55) ) {
				alt77=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 77, 0, input);
				throw nvae;
			}

			switch (alt77) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1038:9: type
					{
					pushFollow(FOLLOW_type_in_typeArgument3904);
					type();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1039:9: '?' ( ( 'extends' | 'super' ) type )?
					{
					match(input,55,FOLLOW_55_in_typeArgument3914); if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1039:13: ( ( 'extends' | 'super' ) type )?
					int alt76=2;
					int LA76_0 = input.LA(1);
					if ( (LA76_0==74||LA76_0==98) ) {
						alt76=1;
					}
					switch (alt76) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1039:14: ( 'extends' | 'super' ) type
							{
							if ( input.LA(1)==74||input.LA(1)==98 ) {
								input.consume();
								state.errorRecovery=false;
								state.failed=false;
							}
							else {
								if (state.backtracking>0) {state.failed=true; return;}
								MismatchedSetException mse = new MismatchedSetException(null,input);
								throw mse;
							}
							pushFollow(FOLLOW_type_in_typeArgument3925);
							type();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 59, typeArgument_StartIndex); }

		}
	}
	// $ANTLR end "typeArgument"



	// $ANTLR start "qualifiedNameList"
	// org/argouml/language/java/reveng/Java.g:1042:1: qualifiedNameList : qualifiedName ( ',' qualifiedName )* ;
	public final void qualifiedNameList() throws RecognitionException {
		int qualifiedNameList_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 60) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1043:5: ( qualifiedName ( ',' qualifiedName )* )
			// org/argouml/language/java/reveng/Java.g:1043:9: qualifiedName ( ',' qualifiedName )*
			{
			pushFollow(FOLLOW_qualifiedName_in_qualifiedNameList3950);
			qualifiedName();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1043:23: ( ',' qualifiedName )*
			loop78:
			while (true) {
				int alt78=2;
				int LA78_0 = input.LA(1);
				if ( (LA78_0==41) ) {
					alt78=1;
				}

				switch (alt78) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1043:24: ',' qualifiedName
					{
					match(input,41,FOLLOW_41_in_qualifiedNameList3953); if (state.failed) return;
					pushFollow(FOLLOW_qualifiedName_in_qualifiedNameList3955);
					qualifiedName();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop78;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 60, qualifiedNameList_StartIndex); }

		}
	}
	// $ANTLR end "qualifiedNameList"



	// $ANTLR start "formalParameters"
	// org/argouml/language/java/reveng/Java.g:1046:1: formalParameters returns [List<ParameterDeclaration> paramList=new ArrayList<ParameterDeclaration>()] : '(' ( formalParameterDecls[paramList] )? ')' ;
	public final List<ParameterDeclaration> formalParameters() throws RecognitionException {
		List<ParameterDeclaration> paramList = new ArrayList<ParameterDeclaration>();

		int formalParameters_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 61) ) { return paramList; }

			// org/argouml/language/java/reveng/Java.g:1047:5: ( '(' ( formalParameterDecls[paramList] )? ')' )
			// org/argouml/language/java/reveng/Java.g:1047:9: '(' ( formalParameterDecls[paramList] )? ')'
			{
			match(input,34,FOLLOW_34_in_formalParameters3980); if (state.failed) return paramList;
			// org/argouml/language/java/reveng/Java.g:1047:13: ( formalParameterDecls[paramList] )?
			int alt79=2;
			int LA79_0 = input.LA(1);
			if ( (LA79_0==Identifier||LA79_0==56||LA79_0==62||LA79_0==64||LA79_0==67||LA79_0==72||LA79_0==76||LA79_0==78||LA79_0==84||LA79_0==86||LA79_0==95) ) {
				alt79=1;
			}
			switch (alt79) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1047:14: formalParameterDecls[paramList]
					{
					pushFollow(FOLLOW_formalParameterDecls_in_formalParameters3983);
					formalParameterDecls(paramList);
					state._fsp--;
					if (state.failed) return paramList;
					}
					break;

			}

			match(input,35,FOLLOW_35_in_formalParameters3988); if (state.failed) return paramList;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 61, formalParameters_StartIndex); }

		}
		return paramList;
	}
	// $ANTLR end "formalParameters"



	// $ANTLR start "formalParameterDecls"
	// org/argouml/language/java/reveng/Java.g:1050:1: formalParameterDecls[List<ParameterDeclaration> paramList] : mods= variableModifiers t= type formalParameterDeclsRest[mods, t, paramList] ;
	public final void formalParameterDecls(List<ParameterDeclaration> paramList) throws RecognitionException {
		int formalParameterDecls_StartIndex = input.index();

		short mods =0;
		String t =null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 62) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1051:5: (mods= variableModifiers t= type formalParameterDeclsRest[mods, t, paramList] )
			// org/argouml/language/java/reveng/Java.g:1051:9: mods= variableModifiers t= type formalParameterDeclsRest[mods, t, paramList]
			{
			pushFollow(FOLLOW_variableModifiers_in_formalParameterDecls4014);
			mods=variableModifiers();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_type_in_formalParameterDecls4018);
			t=type();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_formalParameterDeclsRest_in_formalParameterDecls4020);
			formalParameterDeclsRest(mods, t, paramList);
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 62, formalParameterDecls_StartIndex); }

		}
	}
	// $ANTLR end "formalParameterDecls"



	// $ANTLR start "formalParameterDeclsRest"
	// org/argouml/language/java/reveng/Java.g:1054:1: formalParameterDeclsRest[short mods, String t, List<ParameterDeclaration> paramList] : (vdi= variableDeclaratorId ( ',' formalParameterDecls[paramList] )? | '...' vdi= variableDeclaratorId );
	public final void formalParameterDeclsRest(short mods, String t, List<ParameterDeclaration> paramList) throws RecognitionException {
		int formalParameterDeclsRest_StartIndex = input.index();

		ParserRuleReturnScope vdi =null;


		    String pdb = "";
		    String id = null;
		    int ix;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 63) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1060:5: (vdi= variableDeclaratorId ( ',' formalParameterDecls[paramList] )? | '...' vdi= variableDeclaratorId )
			int alt81=2;
			int LA81_0 = input.LA(1);
			if ( (LA81_0==Identifier) ) {
				alt81=1;
			}
			else if ( (LA81_0==46) ) {
				alt81=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 81, 0, input);
				throw nvae;
			}

			switch (alt81) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1060:9: vdi= variableDeclaratorId ( ',' formalParameterDecls[paramList] )?
					{
					pushFollow(FOLLOW_variableDeclaratorId_in_formalParameterDeclsRest4051);
					vdi=variableDeclaratorId();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {
					            id = (vdi!=null?input.toString(vdi.start,vdi.stop):null);
					            ix = id.indexOf('[');
					            if (ix > 0) {
					                pdb = id.substring(ix);
					                id = id.substring(0, ix - 1);
					            }
					            paramList.add(new ParameterDeclaration(mods, t + pdb, id));
					        }
					// org/argouml/language/java/reveng/Java.g:1070:9: ( ',' formalParameterDecls[paramList] )?
					int alt80=2;
					int LA80_0 = input.LA(1);
					if ( (LA80_0==41) ) {
						alt80=1;
					}
					switch (alt80) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1070:10: ',' formalParameterDecls[paramList]
							{
							match(input,41,FOLLOW_41_in_formalParameterDeclsRest4072); if (state.failed) return;
							pushFollow(FOLLOW_formalParameterDecls_in_formalParameterDeclsRest4074);
							formalParameterDecls(paramList);
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1071:9: '...' vdi= variableDeclaratorId
					{
					match(input,46,FOLLOW_46_in_formalParameterDeclsRest4087); if (state.failed) return;
					pushFollow(FOLLOW_variableDeclaratorId_in_formalParameterDeclsRest4091);
					vdi=variableDeclaratorId();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {
					            id = (vdi!=null?input.toString(vdi.start,vdi.stop):null);
					            ix = id.indexOf('[');
					            if (ix > 0) {
					                pdb = id.substring(ix);
					                id = id.substring(0, ix - 1);
					            }
					            paramList.add(new ParameterDeclaration(mods, t + "..." + pdb, id));
					        }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 63, formalParameterDeclsRest_StartIndex); }

		}
	}
	// $ANTLR end "formalParameterDeclsRest"



	// $ANTLR start "methodBody"
	// org/argouml/language/java/reveng/Java.g:1083:1: methodBody : block ;
	public final void methodBody() throws RecognitionException {
		int methodBody_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 64) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1084:5: ( block )
			// org/argouml/language/java/reveng/Java.g:1084:9: block
			{
			pushFollow(FOLLOW_block_in_methodBody4124);
			block();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 64, methodBody_StartIndex); }

		}
	}
	// $ANTLR end "methodBody"


	public static class constructorBody_return extends ParserRuleReturnScope {
	};


	// $ANTLR start "constructorBody"
	// org/argouml/language/java/reveng/Java.g:1087:1: constructorBody : '{' ( explicitConstructorInvocation )? ( blockStatement )* '}' ;
	public final JavaParser.constructorBody_return constructorBody() throws RecognitionException {
		JavaParser.constructorBody_return retval = new JavaParser.constructorBody_return();
		retval.start = input.LT(1);
		int constructorBody_StartIndex = input.index();


		        boolean isOutestCompStat = !isInCompoundStatement();
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 65) ) { return retval; }

			// org/argouml/language/java/reveng/Java.g:1091:5: ( '{' ( explicitConstructorInvocation )? ( blockStatement )* '}' )
			// org/argouml/language/java/reveng/Java.g:1091:9: '{' ( explicitConstructorInvocation )? ( blockStatement )* '}'
			{
			if ( state.backtracking==0 ) {
			            if (isOutestCompStat) {
			                setIsInCompoundStatement(true);
			            }
			        }
			match(input,110,FOLLOW_110_in_constructorBody4161); if (state.failed) return retval;
			// org/argouml/language/java/reveng/Java.g:1096:13: ( explicitConstructorInvocation )?
			int alt82=2;
			alt82 = dfa82.predict(input);
			switch (alt82) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1096:13: explicitConstructorInvocation
					{
					pushFollow(FOLLOW_explicitConstructorInvocation_in_constructorBody4163);
					explicitConstructorInvocation();
					state._fsp--;
					if (state.failed) return retval;
					}
					break;

			}

			// org/argouml/language/java/reveng/Java.g:1096:44: ( blockStatement )*
			loop83:
			while (true) {
				int alt83=2;
				int LA83_0 = input.LA(1);
				if ( (LA83_0==ASSERT||(LA83_0 >= CharacterLiteral && LA83_0 <= DecimalLiteral)||LA83_0==ENUM||LA83_0==FloatingPointLiteral||(LA83_0 >= HexLiteral && LA83_0 <= Identifier)||(LA83_0 >= OctalLiteral && LA83_0 <= StringLiteral)||LA83_0==27||LA83_0==34||(LA83_0 >= 38 && LA83_0 <= 39)||(LA83_0 >= 42 && LA83_0 <= 43)||LA83_0==50||LA83_0==56||(LA83_0 >= 61 && LA83_0 <= 64)||(LA83_0 >= 67 && LA83_0 <= 69)||(LA83_0 >= 71 && LA83_0 <= 72)||(LA83_0 >= 75 && LA83_0 <= 76)||(LA83_0 >= 78 && LA83_0 <= 80)||(LA83_0 >= 84 && LA83_0 <= 86)||(LA83_0 >= 88 && LA83_0 <= 89)||(LA83_0 >= 91 && LA83_0 <= 102)||(LA83_0 >= 105 && LA83_0 <= 107)||(LA83_0 >= 109 && LA83_0 <= 110)||LA83_0==115) ) {
					alt83=1;
				}

				switch (alt83) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1096:44: blockStatement
					{
					pushFollow(FOLLOW_blockStatement_in_constructorBody4166);
					blockStatement();
					state._fsp--;
					if (state.failed) return retval;
					}
					break;

				default :
					break loop83;
				}
			}

			match(input,114,FOLLOW_114_in_constructorBody4169); if (state.failed) return retval;
			if ( state.backtracking==0 ) {
			            if (isOutestCompStat) {
			                String b = input.toString(retval.start,input.LT(-1));
			                // the body is everything between { and }, but for
			                // compatibility reasons the last ws's get stripped off
			                // and a newline is added
			                b = b.substring(0, b.length() - 1).trim();
			                setBody(b.substring(1) + '\n');
			                setIsInCompoundStatement(false);
			            }
			        }
			}

			retval.stop = input.LT(-1);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 65, constructorBody_StartIndex); }

		}
		return retval;
	}
	// $ANTLR end "constructorBody"



	// $ANTLR start "explicitConstructorInvocation"
	// org/argouml/language/java/reveng/Java.g:1110:1: explicitConstructorInvocation : ( ( nonWildcardTypeArguments )? ( 'this' | 'super' ) arguments ';' | primary '.' ( nonWildcardTypeArguments )? 'super' arguments ';' );
	public final void explicitConstructorInvocation() throws RecognitionException {
		int explicitConstructorInvocation_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 66) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1111:5: ( ( nonWildcardTypeArguments )? ( 'this' | 'super' ) arguments ';' | primary '.' ( nonWildcardTypeArguments )? 'super' arguments ';' )
			int alt86=2;
			switch ( input.LA(1) ) {
			case 51:
				{
				alt86=1;
				}
				break;
			case 101:
				{
				int LA86_2 = input.LA(2);
				if ( (LA86_2==34) ) {
					int LA86_15 = input.LA(3);
					if ( (synpred118_Java()) ) {
						alt86=1;
					}
					else if ( (true) ) {
						alt86=2;
					}

				}
				else if ( (LA86_2==45||LA86_2==57) ) {
					alt86=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 86, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case CharacterLiteral:
			case DecimalLiteral:
			case FloatingPointLiteral:
			case HexLiteral:
			case Identifier:
			case OctalLiteral:
			case StringLiteral:
			case 34:
			case 62:
			case 64:
			case 67:
			case 72:
			case 75:
			case 78:
			case 84:
			case 86:
			case 88:
			case 89:
			case 95:
			case 105:
			case 107:
				{
				alt86=2;
				}
				break;
			case 98:
				{
				int LA86_4 = input.LA(2);
				if ( (LA86_4==34) ) {
					int LA86_18 = input.LA(3);
					if ( (synpred118_Java()) ) {
						alt86=1;
					}
					else if ( (true) ) {
						alt86=2;
					}

				}
				else if ( (LA86_4==45) ) {
					alt86=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 86, 4, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 86, 0, input);
				throw nvae;
			}
			switch (alt86) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1111:9: ( nonWildcardTypeArguments )? ( 'this' | 'super' ) arguments ';'
					{
					// org/argouml/language/java/reveng/Java.g:1111:9: ( nonWildcardTypeArguments )?
					int alt84=2;
					int LA84_0 = input.LA(1);
					if ( (LA84_0==51) ) {
						alt84=1;
					}
					switch (alt84) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1111:10: nonWildcardTypeArguments
							{
							pushFollow(FOLLOW_nonWildcardTypeArguments_in_explicitConstructorInvocation4199);
							nonWildcardTypeArguments();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					if ( input.LA(1)==98||input.LA(1)==101 ) {
						input.consume();
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_arguments_in_explicitConstructorInvocation4211);
					arguments();
					state._fsp--;
					if (state.failed) return;
					match(input,50,FOLLOW_50_in_explicitConstructorInvocation4213); if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1112:9: primary '.' ( nonWildcardTypeArguments )? 'super' arguments ';'
					{
					pushFollow(FOLLOW_primary_in_explicitConstructorInvocation4223);
					primary();
					state._fsp--;
					if (state.failed) return;
					match(input,45,FOLLOW_45_in_explicitConstructorInvocation4225); if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1112:21: ( nonWildcardTypeArguments )?
					int alt85=2;
					int LA85_0 = input.LA(1);
					if ( (LA85_0==51) ) {
						alt85=1;
					}
					switch (alt85) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1112:21: nonWildcardTypeArguments
							{
							pushFollow(FOLLOW_nonWildcardTypeArguments_in_explicitConstructorInvocation4227);
							nonWildcardTypeArguments();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					match(input,98,FOLLOW_98_in_explicitConstructorInvocation4230); if (state.failed) return;
					pushFollow(FOLLOW_arguments_in_explicitConstructorInvocation4232);
					arguments();
					state._fsp--;
					if (state.failed) return;
					match(input,50,FOLLOW_50_in_explicitConstructorInvocation4234); if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 66, explicitConstructorInvocation_StartIndex); }

		}
	}
	// $ANTLR end "explicitConstructorInvocation"


	public static class qualifiedName_return extends ParserRuleReturnScope {
	};


	// $ANTLR start "qualifiedName"
	// org/argouml/language/java/reveng/Java.g:1116:1: qualifiedName : Identifier ( '.' Identifier )* ;
	public final JavaParser.qualifiedName_return qualifiedName() throws RecognitionException {
		JavaParser.qualifiedName_return retval = new JavaParser.qualifiedName_return();
		retval.start = input.LT(1);
		int qualifiedName_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 67) ) { return retval; }

			// org/argouml/language/java/reveng/Java.g:1117:5: ( Identifier ( '.' Identifier )* )
			// org/argouml/language/java/reveng/Java.g:1117:9: Identifier ( '.' Identifier )*
			{
			match(input,Identifier,FOLLOW_Identifier_in_qualifiedName4254); if (state.failed) return retval;
			// org/argouml/language/java/reveng/Java.g:1117:20: ( '.' Identifier )*
			loop87:
			while (true) {
				int alt87=2;
				int LA87_0 = input.LA(1);
				if ( (LA87_0==45) ) {
					int LA87_2 = input.LA(2);
					if ( (LA87_2==Identifier) ) {
						alt87=1;
					}

				}

				switch (alt87) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1117:21: '.' Identifier
					{
					match(input,45,FOLLOW_45_in_qualifiedName4257); if (state.failed) return retval;
					match(input,Identifier,FOLLOW_Identifier_in_qualifiedName4259); if (state.failed) return retval;
					}
					break;

				default :
					break loop87;
				}
			}

			}

			retval.stop = input.LT(-1);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 67, qualifiedName_StartIndex); }

		}
		return retval;
	}
	// $ANTLR end "qualifiedName"



	// $ANTLR start "literal"
	// org/argouml/language/java/reveng/Java.g:1120:1: literal : ( integerLiteral | FloatingPointLiteral | CharacterLiteral | StringLiteral | booleanLiteral | 'null' );
	public final void literal() throws RecognitionException {
		int literal_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 68) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1121:5: ( integerLiteral | FloatingPointLiteral | CharacterLiteral | StringLiteral | booleanLiteral | 'null' )
			int alt88=6;
			switch ( input.LA(1) ) {
			case DecimalLiteral:
			case HexLiteral:
			case OctalLiteral:
				{
				alt88=1;
				}
				break;
			case FloatingPointLiteral:
				{
				alt88=2;
				}
				break;
			case CharacterLiteral:
				{
				alt88=3;
				}
				break;
			case StringLiteral:
				{
				alt88=4;
				}
				break;
			case 75:
			case 105:
				{
				alt88=5;
				}
				break;
			case 89:
				{
				alt88=6;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 88, 0, input);
				throw nvae;
			}
			switch (alt88) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1121:9: integerLiteral
					{
					pushFollow(FOLLOW_integerLiteral_in_literal4285);
					integerLiteral();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1122:9: FloatingPointLiteral
					{
					match(input,FloatingPointLiteral,FOLLOW_FloatingPointLiteral_in_literal4295); if (state.failed) return;
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:1123:9: CharacterLiteral
					{
					match(input,CharacterLiteral,FOLLOW_CharacterLiteral_in_literal4305); if (state.failed) return;
					}
					break;
				case 4 :
					// org/argouml/language/java/reveng/Java.g:1124:9: StringLiteral
					{
					match(input,StringLiteral,FOLLOW_StringLiteral_in_literal4315); if (state.failed) return;
					}
					break;
				case 5 :
					// org/argouml/language/java/reveng/Java.g:1125:9: booleanLiteral
					{
					pushFollow(FOLLOW_booleanLiteral_in_literal4325);
					booleanLiteral();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 6 :
					// org/argouml/language/java/reveng/Java.g:1126:9: 'null'
					{
					match(input,89,FOLLOW_89_in_literal4335); if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 68, literal_StartIndex); }

		}
	}
	// $ANTLR end "literal"



	// $ANTLR start "integerLiteral"
	// org/argouml/language/java/reveng/Java.g:1129:1: integerLiteral : ( HexLiteral | OctalLiteral | DecimalLiteral );
	public final void integerLiteral() throws RecognitionException {
		int integerLiteral_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 69) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1130:5: ( HexLiteral | OctalLiteral | DecimalLiteral )
			// org/argouml/language/java/reveng/Java.g:
			{
			if ( input.LA(1)==DecimalLiteral||input.LA(1)==HexLiteral||input.LA(1)==OctalLiteral ) {
				input.consume();
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 69, integerLiteral_StartIndex); }

		}
	}
	// $ANTLR end "integerLiteral"



	// $ANTLR start "booleanLiteral"
	// org/argouml/language/java/reveng/Java.g:1135:1: booleanLiteral : ( 'true' | 'false' );
	public final void booleanLiteral() throws RecognitionException {
		int booleanLiteral_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 70) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1136:5: ( 'true' | 'false' )
			// org/argouml/language/java/reveng/Java.g:
			{
			if ( input.LA(1)==75||input.LA(1)==105 ) {
				input.consume();
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 70, booleanLiteral_StartIndex); }

		}
	}
	// $ANTLR end "booleanLiteral"



	// $ANTLR start "annotations"
	// org/argouml/language/java/reveng/Java.g:1142:1: annotations : ( annotation )+ ;
	public final void annotations() throws RecognitionException {
		int annotations_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 71) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1143:5: ( ( annotation )+ )
			// org/argouml/language/java/reveng/Java.g:1143:9: ( annotation )+
			{
			// org/argouml/language/java/reveng/Java.g:1143:9: ( annotation )+
			int cnt89=0;
			loop89:
			while (true) {
				int alt89=2;
				int LA89_0 = input.LA(1);
				if ( (LA89_0==56) ) {
					int LA89_2 = input.LA(2);
					if ( (LA89_2==Identifier) ) {
						int LA89_16 = input.LA(3);
						if ( (synpred129_Java()) ) {
							alt89=1;
						}

					}

				}

				switch (alt89) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1143:9: annotation
					{
					pushFollow(FOLLOW_annotation_in_annotations4424);
					annotation();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					if ( cnt89 >= 1 ) break loop89;
					if (state.backtracking>0) {state.failed=true; return;}
					EarlyExitException eee = new EarlyExitException(89, input);
					throw eee;
				}
				cnt89++;
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 71, annotations_StartIndex); }

		}
	}
	// $ANTLR end "annotations"



	// $ANTLR start "annotation"
	// org/argouml/language/java/reveng/Java.g:1146:1: annotation : '@' an= annotationName ( '(' ( elementValuePairs | elementValue )? ')' )? ;
	public final void annotation() throws RecognitionException {
		int annotation_StartIndex = input.index();

		ParserRuleReturnScope an =null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 72) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1147:5: ( '@' an= annotationName ( '(' ( elementValuePairs | elementValue )? ')' )? )
			// org/argouml/language/java/reveng/Java.g:1147:9: '@' an= annotationName ( '(' ( elementValuePairs | elementValue )? ')' )?
			{
			match(input,56,FOLLOW_56_in_annotation4444); if (state.failed) return;
			pushFollow(FOLLOW_annotationName_in_annotation4448);
			an=annotationName();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {
			            getModeller().addAnnotation((an!=null?input.toString(an.start,an.stop):null));
			        }
			// org/argouml/language/java/reveng/Java.g:1151:9: ( '(' ( elementValuePairs | elementValue )? ')' )?
			int alt91=2;
			int LA91_0 = input.LA(1);
			if ( (LA91_0==34) ) {
				alt91=1;
			}
			switch (alt91) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1151:11: '(' ( elementValuePairs | elementValue )? ')'
					{
					match(input,34,FOLLOW_34_in_annotation4470); if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1151:15: ( elementValuePairs | elementValue )?
					int alt90=3;
					int LA90_0 = input.LA(1);
					if ( (LA90_0==Identifier) ) {
						int LA90_1 = input.LA(2);
						if ( (LA90_1==52) ) {
							alt90=1;
						}
						else if ( ((LA90_1 >= 28 && LA90_1 <= 29)||(LA90_1 >= 31 && LA90_1 <= 32)||(LA90_1 >= 34 && LA90_1 <= 36)||(LA90_1 >= 38 && LA90_1 <= 39)||(LA90_1 >= 42 && LA90_1 <= 43)||LA90_1==45||LA90_1==47||LA90_1==51||(LA90_1 >= 53 && LA90_1 <= 55)||LA90_1==57||LA90_1==59||LA90_1==83||LA90_1==111||LA90_1==113) ) {
							alt90=2;
						}
					}
					else if ( ((LA90_0 >= CharacterLiteral && LA90_0 <= DecimalLiteral)||LA90_0==FloatingPointLiteral||LA90_0==HexLiteral||(LA90_0 >= OctalLiteral && LA90_0 <= StringLiteral)||LA90_0==27||LA90_0==34||(LA90_0 >= 38 && LA90_0 <= 39)||(LA90_0 >= 42 && LA90_0 <= 43)||LA90_0==56||LA90_0==62||LA90_0==64||LA90_0==67||LA90_0==72||LA90_0==75||LA90_0==78||LA90_0==84||LA90_0==86||(LA90_0 >= 88 && LA90_0 <= 89)||LA90_0==95||LA90_0==98||LA90_0==101||LA90_0==105||LA90_0==107||LA90_0==110||LA90_0==115) ) {
						alt90=2;
					}
					switch (alt90) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1151:17: elementValuePairs
							{
							pushFollow(FOLLOW_elementValuePairs_in_annotation4474);
							elementValuePairs();
							state._fsp--;
							if (state.failed) return;
							}
							break;
						case 2 :
							// org/argouml/language/java/reveng/Java.g:1151:37: elementValue
							{
							pushFollow(FOLLOW_elementValue_in_annotation4478);
							elementValue();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					match(input,35,FOLLOW_35_in_annotation4483); if (state.failed) return;
					}
					break;

			}

			if ( state.backtracking==0 ) {
			            getModeller().endAnnotation();
			        }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 72, annotation_StartIndex); }

		}
	}
	// $ANTLR end "annotation"


	public static class annotationName_return extends ParserRuleReturnScope {
	};


	// $ANTLR start "annotationName"
	// org/argouml/language/java/reveng/Java.g:1157:1: annotationName : Identifier ( '.' Identifier )* ;
	public final JavaParser.annotationName_return annotationName() throws RecognitionException {
		JavaParser.annotationName_return retval = new JavaParser.annotationName_return();
		retval.start = input.LT(1);
		int annotationName_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 73) ) { return retval; }

			// org/argouml/language/java/reveng/Java.g:1158:5: ( Identifier ( '.' Identifier )* )
			// org/argouml/language/java/reveng/Java.g:1158:7: Identifier ( '.' Identifier )*
			{
			match(input,Identifier,FOLLOW_Identifier_in_annotationName4513); if (state.failed) return retval;
			// org/argouml/language/java/reveng/Java.g:1158:18: ( '.' Identifier )*
			loop92:
			while (true) {
				int alt92=2;
				int LA92_0 = input.LA(1);
				if ( (LA92_0==45) ) {
					alt92=1;
				}

				switch (alt92) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1158:19: '.' Identifier
					{
					match(input,45,FOLLOW_45_in_annotationName4516); if (state.failed) return retval;
					match(input,Identifier,FOLLOW_Identifier_in_annotationName4518); if (state.failed) return retval;
					}
					break;

				default :
					break loop92;
				}
			}

			}

			retval.stop = input.LT(-1);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 73, annotationName_StartIndex); }

		}
		return retval;
	}
	// $ANTLR end "annotationName"



	// $ANTLR start "elementValuePairs"
	// org/argouml/language/java/reveng/Java.g:1161:1: elementValuePairs : elementValuePair ( ',' elementValuePair )* ;
	public final void elementValuePairs() throws RecognitionException {
		int elementValuePairs_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 74) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1162:5: ( elementValuePair ( ',' elementValuePair )* )
			// org/argouml/language/java/reveng/Java.g:1162:9: elementValuePair ( ',' elementValuePair )*
			{
			pushFollow(FOLLOW_elementValuePair_in_elementValuePairs4539);
			elementValuePair();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1162:26: ( ',' elementValuePair )*
			loop93:
			while (true) {
				int alt93=2;
				int LA93_0 = input.LA(1);
				if ( (LA93_0==41) ) {
					alt93=1;
				}

				switch (alt93) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1162:27: ',' elementValuePair
					{
					match(input,41,FOLLOW_41_in_elementValuePairs4542); if (state.failed) return;
					pushFollow(FOLLOW_elementValuePair_in_elementValuePairs4544);
					elementValuePair();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop93;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 74, elementValuePairs_StartIndex); }

		}
	}
	// $ANTLR end "elementValuePairs"



	// $ANTLR start "elementValuePair"
	// org/argouml/language/java/reveng/Java.g:1165:1: elementValuePair : Identifier '=' elementValue ;
	public final void elementValuePair() throws RecognitionException {
		int elementValuePair_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 75) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1166:5: ( Identifier '=' elementValue )
			// org/argouml/language/java/reveng/Java.g:1166:9: Identifier '=' elementValue
			{
			match(input,Identifier,FOLLOW_Identifier_in_elementValuePair4565); if (state.failed) return;
			match(input,52,FOLLOW_52_in_elementValuePair4567); if (state.failed) return;
			pushFollow(FOLLOW_elementValue_in_elementValuePair4569);
			elementValue();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 75, elementValuePair_StartIndex); }

		}
	}
	// $ANTLR end "elementValuePair"



	// $ANTLR start "elementValue"
	// org/argouml/language/java/reveng/Java.g:1169:1: elementValue : ( conditionalExpression | annotation | elementValueArrayInitializer );
	public final void elementValue() throws RecognitionException {
		int elementValue_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 76) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1170:5: ( conditionalExpression | annotation | elementValueArrayInitializer )
			int alt94=3;
			switch ( input.LA(1) ) {
			case CharacterLiteral:
			case DecimalLiteral:
			case FloatingPointLiteral:
			case HexLiteral:
			case Identifier:
			case OctalLiteral:
			case StringLiteral:
			case 27:
			case 34:
			case 38:
			case 39:
			case 42:
			case 43:
			case 62:
			case 64:
			case 67:
			case 72:
			case 75:
			case 78:
			case 84:
			case 86:
			case 88:
			case 89:
			case 95:
			case 98:
			case 101:
			case 105:
			case 107:
			case 115:
				{
				alt94=1;
				}
				break;
			case 56:
				{
				alt94=2;
				}
				break;
			case 110:
				{
				alt94=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 94, 0, input);
				throw nvae;
			}
			switch (alt94) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1170:9: conditionalExpression
					{
					pushFollow(FOLLOW_conditionalExpression_in_elementValue4592);
					conditionalExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1171:9: annotation
					{
					pushFollow(FOLLOW_annotation_in_elementValue4602);
					annotation();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:1172:9: elementValueArrayInitializer
					{
					pushFollow(FOLLOW_elementValueArrayInitializer_in_elementValue4612);
					elementValueArrayInitializer();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 76, elementValue_StartIndex); }

		}
	}
	// $ANTLR end "elementValue"



	// $ANTLR start "elementValueArrayInitializer"
	// org/argouml/language/java/reveng/Java.g:1175:1: elementValueArrayInitializer : '{' ( elementValue ( ',' elementValue )* )? ( ',' )? '}' ;
	public final void elementValueArrayInitializer() throws RecognitionException {
		int elementValueArrayInitializer_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 77) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1176:5: ( '{' ( elementValue ( ',' elementValue )* )? ( ',' )? '}' )
			// org/argouml/language/java/reveng/Java.g:1176:9: '{' ( elementValue ( ',' elementValue )* )? ( ',' )? '}'
			{
			match(input,110,FOLLOW_110_in_elementValueArrayInitializer4631); if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1176:13: ( elementValue ( ',' elementValue )* )?
			int alt96=2;
			int LA96_0 = input.LA(1);
			if ( ((LA96_0 >= CharacterLiteral && LA96_0 <= DecimalLiteral)||LA96_0==FloatingPointLiteral||(LA96_0 >= HexLiteral && LA96_0 <= Identifier)||(LA96_0 >= OctalLiteral && LA96_0 <= StringLiteral)||LA96_0==27||LA96_0==34||(LA96_0 >= 38 && LA96_0 <= 39)||(LA96_0 >= 42 && LA96_0 <= 43)||LA96_0==56||LA96_0==62||LA96_0==64||LA96_0==67||LA96_0==72||LA96_0==75||LA96_0==78||LA96_0==84||LA96_0==86||(LA96_0 >= 88 && LA96_0 <= 89)||LA96_0==95||LA96_0==98||LA96_0==101||LA96_0==105||LA96_0==107||LA96_0==110||LA96_0==115) ) {
				alt96=1;
			}
			switch (alt96) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1176:14: elementValue ( ',' elementValue )*
					{
					pushFollow(FOLLOW_elementValue_in_elementValueArrayInitializer4634);
					elementValue();
					state._fsp--;
					if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1176:27: ( ',' elementValue )*
					loop95:
					while (true) {
						int alt95=2;
						int LA95_0 = input.LA(1);
						if ( (LA95_0==41) ) {
							int LA95_1 = input.LA(2);
							if ( ((LA95_1 >= CharacterLiteral && LA95_1 <= DecimalLiteral)||LA95_1==FloatingPointLiteral||(LA95_1 >= HexLiteral && LA95_1 <= Identifier)||(LA95_1 >= OctalLiteral && LA95_1 <= StringLiteral)||LA95_1==27||LA95_1==34||(LA95_1 >= 38 && LA95_1 <= 39)||(LA95_1 >= 42 && LA95_1 <= 43)||LA95_1==56||LA95_1==62||LA95_1==64||LA95_1==67||LA95_1==72||LA95_1==75||LA95_1==78||LA95_1==84||LA95_1==86||(LA95_1 >= 88 && LA95_1 <= 89)||LA95_1==95||LA95_1==98||LA95_1==101||LA95_1==105||LA95_1==107||LA95_1==110||LA95_1==115) ) {
								alt95=1;
							}

						}

						switch (alt95) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1176:28: ',' elementValue
							{
							match(input,41,FOLLOW_41_in_elementValueArrayInitializer4637); if (state.failed) return;
							pushFollow(FOLLOW_elementValue_in_elementValueArrayInitializer4639);
							elementValue();
							state._fsp--;
							if (state.failed) return;
							}
							break;

						default :
							break loop95;
						}
					}

					}
					break;

			}

			// org/argouml/language/java/reveng/Java.g:1176:49: ( ',' )?
			int alt97=2;
			int LA97_0 = input.LA(1);
			if ( (LA97_0==41) ) {
				alt97=1;
			}
			switch (alt97) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1176:50: ','
					{
					match(input,41,FOLLOW_41_in_elementValueArrayInitializer4646); if (state.failed) return;
					}
					break;

			}

			match(input,114,FOLLOW_114_in_elementValueArrayInitializer4650); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 77, elementValueArrayInitializer_StartIndex); }

		}
	}
	// $ANTLR end "elementValueArrayInitializer"



	// $ANTLR start "annotationTypeDeclaration"
	// org/argouml/language/java/reveng/Java.g:1179:1: annotationTypeDeclaration[String javadoc, short modifiers] : '@' 'interface' name= Identifier annotationTypeBody ;
	public final void annotationTypeDeclaration(String javadoc, short modifiers) throws RecognitionException {
		int annotationTypeDeclaration_StartIndex = input.index();

		Token name=null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 78) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1180:5: ( '@' 'interface' name= Identifier annotationTypeBody )
			// org/argouml/language/java/reveng/Java.g:1180:9: '@' 'interface' name= Identifier annotationTypeBody
			{
			match(input,56,FOLLOW_56_in_annotationTypeDeclaration4670); if (state.failed) return;
			match(input,85,FOLLOW_85_in_annotationTypeDeclaration4672); if (state.failed) return;
			name=(Token)match(input,Identifier,FOLLOW_Identifier_in_annotationTypeDeclaration4676); if (state.failed) return;
			if ( state.backtracking==0 ) {
			            getModeller().addAnnotationDefinition(name.getText(), modifiers,
			                javadoc, (parserMode == MODE_IMPORT_PASS2));
			        }
			pushFollow(FOLLOW_annotationTypeBody_in_annotationTypeDeclaration4696);
			annotationTypeBody();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 78, annotationTypeDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "annotationTypeDeclaration"



	// $ANTLR start "annotationTypeBody"
	// org/argouml/language/java/reveng/Java.g:1189:1: annotationTypeBody : '{' ( annotationTypeElementDeclaration )* '}' ;
	public final void annotationTypeBody() throws RecognitionException {
		int annotationTypeBody_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 79) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1190:5: ( '{' ( annotationTypeElementDeclaration )* '}' )
			// org/argouml/language/java/reveng/Java.g:1190:9: '{' ( annotationTypeElementDeclaration )* '}'
			{
			match(input,110,FOLLOW_110_in_annotationTypeBody4724); if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1190:13: ( annotationTypeElementDeclaration )*
			loop98:
			while (true) {
				int alt98=2;
				int LA98_0 = input.LA(1);
				if ( (LA98_0==ENUM||LA98_0==Identifier||LA98_0==56||(LA98_0 >= 61 && LA98_0 <= 62)||LA98_0==64||(LA98_0 >= 67 && LA98_0 <= 68)||LA98_0==72||LA98_0==76||LA98_0==78||(LA98_0 >= 84 && LA98_0 <= 87)||(LA98_0 >= 91 && LA98_0 <= 93)||(LA98_0 >= 95 && LA98_0 <= 97)||LA98_0==100||LA98_0==104||LA98_0==108) ) {
					alt98=1;
				}

				switch (alt98) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1190:14: annotationTypeElementDeclaration
					{
					pushFollow(FOLLOW_annotationTypeElementDeclaration_in_annotationTypeBody4727);
					annotationTypeElementDeclaration();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop98;
				}
			}

			match(input,114,FOLLOW_114_in_annotationTypeBody4731); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 79, annotationTypeBody_StartIndex); }

		}
	}
	// $ANTLR end "annotationTypeBody"



	// $ANTLR start "annotationTypeElementDeclaration"
	// org/argouml/language/java/reveng/Java.g:1193:1: annotationTypeElementDeclaration : modifiers annotationTypeElementRest ;
	public final void annotationTypeElementDeclaration() throws RecognitionException {
		int annotationTypeElementDeclaration_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 80) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1194:5: ( modifiers annotationTypeElementRest )
			// org/argouml/language/java/reveng/Java.g:1194:9: modifiers annotationTypeElementRest
			{
			pushFollow(FOLLOW_modifiers_in_annotationTypeElementDeclaration4750);
			modifiers();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_annotationTypeElementRest_in_annotationTypeElementDeclaration4752);
			annotationTypeElementRest();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 80, annotationTypeElementDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "annotationTypeElementDeclaration"



	// $ANTLR start "annotationTypeElementRest"
	// org/argouml/language/java/reveng/Java.g:1197:1: annotationTypeElementRest : ( type annotationMethodOrConstantRest ';' | normalClassDeclaration[null, (short)0] ( ';' )? | normalInterfaceDeclaration[null, (short)0] ( ';' )? | enumDeclaration[null, (short)0] ( ';' )? | annotationTypeDeclaration[null, (short)0] ( ';' )? );
	public final void annotationTypeElementRest() throws RecognitionException {
		int annotationTypeElementRest_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 81) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1198:5: ( type annotationMethodOrConstantRest ';' | normalClassDeclaration[null, (short)0] ( ';' )? | normalInterfaceDeclaration[null, (short)0] ( ';' )? | enumDeclaration[null, (short)0] ( ';' )? | annotationTypeDeclaration[null, (short)0] ( ';' )? )
			int alt103=5;
			switch ( input.LA(1) ) {
			case Identifier:
			case 62:
			case 64:
			case 67:
			case 72:
			case 78:
			case 84:
			case 86:
			case 95:
				{
				alt103=1;
				}
				break;
			case 68:
				{
				alt103=2;
				}
				break;
			case 85:
				{
				alt103=3;
				}
				break;
			case ENUM:
				{
				alt103=4;
				}
				break;
			case 56:
				{
				alt103=5;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 103, 0, input);
				throw nvae;
			}
			switch (alt103) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1198:9: type annotationMethodOrConstantRest ';'
					{
					pushFollow(FOLLOW_type_in_annotationTypeElementRest4771);
					type();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_annotationMethodOrConstantRest_in_annotationTypeElementRest4773);
					annotationMethodOrConstantRest();
					state._fsp--;
					if (state.failed) return;
					match(input,50,FOLLOW_50_in_annotationTypeElementRest4775); if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1199:9: normalClassDeclaration[null, (short)0] ( ';' )?
					{
					pushFollow(FOLLOW_normalClassDeclaration_in_annotationTypeElementRest4785);
					normalClassDeclaration(null, (short)0);
					state._fsp--;
					if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1199:48: ( ';' )?
					int alt99=2;
					int LA99_0 = input.LA(1);
					if ( (LA99_0==50) ) {
						alt99=1;
					}
					switch (alt99) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1199:48: ';'
							{
							match(input,50,FOLLOW_50_in_annotationTypeElementRest4788); if (state.failed) return;
							}
							break;

					}

					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:1200:9: normalInterfaceDeclaration[null, (short)0] ( ';' )?
					{
					pushFollow(FOLLOW_normalInterfaceDeclaration_in_annotationTypeElementRest4799);
					normalInterfaceDeclaration(null, (short)0);
					state._fsp--;
					if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1200:52: ( ';' )?
					int alt100=2;
					int LA100_0 = input.LA(1);
					if ( (LA100_0==50) ) {
						alt100=1;
					}
					switch (alt100) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1200:52: ';'
							{
							match(input,50,FOLLOW_50_in_annotationTypeElementRest4802); if (state.failed) return;
							}
							break;

					}

					}
					break;
				case 4 :
					// org/argouml/language/java/reveng/Java.g:1201:9: enumDeclaration[null, (short)0] ( ';' )?
					{
					pushFollow(FOLLOW_enumDeclaration_in_annotationTypeElementRest4813);
					enumDeclaration(null, (short)0);
					state._fsp--;
					if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1201:41: ( ';' )?
					int alt101=2;
					int LA101_0 = input.LA(1);
					if ( (LA101_0==50) ) {
						alt101=1;
					}
					switch (alt101) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1201:41: ';'
							{
							match(input,50,FOLLOW_50_in_annotationTypeElementRest4816); if (state.failed) return;
							}
							break;

					}

					}
					break;
				case 5 :
					// org/argouml/language/java/reveng/Java.g:1202:9: annotationTypeDeclaration[null, (short)0] ( ';' )?
					{
					pushFollow(FOLLOW_annotationTypeDeclaration_in_annotationTypeElementRest4827);
					annotationTypeDeclaration(null, (short)0);
					state._fsp--;
					if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1202:51: ( ';' )?
					int alt102=2;
					int LA102_0 = input.LA(1);
					if ( (LA102_0==50) ) {
						alt102=1;
					}
					switch (alt102) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1202:51: ';'
							{
							match(input,50,FOLLOW_50_in_annotationTypeElementRest4830); if (state.failed) return;
							}
							break;

					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 81, annotationTypeElementRest_StartIndex); }

		}
	}
	// $ANTLR end "annotationTypeElementRest"



	// $ANTLR start "annotationMethodOrConstantRest"
	// org/argouml/language/java/reveng/Java.g:1205:1: annotationMethodOrConstantRest : ( annotationMethodRest | annotationConstantRest );
	public final void annotationMethodOrConstantRest() throws RecognitionException {
		int annotationMethodOrConstantRest_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 82) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1206:5: ( annotationMethodRest | annotationConstantRest )
			int alt104=2;
			int LA104_0 = input.LA(1);
			if ( (LA104_0==Identifier) ) {
				int LA104_1 = input.LA(2);
				if ( (LA104_1==34) ) {
					alt104=1;
				}
				else if ( (LA104_1==41||LA104_1==50||LA104_1==52||LA104_1==57) ) {
					alt104=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 104, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 104, 0, input);
				throw nvae;
			}

			switch (alt104) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1206:9: annotationMethodRest
					{
					pushFollow(FOLLOW_annotationMethodRest_in_annotationMethodOrConstantRest4850);
					annotationMethodRest();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1207:9: annotationConstantRest
					{
					pushFollow(FOLLOW_annotationConstantRest_in_annotationMethodOrConstantRest4860);
					annotationConstantRest();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 82, annotationMethodOrConstantRest_StartIndex); }

		}
	}
	// $ANTLR end "annotationMethodOrConstantRest"



	// $ANTLR start "annotationMethodRest"
	// org/argouml/language/java/reveng/Java.g:1210:1: annotationMethodRest : Identifier '(' ')' ( defaultValue )? ;
	public final void annotationMethodRest() throws RecognitionException {
		int annotationMethodRest_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 83) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1211:5: ( Identifier '(' ')' ( defaultValue )? )
			// org/argouml/language/java/reveng/Java.g:1211:9: Identifier '(' ')' ( defaultValue )?
			{
			match(input,Identifier,FOLLOW_Identifier_in_annotationMethodRest4883); if (state.failed) return;
			match(input,34,FOLLOW_34_in_annotationMethodRest4885); if (state.failed) return;
			match(input,35,FOLLOW_35_in_annotationMethodRest4887); if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1211:28: ( defaultValue )?
			int alt105=2;
			int LA105_0 = input.LA(1);
			if ( (LA105_0==70) ) {
				alt105=1;
			}
			switch (alt105) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1211:29: defaultValue
					{
					pushFollow(FOLLOW_defaultValue_in_annotationMethodRest4890);
					defaultValue();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 83, annotationMethodRest_StartIndex); }

		}
	}
	// $ANTLR end "annotationMethodRest"



	// $ANTLR start "annotationConstantRest"
	// org/argouml/language/java/reveng/Java.g:1214:1: annotationConstantRest : variableDeclarators[\"\", (short)0, null] ;
	public final void annotationConstantRest() throws RecognitionException {
		int annotationConstantRest_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 84) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1215:5: ( variableDeclarators[\"\", (short)0, null] )
			// org/argouml/language/java/reveng/Java.g:1215:9: variableDeclarators[\"\", (short)0, null]
			{
			pushFollow(FOLLOW_variableDeclarators_in_annotationConstantRest4915);
			variableDeclarators("", (short)0, null);
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 84, annotationConstantRest_StartIndex); }

		}
	}
	// $ANTLR end "annotationConstantRest"



	// $ANTLR start "defaultValue"
	// org/argouml/language/java/reveng/Java.g:1218:1: defaultValue : 'default' elementValue ;
	public final void defaultValue() throws RecognitionException {
		int defaultValue_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 85) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1219:5: ( 'default' elementValue )
			// org/argouml/language/java/reveng/Java.g:1219:9: 'default' elementValue
			{
			match(input,70,FOLLOW_70_in_defaultValue4939); if (state.failed) return;
			pushFollow(FOLLOW_elementValue_in_defaultValue4941);
			elementValue();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 85, defaultValue_StartIndex); }

		}
	}
	// $ANTLR end "defaultValue"


	public static class block_return extends ParserRuleReturnScope {
	};


	// $ANTLR start "block"
	// org/argouml/language/java/reveng/Java.g:1224:1: block : '{' ( blockStatement )* '}' ;
	public final JavaParser.block_return block() throws RecognitionException {
		JavaParser.block_return retval = new JavaParser.block_return();
		retval.start = input.LT(1);
		int block_StartIndex = input.index();


		        boolean isOutestCompStat = !isInCompoundStatement();
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 86) ) { return retval; }

			// org/argouml/language/java/reveng/Java.g:1228:5: ( '{' ( blockStatement )* '}' )
			// org/argouml/language/java/reveng/Java.g:1228:9: '{' ( blockStatement )* '}'
			{
			if ( state.backtracking==0 ) {
			            if (isOutestCompStat) {
			                setIsInCompoundStatement(true);
			            }
			        }
			match(input,110,FOLLOW_110_in_block4980); if (state.failed) return retval;
			// org/argouml/language/java/reveng/Java.g:1233:13: ( blockStatement )*
			loop106:
			while (true) {
				int alt106=2;
				int LA106_0 = input.LA(1);
				if ( (LA106_0==ASSERT||(LA106_0 >= CharacterLiteral && LA106_0 <= DecimalLiteral)||LA106_0==ENUM||LA106_0==FloatingPointLiteral||(LA106_0 >= HexLiteral && LA106_0 <= Identifier)||(LA106_0 >= OctalLiteral && LA106_0 <= StringLiteral)||LA106_0==27||LA106_0==34||(LA106_0 >= 38 && LA106_0 <= 39)||(LA106_0 >= 42 && LA106_0 <= 43)||LA106_0==50||LA106_0==56||(LA106_0 >= 61 && LA106_0 <= 64)||(LA106_0 >= 67 && LA106_0 <= 69)||(LA106_0 >= 71 && LA106_0 <= 72)||(LA106_0 >= 75 && LA106_0 <= 76)||(LA106_0 >= 78 && LA106_0 <= 80)||(LA106_0 >= 84 && LA106_0 <= 86)||(LA106_0 >= 88 && LA106_0 <= 89)||(LA106_0 >= 91 && LA106_0 <= 102)||(LA106_0 >= 105 && LA106_0 <= 107)||(LA106_0 >= 109 && LA106_0 <= 110)||LA106_0==115) ) {
					alt106=1;
				}

				switch (alt106) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1233:13: blockStatement
					{
					pushFollow(FOLLOW_blockStatement_in_block4982);
					blockStatement();
					state._fsp--;
					if (state.failed) return retval;
					}
					break;

				default :
					break loop106;
				}
			}

			match(input,114,FOLLOW_114_in_block4985); if (state.failed) return retval;
			if ( state.backtracking==0 ) {
			            if (isOutestCompStat) {
			                String b = input.toString(retval.start,input.LT(-1));
			                // the body is everything between { and }, but for
			                // compatibility reasons the last ws's get stripped off
			                // and a newline is added
			                b = b.substring(0, b.length() - 1).trim();
			                setBody(b.substring(1) + '\n');
			                setIsInCompoundStatement(false);
			            }
			        }
			}

			retval.stop = input.LT(-1);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 86, block_StartIndex); }

		}
		return retval;
	}
	// $ANTLR end "block"



	// $ANTLR start "blockStatement"
	// org/argouml/language/java/reveng/Java.g:1247:1: blockStatement : ( localVariableDeclarationStatement | classOrInterfaceDeclaration | statement );
	public final void blockStatement() throws RecognitionException {
		int blockStatement_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 87) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1248:5: ( localVariableDeclarationStatement | classOrInterfaceDeclaration | statement )
			int alt107=3;
			alt107 = dfa107.predict(input);
			switch (alt107) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1248:9: localVariableDeclarationStatement
					{
					pushFollow(FOLLOW_localVariableDeclarationStatement_in_blockStatement5018);
					localVariableDeclarationStatement();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1249:9: classOrInterfaceDeclaration
					{
					pushFollow(FOLLOW_classOrInterfaceDeclaration_in_blockStatement5028);
					classOrInterfaceDeclaration();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:1250:9: statement
					{
					pushFollow(FOLLOW_statement_in_blockStatement5038);
					statement();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 87, blockStatement_StartIndex); }

		}
	}
	// $ANTLR end "blockStatement"



	// $ANTLR start "localVariableDeclarationStatement"
	// org/argouml/language/java/reveng/Java.g:1253:1: localVariableDeclarationStatement : localVariableDeclaration ';' ;
	public final void localVariableDeclarationStatement() throws RecognitionException {
		int localVariableDeclarationStatement_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 88) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1254:5: ( localVariableDeclaration ';' )
			// org/argouml/language/java/reveng/Java.g:1254:10: localVariableDeclaration ';'
			{
			pushFollow(FOLLOW_localVariableDeclaration_in_localVariableDeclarationStatement5062);
			localVariableDeclaration();
			state._fsp--;
			if (state.failed) return;
			match(input,50,FOLLOW_50_in_localVariableDeclarationStatement5064); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 88, localVariableDeclarationStatement_StartIndex); }

		}
	}
	// $ANTLR end "localVariableDeclarationStatement"



	// $ANTLR start "localVariableDeclaration"
	// org/argouml/language/java/reveng/Java.g:1257:1: localVariableDeclaration : variableModifiers t= type variableDeclarators[\"\", (short)0, null] ;
	public final void localVariableDeclaration() throws RecognitionException {
		int localVariableDeclaration_StartIndex = input.index();

		String t =null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 89) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1258:5: ( variableModifiers t= type variableDeclarators[\"\", (short)0, null] )
			// org/argouml/language/java/reveng/Java.g:1258:9: variableModifiers t= type variableDeclarators[\"\", (short)0, null]
			{
			pushFollow(FOLLOW_variableModifiers_in_localVariableDeclaration5083);
			variableModifiers();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_type_in_localVariableDeclaration5087);
			t=type();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {
			    		// simple dependency algorithm: if t is found in the model,
			    		// then build a dependency, otherwise ignore
			            if (parserMode == MODE_IMPORT_PASS2) {
			                getModeller().addClassifierDependency(t);
			            }
			    	}
			pushFollow(FOLLOW_variableDeclarators_in_localVariableDeclaration5101);
			variableDeclarators("", (short)0, null);
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 89, localVariableDeclaration_StartIndex); }

		}
	}
	// $ANTLR end "localVariableDeclaration"



	// $ANTLR start "variableModifiers"
	// org/argouml/language/java/reveng/Java.g:1269:1: variableModifiers returns [short mods = 0] : (m= variableModifier )* ;
	public final short variableModifiers() throws RecognitionException {
		short mods =  0;

		int variableModifiers_StartIndex = input.index();

		short m =0;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 90) ) { return mods; }

			// org/argouml/language/java/reveng/Java.g:1270:5: ( (m= variableModifier )* )
			// org/argouml/language/java/reveng/Java.g:1270:9: (m= variableModifier )*
			{
			// org/argouml/language/java/reveng/Java.g:1270:9: (m= variableModifier )*
			loop108:
			while (true) {
				int alt108=2;
				int LA108_0 = input.LA(1);
				if ( (LA108_0==56||LA108_0==76) ) {
					alt108=1;
				}

				switch (alt108) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1270:10: m= variableModifier
					{
					pushFollow(FOLLOW_variableModifier_in_variableModifiers5132);
					m=variableModifier();
					state._fsp--;
					if (state.failed) return mods;
					if ( state.backtracking==0 ) { mods |= m; }
					}
					break;

				default :
					break loop108;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 90, variableModifiers_StartIndex); }

		}
		return mods;
	}
	// $ANTLR end "variableModifiers"



	// $ANTLR start "statement"
	// org/argouml/language/java/reveng/Java.g:1273:1: statement : ( block | ASSERT expression ( ':' expression )? ';' | 'if' parExpression statement ( options {k=1; } : 'else' statement )? | 'for' '(' forControl ')' statement | 'while' parExpression statement | 'do' statement 'while' parExpression ';' | 'try' block ( catches 'finally' block | catches | 'finally' block ) | 'switch' parExpression '{' switchBlockStatementGroups '}' | 'synchronized' parExpression block | 'return' ( expression )? ';' | 'throw' expression ';' | 'break' ( Identifier )? ';' | 'continue' ( Identifier )? ';' | ';' | statementExpression ';' | Identifier ':' statement );
	public final void statement() throws RecognitionException {
		int statement_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 91) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1274:5: ( block | ASSERT expression ( ':' expression )? ';' | 'if' parExpression statement ( options {k=1; } : 'else' statement )? | 'for' '(' forControl ')' statement | 'while' parExpression statement | 'do' statement 'while' parExpression ';' | 'try' block ( catches 'finally' block | catches | 'finally' block ) | 'switch' parExpression '{' switchBlockStatementGroups '}' | 'synchronized' parExpression block | 'return' ( expression )? ';' | 'throw' expression ';' | 'break' ( Identifier )? ';' | 'continue' ( Identifier )? ';' | ';' | statementExpression ';' | Identifier ':' statement )
			int alt115=16;
			alt115 = dfa115.predict(input);
			switch (alt115) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1274:7: block
					{
					pushFollow(FOLLOW_block_in_statement5154);
					block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1275:9: ASSERT expression ( ':' expression )? ';'
					{
					match(input,ASSERT,FOLLOW_ASSERT_in_statement5164); if (state.failed) return;
					pushFollow(FOLLOW_expression_in_statement5166);
					expression();
					state._fsp--;
					if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1275:27: ( ':' expression )?
					int alt109=2;
					int LA109_0 = input.LA(1);
					if ( (LA109_0==49) ) {
						alt109=1;
					}
					switch (alt109) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1275:28: ':' expression
							{
							match(input,49,FOLLOW_49_in_statement5169); if (state.failed) return;
							pushFollow(FOLLOW_expression_in_statement5171);
							expression();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					match(input,50,FOLLOW_50_in_statement5175); if (state.failed) return;
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:1276:9: 'if' parExpression statement ( options {k=1; } : 'else' statement )?
					{
					match(input,80,FOLLOW_80_in_statement5185); if (state.failed) return;
					pushFollow(FOLLOW_parExpression_in_statement5187);
					parExpression();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_statement_in_statement5189);
					statement();
					state._fsp--;
					if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1276:38: ( options {k=1; } : 'else' statement )?
					int alt110=2;
					int LA110_0 = input.LA(1);
					if ( (LA110_0==73) ) {
						int LA110_1 = input.LA(2);
						if ( (synpred158_Java()) ) {
							alt110=1;
						}
					}
					switch (alt110) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1276:54: 'else' statement
							{
							match(input,73,FOLLOW_73_in_statement5199); if (state.failed) return;
							pushFollow(FOLLOW_statement_in_statement5201);
							statement();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					}
					break;
				case 4 :
					// org/argouml/language/java/reveng/Java.g:1277:9: 'for' '(' forControl ')' statement
					{
					match(input,79,FOLLOW_79_in_statement5213); if (state.failed) return;
					match(input,34,FOLLOW_34_in_statement5215); if (state.failed) return;
					pushFollow(FOLLOW_forControl_in_statement5217);
					forControl();
					state._fsp--;
					if (state.failed) return;
					match(input,35,FOLLOW_35_in_statement5219); if (state.failed) return;
					pushFollow(FOLLOW_statement_in_statement5221);
					statement();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// org/argouml/language/java/reveng/Java.g:1278:9: 'while' parExpression statement
					{
					match(input,109,FOLLOW_109_in_statement5231); if (state.failed) return;
					pushFollow(FOLLOW_parExpression_in_statement5233);
					parExpression();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_statement_in_statement5235);
					statement();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 6 :
					// org/argouml/language/java/reveng/Java.g:1279:9: 'do' statement 'while' parExpression ';'
					{
					match(input,71,FOLLOW_71_in_statement5245); if (state.failed) return;
					pushFollow(FOLLOW_statement_in_statement5247);
					statement();
					state._fsp--;
					if (state.failed) return;
					match(input,109,FOLLOW_109_in_statement5249); if (state.failed) return;
					pushFollow(FOLLOW_parExpression_in_statement5251);
					parExpression();
					state._fsp--;
					if (state.failed) return;
					match(input,50,FOLLOW_50_in_statement5253); if (state.failed) return;
					}
					break;
				case 7 :
					// org/argouml/language/java/reveng/Java.g:1280:9: 'try' block ( catches 'finally' block | catches | 'finally' block )
					{
					match(input,106,FOLLOW_106_in_statement5263); if (state.failed) return;
					pushFollow(FOLLOW_block_in_statement5265);
					block();
					state._fsp--;
					if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1281:9: ( catches 'finally' block | catches | 'finally' block )
					int alt111=3;
					int LA111_0 = input.LA(1);
					if ( (LA111_0==66) ) {
						int LA111_1 = input.LA(2);
						if ( (LA111_1==34) ) {
							int LA111_3 = input.LA(3);
							if ( (synpred163_Java()) ) {
								alt111=1;
							}
							else if ( (synpred164_Java()) ) {
								alt111=2;
							}

							else {
								if (state.backtracking>0) {state.failed=true; return;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 111, 3, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								input.consume();
								NoViableAltException nvae =
									new NoViableAltException("", 111, 1, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA111_0==77) ) {
						alt111=3;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						NoViableAltException nvae =
							new NoViableAltException("", 111, 0, input);
						throw nvae;
					}

					switch (alt111) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1281:11: catches 'finally' block
							{
							pushFollow(FOLLOW_catches_in_statement5277);
							catches();
							state._fsp--;
							if (state.failed) return;
							match(input,77,FOLLOW_77_in_statement5279); if (state.failed) return;
							pushFollow(FOLLOW_block_in_statement5281);
							block();
							state._fsp--;
							if (state.failed) return;
							}
							break;
						case 2 :
							// org/argouml/language/java/reveng/Java.g:1282:11: catches
							{
							pushFollow(FOLLOW_catches_in_statement5293);
							catches();
							state._fsp--;
							if (state.failed) return;
							}
							break;
						case 3 :
							// org/argouml/language/java/reveng/Java.g:1283:13: 'finally' block
							{
							match(input,77,FOLLOW_77_in_statement5307); if (state.failed) return;
							pushFollow(FOLLOW_block_in_statement5309);
							block();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					}
					break;
				case 8 :
					// org/argouml/language/java/reveng/Java.g:1285:9: 'switch' parExpression '{' switchBlockStatementGroups '}'
					{
					match(input,99,FOLLOW_99_in_statement5329); if (state.failed) return;
					pushFollow(FOLLOW_parExpression_in_statement5331);
					parExpression();
					state._fsp--;
					if (state.failed) return;
					match(input,110,FOLLOW_110_in_statement5333); if (state.failed) return;
					pushFollow(FOLLOW_switchBlockStatementGroups_in_statement5335);
					switchBlockStatementGroups();
					state._fsp--;
					if (state.failed) return;
					match(input,114,FOLLOW_114_in_statement5337); if (state.failed) return;
					}
					break;
				case 9 :
					// org/argouml/language/java/reveng/Java.g:1286:9: 'synchronized' parExpression block
					{
					match(input,100,FOLLOW_100_in_statement5347); if (state.failed) return;
					pushFollow(FOLLOW_parExpression_in_statement5349);
					parExpression();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_block_in_statement5351);
					block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 10 :
					// org/argouml/language/java/reveng/Java.g:1287:9: 'return' ( expression )? ';'
					{
					match(input,94,FOLLOW_94_in_statement5361); if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1287:18: ( expression )?
					int alt112=2;
					int LA112_0 = input.LA(1);
					if ( ((LA112_0 >= CharacterLiteral && LA112_0 <= DecimalLiteral)||LA112_0==FloatingPointLiteral||(LA112_0 >= HexLiteral && LA112_0 <= Identifier)||(LA112_0 >= OctalLiteral && LA112_0 <= StringLiteral)||LA112_0==27||LA112_0==34||(LA112_0 >= 38 && LA112_0 <= 39)||(LA112_0 >= 42 && LA112_0 <= 43)||LA112_0==62||LA112_0==64||LA112_0==67||LA112_0==72||LA112_0==75||LA112_0==78||LA112_0==84||LA112_0==86||(LA112_0 >= 88 && LA112_0 <= 89)||LA112_0==95||LA112_0==98||LA112_0==101||LA112_0==105||LA112_0==107||LA112_0==115) ) {
						alt112=1;
					}
					switch (alt112) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1287:18: expression
							{
							pushFollow(FOLLOW_expression_in_statement5363);
							expression();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					match(input,50,FOLLOW_50_in_statement5366); if (state.failed) return;
					}
					break;
				case 11 :
					// org/argouml/language/java/reveng/Java.g:1288:9: 'throw' expression ';'
					{
					match(input,102,FOLLOW_102_in_statement5376); if (state.failed) return;
					pushFollow(FOLLOW_expression_in_statement5378);
					expression();
					state._fsp--;
					if (state.failed) return;
					match(input,50,FOLLOW_50_in_statement5380); if (state.failed) return;
					}
					break;
				case 12 :
					// org/argouml/language/java/reveng/Java.g:1289:9: 'break' ( Identifier )? ';'
					{
					match(input,63,FOLLOW_63_in_statement5390); if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1289:17: ( Identifier )?
					int alt113=2;
					int LA113_0 = input.LA(1);
					if ( (LA113_0==Identifier) ) {
						alt113=1;
					}
					switch (alt113) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1289:17: Identifier
							{
							match(input,Identifier,FOLLOW_Identifier_in_statement5392); if (state.failed) return;
							}
							break;

					}

					match(input,50,FOLLOW_50_in_statement5395); if (state.failed) return;
					}
					break;
				case 13 :
					// org/argouml/language/java/reveng/Java.g:1290:9: 'continue' ( Identifier )? ';'
					{
					match(input,69,FOLLOW_69_in_statement5405); if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1290:20: ( Identifier )?
					int alt114=2;
					int LA114_0 = input.LA(1);
					if ( (LA114_0==Identifier) ) {
						alt114=1;
					}
					switch (alt114) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1290:20: Identifier
							{
							match(input,Identifier,FOLLOW_Identifier_in_statement5407); if (state.failed) return;
							}
							break;

					}

					match(input,50,FOLLOW_50_in_statement5410); if (state.failed) return;
					}
					break;
				case 14 :
					// org/argouml/language/java/reveng/Java.g:1291:9: ';'
					{
					match(input,50,FOLLOW_50_in_statement5420); if (state.failed) return;
					}
					break;
				case 15 :
					// org/argouml/language/java/reveng/Java.g:1292:9: statementExpression ';'
					{
					pushFollow(FOLLOW_statementExpression_in_statement5431);
					statementExpression();
					state._fsp--;
					if (state.failed) return;
					match(input,50,FOLLOW_50_in_statement5433); if (state.failed) return;
					}
					break;
				case 16 :
					// org/argouml/language/java/reveng/Java.g:1293:9: Identifier ':' statement
					{
					match(input,Identifier,FOLLOW_Identifier_in_statement5443); if (state.failed) return;
					match(input,49,FOLLOW_49_in_statement5445); if (state.failed) return;
					pushFollow(FOLLOW_statement_in_statement5447);
					statement();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 91, statement_StartIndex); }

		}
	}
	// $ANTLR end "statement"



	// $ANTLR start "catches"
	// org/argouml/language/java/reveng/Java.g:1296:1: catches : catchClause ( catchClause )* ;
	public final void catches() throws RecognitionException {
		int catches_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 92) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1297:5: ( catchClause ( catchClause )* )
			// org/argouml/language/java/reveng/Java.g:1297:9: catchClause ( catchClause )*
			{
			pushFollow(FOLLOW_catchClause_in_catches5470);
			catchClause();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1297:21: ( catchClause )*
			loop116:
			while (true) {
				int alt116=2;
				int LA116_0 = input.LA(1);
				if ( (LA116_0==66) ) {
					alt116=1;
				}

				switch (alt116) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1297:22: catchClause
					{
					pushFollow(FOLLOW_catchClause_in_catches5473);
					catchClause();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop116;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 92, catches_StartIndex); }

		}
	}
	// $ANTLR end "catches"



	// $ANTLR start "catchClause"
	// org/argouml/language/java/reveng/Java.g:1300:1: catchClause : 'catch' '(' formalParameter ')' block ;
	public final void catchClause() throws RecognitionException {
		int catchClause_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 93) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1301:5: ( 'catch' '(' formalParameter ')' block )
			// org/argouml/language/java/reveng/Java.g:1301:9: 'catch' '(' formalParameter ')' block
			{
			match(input,66,FOLLOW_66_in_catchClause5498); if (state.failed) return;
			match(input,34,FOLLOW_34_in_catchClause5500); if (state.failed) return;
			pushFollow(FOLLOW_formalParameter_in_catchClause5502);
			formalParameter();
			state._fsp--;
			if (state.failed) return;
			match(input,35,FOLLOW_35_in_catchClause5504); if (state.failed) return;
			pushFollow(FOLLOW_block_in_catchClause5506);
			block();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 93, catchClause_StartIndex); }

		}
	}
	// $ANTLR end "catchClause"



	// $ANTLR start "formalParameter"
	// org/argouml/language/java/reveng/Java.g:1304:1: formalParameter : variableModifiers type variableDeclaratorId ;
	public final void formalParameter() throws RecognitionException {
		int formalParameter_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 94) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1305:5: ( variableModifiers type variableDeclaratorId )
			// org/argouml/language/java/reveng/Java.g:1305:9: variableModifiers type variableDeclaratorId
			{
			pushFollow(FOLLOW_variableModifiers_in_formalParameter5525);
			variableModifiers();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_type_in_formalParameter5527);
			type();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_variableDeclaratorId_in_formalParameter5529);
			variableDeclaratorId();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 94, formalParameter_StartIndex); }

		}
	}
	// $ANTLR end "formalParameter"



	// $ANTLR start "switchBlockStatementGroups"
	// org/argouml/language/java/reveng/Java.g:1308:1: switchBlockStatementGroups : ( switchBlockStatementGroup )* ;
	public final void switchBlockStatementGroups() throws RecognitionException {
		int switchBlockStatementGroups_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 95) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1309:5: ( ( switchBlockStatementGroup )* )
			// org/argouml/language/java/reveng/Java.g:1309:9: ( switchBlockStatementGroup )*
			{
			// org/argouml/language/java/reveng/Java.g:1309:9: ( switchBlockStatementGroup )*
			loop117:
			while (true) {
				int alt117=2;
				int LA117_0 = input.LA(1);
				if ( (LA117_0==65||LA117_0==70) ) {
					alt117=1;
				}

				switch (alt117) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1309:10: switchBlockStatementGroup
					{
					pushFollow(FOLLOW_switchBlockStatementGroup_in_switchBlockStatementGroups5557);
					switchBlockStatementGroup();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop117;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 95, switchBlockStatementGroups_StartIndex); }

		}
	}
	// $ANTLR end "switchBlockStatementGroups"



	// $ANTLR start "switchBlockStatementGroup"
	// org/argouml/language/java/reveng/Java.g:1316:1: switchBlockStatementGroup : ( switchLabel )+ ( blockStatement )* ;
	public final void switchBlockStatementGroup() throws RecognitionException {
		int switchBlockStatementGroup_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 96) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1317:5: ( ( switchLabel )+ ( blockStatement )* )
			// org/argouml/language/java/reveng/Java.g:1317:9: ( switchLabel )+ ( blockStatement )*
			{
			// org/argouml/language/java/reveng/Java.g:1317:9: ( switchLabel )+
			int cnt118=0;
			loop118:
			while (true) {
				int alt118=2;
				alt118 = dfa118.predict(input);
				switch (alt118) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1317:9: switchLabel
					{
					pushFollow(FOLLOW_switchLabel_in_switchBlockStatementGroup5584);
					switchLabel();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					if ( cnt118 >= 1 ) break loop118;
					if (state.backtracking>0) {state.failed=true; return;}
					EarlyExitException eee = new EarlyExitException(118, input);
					throw eee;
				}
				cnt118++;
			}

			// org/argouml/language/java/reveng/Java.g:1317:22: ( blockStatement )*
			loop119:
			while (true) {
				int alt119=2;
				int LA119_0 = input.LA(1);
				if ( (LA119_0==ASSERT||(LA119_0 >= CharacterLiteral && LA119_0 <= DecimalLiteral)||LA119_0==ENUM||LA119_0==FloatingPointLiteral||(LA119_0 >= HexLiteral && LA119_0 <= Identifier)||(LA119_0 >= OctalLiteral && LA119_0 <= StringLiteral)||LA119_0==27||LA119_0==34||(LA119_0 >= 38 && LA119_0 <= 39)||(LA119_0 >= 42 && LA119_0 <= 43)||LA119_0==50||LA119_0==56||(LA119_0 >= 61 && LA119_0 <= 64)||(LA119_0 >= 67 && LA119_0 <= 69)||(LA119_0 >= 71 && LA119_0 <= 72)||(LA119_0 >= 75 && LA119_0 <= 76)||(LA119_0 >= 78 && LA119_0 <= 80)||(LA119_0 >= 84 && LA119_0 <= 86)||(LA119_0 >= 88 && LA119_0 <= 89)||(LA119_0 >= 91 && LA119_0 <= 102)||(LA119_0 >= 105 && LA119_0 <= 107)||(LA119_0 >= 109 && LA119_0 <= 110)||LA119_0==115) ) {
					alt119=1;
				}

				switch (alt119) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1317:22: blockStatement
					{
					pushFollow(FOLLOW_blockStatement_in_switchBlockStatementGroup5587);
					blockStatement();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop119;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 96, switchBlockStatementGroup_StartIndex); }

		}
	}
	// $ANTLR end "switchBlockStatementGroup"



	// $ANTLR start "switchLabel"
	// org/argouml/language/java/reveng/Java.g:1320:1: switchLabel : ( 'case' constantExpression ':' | 'case' enumConstantName ':' | 'default' ':' );
	public final void switchLabel() throws RecognitionException {
		int switchLabel_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 97) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1321:5: ( 'case' constantExpression ':' | 'case' enumConstantName ':' | 'default' ':' )
			int alt120=3;
			int LA120_0 = input.LA(1);
			if ( (LA120_0==65) ) {
				int LA120_1 = input.LA(2);
				if ( ((LA120_1 >= CharacterLiteral && LA120_1 <= DecimalLiteral)||LA120_1==FloatingPointLiteral||LA120_1==HexLiteral||(LA120_1 >= OctalLiteral && LA120_1 <= StringLiteral)||LA120_1==27||LA120_1==34||(LA120_1 >= 38 && LA120_1 <= 39)||(LA120_1 >= 42 && LA120_1 <= 43)||LA120_1==62||LA120_1==64||LA120_1==67||LA120_1==72||LA120_1==75||LA120_1==78||LA120_1==84||LA120_1==86||(LA120_1 >= 88 && LA120_1 <= 89)||LA120_1==95||LA120_1==98||LA120_1==101||LA120_1==105||LA120_1==107||LA120_1==115) ) {
					alt120=1;
				}
				else if ( (LA120_1==Identifier) ) {
					int LA120_19 = input.LA(3);
					if ( (synpred181_Java()) ) {
						alt120=1;
					}
					else if ( (synpred182_Java()) ) {
						alt120=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 120, 19, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 120, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA120_0==70) ) {
				alt120=3;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 120, 0, input);
				throw nvae;
			}

			switch (alt120) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1321:9: 'case' constantExpression ':'
					{
					match(input,65,FOLLOW_65_in_switchLabel5611); if (state.failed) return;
					pushFollow(FOLLOW_constantExpression_in_switchLabel5613);
					constantExpression();
					state._fsp--;
					if (state.failed) return;
					match(input,49,FOLLOW_49_in_switchLabel5615); if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1322:9: 'case' enumConstantName ':'
					{
					match(input,65,FOLLOW_65_in_switchLabel5625); if (state.failed) return;
					pushFollow(FOLLOW_enumConstantName_in_switchLabel5627);
					enumConstantName();
					state._fsp--;
					if (state.failed) return;
					match(input,49,FOLLOW_49_in_switchLabel5629); if (state.failed) return;
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:1323:9: 'default' ':'
					{
					match(input,70,FOLLOW_70_in_switchLabel5639); if (state.failed) return;
					match(input,49,FOLLOW_49_in_switchLabel5641); if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 97, switchLabel_StartIndex); }

		}
	}
	// $ANTLR end "switchLabel"



	// $ANTLR start "forControl"
	// org/argouml/language/java/reveng/Java.g:1326:1: forControl options {k=3; } : ( enhancedForControl | ( forInit )? ';' ( expression )? ';' ( forUpdate )? );
	public final void forControl() throws RecognitionException {
		int forControl_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 98) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1328:5: ( enhancedForControl | ( forInit )? ';' ( expression )? ';' ( forUpdate )? )
			int alt124=2;
			alt124 = dfa124.predict(input);
			switch (alt124) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1328:9: enhancedForControl
					{
					pushFollow(FOLLOW_enhancedForControl_in_forControl5672);
					enhancedForControl();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1329:9: ( forInit )? ';' ( expression )? ';' ( forUpdate )?
					{
					// org/argouml/language/java/reveng/Java.g:1329:9: ( forInit )?
					int alt121=2;
					int LA121_0 = input.LA(1);
					if ( ((LA121_0 >= CharacterLiteral && LA121_0 <= DecimalLiteral)||LA121_0==FloatingPointLiteral||(LA121_0 >= HexLiteral && LA121_0 <= Identifier)||(LA121_0 >= OctalLiteral && LA121_0 <= StringLiteral)||LA121_0==27||LA121_0==34||(LA121_0 >= 38 && LA121_0 <= 39)||(LA121_0 >= 42 && LA121_0 <= 43)||LA121_0==56||LA121_0==62||LA121_0==64||LA121_0==67||LA121_0==72||(LA121_0 >= 75 && LA121_0 <= 76)||LA121_0==78||LA121_0==84||LA121_0==86||(LA121_0 >= 88 && LA121_0 <= 89)||LA121_0==95||LA121_0==98||LA121_0==101||LA121_0==105||LA121_0==107||LA121_0==115) ) {
						alt121=1;
					}
					switch (alt121) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1329:9: forInit
							{
							pushFollow(FOLLOW_forInit_in_forControl5682);
							forInit();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					match(input,50,FOLLOW_50_in_forControl5685); if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1329:22: ( expression )?
					int alt122=2;
					int LA122_0 = input.LA(1);
					if ( ((LA122_0 >= CharacterLiteral && LA122_0 <= DecimalLiteral)||LA122_0==FloatingPointLiteral||(LA122_0 >= HexLiteral && LA122_0 <= Identifier)||(LA122_0 >= OctalLiteral && LA122_0 <= StringLiteral)||LA122_0==27||LA122_0==34||(LA122_0 >= 38 && LA122_0 <= 39)||(LA122_0 >= 42 && LA122_0 <= 43)||LA122_0==62||LA122_0==64||LA122_0==67||LA122_0==72||LA122_0==75||LA122_0==78||LA122_0==84||LA122_0==86||(LA122_0 >= 88 && LA122_0 <= 89)||LA122_0==95||LA122_0==98||LA122_0==101||LA122_0==105||LA122_0==107||LA122_0==115) ) {
						alt122=1;
					}
					switch (alt122) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1329:22: expression
							{
							pushFollow(FOLLOW_expression_in_forControl5687);
							expression();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					match(input,50,FOLLOW_50_in_forControl5690); if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1329:38: ( forUpdate )?
					int alt123=2;
					int LA123_0 = input.LA(1);
					if ( ((LA123_0 >= CharacterLiteral && LA123_0 <= DecimalLiteral)||LA123_0==FloatingPointLiteral||(LA123_0 >= HexLiteral && LA123_0 <= Identifier)||(LA123_0 >= OctalLiteral && LA123_0 <= StringLiteral)||LA123_0==27||LA123_0==34||(LA123_0 >= 38 && LA123_0 <= 39)||(LA123_0 >= 42 && LA123_0 <= 43)||LA123_0==62||LA123_0==64||LA123_0==67||LA123_0==72||LA123_0==75||LA123_0==78||LA123_0==84||LA123_0==86||(LA123_0 >= 88 && LA123_0 <= 89)||LA123_0==95||LA123_0==98||LA123_0==101||LA123_0==105||LA123_0==107||LA123_0==115) ) {
						alt123=1;
					}
					switch (alt123) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1329:38: forUpdate
							{
							pushFollow(FOLLOW_forUpdate_in_forControl5692);
							forUpdate();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 98, forControl_StartIndex); }

		}
	}
	// $ANTLR end "forControl"



	// $ANTLR start "forInit"
	// org/argouml/language/java/reveng/Java.g:1332:1: forInit : ( localVariableDeclaration | expressionList );
	public final void forInit() throws RecognitionException {
		int forInit_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 99) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1333:5: ( localVariableDeclaration | expressionList )
			int alt125=2;
			switch ( input.LA(1) ) {
			case 56:
			case 76:
				{
				alt125=1;
				}
				break;
			case Identifier:
				{
				switch ( input.LA(2) ) {
				case 51:
					{
					int LA125_22 = input.LA(3);
					if ( (synpred187_Java()) ) {
						alt125=1;
					}
					else if ( (true) ) {
						alt125=2;
					}

					}
					break;
				case 45:
					{
					int LA125_23 = input.LA(3);
					if ( (synpred187_Java()) ) {
						alt125=1;
					}
					else if ( (true) ) {
						alt125=2;
					}

					}
					break;
				case 57:
					{
					int LA125_24 = input.LA(3);
					if ( (synpred187_Java()) ) {
						alt125=1;
					}
					else if ( (true) ) {
						alt125=2;
					}

					}
					break;
				case Identifier:
					{
					alt125=1;
					}
					break;
				case EOF:
				case 28:
				case 29:
				case 30:
				case 31:
				case 32:
				case 33:
				case 34:
				case 36:
				case 37:
				case 38:
				case 39:
				case 40:
				case 41:
				case 42:
				case 43:
				case 44:
				case 47:
				case 48:
				case 50:
				case 52:
				case 53:
				case 54:
				case 55:
				case 59:
				case 60:
				case 83:
				case 111:
				case 112:
				case 113:
					{
					alt125=2;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 125, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case 62:
			case 64:
			case 67:
			case 72:
			case 78:
			case 84:
			case 86:
			case 95:
				{
				switch ( input.LA(2) ) {
				case 57:
					{
					int LA125_51 = input.LA(3);
					if ( (synpred187_Java()) ) {
						alt125=1;
					}
					else if ( (true) ) {
						alt125=2;
					}

					}
					break;
				case Identifier:
					{
					alt125=1;
					}
					break;
				case 45:
					{
					alt125=2;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 125, 4, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case CharacterLiteral:
			case DecimalLiteral:
			case FloatingPointLiteral:
			case HexLiteral:
			case OctalLiteral:
			case StringLiteral:
			case 27:
			case 34:
			case 38:
			case 39:
			case 42:
			case 43:
			case 75:
			case 88:
			case 89:
			case 98:
			case 101:
			case 105:
			case 107:
			case 115:
				{
				alt125=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 125, 0, input);
				throw nvae;
			}
			switch (alt125) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1333:9: localVariableDeclaration
					{
					pushFollow(FOLLOW_localVariableDeclaration_in_forInit5712);
					localVariableDeclaration();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1334:9: expressionList
					{
					pushFollow(FOLLOW_expressionList_in_forInit5722);
					expressionList();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 99, forInit_StartIndex); }

		}
	}
	// $ANTLR end "forInit"



	// $ANTLR start "enhancedForControl"
	// org/argouml/language/java/reveng/Java.g:1337:1: enhancedForControl : variableModifiers type Identifier ':' expression ;
	public final void enhancedForControl() throws RecognitionException {
		int enhancedForControl_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 100) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1338:5: ( variableModifiers type Identifier ':' expression )
			// org/argouml/language/java/reveng/Java.g:1338:9: variableModifiers type Identifier ':' expression
			{
			pushFollow(FOLLOW_variableModifiers_in_enhancedForControl5745);
			variableModifiers();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_type_in_enhancedForControl5747);
			type();
			state._fsp--;
			if (state.failed) return;
			match(input,Identifier,FOLLOW_Identifier_in_enhancedForControl5749); if (state.failed) return;
			match(input,49,FOLLOW_49_in_enhancedForControl5751); if (state.failed) return;
			pushFollow(FOLLOW_expression_in_enhancedForControl5753);
			expression();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 100, enhancedForControl_StartIndex); }

		}
	}
	// $ANTLR end "enhancedForControl"



	// $ANTLR start "forUpdate"
	// org/argouml/language/java/reveng/Java.g:1341:1: forUpdate : expressionList ;
	public final void forUpdate() throws RecognitionException {
		int forUpdate_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 101) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1342:5: ( expressionList )
			// org/argouml/language/java/reveng/Java.g:1342:9: expressionList
			{
			pushFollow(FOLLOW_expressionList_in_forUpdate5772);
			expressionList();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 101, forUpdate_StartIndex); }

		}
	}
	// $ANTLR end "forUpdate"



	// $ANTLR start "parExpression"
	// org/argouml/language/java/reveng/Java.g:1347:1: parExpression : '(' expression ')' ;
	public final void parExpression() throws RecognitionException {
		int parExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 102) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1348:5: ( '(' expression ')' )
			// org/argouml/language/java/reveng/Java.g:1348:9: '(' expression ')'
			{
			match(input,34,FOLLOW_34_in_parExpression5793); if (state.failed) return;
			pushFollow(FOLLOW_expression_in_parExpression5795);
			expression();
			state._fsp--;
			if (state.failed) return;
			match(input,35,FOLLOW_35_in_parExpression5797); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 102, parExpression_StartIndex); }

		}
	}
	// $ANTLR end "parExpression"



	// $ANTLR start "expressionList"
	// org/argouml/language/java/reveng/Java.g:1351:1: expressionList : expression ( ',' expression )* ;
	public final void expressionList() throws RecognitionException {
		int expressionList_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 103) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1352:5: ( expression ( ',' expression )* )
			// org/argouml/language/java/reveng/Java.g:1352:9: expression ( ',' expression )*
			{
			pushFollow(FOLLOW_expression_in_expressionList5820);
			expression();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1352:20: ( ',' expression )*
			loop126:
			while (true) {
				int alt126=2;
				int LA126_0 = input.LA(1);
				if ( (LA126_0==41) ) {
					alt126=1;
				}

				switch (alt126) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1352:21: ',' expression
					{
					match(input,41,FOLLOW_41_in_expressionList5823); if (state.failed) return;
					pushFollow(FOLLOW_expression_in_expressionList5825);
					expression();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop126;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 103, expressionList_StartIndex); }

		}
	}
	// $ANTLR end "expressionList"



	// $ANTLR start "statementExpression"
	// org/argouml/language/java/reveng/Java.g:1355:1: statementExpression : expression ;
	public final void statementExpression() throws RecognitionException {
		int statementExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 104) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1356:5: ( expression )
			// org/argouml/language/java/reveng/Java.g:1356:9: expression
			{
			pushFollow(FOLLOW_expression_in_statementExpression5846);
			expression();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 104, statementExpression_StartIndex); }

		}
	}
	// $ANTLR end "statementExpression"



	// $ANTLR start "constantExpression"
	// org/argouml/language/java/reveng/Java.g:1360:1: constantExpression : expression ;
	public final void constantExpression() throws RecognitionException {
		int constantExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 105) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1361:5: ( expression )
			// org/argouml/language/java/reveng/Java.g:1361:9: expression
			{
			pushFollow(FOLLOW_expression_in_constantExpression5878);
			expression();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 105, constantExpression_StartIndex); }

		}
	}
	// $ANTLR end "constantExpression"



	// $ANTLR start "expression"
	// org/argouml/language/java/reveng/Java.g:1364:1: expression : conditionalExpression ( assignmentOperator expression )? ;
	public final void expression() throws RecognitionException {
		int expression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 106) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1365:5: ( conditionalExpression ( assignmentOperator expression )? )
			// org/argouml/language/java/reveng/Java.g:1365:9: conditionalExpression ( assignmentOperator expression )?
			{
			pushFollow(FOLLOW_conditionalExpression_in_expression5901);
			conditionalExpression();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1365:31: ( assignmentOperator expression )?
			int alt127=2;
			alt127 = dfa127.predict(input);
			switch (alt127) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1365:32: assignmentOperator expression
					{
					pushFollow(FOLLOW_assignmentOperator_in_expression5904);
					assignmentOperator();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_expression_in_expression5906);
					expression();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 106, expression_StartIndex); }

		}
	}
	// $ANTLR end "expression"



	// $ANTLR start "assignmentOperator"
	// org/argouml/language/java/reveng/Java.g:1368:1: assignmentOperator : ( '=' | '+=' | '-=' | '*=' | '/=' | '&=' | '|=' | '^=' | '%=' | ( '<' '<' '=' )=>t1= '<' t2= '<' t3= '=' {...}?| ( '>' '>' '>' '=' )=>t1= '>' t2= '>' t3= '>' t4= '=' {...}?| ( '>' '>' '=' )=>t1= '>' t2= '>' t3= '=' {...}?);
	public final void assignmentOperator() throws RecognitionException {
		int assignmentOperator_StartIndex = input.index();

		Token t1=null;
		Token t2=null;
		Token t3=null;
		Token t4=null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 107) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1369:5: ( '=' | '+=' | '-=' | '*=' | '/=' | '&=' | '|=' | '^=' | '%=' | ( '<' '<' '=' )=>t1= '<' t2= '<' t3= '=' {...}?| ( '>' '>' '>' '=' )=>t1= '>' t2= '>' t3= '>' t4= '=' {...}?| ( '>' '>' '=' )=>t1= '>' t2= '>' t3= '=' {...}?)
			int alt128=12;
			int LA128_0 = input.LA(1);
			if ( (LA128_0==52) ) {
				alt128=1;
			}
			else if ( (LA128_0==40) ) {
				alt128=2;
			}
			else if ( (LA128_0==44) ) {
				alt128=3;
			}
			else if ( (LA128_0==37) ) {
				alt128=4;
			}
			else if ( (LA128_0==48) ) {
				alt128=5;
			}
			else if ( (LA128_0==33) ) {
				alt128=6;
			}
			else if ( (LA128_0==112) ) {
				alt128=7;
			}
			else if ( (LA128_0==60) ) {
				alt128=8;
			}
			else if ( (LA128_0==30) ) {
				alt128=9;
			}
			else if ( (LA128_0==51) && (synpred199_Java())) {
				alt128=10;
			}
			else if ( (LA128_0==54) ) {
				int LA128_11 = input.LA(2);
				if ( (LA128_11==54) ) {
					int LA128_12 = input.LA(3);
					if ( (synpred200_Java()) ) {
						alt128=11;
					}
					else if ( (synpred201_Java()) ) {
						alt128=12;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 128, 12, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 128, 11, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 128, 0, input);
				throw nvae;
			}

			switch (alt128) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1369:9: '='
					{
					match(input,52,FOLLOW_52_in_assignmentOperator5931); if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1370:9: '+='
					{
					match(input,40,FOLLOW_40_in_assignmentOperator5941); if (state.failed) return;
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:1371:9: '-='
					{
					match(input,44,FOLLOW_44_in_assignmentOperator5951); if (state.failed) return;
					}
					break;
				case 4 :
					// org/argouml/language/java/reveng/Java.g:1372:9: '*='
					{
					match(input,37,FOLLOW_37_in_assignmentOperator5961); if (state.failed) return;
					}
					break;
				case 5 :
					// org/argouml/language/java/reveng/Java.g:1373:9: '/='
					{
					match(input,48,FOLLOW_48_in_assignmentOperator5971); if (state.failed) return;
					}
					break;
				case 6 :
					// org/argouml/language/java/reveng/Java.g:1374:9: '&='
					{
					match(input,33,FOLLOW_33_in_assignmentOperator5981); if (state.failed) return;
					}
					break;
				case 7 :
					// org/argouml/language/java/reveng/Java.g:1375:9: '|='
					{
					match(input,112,FOLLOW_112_in_assignmentOperator5991); if (state.failed) return;
					}
					break;
				case 8 :
					// org/argouml/language/java/reveng/Java.g:1376:9: '^='
					{
					match(input,60,FOLLOW_60_in_assignmentOperator6001); if (state.failed) return;
					}
					break;
				case 9 :
					// org/argouml/language/java/reveng/Java.g:1377:9: '%='
					{
					match(input,30,FOLLOW_30_in_assignmentOperator6011); if (state.failed) return;
					}
					break;
				case 10 :
					// org/argouml/language/java/reveng/Java.g:1378:9: ( '<' '<' '=' )=>t1= '<' t2= '<' t3= '=' {...}?
					{
					t1=(Token)match(input,51,FOLLOW_51_in_assignmentOperator6032); if (state.failed) return;
					t2=(Token)match(input,51,FOLLOW_51_in_assignmentOperator6036); if (state.failed) return;
					t3=(Token)match(input,52,FOLLOW_52_in_assignmentOperator6040); if (state.failed) return;
					if ( !(( t1.getLine() == t2.getLine() &&
					          t1.getCharPositionInLine() + 1 == t2.getCharPositionInLine() && 
					          t2.getLine() == t3.getLine() && 
					          t2.getCharPositionInLine() + 1 == t3.getCharPositionInLine() )) ) {
						if (state.backtracking>0) {state.failed=true; return;}
						throw new FailedPredicateException(input, "assignmentOperator", " $t1.getLine() == $t2.getLine() &&\r\n          $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && \r\n          $t2.getLine() == $t3.getLine() && \r\n          $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() ");
					}
					}
					break;
				case 11 :
					// org/argouml/language/java/reveng/Java.g:1383:9: ( '>' '>' '>' '=' )=>t1= '>' t2= '>' t3= '>' t4= '=' {...}?
					{
					t1=(Token)match(input,54,FOLLOW_54_in_assignmentOperator6074); if (state.failed) return;
					t2=(Token)match(input,54,FOLLOW_54_in_assignmentOperator6078); if (state.failed) return;
					t3=(Token)match(input,54,FOLLOW_54_in_assignmentOperator6082); if (state.failed) return;
					t4=(Token)match(input,52,FOLLOW_52_in_assignmentOperator6086); if (state.failed) return;
					if ( !(( t1.getLine() == t2.getLine() && 
					          t1.getCharPositionInLine() + 1 == t2.getCharPositionInLine() &&
					          t2.getLine() == t3.getLine() && 
					          t2.getCharPositionInLine() + 1 == t3.getCharPositionInLine() &&
					          t3.getLine() == t4.getLine() && 
					          t3.getCharPositionInLine() + 1 == t4.getCharPositionInLine() )) ) {
						if (state.backtracking>0) {state.failed=true; return;}
						throw new FailedPredicateException(input, "assignmentOperator", " $t1.getLine() == $t2.getLine() && \r\n          $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() &&\r\n          $t2.getLine() == $t3.getLine() && \r\n          $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() &&\r\n          $t3.getLine() == $t4.getLine() && \r\n          $t3.getCharPositionInLine() + 1 == $t4.getCharPositionInLine() ");
					}
					}
					break;
				case 12 :
					// org/argouml/language/java/reveng/Java.g:1390:9: ( '>' '>' '=' )=>t1= '>' t2= '>' t3= '=' {...}?
					{
					t1=(Token)match(input,54,FOLLOW_54_in_assignmentOperator6117); if (state.failed) return;
					t2=(Token)match(input,54,FOLLOW_54_in_assignmentOperator6121); if (state.failed) return;
					t3=(Token)match(input,52,FOLLOW_52_in_assignmentOperator6125); if (state.failed) return;
					if ( !(( t1.getLine() == t2.getLine() && 
					          t1.getCharPositionInLine() + 1 == t2.getCharPositionInLine() && 
					          t2.getLine() == t3.getLine() && 
					          t2.getCharPositionInLine() + 1 == t3.getCharPositionInLine() )) ) {
						if (state.backtracking>0) {state.failed=true; return;}
						throw new FailedPredicateException(input, "assignmentOperator", " $t1.getLine() == $t2.getLine() && \r\n          $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && \r\n          $t2.getLine() == $t3.getLine() && \r\n          $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() ");
					}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 107, assignmentOperator_StartIndex); }

		}
	}
	// $ANTLR end "assignmentOperator"



	// $ANTLR start "conditionalExpression"
	// org/argouml/language/java/reveng/Java.g:1397:1: conditionalExpression : conditionalOrExpression ( '?' expression ':' expression )? ;
	public final void conditionalExpression() throws RecognitionException {
		int conditionalExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 108) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1398:5: ( conditionalOrExpression ( '?' expression ':' expression )? )
			// org/argouml/language/java/reveng/Java.g:1398:9: conditionalOrExpression ( '?' expression ':' expression )?
			{
			pushFollow(FOLLOW_conditionalOrExpression_in_conditionalExpression6154);
			conditionalOrExpression();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1398:33: ( '?' expression ':' expression )?
			int alt129=2;
			int LA129_0 = input.LA(1);
			if ( (LA129_0==55) ) {
				alt129=1;
			}
			switch (alt129) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1398:35: '?' expression ':' expression
					{
					match(input,55,FOLLOW_55_in_conditionalExpression6158); if (state.failed) return;
					pushFollow(FOLLOW_expression_in_conditionalExpression6160);
					expression();
					state._fsp--;
					if (state.failed) return;
					match(input,49,FOLLOW_49_in_conditionalExpression6162); if (state.failed) return;
					pushFollow(FOLLOW_expression_in_conditionalExpression6164);
					expression();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 108, conditionalExpression_StartIndex); }

		}
	}
	// $ANTLR end "conditionalExpression"



	// $ANTLR start "conditionalOrExpression"
	// org/argouml/language/java/reveng/Java.g:1401:1: conditionalOrExpression : conditionalAndExpression ( '||' conditionalAndExpression )* ;
	public final void conditionalOrExpression() throws RecognitionException {
		int conditionalOrExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 109) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1402:5: ( conditionalAndExpression ( '||' conditionalAndExpression )* )
			// org/argouml/language/java/reveng/Java.g:1402:9: conditionalAndExpression ( '||' conditionalAndExpression )*
			{
			pushFollow(FOLLOW_conditionalAndExpression_in_conditionalOrExpression6186);
			conditionalAndExpression();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1402:34: ( '||' conditionalAndExpression )*
			loop130:
			while (true) {
				int alt130=2;
				int LA130_0 = input.LA(1);
				if ( (LA130_0==113) ) {
					alt130=1;
				}

				switch (alt130) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1402:36: '||' conditionalAndExpression
					{
					match(input,113,FOLLOW_113_in_conditionalOrExpression6190); if (state.failed) return;
					pushFollow(FOLLOW_conditionalAndExpression_in_conditionalOrExpression6192);
					conditionalAndExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop130;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 109, conditionalOrExpression_StartIndex); }

		}
	}
	// $ANTLR end "conditionalOrExpression"



	// $ANTLR start "conditionalAndExpression"
	// org/argouml/language/java/reveng/Java.g:1405:1: conditionalAndExpression : inclusiveOrExpression ( '&&' inclusiveOrExpression )* ;
	public final void conditionalAndExpression() throws RecognitionException {
		int conditionalAndExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 110) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1406:5: ( inclusiveOrExpression ( '&&' inclusiveOrExpression )* )
			// org/argouml/language/java/reveng/Java.g:1406:9: inclusiveOrExpression ( '&&' inclusiveOrExpression )*
			{
			pushFollow(FOLLOW_inclusiveOrExpression_in_conditionalAndExpression6214);
			inclusiveOrExpression();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1406:31: ( '&&' inclusiveOrExpression )*
			loop131:
			while (true) {
				int alt131=2;
				int LA131_0 = input.LA(1);
				if ( (LA131_0==31) ) {
					alt131=1;
				}

				switch (alt131) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1406:33: '&&' inclusiveOrExpression
					{
					match(input,31,FOLLOW_31_in_conditionalAndExpression6218); if (state.failed) return;
					pushFollow(FOLLOW_inclusiveOrExpression_in_conditionalAndExpression6220);
					inclusiveOrExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop131;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 110, conditionalAndExpression_StartIndex); }

		}
	}
	// $ANTLR end "conditionalAndExpression"



	// $ANTLR start "inclusiveOrExpression"
	// org/argouml/language/java/reveng/Java.g:1409:1: inclusiveOrExpression : exclusiveOrExpression ( '|' exclusiveOrExpression )* ;
	public final void inclusiveOrExpression() throws RecognitionException {
		int inclusiveOrExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 111) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1410:5: ( exclusiveOrExpression ( '|' exclusiveOrExpression )* )
			// org/argouml/language/java/reveng/Java.g:1410:9: exclusiveOrExpression ( '|' exclusiveOrExpression )*
			{
			pushFollow(FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression6242);
			exclusiveOrExpression();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1410:31: ( '|' exclusiveOrExpression )*
			loop132:
			while (true) {
				int alt132=2;
				int LA132_0 = input.LA(1);
				if ( (LA132_0==111) ) {
					alt132=1;
				}

				switch (alt132) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1410:33: '|' exclusiveOrExpression
					{
					match(input,111,FOLLOW_111_in_inclusiveOrExpression6246); if (state.failed) return;
					pushFollow(FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression6248);
					exclusiveOrExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop132;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 111, inclusiveOrExpression_StartIndex); }

		}
	}
	// $ANTLR end "inclusiveOrExpression"



	// $ANTLR start "exclusiveOrExpression"
	// org/argouml/language/java/reveng/Java.g:1413:1: exclusiveOrExpression : andExpression ( '^' andExpression )* ;
	public final void exclusiveOrExpression() throws RecognitionException {
		int exclusiveOrExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 112) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1414:5: ( andExpression ( '^' andExpression )* )
			// org/argouml/language/java/reveng/Java.g:1414:9: andExpression ( '^' andExpression )*
			{
			pushFollow(FOLLOW_andExpression_in_exclusiveOrExpression6270);
			andExpression();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1414:23: ( '^' andExpression )*
			loop133:
			while (true) {
				int alt133=2;
				int LA133_0 = input.LA(1);
				if ( (LA133_0==59) ) {
					alt133=1;
				}

				switch (alt133) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1414:25: '^' andExpression
					{
					match(input,59,FOLLOW_59_in_exclusiveOrExpression6274); if (state.failed) return;
					pushFollow(FOLLOW_andExpression_in_exclusiveOrExpression6276);
					andExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop133;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 112, exclusiveOrExpression_StartIndex); }

		}
	}
	// $ANTLR end "exclusiveOrExpression"



	// $ANTLR start "andExpression"
	// org/argouml/language/java/reveng/Java.g:1417:1: andExpression : equalityExpression ( '&' equalityExpression )* ;
	public final void andExpression() throws RecognitionException {
		int andExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 113) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1418:5: ( equalityExpression ( '&' equalityExpression )* )
			// org/argouml/language/java/reveng/Java.g:1418:9: equalityExpression ( '&' equalityExpression )*
			{
			pushFollow(FOLLOW_equalityExpression_in_andExpression6298);
			equalityExpression();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1418:28: ( '&' equalityExpression )*
			loop134:
			while (true) {
				int alt134=2;
				int LA134_0 = input.LA(1);
				if ( (LA134_0==32) ) {
					alt134=1;
				}

				switch (alt134) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1418:30: '&' equalityExpression
					{
					match(input,32,FOLLOW_32_in_andExpression6302); if (state.failed) return;
					pushFollow(FOLLOW_equalityExpression_in_andExpression6304);
					equalityExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop134;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 113, andExpression_StartIndex); }

		}
	}
	// $ANTLR end "andExpression"



	// $ANTLR start "equalityExpression"
	// org/argouml/language/java/reveng/Java.g:1421:1: equalityExpression : instanceOfExpression ( ( '==' | '!=' ) instanceOfExpression )* ;
	public final void equalityExpression() throws RecognitionException {
		int equalityExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 114) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1422:5: ( instanceOfExpression ( ( '==' | '!=' ) instanceOfExpression )* )
			// org/argouml/language/java/reveng/Java.g:1422:9: instanceOfExpression ( ( '==' | '!=' ) instanceOfExpression )*
			{
			pushFollow(FOLLOW_instanceOfExpression_in_equalityExpression6326);
			instanceOfExpression();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1422:30: ( ( '==' | '!=' ) instanceOfExpression )*
			loop135:
			while (true) {
				int alt135=2;
				int LA135_0 = input.LA(1);
				if ( (LA135_0==28||LA135_0==53) ) {
					alt135=1;
				}

				switch (alt135) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1422:32: ( '==' | '!=' ) instanceOfExpression
					{
					if ( input.LA(1)==28||input.LA(1)==53 ) {
						input.consume();
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_instanceOfExpression_in_equalityExpression6338);
					instanceOfExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop135;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 114, equalityExpression_StartIndex); }

		}
	}
	// $ANTLR end "equalityExpression"



	// $ANTLR start "instanceOfExpression"
	// org/argouml/language/java/reveng/Java.g:1425:1: instanceOfExpression : relationalExpression ( 'instanceof' type )? ;
	public final void instanceOfExpression() throws RecognitionException {
		int instanceOfExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 115) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1426:5: ( relationalExpression ( 'instanceof' type )? )
			// org/argouml/language/java/reveng/Java.g:1426:9: relationalExpression ( 'instanceof' type )?
			{
			pushFollow(FOLLOW_relationalExpression_in_instanceOfExpression6360);
			relationalExpression();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1426:30: ( 'instanceof' type )?
			int alt136=2;
			int LA136_0 = input.LA(1);
			if ( (LA136_0==83) ) {
				alt136=1;
			}
			switch (alt136) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1426:31: 'instanceof' type
					{
					match(input,83,FOLLOW_83_in_instanceOfExpression6363); if (state.failed) return;
					pushFollow(FOLLOW_type_in_instanceOfExpression6365);
					type();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 115, instanceOfExpression_StartIndex); }

		}
	}
	// $ANTLR end "instanceOfExpression"



	// $ANTLR start "relationalExpression"
	// org/argouml/language/java/reveng/Java.g:1429:1: relationalExpression : shiftExpression ( relationalOp shiftExpression )* ;
	public final void relationalExpression() throws RecognitionException {
		int relationalExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 116) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1430:5: ( shiftExpression ( relationalOp shiftExpression )* )
			// org/argouml/language/java/reveng/Java.g:1430:9: shiftExpression ( relationalOp shiftExpression )*
			{
			pushFollow(FOLLOW_shiftExpression_in_relationalExpression6386);
			shiftExpression();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1430:25: ( relationalOp shiftExpression )*
			loop137:
			while (true) {
				int alt137=2;
				alt137 = dfa137.predict(input);
				switch (alt137) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1430:27: relationalOp shiftExpression
					{
					pushFollow(FOLLOW_relationalOp_in_relationalExpression6390);
					relationalOp();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_shiftExpression_in_relationalExpression6392);
					shiftExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop137;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 116, relationalExpression_StartIndex); }

		}
	}
	// $ANTLR end "relationalExpression"



	// $ANTLR start "relationalOp"
	// org/argouml/language/java/reveng/Java.g:1433:1: relationalOp : ( ( '<' '=' )=>t1= '<' t2= '=' {...}?| ( '>' '=' )=>t1= '>' t2= '=' {...}?| '<' | '>' );
	public final void relationalOp() throws RecognitionException {
		int relationalOp_StartIndex = input.index();

		Token t1=null;
		Token t2=null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 117) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1434:5: ( ( '<' '=' )=>t1= '<' t2= '=' {...}?| ( '>' '=' )=>t1= '>' t2= '=' {...}?| '<' | '>' )
			int alt138=4;
			int LA138_0 = input.LA(1);
			if ( (LA138_0==51) ) {
				int LA138_1 = input.LA(2);
				if ( (LA138_1==52) && (synpred212_Java())) {
					alt138=1;
				}
				else if ( ((LA138_1 >= CharacterLiteral && LA138_1 <= DecimalLiteral)||LA138_1==FloatingPointLiteral||(LA138_1 >= HexLiteral && LA138_1 <= Identifier)||(LA138_1 >= OctalLiteral && LA138_1 <= StringLiteral)||LA138_1==27||LA138_1==34||(LA138_1 >= 38 && LA138_1 <= 39)||(LA138_1 >= 42 && LA138_1 <= 43)||LA138_1==62||LA138_1==64||LA138_1==67||LA138_1==72||LA138_1==75||LA138_1==78||LA138_1==84||LA138_1==86||(LA138_1 >= 88 && LA138_1 <= 89)||LA138_1==95||LA138_1==98||LA138_1==101||LA138_1==105||LA138_1==107||LA138_1==115) ) {
					alt138=3;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 138, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA138_0==54) ) {
				int LA138_2 = input.LA(2);
				if ( (LA138_2==52) && (synpred213_Java())) {
					alt138=2;
				}
				else if ( ((LA138_2 >= CharacterLiteral && LA138_2 <= DecimalLiteral)||LA138_2==FloatingPointLiteral||(LA138_2 >= HexLiteral && LA138_2 <= Identifier)||(LA138_2 >= OctalLiteral && LA138_2 <= StringLiteral)||LA138_2==27||LA138_2==34||(LA138_2 >= 38 && LA138_2 <= 39)||(LA138_2 >= 42 && LA138_2 <= 43)||LA138_2==62||LA138_2==64||LA138_2==67||LA138_2==72||LA138_2==75||LA138_2==78||LA138_2==84||LA138_2==86||(LA138_2 >= 88 && LA138_2 <= 89)||LA138_2==95||LA138_2==98||LA138_2==101||LA138_2==105||LA138_2==107||LA138_2==115) ) {
					alt138=4;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 138, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 138, 0, input);
				throw nvae;
			}

			switch (alt138) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1434:9: ( '<' '=' )=>t1= '<' t2= '=' {...}?
					{
					t1=(Token)match(input,51,FOLLOW_51_in_relationalOp6427); if (state.failed) return;
					t2=(Token)match(input,52,FOLLOW_52_in_relationalOp6431); if (state.failed) return;
					if ( !(( t1.getLine() == t2.getLine() && 
					          t1.getCharPositionInLine() + 1 == t2.getCharPositionInLine() )) ) {
						if (state.backtracking>0) {state.failed=true; return;}
						throw new FailedPredicateException(input, "relationalOp", " $t1.getLine() == $t2.getLine() && \r\n          $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() ");
					}
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1437:9: ( '>' '=' )=>t1= '>' t2= '=' {...}?
					{
					t1=(Token)match(input,54,FOLLOW_54_in_relationalOp6461); if (state.failed) return;
					t2=(Token)match(input,52,FOLLOW_52_in_relationalOp6465); if (state.failed) return;
					if ( !(( t1.getLine() == t2.getLine() && 
					          t1.getCharPositionInLine() + 1 == t2.getCharPositionInLine() )) ) {
						if (state.backtracking>0) {state.failed=true; return;}
						throw new FailedPredicateException(input, "relationalOp", " $t1.getLine() == $t2.getLine() && \r\n          $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() ");
					}
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:1440:9: '<'
					{
					match(input,51,FOLLOW_51_in_relationalOp6486); if (state.failed) return;
					}
					break;
				case 4 :
					// org/argouml/language/java/reveng/Java.g:1441:9: '>'
					{
					match(input,54,FOLLOW_54_in_relationalOp6497); if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 117, relationalOp_StartIndex); }

		}
	}
	// $ANTLR end "relationalOp"



	// $ANTLR start "shiftExpression"
	// org/argouml/language/java/reveng/Java.g:1444:1: shiftExpression : additiveExpression ( shiftOp additiveExpression )* ;
	public final void shiftExpression() throws RecognitionException {
		int shiftExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 118) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1445:5: ( additiveExpression ( shiftOp additiveExpression )* )
			// org/argouml/language/java/reveng/Java.g:1445:9: additiveExpression ( shiftOp additiveExpression )*
			{
			pushFollow(FOLLOW_additiveExpression_in_shiftExpression6517);
			additiveExpression();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1445:28: ( shiftOp additiveExpression )*
			loop139:
			while (true) {
				int alt139=2;
				alt139 = dfa139.predict(input);
				switch (alt139) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1445:30: shiftOp additiveExpression
					{
					pushFollow(FOLLOW_shiftOp_in_shiftExpression6521);
					shiftOp();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_additiveExpression_in_shiftExpression6523);
					additiveExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop139;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 118, shiftExpression_StartIndex); }

		}
	}
	// $ANTLR end "shiftExpression"



	// $ANTLR start "shiftOp"
	// org/argouml/language/java/reveng/Java.g:1448:1: shiftOp : ( ( '<' '<' )=>t1= '<' t2= '<' {...}?| ( '>' '>' '>' )=>t1= '>' t2= '>' t3= '>' {...}?| ( '>' '>' )=>t1= '>' t2= '>' {...}?);
	public final void shiftOp() throws RecognitionException {
		int shiftOp_StartIndex = input.index();

		Token t1=null;
		Token t2=null;
		Token t3=null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 119) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1449:5: ( ( '<' '<' )=>t1= '<' t2= '<' {...}?| ( '>' '>' '>' )=>t1= '>' t2= '>' t3= '>' {...}?| ( '>' '>' )=>t1= '>' t2= '>' {...}?)
			int alt140=3;
			int LA140_0 = input.LA(1);
			if ( (LA140_0==51) && (synpred216_Java())) {
				alt140=1;
			}
			else if ( (LA140_0==54) ) {
				int LA140_2 = input.LA(2);
				if ( (LA140_2==54) ) {
					int LA140_3 = input.LA(3);
					if ( (synpred217_Java()) ) {
						alt140=2;
					}
					else if ( (synpred218_Java()) ) {
						alt140=3;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 140, 3, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 140, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 140, 0, input);
				throw nvae;
			}

			switch (alt140) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1449:9: ( '<' '<' )=>t1= '<' t2= '<' {...}?
					{
					t1=(Token)match(input,51,FOLLOW_51_in_shiftOp6554); if (state.failed) return;
					t2=(Token)match(input,51,FOLLOW_51_in_shiftOp6558); if (state.failed) return;
					if ( !(( t1.getLine() == t2.getLine() && 
					          t1.getCharPositionInLine() + 1 == t2.getCharPositionInLine() )) ) {
						if (state.backtracking>0) {state.failed=true; return;}
						throw new FailedPredicateException(input, "shiftOp", " $t1.getLine() == $t2.getLine() && \r\n          $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() ");
					}
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1452:9: ( '>' '>' '>' )=>t1= '>' t2= '>' t3= '>' {...}?
					{
					t1=(Token)match(input,54,FOLLOW_54_in_shiftOp6590); if (state.failed) return;
					t2=(Token)match(input,54,FOLLOW_54_in_shiftOp6594); if (state.failed) return;
					t3=(Token)match(input,54,FOLLOW_54_in_shiftOp6598); if (state.failed) return;
					if ( !(( t1.getLine() == t2.getLine() && 
					          t1.getCharPositionInLine() + 1 == t2.getCharPositionInLine() &&
					          t2.getLine() == t3.getLine() && 
					          t2.getCharPositionInLine() + 1 == t3.getCharPositionInLine() )) ) {
						if (state.backtracking>0) {state.failed=true; return;}
						throw new FailedPredicateException(input, "shiftOp", " $t1.getLine() == $t2.getLine() && \r\n          $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() &&\r\n          $t2.getLine() == $t3.getLine() && \r\n          $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() ");
					}
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:1457:9: ( '>' '>' )=>t1= '>' t2= '>' {...}?
					{
					t1=(Token)match(input,54,FOLLOW_54_in_shiftOp6628); if (state.failed) return;
					t2=(Token)match(input,54,FOLLOW_54_in_shiftOp6632); if (state.failed) return;
					if ( !(( t1.getLine() == t2.getLine() && 
					          t1.getCharPositionInLine() + 1 == t2.getCharPositionInLine() )) ) {
						if (state.backtracking>0) {state.failed=true; return;}
						throw new FailedPredicateException(input, "shiftOp", " $t1.getLine() == $t2.getLine() && \r\n          $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() ");
					}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 119, shiftOp_StartIndex); }

		}
	}
	// $ANTLR end "shiftOp"



	// $ANTLR start "additiveExpression"
	// org/argouml/language/java/reveng/Java.g:1463:1: additiveExpression : multiplicativeExpression ( ( '+' | '-' ) multiplicativeExpression )* ;
	public final void additiveExpression() throws RecognitionException {
		int additiveExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 120) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1464:5: ( multiplicativeExpression ( ( '+' | '-' ) multiplicativeExpression )* )
			// org/argouml/language/java/reveng/Java.g:1464:9: multiplicativeExpression ( ( '+' | '-' ) multiplicativeExpression )*
			{
			pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression6662);
			multiplicativeExpression();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1464:34: ( ( '+' | '-' ) multiplicativeExpression )*
			loop141:
			while (true) {
				int alt141=2;
				int LA141_0 = input.LA(1);
				if ( (LA141_0==38||LA141_0==42) ) {
					alt141=1;
				}

				switch (alt141) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1464:36: ( '+' | '-' ) multiplicativeExpression
					{
					if ( input.LA(1)==38||input.LA(1)==42 ) {
						input.consume();
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression6674);
					multiplicativeExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop141;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 120, additiveExpression_StartIndex); }

		}
	}
	// $ANTLR end "additiveExpression"



	// $ANTLR start "multiplicativeExpression"
	// org/argouml/language/java/reveng/Java.g:1467:1: multiplicativeExpression : unaryExpression ( ( '*' | '/' | '%' ) unaryExpression )* ;
	public final void multiplicativeExpression() throws RecognitionException {
		int multiplicativeExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 121) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1468:5: ( unaryExpression ( ( '*' | '/' | '%' ) unaryExpression )* )
			// org/argouml/language/java/reveng/Java.g:1468:9: unaryExpression ( ( '*' | '/' | '%' ) unaryExpression )*
			{
			pushFollow(FOLLOW_unaryExpression_in_multiplicativeExpression6696);
			unaryExpression();
			state._fsp--;
			if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1468:25: ( ( '*' | '/' | '%' ) unaryExpression )*
			loop142:
			while (true) {
				int alt142=2;
				int LA142_0 = input.LA(1);
				if ( (LA142_0==29||LA142_0==36||LA142_0==47) ) {
					alt142=1;
				}

				switch (alt142) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1468:27: ( '*' | '/' | '%' ) unaryExpression
					{
					if ( input.LA(1)==29||input.LA(1)==36||input.LA(1)==47 ) {
						input.consume();
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_unaryExpression_in_multiplicativeExpression6714);
					unaryExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop142;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 121, multiplicativeExpression_StartIndex); }

		}
	}
	// $ANTLR end "multiplicativeExpression"



	// $ANTLR start "unaryExpression"
	// org/argouml/language/java/reveng/Java.g:1471:1: unaryExpression : ( '+' unaryExpression | '-' unaryExpression | '++' unaryExpression | '--' unaryExpression | unaryExpressionNotPlusMinus );
	public final void unaryExpression() throws RecognitionException {
		int unaryExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 122) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1472:5: ( '+' unaryExpression | '-' unaryExpression | '++' unaryExpression | '--' unaryExpression | unaryExpressionNotPlusMinus )
			int alt143=5;
			switch ( input.LA(1) ) {
			case 38:
				{
				alt143=1;
				}
				break;
			case 42:
				{
				alt143=2;
				}
				break;
			case 39:
				{
				alt143=3;
				}
				break;
			case 43:
				{
				alt143=4;
				}
				break;
			case CharacterLiteral:
			case DecimalLiteral:
			case FloatingPointLiteral:
			case HexLiteral:
			case Identifier:
			case OctalLiteral:
			case StringLiteral:
			case 27:
			case 34:
			case 62:
			case 64:
			case 67:
			case 72:
			case 75:
			case 78:
			case 84:
			case 86:
			case 88:
			case 89:
			case 95:
			case 98:
			case 101:
			case 105:
			case 107:
			case 115:
				{
				alt143=5;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 143, 0, input);
				throw nvae;
			}
			switch (alt143) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1472:9: '+' unaryExpression
					{
					match(input,38,FOLLOW_38_in_unaryExpression6740); if (state.failed) return;
					pushFollow(FOLLOW_unaryExpression_in_unaryExpression6742);
					unaryExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1473:9: '-' unaryExpression
					{
					match(input,42,FOLLOW_42_in_unaryExpression6752); if (state.failed) return;
					pushFollow(FOLLOW_unaryExpression_in_unaryExpression6754);
					unaryExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:1474:9: '++' unaryExpression
					{
					match(input,39,FOLLOW_39_in_unaryExpression6764); if (state.failed) return;
					pushFollow(FOLLOW_unaryExpression_in_unaryExpression6766);
					unaryExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// org/argouml/language/java/reveng/Java.g:1475:9: '--' unaryExpression
					{
					match(input,43,FOLLOW_43_in_unaryExpression6776); if (state.failed) return;
					pushFollow(FOLLOW_unaryExpression_in_unaryExpression6778);
					unaryExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// org/argouml/language/java/reveng/Java.g:1476:9: unaryExpressionNotPlusMinus
					{
					pushFollow(FOLLOW_unaryExpressionNotPlusMinus_in_unaryExpression6788);
					unaryExpressionNotPlusMinus();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 122, unaryExpression_StartIndex); }

		}
	}
	// $ANTLR end "unaryExpression"



	// $ANTLR start "unaryExpressionNotPlusMinus"
	// org/argouml/language/java/reveng/Java.g:1479:1: unaryExpressionNotPlusMinus : ( '~' unaryExpression | '!' unaryExpression | castExpression | primary ( selector )* ( '++' | '--' )? );
	public final void unaryExpressionNotPlusMinus() throws RecognitionException {
		int unaryExpressionNotPlusMinus_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 123) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1480:5: ( '~' unaryExpression | '!' unaryExpression | castExpression | primary ( selector )* ( '++' | '--' )? )
			int alt146=4;
			switch ( input.LA(1) ) {
			case 115:
				{
				alt146=1;
				}
				break;
			case 27:
				{
				alt146=2;
				}
				break;
			case 34:
				{
				switch ( input.LA(2) ) {
				case 62:
				case 64:
				case 67:
				case 72:
				case 78:
				case 84:
				case 86:
				case 95:
					{
					int LA146_16 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case Identifier:
					{
					int LA146_17 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case 38:
					{
					int LA146_18 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case 42:
					{
					int LA146_19 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case 39:
					{
					int LA146_20 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case 43:
					{
					int LA146_21 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case 115:
					{
					int LA146_22 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case 27:
					{
					int LA146_23 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case 34:
					{
					int LA146_24 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case 101:
					{
					int LA146_25 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case 98:
					{
					int LA146_26 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case DecimalLiteral:
				case HexLiteral:
				case OctalLiteral:
					{
					int LA146_27 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case FloatingPointLiteral:
					{
					int LA146_28 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case CharacterLiteral:
					{
					int LA146_29 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case StringLiteral:
					{
					int LA146_30 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case 75:
				case 105:
					{
					int LA146_31 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case 89:
					{
					int LA146_32 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case 88:
					{
					int LA146_33 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				case 107:
					{
					int LA146_34 = input.LA(3);
					if ( (synpred230_Java()) ) {
						alt146=3;
					}
					else if ( (true) ) {
						alt146=4;
					}

					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 146, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case CharacterLiteral:
			case DecimalLiteral:
			case FloatingPointLiteral:
			case HexLiteral:
			case Identifier:
			case OctalLiteral:
			case StringLiteral:
			case 62:
			case 64:
			case 67:
			case 72:
			case 75:
			case 78:
			case 84:
			case 86:
			case 88:
			case 89:
			case 95:
			case 98:
			case 101:
			case 105:
			case 107:
				{
				alt146=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 146, 0, input);
				throw nvae;
			}
			switch (alt146) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1480:9: '~' unaryExpression
					{
					match(input,115,FOLLOW_115_in_unaryExpressionNotPlusMinus6807); if (state.failed) return;
					pushFollow(FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus6809);
					unaryExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1481:9: '!' unaryExpression
					{
					match(input,27,FOLLOW_27_in_unaryExpressionNotPlusMinus6819); if (state.failed) return;
					pushFollow(FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus6821);
					unaryExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:1482:9: castExpression
					{
					pushFollow(FOLLOW_castExpression_in_unaryExpressionNotPlusMinus6831);
					castExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// org/argouml/language/java/reveng/Java.g:1483:9: primary ( selector )* ( '++' | '--' )?
					{
					pushFollow(FOLLOW_primary_in_unaryExpressionNotPlusMinus6841);
					primary();
					state._fsp--;
					if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1483:17: ( selector )*
					loop144:
					while (true) {
						int alt144=2;
						int LA144_0 = input.LA(1);
						if ( (LA144_0==45||LA144_0==57) ) {
							alt144=1;
						}

						switch (alt144) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1483:17: selector
							{
							pushFollow(FOLLOW_selector_in_unaryExpressionNotPlusMinus6843);
							selector();
							state._fsp--;
							if (state.failed) return;
							}
							break;

						default :
							break loop144;
						}
					}

					// org/argouml/language/java/reveng/Java.g:1483:27: ( '++' | '--' )?
					int alt145=2;
					int LA145_0 = input.LA(1);
					if ( (LA145_0==39||LA145_0==43) ) {
						alt145=1;
					}
					switch (alt145) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:
							{
							if ( input.LA(1)==39||input.LA(1)==43 ) {
								input.consume();
								state.errorRecovery=false;
								state.failed=false;
							}
							else {
								if (state.backtracking>0) {state.failed=true; return;}
								MismatchedSetException mse = new MismatchedSetException(null,input);
								throw mse;
							}
							}
							break;

					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 123, unaryExpressionNotPlusMinus_StartIndex); }

		}
	}
	// $ANTLR end "unaryExpressionNotPlusMinus"



	// $ANTLR start "castExpression"
	// org/argouml/language/java/reveng/Java.g:1486:1: castExpression : ( '(' primitiveType ')' unaryExpression | '(' ( type | expression ) ')' unaryExpressionNotPlusMinus );
	public final void castExpression() throws RecognitionException {
		int castExpression_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 124) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1487:5: ( '(' primitiveType ')' unaryExpression | '(' ( type | expression ) ')' unaryExpressionNotPlusMinus )
			int alt148=2;
			int LA148_0 = input.LA(1);
			if ( (LA148_0==34) ) {
				int LA148_1 = input.LA(2);
				if ( (LA148_1==62||LA148_1==64||LA148_1==67||LA148_1==72||LA148_1==78||LA148_1==84||LA148_1==86||LA148_1==95) ) {
					int LA148_2 = input.LA(3);
					if ( (synpred234_Java()) ) {
						alt148=1;
					}
					else if ( (true) ) {
						alt148=2;
					}

				}
				else if ( ((LA148_1 >= CharacterLiteral && LA148_1 <= DecimalLiteral)||LA148_1==FloatingPointLiteral||(LA148_1 >= HexLiteral && LA148_1 <= Identifier)||(LA148_1 >= OctalLiteral && LA148_1 <= StringLiteral)||LA148_1==27||LA148_1==34||(LA148_1 >= 38 && LA148_1 <= 39)||(LA148_1 >= 42 && LA148_1 <= 43)||LA148_1==75||(LA148_1 >= 88 && LA148_1 <= 89)||LA148_1==98||LA148_1==101||LA148_1==105||LA148_1==107||LA148_1==115) ) {
					alt148=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 148, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 148, 0, input);
				throw nvae;
			}

			switch (alt148) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1487:8: '(' primitiveType ')' unaryExpression
					{
					match(input,34,FOLLOW_34_in_castExpression6869); if (state.failed) return;
					pushFollow(FOLLOW_primitiveType_in_castExpression6871);
					primitiveType();
					state._fsp--;
					if (state.failed) return;
					match(input,35,FOLLOW_35_in_castExpression6873); if (state.failed) return;
					pushFollow(FOLLOW_unaryExpression_in_castExpression6875);
					unaryExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1488:8: '(' ( type | expression ) ')' unaryExpressionNotPlusMinus
					{
					match(input,34,FOLLOW_34_in_castExpression6884); if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1488:12: ( type | expression )
					int alt147=2;
					switch ( input.LA(1) ) {
					case Identifier:
						{
						int LA147_1 = input.LA(2);
						if ( (synpred235_Java()) ) {
							alt147=1;
						}
						else if ( (true) ) {
							alt147=2;
						}

						}
						break;
					case 62:
					case 64:
					case 67:
					case 72:
					case 78:
					case 84:
					case 86:
					case 95:
						{
						switch ( input.LA(2) ) {
						case 57:
							{
							int LA147_47 = input.LA(3);
							if ( (synpred235_Java()) ) {
								alt147=1;
							}
							else if ( (true) ) {
								alt147=2;
							}

							}
							break;
						case 35:
							{
							alt147=1;
							}
							break;
						case 45:
							{
							alt147=2;
							}
							break;
						default:
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								input.consume();
								NoViableAltException nvae =
									new NoViableAltException("", 147, 2, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}
						}
						break;
					case CharacterLiteral:
					case DecimalLiteral:
					case FloatingPointLiteral:
					case HexLiteral:
					case OctalLiteral:
					case StringLiteral:
					case 27:
					case 34:
					case 38:
					case 39:
					case 42:
					case 43:
					case 75:
					case 88:
					case 89:
					case 98:
					case 101:
					case 105:
					case 107:
					case 115:
						{
						alt147=2;
						}
						break;
					default:
						if (state.backtracking>0) {state.failed=true; return;}
						NoViableAltException nvae =
							new NoViableAltException("", 147, 0, input);
						throw nvae;
					}
					switch (alt147) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1488:13: type
							{
							pushFollow(FOLLOW_type_in_castExpression6887);
							type();
							state._fsp--;
							if (state.failed) return;
							}
							break;
						case 2 :
							// org/argouml/language/java/reveng/Java.g:1488:20: expression
							{
							pushFollow(FOLLOW_expression_in_castExpression6891);
							expression();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					match(input,35,FOLLOW_35_in_castExpression6894); if (state.failed) return;
					pushFollow(FOLLOW_unaryExpressionNotPlusMinus_in_castExpression6896);
					unaryExpressionNotPlusMinus();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 124, castExpression_StartIndex); }

		}
	}
	// $ANTLR end "castExpression"



	// $ANTLR start "primary"
	// org/argouml/language/java/reveng/Java.g:1491:1: primary : ( parExpression | 'this' ( '.' id= Identifier )* ( identifierSuffix )? | 'super' superSuffix | literal | 'new' creator |id= Identifier ( '.' id= Identifier )* ( identifierSuffix )? | primitiveType ( '[' ']' )* '.' 'class' | 'void' '.' 'class' );
	public final void primary() throws RecognitionException {
		int primary_StartIndex = input.index();

		Token id=null;


		        String name = null;
		        boolean parenths = false; //LA(1) == LPAREN;
		    
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 125) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1496:5: ( parExpression | 'this' ( '.' id= Identifier )* ( identifierSuffix )? | 'super' superSuffix | literal | 'new' creator |id= Identifier ( '.' id= Identifier )* ( identifierSuffix )? | primitiveType ( '[' ']' )* '.' 'class' | 'void' '.' 'class' )
			int alt154=8;
			switch ( input.LA(1) ) {
			case 34:
				{
				alt154=1;
				}
				break;
			case 101:
				{
				alt154=2;
				}
				break;
			case 98:
				{
				alt154=3;
				}
				break;
			case CharacterLiteral:
			case DecimalLiteral:
			case FloatingPointLiteral:
			case HexLiteral:
			case OctalLiteral:
			case StringLiteral:
			case 75:
			case 89:
			case 105:
				{
				alt154=4;
				}
				break;
			case 88:
				{
				alt154=5;
				}
				break;
			case Identifier:
				{
				alt154=6;
				}
				break;
			case 62:
			case 64:
			case 67:
			case 72:
			case 78:
			case 84:
			case 86:
			case 95:
				{
				alt154=7;
				}
				break;
			case 107:
				{
				alt154=8;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 154, 0, input);
				throw nvae;
			}
			switch (alt154) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1496:9: parExpression
					{
					pushFollow(FOLLOW_parExpression_in_primary6923);
					parExpression();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1497:9: 'this' ( '.' id= Identifier )* ( identifierSuffix )?
					{
					match(input,101,FOLLOW_101_in_primary6933); if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1497:16: ( '.' id= Identifier )*
					loop149:
					while (true) {
						int alt149=2;
						int LA149_0 = input.LA(1);
						if ( (LA149_0==45) ) {
							int LA149_3 = input.LA(2);
							if ( (LA149_3==Identifier) ) {
								int LA149_37 = input.LA(3);
								if ( (synpred237_Java()) ) {
									alt149=1;
								}

							}

						}

						switch (alt149) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1497:17: '.' id= Identifier
							{
							match(input,45,FOLLOW_45_in_primary6936); if (state.failed) return;
							id=(Token)match(input,Identifier,FOLLOW_Identifier_in_primary6940); if (state.failed) return;
							if ( state.backtracking==0 ) { name = (id!=null?id.getText():null); }
							}
							break;

						default :
							break loop149;
						}
					}

					// org/argouml/language/java/reveng/Java.g:1498:9: ( identifierSuffix )?
					int alt150=2;
					switch ( input.LA(1) ) {
						case 57:
							{
							switch ( input.LA(2) ) {
								case 58:
									{
									alt150=1;
									}
									break;
								case 38:
									{
									int LA150_34 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 42:
									{
									int LA150_35 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 39:
									{
									int LA150_36 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 43:
									{
									int LA150_37 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 115:
									{
									int LA150_38 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 27:
									{
									int LA150_39 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 34:
									{
									int LA150_40 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 101:
									{
									int LA150_41 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 98:
									{
									int LA150_42 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case DecimalLiteral:
								case HexLiteral:
								case OctalLiteral:
									{
									int LA150_43 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case FloatingPointLiteral:
									{
									int LA150_44 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case CharacterLiteral:
									{
									int LA150_45 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case StringLiteral:
									{
									int LA150_46 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 75:
								case 105:
									{
									int LA150_47 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 89:
									{
									int LA150_48 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 88:
									{
									int LA150_49 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case Identifier:
									{
									int LA150_50 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 62:
								case 64:
								case 67:
								case 72:
								case 78:
								case 84:
								case 86:
								case 95:
									{
									int LA150_51 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 107:
									{
									int LA150_52 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
							}
							}
							break;
						case 34:
							{
							alt150=1;
							}
							break;
						case 45:
							{
							switch ( input.LA(2) ) {
								case 68:
									{
									alt150=1;
									}
									break;
								case 101:
									{
									int LA150_54 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 98:
									{
									int LA150_55 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 88:
									{
									int LA150_56 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
								case 51:
									{
									int LA150_58 = input.LA(3);
									if ( (synpred238_Java()) ) {
										alt150=1;
									}
									}
									break;
							}
							}
							break;
					}
					switch (alt150) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1498:10: identifierSuffix
							{
							pushFollow(FOLLOW_identifierSuffix_in_primary6956);
							identifierSuffix();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) { parenths = true; }
							}
							break;

					}

					if ( state.backtracking==0 ) { if ((parserMode & MODE_REVENG_SEQUENCE) != 0) {
					              addDotCall(name, "this.", parenths);
					          }
					        }
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:1503:9: 'super' superSuffix
					{
					match(input,98,FOLLOW_98_in_primary6981); if (state.failed) return;
					pushFollow(FOLLOW_superSuffix_in_primary6983);
					superSuffix();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { if ((parserMode & MODE_REVENG_SEQUENCE) != 0) {
					              addDotCall(name, "super.", true);
					          }
					        }
					}
					break;
				case 4 :
					// org/argouml/language/java/reveng/Java.g:1508:9: literal
					{
					pushFollow(FOLLOW_literal_in_primary7003);
					literal();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// org/argouml/language/java/reveng/Java.g:1509:9: 'new' creator
					{
					match(input,88,FOLLOW_88_in_primary7013); if (state.failed) return;
					pushFollow(FOLLOW_creator_in_primary7015);
					creator();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 6 :
					// org/argouml/language/java/reveng/Java.g:1510:9: id= Identifier ( '.' id= Identifier )* ( identifierSuffix )?
					{
					id=(Token)match(input,Identifier,FOLLOW_Identifier_in_primary7027); if (state.failed) return;
					if ( state.backtracking==0 ) { name = (id!=null?id.getText():null); }
					// org/argouml/language/java/reveng/Java.g:1511:9: ( '.' id= Identifier )*
					loop151:
					while (true) {
						int alt151=2;
						int LA151_0 = input.LA(1);
						if ( (LA151_0==45) ) {
							int LA151_3 = input.LA(2);
							if ( (LA151_3==Identifier) ) {
								int LA151_37 = input.LA(3);
								if ( (synpred243_Java()) ) {
									alt151=1;
								}

							}

						}

						switch (alt151) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1511:10: '.' id= Identifier
							{
							match(input,45,FOLLOW_45_in_primary7041); if (state.failed) return;
							id=(Token)match(input,Identifier,FOLLOW_Identifier_in_primary7045); if (state.failed) return;
							if ( state.backtracking==0 ) { name = (id!=null?id.getText():null); }
							}
							break;

						default :
							break loop151;
						}
					}

					// org/argouml/language/java/reveng/Java.g:1512:9: ( identifierSuffix )?
					int alt152=2;
					switch ( input.LA(1) ) {
						case 57:
							{
							switch ( input.LA(2) ) {
								case 58:
									{
									alt152=1;
									}
									break;
								case 38:
									{
									int LA152_34 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 42:
									{
									int LA152_35 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 39:
									{
									int LA152_36 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 43:
									{
									int LA152_37 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 115:
									{
									int LA152_38 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 27:
									{
									int LA152_39 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 34:
									{
									int LA152_40 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 101:
									{
									int LA152_41 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 98:
									{
									int LA152_42 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case DecimalLiteral:
								case HexLiteral:
								case OctalLiteral:
									{
									int LA152_43 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case FloatingPointLiteral:
									{
									int LA152_44 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case CharacterLiteral:
									{
									int LA152_45 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case StringLiteral:
									{
									int LA152_46 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 75:
								case 105:
									{
									int LA152_47 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 89:
									{
									int LA152_48 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 88:
									{
									int LA152_49 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case Identifier:
									{
									int LA152_50 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 62:
								case 64:
								case 67:
								case 72:
								case 78:
								case 84:
								case 86:
								case 95:
									{
									int LA152_51 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 107:
									{
									int LA152_52 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
							}
							}
							break;
						case 34:
							{
							alt152=1;
							}
							break;
						case 45:
							{
							switch ( input.LA(2) ) {
								case 68:
									{
									alt152=1;
									}
									break;
								case 101:
									{
									int LA152_54 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 98:
									{
									int LA152_55 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 88:
									{
									int LA152_56 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
								case 51:
									{
									int LA152_58 = input.LA(3);
									if ( (synpred244_Java()) ) {
										alt152=1;
									}
									}
									break;
							}
							}
							break;
					}
					switch (alt152) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1512:10: identifierSuffix
							{
							pushFollow(FOLLOW_identifierSuffix_in_primary7061);
							identifierSuffix();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) { parenths = true; }
							}
							break;

					}

					if ( state.backtracking==0 ) { if ((parserMode & MODE_REVENG_SEQUENCE) != 0) {
					              addDotCall(name, null, parenths);
					          }
					        }
					}
					break;
				case 7 :
					// org/argouml/language/java/reveng/Java.g:1517:9: primitiveType ( '[' ']' )* '.' 'class'
					{
					pushFollow(FOLLOW_primitiveType_in_primary7086);
					primitiveType();
					state._fsp--;
					if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1517:23: ( '[' ']' )*
					loop153:
					while (true) {
						int alt153=2;
						int LA153_0 = input.LA(1);
						if ( (LA153_0==57) ) {
							alt153=1;
						}

						switch (alt153) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1517:24: '[' ']'
							{
							match(input,57,FOLLOW_57_in_primary7089); if (state.failed) return;
							match(input,58,FOLLOW_58_in_primary7091); if (state.failed) return;
							}
							break;

						default :
							break loop153;
						}
					}

					match(input,45,FOLLOW_45_in_primary7095); if (state.failed) return;
					match(input,68,FOLLOW_68_in_primary7097); if (state.failed) return;
					}
					break;
				case 8 :
					// org/argouml/language/java/reveng/Java.g:1518:9: 'void' '.' 'class'
					{
					match(input,107,FOLLOW_107_in_primary7107); if (state.failed) return;
					match(input,45,FOLLOW_45_in_primary7109); if (state.failed) return;
					match(input,68,FOLLOW_68_in_primary7111); if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 125, primary_StartIndex); }

		}
	}
	// $ANTLR end "primary"



	// $ANTLR start "identifierSuffix"
	// org/argouml/language/java/reveng/Java.g:1521:1: identifierSuffix : ( ( '[' ']' )+ '.' 'class' | ( '[' expression ']' )+ | arguments | '.' 'class' | '.' explicitGenericInvocation | '.' 'this' | '.' 'super' arguments | '.' 'new' innerCreator );
	public final void identifierSuffix() throws RecognitionException {
		int identifierSuffix_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 126) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1522:5: ( ( '[' ']' )+ '.' 'class' | ( '[' expression ']' )+ | arguments | '.' 'class' | '.' explicitGenericInvocation | '.' 'this' | '.' 'super' arguments | '.' 'new' innerCreator )
			int alt157=8;
			switch ( input.LA(1) ) {
			case 57:
				{
				int LA157_1 = input.LA(2);
				if ( (LA157_1==58) ) {
					alt157=1;
				}
				else if ( ((LA157_1 >= CharacterLiteral && LA157_1 <= DecimalLiteral)||LA157_1==FloatingPointLiteral||(LA157_1 >= HexLiteral && LA157_1 <= Identifier)||(LA157_1 >= OctalLiteral && LA157_1 <= StringLiteral)||LA157_1==27||LA157_1==34||(LA157_1 >= 38 && LA157_1 <= 39)||(LA157_1 >= 42 && LA157_1 <= 43)||LA157_1==62||LA157_1==64||LA157_1==67||LA157_1==72||LA157_1==75||LA157_1==78||LA157_1==84||LA157_1==86||(LA157_1 >= 88 && LA157_1 <= 89)||LA157_1==95||LA157_1==98||LA157_1==101||LA157_1==105||LA157_1==107||LA157_1==115) ) {
					alt157=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 157, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case 34:
				{
				alt157=3;
				}
				break;
			case 45:
				{
				switch ( input.LA(2) ) {
				case 68:
					{
					alt157=4;
					}
					break;
				case 101:
					{
					alt157=6;
					}
					break;
				case 98:
					{
					alt157=7;
					}
					break;
				case 88:
					{
					alt157=8;
					}
					break;
				case 51:
					{
					alt157=5;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 157, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 157, 0, input);
				throw nvae;
			}
			switch (alt157) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1522:9: ( '[' ']' )+ '.' 'class'
					{
					// org/argouml/language/java/reveng/Java.g:1522:9: ( '[' ']' )+
					int cnt155=0;
					loop155:
					while (true) {
						int alt155=2;
						int LA155_0 = input.LA(1);
						if ( (LA155_0==57) ) {
							alt155=1;
						}

						switch (alt155) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1522:10: '[' ']'
							{
							match(input,57,FOLLOW_57_in_identifierSuffix7131); if (state.failed) return;
							match(input,58,FOLLOW_58_in_identifierSuffix7133); if (state.failed) return;
							}
							break;

						default :
							if ( cnt155 >= 1 ) break loop155;
							if (state.backtracking>0) {state.failed=true; return;}
							EarlyExitException eee = new EarlyExitException(155, input);
							throw eee;
						}
						cnt155++;
					}

					match(input,45,FOLLOW_45_in_identifierSuffix7137); if (state.failed) return;
					match(input,68,FOLLOW_68_in_identifierSuffix7139); if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1523:9: ( '[' expression ']' )+
					{
					// org/argouml/language/java/reveng/Java.g:1523:9: ( '[' expression ']' )+
					int cnt156=0;
					loop156:
					while (true) {
						int alt156=2;
						int LA156_0 = input.LA(1);
						if ( (LA156_0==57) ) {
							switch ( input.LA(2) ) {
							case 38:
								{
								int LA156_32 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case 42:
								{
								int LA156_33 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case 39:
								{
								int LA156_34 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case 43:
								{
								int LA156_35 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case 115:
								{
								int LA156_36 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case 27:
								{
								int LA156_37 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case 34:
								{
								int LA156_38 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case 101:
								{
								int LA156_39 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case 98:
								{
								int LA156_40 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case DecimalLiteral:
							case HexLiteral:
							case OctalLiteral:
								{
								int LA156_41 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case FloatingPointLiteral:
								{
								int LA156_42 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case CharacterLiteral:
								{
								int LA156_43 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case StringLiteral:
								{
								int LA156_44 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case 75:
							case 105:
								{
								int LA156_45 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case 89:
								{
								int LA156_46 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case 88:
								{
								int LA156_47 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case Identifier:
								{
								int LA156_48 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case 62:
							case 64:
							case 67:
							case 72:
							case 78:
							case 84:
							case 86:
							case 95:
								{
								int LA156_49 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							case 107:
								{
								int LA156_50 = input.LA(3);
								if ( (synpred250_Java()) ) {
									alt156=1;
								}

								}
								break;
							}
						}

						switch (alt156) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1523:10: '[' expression ']'
							{
							match(input,57,FOLLOW_57_in_identifierSuffix7150); if (state.failed) return;
							pushFollow(FOLLOW_expression_in_identifierSuffix7152);
							expression();
							state._fsp--;
							if (state.failed) return;
							match(input,58,FOLLOW_58_in_identifierSuffix7154); if (state.failed) return;
							}
							break;

						default :
							if ( cnt156 >= 1 ) break loop156;
							if (state.backtracking>0) {state.failed=true; return;}
							EarlyExitException eee = new EarlyExitException(156, input);
							throw eee;
						}
						cnt156++;
					}

					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:1524:9: arguments
					{
					pushFollow(FOLLOW_arguments_in_identifierSuffix7167);
					arguments();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// org/argouml/language/java/reveng/Java.g:1525:9: '.' 'class'
					{
					match(input,45,FOLLOW_45_in_identifierSuffix7177); if (state.failed) return;
					match(input,68,FOLLOW_68_in_identifierSuffix7179); if (state.failed) return;
					}
					break;
				case 5 :
					// org/argouml/language/java/reveng/Java.g:1526:9: '.' explicitGenericInvocation
					{
					match(input,45,FOLLOW_45_in_identifierSuffix7189); if (state.failed) return;
					pushFollow(FOLLOW_explicitGenericInvocation_in_identifierSuffix7191);
					explicitGenericInvocation();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 6 :
					// org/argouml/language/java/reveng/Java.g:1527:9: '.' 'this'
					{
					match(input,45,FOLLOW_45_in_identifierSuffix7201); if (state.failed) return;
					match(input,101,FOLLOW_101_in_identifierSuffix7203); if (state.failed) return;
					}
					break;
				case 7 :
					// org/argouml/language/java/reveng/Java.g:1528:9: '.' 'super' arguments
					{
					match(input,45,FOLLOW_45_in_identifierSuffix7213); if (state.failed) return;
					match(input,98,FOLLOW_98_in_identifierSuffix7215); if (state.failed) return;
					pushFollow(FOLLOW_arguments_in_identifierSuffix7217);
					arguments();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 8 :
					// org/argouml/language/java/reveng/Java.g:1529:9: '.' 'new' innerCreator
					{
					match(input,45,FOLLOW_45_in_identifierSuffix7227); if (state.failed) return;
					match(input,88,FOLLOW_88_in_identifierSuffix7229); if (state.failed) return;
					pushFollow(FOLLOW_innerCreator_in_identifierSuffix7231);
					innerCreator();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 126, identifierSuffix_StartIndex); }

		}
	}
	// $ANTLR end "identifierSuffix"



	// $ANTLR start "creator"
	// org/argouml/language/java/reveng/Java.g:1532:1: creator : ( nonWildcardTypeArguments t= createdName classCreatorRest[$t.text] |t= createdName ( arrayCreatorRest | classCreatorRest[$t.text] ) );
	public final void creator() throws RecognitionException {
		int creator_StartIndex = input.index();

		ParserRuleReturnScope t =null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 127) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1533:5: ( nonWildcardTypeArguments t= createdName classCreatorRest[$t.text] |t= createdName ( arrayCreatorRest | classCreatorRest[$t.text] ) )
			int alt159=2;
			int LA159_0 = input.LA(1);
			if ( (LA159_0==51) ) {
				alt159=1;
			}
			else if ( (LA159_0==Identifier||LA159_0==62||LA159_0==64||LA159_0==67||LA159_0==72||LA159_0==78||LA159_0==84||LA159_0==86||LA159_0==95) ) {
				alt159=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 159, 0, input);
				throw nvae;
			}

			switch (alt159) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1533:9: nonWildcardTypeArguments t= createdName classCreatorRest[$t.text]
					{
					pushFollow(FOLLOW_nonWildcardTypeArguments_in_creator7250);
					nonWildcardTypeArguments();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_createdName_in_creator7254);
					t=createdName();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_classCreatorRest_in_creator7256);
					classCreatorRest((t!=null?input.toString(t.start,t.stop):null));
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1534:9: t= createdName ( arrayCreatorRest | classCreatorRest[$t.text] )
					{
					pushFollow(FOLLOW_createdName_in_creator7269);
					t=createdName();
					state._fsp--;
					if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1534:23: ( arrayCreatorRest | classCreatorRest[$t.text] )
					int alt158=2;
					int LA158_0 = input.LA(1);
					if ( (LA158_0==57) ) {
						alt158=1;
					}
					else if ( (LA158_0==34) ) {
						alt158=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						NoViableAltException nvae =
							new NoViableAltException("", 158, 0, input);
						throw nvae;
					}

					switch (alt158) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1534:24: arrayCreatorRest
							{
							pushFollow(FOLLOW_arrayCreatorRest_in_creator7272);
							arrayCreatorRest();
							state._fsp--;
							if (state.failed) return;
							}
							break;
						case 2 :
							// org/argouml/language/java/reveng/Java.g:1534:43: classCreatorRest[$t.text]
							{
							pushFollow(FOLLOW_classCreatorRest_in_creator7276);
							classCreatorRest((t!=null?input.toString(t.start,t.stop):null));
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 127, creator_StartIndex); }

		}
	}
	// $ANTLR end "creator"


	public static class createdName_return extends ParserRuleReturnScope {
	};


	// $ANTLR start "createdName"
	// org/argouml/language/java/reveng/Java.g:1537:1: createdName : ( classOrInterfaceType | primitiveType );
	public final JavaParser.createdName_return createdName() throws RecognitionException {
		JavaParser.createdName_return retval = new JavaParser.createdName_return();
		retval.start = input.LT(1);
		int createdName_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 128) ) { return retval; }

			// org/argouml/language/java/reveng/Java.g:1538:5: ( classOrInterfaceType | primitiveType )
			int alt160=2;
			int LA160_0 = input.LA(1);
			if ( (LA160_0==Identifier) ) {
				alt160=1;
			}
			else if ( (LA160_0==62||LA160_0==64||LA160_0==67||LA160_0==72||LA160_0==78||LA160_0==84||LA160_0==86||LA160_0==95) ) {
				alt160=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 160, 0, input);
				throw nvae;
			}

			switch (alt160) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1538:9: classOrInterfaceType
					{
					pushFollow(FOLLOW_classOrInterfaceType_in_createdName7297);
					classOrInterfaceType();
					state._fsp--;
					if (state.failed) return retval;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1539:9: primitiveType
					{
					pushFollow(FOLLOW_primitiveType_in_createdName7307);
					primitiveType();
					state._fsp--;
					if (state.failed) return retval;
					}
					break;

			}
			retval.stop = input.LT(-1);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 128, createdName_StartIndex); }

		}
		return retval;
	}
	// $ANTLR end "createdName"



	// $ANTLR start "innerCreator"
	// org/argouml/language/java/reveng/Java.g:1542:1: innerCreator : ( nonWildcardTypeArguments )? t= Identifier classCreatorRest[$t.text] ;
	public final void innerCreator() throws RecognitionException {
		int innerCreator_StartIndex = input.index();

		Token t=null;

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 129) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1543:5: ( ( nonWildcardTypeArguments )? t= Identifier classCreatorRest[$t.text] )
			// org/argouml/language/java/reveng/Java.g:1543:9: ( nonWildcardTypeArguments )? t= Identifier classCreatorRest[$t.text]
			{
			// org/argouml/language/java/reveng/Java.g:1543:9: ( nonWildcardTypeArguments )?
			int alt161=2;
			int LA161_0 = input.LA(1);
			if ( (LA161_0==51) ) {
				alt161=1;
			}
			switch (alt161) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1543:10: nonWildcardTypeArguments
					{
					pushFollow(FOLLOW_nonWildcardTypeArguments_in_innerCreator7331);
					nonWildcardTypeArguments();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			t=(Token)match(input,Identifier,FOLLOW_Identifier_in_innerCreator7337); if (state.failed) return;
			pushFollow(FOLLOW_classCreatorRest_in_innerCreator7339);
			classCreatorRest((t!=null?t.getText():null));
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 129, innerCreator_StartIndex); }

		}
	}
	// $ANTLR end "innerCreator"



	// $ANTLR start "arrayCreatorRest"
	// org/argouml/language/java/reveng/Java.g:1546:1: arrayCreatorRest : '[' ( ']' ( '[' ']' )* arrayInitializer | expression ']' ( '[' expression ']' )* ( '[' ']' )* ) ;
	public final void arrayCreatorRest() throws RecognitionException {
		int arrayCreatorRest_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 130) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1547:5: ( '[' ( ']' ( '[' ']' )* arrayInitializer | expression ']' ( '[' expression ']' )* ( '[' ']' )* ) )
			// org/argouml/language/java/reveng/Java.g:1547:9: '[' ( ']' ( '[' ']' )* arrayInitializer | expression ']' ( '[' expression ']' )* ( '[' ']' )* )
			{
			match(input,57,FOLLOW_57_in_arrayCreatorRest7359); if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1548:9: ( ']' ( '[' ']' )* arrayInitializer | expression ']' ( '[' expression ']' )* ( '[' ']' )* )
			int alt165=2;
			int LA165_0 = input.LA(1);
			if ( (LA165_0==58) ) {
				alt165=1;
			}
			else if ( ((LA165_0 >= CharacterLiteral && LA165_0 <= DecimalLiteral)||LA165_0==FloatingPointLiteral||(LA165_0 >= HexLiteral && LA165_0 <= Identifier)||(LA165_0 >= OctalLiteral && LA165_0 <= StringLiteral)||LA165_0==27||LA165_0==34||(LA165_0 >= 38 && LA165_0 <= 39)||(LA165_0 >= 42 && LA165_0 <= 43)||LA165_0==62||LA165_0==64||LA165_0==67||LA165_0==72||LA165_0==75||LA165_0==78||LA165_0==84||LA165_0==86||(LA165_0 >= 88 && LA165_0 <= 89)||LA165_0==95||LA165_0==98||LA165_0==101||LA165_0==105||LA165_0==107||LA165_0==115) ) {
				alt165=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 165, 0, input);
				throw nvae;
			}

			switch (alt165) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1548:13: ']' ( '[' ']' )* arrayInitializer
					{
					match(input,58,FOLLOW_58_in_arrayCreatorRest7373); if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1548:17: ( '[' ']' )*
					loop162:
					while (true) {
						int alt162=2;
						int LA162_0 = input.LA(1);
						if ( (LA162_0==57) ) {
							alt162=1;
						}

						switch (alt162) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1548:18: '[' ']'
							{
							match(input,57,FOLLOW_57_in_arrayCreatorRest7376); if (state.failed) return;
							match(input,58,FOLLOW_58_in_arrayCreatorRest7378); if (state.failed) return;
							}
							break;

						default :
							break loop162;
						}
					}

					pushFollow(FOLLOW_arrayInitializer_in_arrayCreatorRest7382);
					arrayInitializer();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1549:13: expression ']' ( '[' expression ']' )* ( '[' ']' )*
					{
					pushFollow(FOLLOW_expression_in_arrayCreatorRest7396);
					expression();
					state._fsp--;
					if (state.failed) return;
					match(input,58,FOLLOW_58_in_arrayCreatorRest7398); if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1549:28: ( '[' expression ']' )*
					loop163:
					while (true) {
						int alt163=2;
						int LA163_0 = input.LA(1);
						if ( (LA163_0==57) ) {
							switch ( input.LA(2) ) {
							case 38:
								{
								int LA163_33 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case 42:
								{
								int LA163_34 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case 39:
								{
								int LA163_35 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case 43:
								{
								int LA163_36 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case 115:
								{
								int LA163_37 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case 27:
								{
								int LA163_38 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case 34:
								{
								int LA163_39 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case 101:
								{
								int LA163_40 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case 98:
								{
								int LA163_41 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case DecimalLiteral:
							case HexLiteral:
							case OctalLiteral:
								{
								int LA163_42 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case FloatingPointLiteral:
								{
								int LA163_43 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case CharacterLiteral:
								{
								int LA163_44 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case StringLiteral:
								{
								int LA163_45 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case 75:
							case 105:
								{
								int LA163_46 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case 89:
								{
								int LA163_47 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case 88:
								{
								int LA163_48 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case Identifier:
								{
								int LA163_49 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case 62:
							case 64:
							case 67:
							case 72:
							case 78:
							case 84:
							case 86:
							case 95:
								{
								int LA163_50 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							case 107:
								{
								int LA163_51 = input.LA(3);
								if ( (synpred263_Java()) ) {
									alt163=1;
								}

								}
								break;
							}
						}

						switch (alt163) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1549:29: '[' expression ']'
							{
							match(input,57,FOLLOW_57_in_arrayCreatorRest7401); if (state.failed) return;
							pushFollow(FOLLOW_expression_in_arrayCreatorRest7403);
							expression();
							state._fsp--;
							if (state.failed) return;
							match(input,58,FOLLOW_58_in_arrayCreatorRest7405); if (state.failed) return;
							}
							break;

						default :
							break loop163;
						}
					}

					// org/argouml/language/java/reveng/Java.g:1549:50: ( '[' ']' )*
					loop164:
					while (true) {
						int alt164=2;
						int LA164_0 = input.LA(1);
						if ( (LA164_0==57) ) {
							int LA164_2 = input.LA(2);
							if ( (LA164_2==58) ) {
								alt164=1;
							}

						}

						switch (alt164) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1549:51: '[' ']'
							{
							match(input,57,FOLLOW_57_in_arrayCreatorRest7410); if (state.failed) return;
							match(input,58,FOLLOW_58_in_arrayCreatorRest7412); if (state.failed) return;
							}
							break;

						default :
							break loop164;
						}
					}

					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 130, arrayCreatorRest_StartIndex); }

		}
	}
	// $ANTLR end "arrayCreatorRest"



	// $ANTLR start "classCreatorRest"
	// org/argouml/language/java/reveng/Java.g:1553:1: classCreatorRest[String t] : arguments ( classBody )? ;
	public final void classCreatorRest(String t) throws RecognitionException {
		int classCreatorRest_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 131) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1554:5: ( arguments ( classBody )? )
			// org/argouml/language/java/reveng/Java.g:1554:9: arguments ( classBody )?
			{
			pushFollow(FOLLOW_arguments_in_classCreatorRest7444);
			arguments();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { if ((parserMode & MODE_REVENG_SEQUENCE) != 0) {
			            StringBuffer sb = new StringBuffer();
			            if (";".equals(input.LT(1).getText()) && createdObjectVarName != null) {
			              sb.append(createdObjectVarName).append('=');
			            }
			            sb.append("new ").append(t);
			            getModeller().addCall(sb.toString());
			          }
			        }
			// org/argouml/language/java/reveng/Java.g:1564:9: ( classBody )?
			int alt166=2;
			int LA166_0 = input.LA(1);
			if ( (LA166_0==110) ) {
				alt166=1;
			}
			switch (alt166) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1565:13: classBody
					{
					if ( state.backtracking==0 ) {
					                getModeller().addAnonymousClass(t,
					                    (parserMode == MODE_IMPORT_PASS2));
					            }
					pushFollow(FOLLOW_classBody_in_classCreatorRest7492);
					classBody();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {
					                getModeller().popClassifier();
					            }
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 131, classCreatorRest_StartIndex); }

		}
	}
	// $ANTLR end "classCreatorRest"



	// $ANTLR start "explicitGenericInvocation"
	// org/argouml/language/java/reveng/Java.g:1576:1: explicitGenericInvocation : nonWildcardTypeArguments Identifier arguments ;
	public final void explicitGenericInvocation() throws RecognitionException {
		int explicitGenericInvocation_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 132) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1577:5: ( nonWildcardTypeArguments Identifier arguments )
			// org/argouml/language/java/reveng/Java.g:1577:9: nonWildcardTypeArguments Identifier arguments
			{
			pushFollow(FOLLOW_nonWildcardTypeArguments_in_explicitGenericInvocation7540);
			nonWildcardTypeArguments();
			state._fsp--;
			if (state.failed) return;
			match(input,Identifier,FOLLOW_Identifier_in_explicitGenericInvocation7542); if (state.failed) return;
			pushFollow(FOLLOW_arguments_in_explicitGenericInvocation7544);
			arguments();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 132, explicitGenericInvocation_StartIndex); }

		}
	}
	// $ANTLR end "explicitGenericInvocation"



	// $ANTLR start "nonWildcardTypeArguments"
	// org/argouml/language/java/reveng/Java.g:1580:1: nonWildcardTypeArguments : '<' typeList '>' ;
	public final void nonWildcardTypeArguments() throws RecognitionException {
		int nonWildcardTypeArguments_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 133) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1581:5: ( '<' typeList '>' )
			// org/argouml/language/java/reveng/Java.g:1581:9: '<' typeList '>'
			{
			match(input,51,FOLLOW_51_in_nonWildcardTypeArguments7567); if (state.failed) return;
			pushFollow(FOLLOW_typeList_in_nonWildcardTypeArguments7569);
			typeList();
			state._fsp--;
			if (state.failed) return;
			match(input,54,FOLLOW_54_in_nonWildcardTypeArguments7571); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 133, nonWildcardTypeArguments_StartIndex); }

		}
	}
	// $ANTLR end "nonWildcardTypeArguments"



	// $ANTLR start "selector"
	// org/argouml/language/java/reveng/Java.g:1584:1: selector : ( '.' Identifier ( arguments )? | '.' 'this' | '.' 'super' superSuffix | '.' 'new' innerCreator | '[' expression ']' );
	public final void selector() throws RecognitionException {
		int selector_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 134) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1585:5: ( '.' Identifier ( arguments )? | '.' 'this' | '.' 'super' superSuffix | '.' 'new' innerCreator | '[' expression ']' )
			int alt168=5;
			int LA168_0 = input.LA(1);
			if ( (LA168_0==45) ) {
				switch ( input.LA(2) ) {
				case Identifier:
					{
					alt168=1;
					}
					break;
				case 101:
					{
					alt168=2;
					}
					break;
				case 98:
					{
					alt168=3;
					}
					break;
				case 88:
					{
					alt168=4;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 168, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
			}
			else if ( (LA168_0==57) ) {
				alt168=5;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 168, 0, input);
				throw nvae;
			}

			switch (alt168) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1585:9: '.' Identifier ( arguments )?
					{
					match(input,45,FOLLOW_45_in_selector7594); if (state.failed) return;
					match(input,Identifier,FOLLOW_Identifier_in_selector7596); if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1585:24: ( arguments )?
					int alt167=2;
					int LA167_0 = input.LA(1);
					if ( (LA167_0==34) ) {
						alt167=1;
					}
					switch (alt167) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1585:25: arguments
							{
							pushFollow(FOLLOW_arguments_in_selector7599);
							arguments();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1586:9: '.' 'this'
					{
					match(input,45,FOLLOW_45_in_selector7611); if (state.failed) return;
					match(input,101,FOLLOW_101_in_selector7613); if (state.failed) return;
					}
					break;
				case 3 :
					// org/argouml/language/java/reveng/Java.g:1587:9: '.' 'super' superSuffix
					{
					match(input,45,FOLLOW_45_in_selector7623); if (state.failed) return;
					match(input,98,FOLLOW_98_in_selector7625); if (state.failed) return;
					pushFollow(FOLLOW_superSuffix_in_selector7627);
					superSuffix();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// org/argouml/language/java/reveng/Java.g:1588:9: '.' 'new' innerCreator
					{
					match(input,45,FOLLOW_45_in_selector7637); if (state.failed) return;
					match(input,88,FOLLOW_88_in_selector7639); if (state.failed) return;
					pushFollow(FOLLOW_innerCreator_in_selector7641);
					innerCreator();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// org/argouml/language/java/reveng/Java.g:1589:9: '[' expression ']'
					{
					match(input,57,FOLLOW_57_in_selector7651); if (state.failed) return;
					pushFollow(FOLLOW_expression_in_selector7653);
					expression();
					state._fsp--;
					if (state.failed) return;
					match(input,58,FOLLOW_58_in_selector7655); if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 134, selector_StartIndex); }

		}
	}
	// $ANTLR end "selector"



	// $ANTLR start "superSuffix"
	// org/argouml/language/java/reveng/Java.g:1592:1: superSuffix : ( arguments | '.' Identifier ( arguments )? );
	public final void superSuffix() throws RecognitionException {
		int superSuffix_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 135) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1593:5: ( arguments | '.' Identifier ( arguments )? )
			int alt170=2;
			int LA170_0 = input.LA(1);
			if ( (LA170_0==34) ) {
				alt170=1;
			}
			else if ( (LA170_0==45) ) {
				alt170=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 170, 0, input);
				throw nvae;
			}

			switch (alt170) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1593:9: arguments
					{
					pushFollow(FOLLOW_arguments_in_superSuffix7678);
					arguments();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// org/argouml/language/java/reveng/Java.g:1594:9: '.' Identifier ( arguments )?
					{
					match(input,45,FOLLOW_45_in_superSuffix7688); if (state.failed) return;
					match(input,Identifier,FOLLOW_Identifier_in_superSuffix7690); if (state.failed) return;
					// org/argouml/language/java/reveng/Java.g:1594:24: ( arguments )?
					int alt169=2;
					int LA169_0 = input.LA(1);
					if ( (LA169_0==34) ) {
						alt169=1;
					}
					switch (alt169) {
						case 1 :
							// org/argouml/language/java/reveng/Java.g:1594:25: arguments
							{
							pushFollow(FOLLOW_arguments_in_superSuffix7693);
							arguments();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 135, superSuffix_StartIndex); }

		}
	}
	// $ANTLR end "superSuffix"



	// $ANTLR start "arguments"
	// org/argouml/language/java/reveng/Java.g:1597:1: arguments : '(' ( expressionList )? ')' ;
	public final void arguments() throws RecognitionException {
		int arguments_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 136) ) { return; }

			// org/argouml/language/java/reveng/Java.g:1598:5: ( '(' ( expressionList )? ')' )
			// org/argouml/language/java/reveng/Java.g:1598:9: '(' ( expressionList )? ')'
			{
			match(input,34,FOLLOW_34_in_arguments7714); if (state.failed) return;
			// org/argouml/language/java/reveng/Java.g:1598:13: ( expressionList )?
			int alt171=2;
			int LA171_0 = input.LA(1);
			if ( ((LA171_0 >= CharacterLiteral && LA171_0 <= DecimalLiteral)||LA171_0==FloatingPointLiteral||(LA171_0 >= HexLiteral && LA171_0 <= Identifier)||(LA171_0 >= OctalLiteral && LA171_0 <= StringLiteral)||LA171_0==27||LA171_0==34||(LA171_0 >= 38 && LA171_0 <= 39)||(LA171_0 >= 42 && LA171_0 <= 43)||LA171_0==62||LA171_0==64||LA171_0==67||LA171_0==72||LA171_0==75||LA171_0==78||LA171_0==84||LA171_0==86||(LA171_0 >= 88 && LA171_0 <= 89)||LA171_0==95||LA171_0==98||LA171_0==101||LA171_0==105||LA171_0==107||LA171_0==115) ) {
				alt171=1;
			}
			switch (alt171) {
				case 1 :
					// org/argouml/language/java/reveng/Java.g:1598:13: expressionList
					{
					pushFollow(FOLLOW_expressionList_in_arguments7716);
					expressionList();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			match(input,35,FOLLOW_35_in_arguments7719); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 136, arguments_StartIndex); }

		}
	}
	// $ANTLR end "arguments"

	// $ANTLR start synpred1_Java
	public final void synpred1_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:433:9: ( '@' )
		// org/argouml/language/java/reveng/Java.g:433:10: '@'
		{
		match(input,56,FOLLOW_56_in_synpred1_Java108); if (state.failed) return;
		}

	}
	// $ANTLR end synpred1_Java

	// $ANTLR start synpred114_Java
	public final void synpred114_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1096:13: ( explicitConstructorInvocation )
		// org/argouml/language/java/reveng/Java.g:1096:13: explicitConstructorInvocation
		{
		pushFollow(FOLLOW_explicitConstructorInvocation_in_synpred114_Java4163);
		explicitConstructorInvocation();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred114_Java

	// $ANTLR start synpred118_Java
	public final void synpred118_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1111:9: ( ( nonWildcardTypeArguments )? ( 'this' | 'super' ) arguments ';' )
		// org/argouml/language/java/reveng/Java.g:1111:9: ( nonWildcardTypeArguments )? ( 'this' | 'super' ) arguments ';'
		{
		// org/argouml/language/java/reveng/Java.g:1111:9: ( nonWildcardTypeArguments )?
		int alt181=2;
		int LA181_0 = input.LA(1);
		if ( (LA181_0==51) ) {
			alt181=1;
		}
		switch (alt181) {
			case 1 :
				// org/argouml/language/java/reveng/Java.g:1111:10: nonWildcardTypeArguments
				{
				pushFollow(FOLLOW_nonWildcardTypeArguments_in_synpred118_Java4199);
				nonWildcardTypeArguments();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		if ( input.LA(1)==98||input.LA(1)==101 ) {
			input.consume();
			state.errorRecovery=false;
			state.failed=false;
		}
		else {
			if (state.backtracking>0) {state.failed=true; return;}
			MismatchedSetException mse = new MismatchedSetException(null,input);
			throw mse;
		}
		pushFollow(FOLLOW_arguments_in_synpred118_Java4211);
		arguments();
		state._fsp--;
		if (state.failed) return;
		match(input,50,FOLLOW_50_in_synpred118_Java4213); if (state.failed) return;
		}

	}
	// $ANTLR end synpred118_Java

	// $ANTLR start synpred129_Java
	public final void synpred129_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1143:9: ( annotation )
		// org/argouml/language/java/reveng/Java.g:1143:9: annotation
		{
		pushFollow(FOLLOW_annotation_in_synpred129_Java4424);
		annotation();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred129_Java

	// $ANTLR start synpred152_Java
	public final void synpred152_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1248:9: ( localVariableDeclarationStatement )
		// org/argouml/language/java/reveng/Java.g:1248:9: localVariableDeclarationStatement
		{
		pushFollow(FOLLOW_localVariableDeclarationStatement_in_synpred152_Java5018);
		localVariableDeclarationStatement();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred152_Java

	// $ANTLR start synpred153_Java
	public final void synpred153_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1249:9: ( classOrInterfaceDeclaration )
		// org/argouml/language/java/reveng/Java.g:1249:9: classOrInterfaceDeclaration
		{
		pushFollow(FOLLOW_classOrInterfaceDeclaration_in_synpred153_Java5028);
		classOrInterfaceDeclaration();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred153_Java

	// $ANTLR start synpred158_Java
	public final void synpred158_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1276:54: ( 'else' statement )
		// org/argouml/language/java/reveng/Java.g:1276:54: 'else' statement
		{
		match(input,73,FOLLOW_73_in_synpred158_Java5199); if (state.failed) return;
		pushFollow(FOLLOW_statement_in_synpred158_Java5201);
		statement();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred158_Java

	// $ANTLR start synpred163_Java
	public final void synpred163_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1281:11: ( catches 'finally' block )
		// org/argouml/language/java/reveng/Java.g:1281:11: catches 'finally' block
		{
		pushFollow(FOLLOW_catches_in_synpred163_Java5277);
		catches();
		state._fsp--;
		if (state.failed) return;
		match(input,77,FOLLOW_77_in_synpred163_Java5279); if (state.failed) return;
		pushFollow(FOLLOW_block_in_synpred163_Java5281);
		block();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred163_Java

	// $ANTLR start synpred164_Java
	public final void synpred164_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1282:11: ( catches )
		// org/argouml/language/java/reveng/Java.g:1282:11: catches
		{
		pushFollow(FOLLOW_catches_in_synpred164_Java5293);
		catches();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred164_Java

	// $ANTLR start synpred179_Java
	public final void synpred179_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1317:9: ( switchLabel )
		// org/argouml/language/java/reveng/Java.g:1317:9: switchLabel
		{
		pushFollow(FOLLOW_switchLabel_in_synpred179_Java5584);
		switchLabel();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred179_Java

	// $ANTLR start synpred181_Java
	public final void synpred181_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1321:9: ( 'case' constantExpression ':' )
		// org/argouml/language/java/reveng/Java.g:1321:9: 'case' constantExpression ':'
		{
		match(input,65,FOLLOW_65_in_synpred181_Java5611); if (state.failed) return;
		pushFollow(FOLLOW_constantExpression_in_synpred181_Java5613);
		constantExpression();
		state._fsp--;
		if (state.failed) return;
		match(input,49,FOLLOW_49_in_synpred181_Java5615); if (state.failed) return;
		}

	}
	// $ANTLR end synpred181_Java

	// $ANTLR start synpred182_Java
	public final void synpred182_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1322:9: ( 'case' enumConstantName ':' )
		// org/argouml/language/java/reveng/Java.g:1322:9: 'case' enumConstantName ':'
		{
		match(input,65,FOLLOW_65_in_synpred182_Java5625); if (state.failed) return;
		pushFollow(FOLLOW_enumConstantName_in_synpred182_Java5627);
		enumConstantName();
		state._fsp--;
		if (state.failed) return;
		match(input,49,FOLLOW_49_in_synpred182_Java5629); if (state.failed) return;
		}

	}
	// $ANTLR end synpred182_Java

	// $ANTLR start synpred183_Java
	public final void synpred183_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1328:9: ( enhancedForControl )
		// org/argouml/language/java/reveng/Java.g:1328:9: enhancedForControl
		{
		pushFollow(FOLLOW_enhancedForControl_in_synpred183_Java5672);
		enhancedForControl();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred183_Java

	// $ANTLR start synpred187_Java
	public final void synpred187_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1333:9: ( localVariableDeclaration )
		// org/argouml/language/java/reveng/Java.g:1333:9: localVariableDeclaration
		{
		pushFollow(FOLLOW_localVariableDeclaration_in_synpred187_Java5712);
		localVariableDeclaration();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred187_Java

	// $ANTLR start synpred189_Java
	public final void synpred189_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1365:32: ( assignmentOperator expression )
		// org/argouml/language/java/reveng/Java.g:1365:32: assignmentOperator expression
		{
		pushFollow(FOLLOW_assignmentOperator_in_synpred189_Java5904);
		assignmentOperator();
		state._fsp--;
		if (state.failed) return;
		pushFollow(FOLLOW_expression_in_synpred189_Java5906);
		expression();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred189_Java

	// $ANTLR start synpred199_Java
	public final void synpred199_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1378:9: ( '<' '<' '=' )
		// org/argouml/language/java/reveng/Java.g:1378:10: '<' '<' '='
		{
		match(input,51,FOLLOW_51_in_synpred199_Java6022); if (state.failed) return;
		match(input,51,FOLLOW_51_in_synpred199_Java6024); if (state.failed) return;
		match(input,52,FOLLOW_52_in_synpred199_Java6026); if (state.failed) return;
		}

	}
	// $ANTLR end synpred199_Java

	// $ANTLR start synpred200_Java
	public final void synpred200_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1383:9: ( '>' '>' '>' '=' )
		// org/argouml/language/java/reveng/Java.g:1383:10: '>' '>' '>' '='
		{
		match(input,54,FOLLOW_54_in_synpred200_Java6062); if (state.failed) return;
		match(input,54,FOLLOW_54_in_synpred200_Java6064); if (state.failed) return;
		match(input,54,FOLLOW_54_in_synpred200_Java6066); if (state.failed) return;
		match(input,52,FOLLOW_52_in_synpred200_Java6068); if (state.failed) return;
		}

	}
	// $ANTLR end synpred200_Java

	// $ANTLR start synpred201_Java
	public final void synpred201_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1390:9: ( '>' '>' '=' )
		// org/argouml/language/java/reveng/Java.g:1390:10: '>' '>' '='
		{
		match(input,54,FOLLOW_54_in_synpred201_Java6107); if (state.failed) return;
		match(input,54,FOLLOW_54_in_synpred201_Java6109); if (state.failed) return;
		match(input,52,FOLLOW_52_in_synpred201_Java6111); if (state.failed) return;
		}

	}
	// $ANTLR end synpred201_Java

	// $ANTLR start synpred212_Java
	public final void synpred212_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1434:9: ( '<' '=' )
		// org/argouml/language/java/reveng/Java.g:1434:10: '<' '='
		{
		match(input,51,FOLLOW_51_in_synpred212_Java6419); if (state.failed) return;
		match(input,52,FOLLOW_52_in_synpred212_Java6421); if (state.failed) return;
		}

	}
	// $ANTLR end synpred212_Java

	// $ANTLR start synpred213_Java
	public final void synpred213_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1437:9: ( '>' '=' )
		// org/argouml/language/java/reveng/Java.g:1437:10: '>' '='
		{
		match(input,54,FOLLOW_54_in_synpred213_Java6453); if (state.failed) return;
		match(input,52,FOLLOW_52_in_synpred213_Java6455); if (state.failed) return;
		}

	}
	// $ANTLR end synpred213_Java

	// $ANTLR start synpred215_Java
	public final void synpred215_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1445:30: ( shiftOp additiveExpression )
		// org/argouml/language/java/reveng/Java.g:1445:30: shiftOp additiveExpression
		{
		pushFollow(FOLLOW_shiftOp_in_synpred215_Java6521);
		shiftOp();
		state._fsp--;
		if (state.failed) return;
		pushFollow(FOLLOW_additiveExpression_in_synpred215_Java6523);
		additiveExpression();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred215_Java

	// $ANTLR start synpred216_Java
	public final void synpred216_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1449:9: ( '<' '<' )
		// org/argouml/language/java/reveng/Java.g:1449:10: '<' '<'
		{
		match(input,51,FOLLOW_51_in_synpred216_Java6546); if (state.failed) return;
		match(input,51,FOLLOW_51_in_synpred216_Java6548); if (state.failed) return;
		}

	}
	// $ANTLR end synpred216_Java

	// $ANTLR start synpred217_Java
	public final void synpred217_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1452:9: ( '>' '>' '>' )
		// org/argouml/language/java/reveng/Java.g:1452:10: '>' '>' '>'
		{
		match(input,54,FOLLOW_54_in_synpred217_Java6580); if (state.failed) return;
		match(input,54,FOLLOW_54_in_synpred217_Java6582); if (state.failed) return;
		match(input,54,FOLLOW_54_in_synpred217_Java6584); if (state.failed) return;
		}

	}
	// $ANTLR end synpred217_Java

	// $ANTLR start synpred218_Java
	public final void synpred218_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1457:9: ( '>' '>' )
		// org/argouml/language/java/reveng/Java.g:1457:10: '>' '>'
		{
		match(input,54,FOLLOW_54_in_synpred218_Java6620); if (state.failed) return;
		match(input,54,FOLLOW_54_in_synpred218_Java6622); if (state.failed) return;
		}

	}
	// $ANTLR end synpred218_Java

	// $ANTLR start synpred230_Java
	public final void synpred230_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1482:9: ( castExpression )
		// org/argouml/language/java/reveng/Java.g:1482:9: castExpression
		{
		pushFollow(FOLLOW_castExpression_in_synpred230_Java6831);
		castExpression();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred230_Java

	// $ANTLR start synpred234_Java
	public final void synpred234_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1487:8: ( '(' primitiveType ')' unaryExpression )
		// org/argouml/language/java/reveng/Java.g:1487:8: '(' primitiveType ')' unaryExpression
		{
		match(input,34,FOLLOW_34_in_synpred234_Java6869); if (state.failed) return;
		pushFollow(FOLLOW_primitiveType_in_synpred234_Java6871);
		primitiveType();
		state._fsp--;
		if (state.failed) return;
		match(input,35,FOLLOW_35_in_synpred234_Java6873); if (state.failed) return;
		pushFollow(FOLLOW_unaryExpression_in_synpred234_Java6875);
		unaryExpression();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred234_Java

	// $ANTLR start synpred235_Java
	public final void synpred235_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1488:13: ( type )
		// org/argouml/language/java/reveng/Java.g:1488:13: type
		{
		pushFollow(FOLLOW_type_in_synpred235_Java6887);
		type();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred235_Java

	// $ANTLR start synpred237_Java
	public final void synpred237_Java_fragment() throws RecognitionException {
		Token id=null;

		// org/argouml/language/java/reveng/Java.g:1497:17: ( '.' id= Identifier )
		// org/argouml/language/java/reveng/Java.g:1497:17: '.' id= Identifier
		{
		match(input,45,FOLLOW_45_in_synpred237_Java6936); if (state.failed) return;
		id=(Token)match(input,Identifier,FOLLOW_Identifier_in_synpred237_Java6940); if (state.failed) return;
		}

	}
	// $ANTLR end synpred237_Java

	// $ANTLR start synpred238_Java
	public final void synpred238_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1498:10: ( identifierSuffix )
		// org/argouml/language/java/reveng/Java.g:1498:10: identifierSuffix
		{
		pushFollow(FOLLOW_identifierSuffix_in_synpred238_Java6956);
		identifierSuffix();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred238_Java

	// $ANTLR start synpred243_Java
	public final void synpred243_Java_fragment() throws RecognitionException {
		Token id=null;

		// org/argouml/language/java/reveng/Java.g:1511:10: ( '.' id= Identifier )
		// org/argouml/language/java/reveng/Java.g:1511:10: '.' id= Identifier
		{
		match(input,45,FOLLOW_45_in_synpred243_Java7041); if (state.failed) return;
		id=(Token)match(input,Identifier,FOLLOW_Identifier_in_synpred243_Java7045); if (state.failed) return;
		}

	}
	// $ANTLR end synpred243_Java

	// $ANTLR start synpred244_Java
	public final void synpred244_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1512:10: ( identifierSuffix )
		// org/argouml/language/java/reveng/Java.g:1512:10: identifierSuffix
		{
		pushFollow(FOLLOW_identifierSuffix_in_synpred244_Java7061);
		identifierSuffix();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred244_Java

	// $ANTLR start synpred250_Java
	public final void synpred250_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1523:10: ( '[' expression ']' )
		// org/argouml/language/java/reveng/Java.g:1523:10: '[' expression ']'
		{
		match(input,57,FOLLOW_57_in_synpred250_Java7150); if (state.failed) return;
		pushFollow(FOLLOW_expression_in_synpred250_Java7152);
		expression();
		state._fsp--;
		if (state.failed) return;
		match(input,58,FOLLOW_58_in_synpred250_Java7154); if (state.failed) return;
		}

	}
	// $ANTLR end synpred250_Java

	// $ANTLR start synpred263_Java
	public final void synpred263_Java_fragment() throws RecognitionException {
		// org/argouml/language/java/reveng/Java.g:1549:29: ( '[' expression ']' )
		// org/argouml/language/java/reveng/Java.g:1549:29: '[' expression ']'
		{
		match(input,57,FOLLOW_57_in_synpred263_Java7401); if (state.failed) return;
		pushFollow(FOLLOW_expression_in_synpred263_Java7403);
		expression();
		state._fsp--;
		if (state.failed) return;
		match(input,58,FOLLOW_58_in_synpred263_Java7405); if (state.failed) return;
		}

	}
	// $ANTLR end synpred263_Java

	// Delegated rules

	public final boolean synpred164_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred164_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred153_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred153_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred181_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred181_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred217_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred217_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred1_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred1_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred183_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred183_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred114_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred114_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred230_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred230_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred158_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred158_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred213_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred213_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred216_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred216_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred152_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred152_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred189_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred189_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred244_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred244_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred163_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred163_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred263_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred263_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred201_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred201_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred218_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred218_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred182_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred182_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred243_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred243_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred212_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred212_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred215_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred215_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred235_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred235_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred199_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred199_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred238_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred238_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred237_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred237_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred129_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred129_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred200_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred200_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred118_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred118_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred179_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred179_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred234_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred234_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred187_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred187_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred250_Java() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred250_Java_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}


	protected DFA82 dfa82 = new DFA82(this);
	protected DFA107 dfa107 = new DFA107(this);
	protected DFA115 dfa115 = new DFA115(this);
	protected DFA118 dfa118 = new DFA118(this);
	protected DFA124 dfa124 = new DFA124(this);
	protected DFA127 dfa127 = new DFA127(this);
	protected DFA137 dfa137 = new DFA137(this);
	protected DFA139 dfa139 = new DFA139(this);
	static final String DFA82_eotS =
		"\u0117\uffff";
	static final String DFA82_eofS =
		"\u0117\uffff";
	static final String DFA82_minS =
		"\1\4\1\uffff\1\34\1\6\1\42\6\34\3\20\1\55\40\uffff\3\0\27\uffff\26\0\30"+
		"\uffff\1\0\30\uffff\1\0\30\uffff\1\0\30\uffff\1\0\30\uffff\1\0\30\uffff"+
		"\3\0\1\uffff\3\0\30\uffff\2\0\1\uffff\1\0";
	static final String DFA82_maxS =
		"\1\163\1\uffff\1\161\1\163\1\55\6\161\1\137\1\161\1\71\1\55\40\uffff\3"+
		"\0\27\uffff\26\0\30\uffff\1\0\30\uffff\1\0\30\uffff\1\0\30\uffff\1\0\30"+
		"\uffff\1\0\30\uffff\3\0\1\uffff\3\0\30\uffff\2\0\1\uffff\1\0";
	static final String DFA82_acceptS =
		"\1\uffff\1\1\15\uffff\1\2\u0107\uffff";
	static final String DFA82_specialS =
		"\57\uffff\1\0\1\1\1\2\27\uffff\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13"+
		"\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27\1\30\30\uffff"+
		"\1\31\30\uffff\1\32\30\uffff\1\33\30\uffff\1\34\30\uffff\1\35\30\uffff"+
		"\1\36\1\37\1\40\1\uffff\1\41\1\42\1\43\30\uffff\1\44\1\45\1\uffff\1\46}>";
	static final String[] DFA82_transitionS = {
			"\1\17\1\uffff\1\7\1\5\1\uffff\1\17\3\uffff\1\6\1\uffff\1\5\1\14\6\uffff"+
			"\1\5\1\10\2\uffff\1\17\6\uffff\1\3\3\uffff\2\17\2\uffff\2\17\6\uffff"+
			"\1\17\1\1\4\uffff\1\17\4\uffff\1\17\1\15\1\17\1\15\2\uffff\1\15\2\17"+
			"\1\uffff\1\17\1\15\2\uffff\1\11\1\17\1\uffff\1\15\2\17\3\uffff\1\15\1"+
			"\17\1\15\1\uffff\1\13\1\12\1\uffff\4\17\1\15\2\17\1\4\2\17\1\2\1\17\2"+
			"\uffff\1\11\1\17\1\16\1\uffff\2\17\3\uffff\2\17",
			"",
			"\6\17\1\57\1\uffff\5\17\1\uffff\3\17\1\60\1\uffff\2\17\1\uffff\6\17"+
			"\1\uffff\1\61\1\uffff\2\17\26\uffff\1\17\33\uffff\3\17",
			"\1\124\1\122\5\uffff\1\123\1\uffff\1\122\1\131\6\uffff\1\122\1\125\2"+
			"\uffff\1\116\6\uffff\1\117\3\uffff\1\111\1\113\2\uffff\1\112\1\114\22"+
			"\uffff\1\132\1\uffff\1\132\2\uffff\1\132\4\uffff\1\132\2\uffff\1\126"+
			"\2\uffff\1\132\5\uffff\1\132\1\uffff\1\132\1\uffff\1\130\1\127\5\uffff"+
			"\1\132\2\uffff\1\121\2\uffff\1\120\3\uffff\1\126\1\uffff\1\133\7\uffff"+
			"\1\115",
			"\1\134\12\uffff\1\135",
			"\6\17\2\uffff\5\17\1\uffff\3\17\1\136\1\uffff\2\17\1\uffff\6\17\1\uffff"+
			"\1\17\1\uffff\2\17\26\uffff\1\17\33\uffff\3\17",
			"\6\17\2\uffff\5\17\1\uffff\3\17\1\167\1\uffff\2\17\1\uffff\6\17\1\uffff"+
			"\1\17\1\uffff\2\17\26\uffff\1\17\33\uffff\3\17",
			"\6\17\2\uffff\5\17\1\uffff\3\17\1\u0090\1\uffff\2\17\1\uffff\6\17\1"+
			"\uffff\1\17\1\uffff\2\17\26\uffff\1\17\33\uffff\3\17",
			"\6\17\2\uffff\5\17\1\uffff\3\17\1\u00a9\1\uffff\2\17\1\uffff\6\17\1"+
			"\uffff\1\17\1\uffff\2\17\26\uffff\1\17\33\uffff\3\17",
			"\6\17\2\uffff\5\17\1\uffff\3\17\1\u00c2\1\uffff\2\17\1\uffff\6\17\1"+
			"\uffff\1\17\1\uffff\2\17\26\uffff\1\17\33\uffff\3\17",
			"\6\17\2\uffff\5\17\1\uffff\3\17\1\u00db\1\uffff\2\17\1\uffff\6\17\1"+
			"\uffff\1\17\1\uffff\2\17\26\uffff\1\17\33\uffff\3\17",
			"\1\u00f5\42\uffff\1\u00f4\12\uffff\1\u00f6\1\uffff\1\u00f6\2\uffff\1"+
			"\u00f6\4\uffff\1\u00f6\5\uffff\1\u00f6\5\uffff\1\u00f6\1\uffff\1\u00f6"+
			"\10\uffff\1\u00f6",
			"\1\17\13\uffff\6\17\1\u00fa\1\uffff\5\17\1\uffff\3\17\1\u00f8\1\uffff"+
			"\11\17\1\uffff\1\u00f9\1\uffff\2\17\26\uffff\1\17\33\uffff\3\17",
			"\1\17\34\uffff\1\u0114\13\uffff\1\u0113",
			"\1\u0116",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"\1\uffff",
			"",
			"\1\uffff"
	};

	static final short[] DFA82_eot = DFA.unpackEncodedString(DFA82_eotS);
	static final short[] DFA82_eof = DFA.unpackEncodedString(DFA82_eofS);
	static final char[] DFA82_min = DFA.unpackEncodedStringToUnsignedChars(DFA82_minS);
	static final char[] DFA82_max = DFA.unpackEncodedStringToUnsignedChars(DFA82_maxS);
	static final short[] DFA82_accept = DFA.unpackEncodedString(DFA82_acceptS);
	static final short[] DFA82_special = DFA.unpackEncodedString(DFA82_specialS);
	static final short[][] DFA82_transition;

	static {
		int numStates = DFA82_transitionS.length;
		DFA82_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA82_transition[i] = DFA.unpackEncodedString(DFA82_transitionS[i]);
		}
	}

	protected class DFA82 extends DFA {

		public DFA82(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 82;
			this.eot = DFA82_eot;
			this.eof = DFA82_eof;
			this.min = DFA82_min;
			this.max = DFA82_max;
			this.accept = DFA82_accept;
			this.special = DFA82_special;
			this.transition = DFA82_transition;
		}
		@Override
		public String getDescription() {
			return "1096:13: ( explicitConstructorInvocation )?";
		}
		@Override
		public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
			TokenStream input = (TokenStream)_input;
			int _s = s;
			switch ( s ) {
					case 0 : 
						int LA82_47 = input.LA(1);
						 
						int index82_47 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_47);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA82_48 = input.LA(1);
						 
						int index82_48 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_48);
						if ( s>=0 ) return s;
						break;

					case 2 : 
						int LA82_49 = input.LA(1);
						 
						int index82_49 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_49);
						if ( s>=0 ) return s;
						break;

					case 3 : 
						int LA82_73 = input.LA(1);
						 
						int index82_73 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_73);
						if ( s>=0 ) return s;
						break;

					case 4 : 
						int LA82_74 = input.LA(1);
						 
						int index82_74 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_74);
						if ( s>=0 ) return s;
						break;

					case 5 : 
						int LA82_75 = input.LA(1);
						 
						int index82_75 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_75);
						if ( s>=0 ) return s;
						break;

					case 6 : 
						int LA82_76 = input.LA(1);
						 
						int index82_76 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_76);
						if ( s>=0 ) return s;
						break;

					case 7 : 
						int LA82_77 = input.LA(1);
						 
						int index82_77 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_77);
						if ( s>=0 ) return s;
						break;

					case 8 : 
						int LA82_78 = input.LA(1);
						 
						int index82_78 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_78);
						if ( s>=0 ) return s;
						break;

					case 9 : 
						int LA82_79 = input.LA(1);
						 
						int index82_79 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_79);
						if ( s>=0 ) return s;
						break;

					case 10 : 
						int LA82_80 = input.LA(1);
						 
						int index82_80 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_80);
						if ( s>=0 ) return s;
						break;

					case 11 : 
						int LA82_81 = input.LA(1);
						 
						int index82_81 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_81);
						if ( s>=0 ) return s;
						break;

					case 12 : 
						int LA82_82 = input.LA(1);
						 
						int index82_82 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_82);
						if ( s>=0 ) return s;
						break;

					case 13 : 
						int LA82_83 = input.LA(1);
						 
						int index82_83 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_83);
						if ( s>=0 ) return s;
						break;

					case 14 : 
						int LA82_84 = input.LA(1);
						 
						int index82_84 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_84);
						if ( s>=0 ) return s;
						break;

					case 15 : 
						int LA82_85 = input.LA(1);
						 
						int index82_85 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_85);
						if ( s>=0 ) return s;
						break;

					case 16 : 
						int LA82_86 = input.LA(1);
						 
						int index82_86 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_86);
						if ( s>=0 ) return s;
						break;

					case 17 : 
						int LA82_87 = input.LA(1);
						 
						int index82_87 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_87);
						if ( s>=0 ) return s;
						break;

					case 18 : 
						int LA82_88 = input.LA(1);
						 
						int index82_88 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_88);
						if ( s>=0 ) return s;
						break;

					case 19 : 
						int LA82_89 = input.LA(1);
						 
						int index82_89 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_89);
						if ( s>=0 ) return s;
						break;

					case 20 : 
						int LA82_90 = input.LA(1);
						 
						int index82_90 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_90);
						if ( s>=0 ) return s;
						break;

					case 21 : 
						int LA82_91 = input.LA(1);
						 
						int index82_91 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_91);
						if ( s>=0 ) return s;
						break;

					case 22 : 
						int LA82_92 = input.LA(1);
						 
						int index82_92 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_92);
						if ( s>=0 ) return s;
						break;

					case 23 : 
						int LA82_93 = input.LA(1);
						 
						int index82_93 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_93);
						if ( s>=0 ) return s;
						break;

					case 24 : 
						int LA82_94 = input.LA(1);
						 
						int index82_94 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_94);
						if ( s>=0 ) return s;
						break;

					case 25 : 
						int LA82_119 = input.LA(1);
						 
						int index82_119 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_119);
						if ( s>=0 ) return s;
						break;

					case 26 : 
						int LA82_144 = input.LA(1);
						 
						int index82_144 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_144);
						if ( s>=0 ) return s;
						break;

					case 27 : 
						int LA82_169 = input.LA(1);
						 
						int index82_169 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_169);
						if ( s>=0 ) return s;
						break;

					case 28 : 
						int LA82_194 = input.LA(1);
						 
						int index82_194 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_194);
						if ( s>=0 ) return s;
						break;

					case 29 : 
						int LA82_219 = input.LA(1);
						 
						int index82_219 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_219);
						if ( s>=0 ) return s;
						break;

					case 30 : 
						int LA82_244 = input.LA(1);
						 
						int index82_244 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_244);
						if ( s>=0 ) return s;
						break;

					case 31 : 
						int LA82_245 = input.LA(1);
						 
						int index82_245 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_245);
						if ( s>=0 ) return s;
						break;

					case 32 : 
						int LA82_246 = input.LA(1);
						 
						int index82_246 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_246);
						if ( s>=0 ) return s;
						break;

					case 33 : 
						int LA82_248 = input.LA(1);
						 
						int index82_248 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_248);
						if ( s>=0 ) return s;
						break;

					case 34 : 
						int LA82_249 = input.LA(1);
						 
						int index82_249 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_249);
						if ( s>=0 ) return s;
						break;

					case 35 : 
						int LA82_250 = input.LA(1);
						 
						int index82_250 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_250);
						if ( s>=0 ) return s;
						break;

					case 36 : 
						int LA82_275 = input.LA(1);
						 
						int index82_275 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_275);
						if ( s>=0 ) return s;
						break;

					case 37 : 
						int LA82_276 = input.LA(1);
						 
						int index82_276 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_276);
						if ( s>=0 ) return s;
						break;

					case 38 : 
						int LA82_278 = input.LA(1);
						 
						int index82_278 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred114_Java()) ) {s = 1;}
						else if ( (true) ) {s = 15;}
						 
						input.seek(index82_278);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 82, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	static final String DFA107_eotS =
		"\133\uffff";
	static final String DFA107_eofS =
		"\133\uffff";
	static final String DFA107_minS =
		"\1\4\1\11\3\20\52\uffff\2\0\12\uffff\1\0\1\uffff\3\0\30\uffff\1\0\2\uffff";
	static final String DFA107_maxS =
		"\1\163\1\141\1\125\1\161\1\71\52\uffff\2\0\12\uffff\1\0\1\uffff\3\0\30"+
		"\uffff\1\0\2\uffff";
	static final String DFA107_acceptS =
		"\5\uffff\1\2\10\uffff\1\3\36\uffff\1\1\55\uffff";
	static final String DFA107_specialS =
		"\57\uffff\1\0\1\1\12\uffff\1\2\1\uffff\1\3\1\4\1\5\30\uffff\1\6\2\uffff}>";
	static final String[] DFA107_transitionS = {
			"\1\16\1\uffff\2\16\1\uffff\1\5\3\uffff\1\16\1\uffff\1\16\1\3\6\uffff"+
			"\2\16\2\uffff\1\16\6\uffff\1\16\3\uffff\2\16\2\uffff\2\16\6\uffff\1\16"+
			"\5\uffff\1\2\4\uffff\1\5\1\4\1\16\1\4\2\uffff\1\4\1\5\1\16\1\uffff\1"+
			"\16\1\4\2\uffff\1\16\1\1\1\uffff\1\4\2\16\3\uffff\1\4\1\5\1\4\1\uffff"+
			"\2\16\1\uffff\3\5\1\16\1\4\2\5\5\16\2\uffff\3\16\1\uffff\2\16\4\uffff"+
			"\1\16",
			"\1\5\6\uffff\1\55\47\uffff\1\60\4\uffff\1\5\1\55\1\uffff\1\55\2\uffff"+
			"\1\55\1\5\3\uffff\1\55\3\uffff\1\57\1\uffff\1\55\5\uffff\1\55\1\5\1\55"+
			"\4\uffff\3\5\1\uffff\1\55\2\5",
			"\1\73\104\uffff\1\5",
			"\1\55\13\uffff\7\16\1\uffff\5\16\1\uffff\3\16\1\76\1\uffff\4\16\1\75"+
			"\4\16\1\uffff\1\77\1\uffff\2\16\26\uffff\1\16\33\uffff\3\16",
			"\1\55\34\uffff\1\16\13\uffff\1\130",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			""
	};

	static final short[] DFA107_eot = DFA.unpackEncodedString(DFA107_eotS);
	static final short[] DFA107_eof = DFA.unpackEncodedString(DFA107_eofS);
	static final char[] DFA107_min = DFA.unpackEncodedStringToUnsignedChars(DFA107_minS);
	static final char[] DFA107_max = DFA.unpackEncodedStringToUnsignedChars(DFA107_maxS);
	static final short[] DFA107_accept = DFA.unpackEncodedString(DFA107_acceptS);
	static final short[] DFA107_special = DFA.unpackEncodedString(DFA107_specialS);
	static final short[][] DFA107_transition;

	static {
		int numStates = DFA107_transitionS.length;
		DFA107_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA107_transition[i] = DFA.unpackEncodedString(DFA107_transitionS[i]);
		}
	}

	protected class DFA107 extends DFA {

		public DFA107(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 107;
			this.eot = DFA107_eot;
			this.eof = DFA107_eof;
			this.min = DFA107_min;
			this.max = DFA107_max;
			this.accept = DFA107_accept;
			this.special = DFA107_special;
			this.transition = DFA107_transition;
		}
		@Override
		public String getDescription() {
			return "1247:1: blockStatement : ( localVariableDeclarationStatement | classOrInterfaceDeclaration | statement );";
		}
		@Override
		public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
			TokenStream input = (TokenStream)_input;
			int _s = s;
			switch ( s ) {
					case 0 : 
						int LA107_47 = input.LA(1);
						 
						int index107_47 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred152_Java()) ) {s = 45;}
						else if ( (synpred153_Java()) ) {s = 5;}
						 
						input.seek(index107_47);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA107_48 = input.LA(1);
						 
						int index107_48 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred152_Java()) ) {s = 45;}
						else if ( (synpred153_Java()) ) {s = 5;}
						 
						input.seek(index107_48);
						if ( s>=0 ) return s;
						break;

					case 2 : 
						int LA107_59 = input.LA(1);
						 
						int index107_59 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred152_Java()) ) {s = 45;}
						else if ( (synpred153_Java()) ) {s = 5;}
						 
						input.seek(index107_59);
						if ( s>=0 ) return s;
						break;

					case 3 : 
						int LA107_61 = input.LA(1);
						 
						int index107_61 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred152_Java()) ) {s = 45;}
						else if ( (true) ) {s = 14;}
						 
						input.seek(index107_61);
						if ( s>=0 ) return s;
						break;

					case 4 : 
						int LA107_62 = input.LA(1);
						 
						int index107_62 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred152_Java()) ) {s = 45;}
						else if ( (true) ) {s = 14;}
						 
						input.seek(index107_62);
						if ( s>=0 ) return s;
						break;

					case 5 : 
						int LA107_63 = input.LA(1);
						 
						int index107_63 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred152_Java()) ) {s = 45;}
						else if ( (true) ) {s = 14;}
						 
						input.seek(index107_63);
						if ( s>=0 ) return s;
						break;

					case 6 : 
						int LA107_88 = input.LA(1);
						 
						int index107_88 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred152_Java()) ) {s = 45;}
						else if ( (true) ) {s = 14;}
						 
						input.seek(index107_88);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 107, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	static final String DFA115_eotS =
		"\75\uffff";
	static final String DFA115_eofS =
		"\75\uffff";
	static final String DFA115_minS =
		"\1\4\36\uffff\1\34\35\uffff";
	static final String DFA115_maxS =
		"\1\163\36\uffff\1\161\35\uffff";
	static final String DFA115_acceptS =
		"\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16"+
		"\1\17\22\uffff\1\20\32\uffff";
	static final String DFA115_specialS =
		"\75\uffff}>";
	static final String[] DFA115_transitionS = {
			"\1\2\1\uffff\2\17\5\uffff\1\17\1\uffff\1\17\1\37\6\uffff\2\17\2\uffff"+
			"\1\17\6\uffff\1\17\3\uffff\2\17\2\uffff\2\17\6\uffff\1\16\13\uffff\1"+
			"\17\1\14\1\17\2\uffff\1\17\1\uffff\1\15\1\uffff\1\6\1\17\2\uffff\1\17"+
			"\2\uffff\1\17\1\4\1\3\3\uffff\1\17\1\uffff\1\17\1\uffff\2\17\4\uffff"+
			"\1\12\1\17\2\uffff\1\17\1\10\1\11\1\17\1\13\2\uffff\1\17\1\7\1\17\1\uffff"+
			"\1\5\1\1\4\uffff\1\17",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\7\17\1\uffff\5\17\1\uffff\4\17\1\uffff\2\17\1\42\6\17\1\uffff\1\17"+
			"\1\uffff\2\17\26\uffff\1\17\33\uffff\3\17",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			""
	};

	static final short[] DFA115_eot = DFA.unpackEncodedString(DFA115_eotS);
	static final short[] DFA115_eof = DFA.unpackEncodedString(DFA115_eofS);
	static final char[] DFA115_min = DFA.unpackEncodedStringToUnsignedChars(DFA115_minS);
	static final char[] DFA115_max = DFA.unpackEncodedStringToUnsignedChars(DFA115_maxS);
	static final short[] DFA115_accept = DFA.unpackEncodedString(DFA115_acceptS);
	static final short[] DFA115_special = DFA.unpackEncodedString(DFA115_specialS);
	static final short[][] DFA115_transition;

	static {
		int numStates = DFA115_transitionS.length;
		DFA115_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA115_transition[i] = DFA.unpackEncodedString(DFA115_transitionS[i]);
		}
	}

	protected class DFA115 extends DFA {

		public DFA115(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 115;
			this.eot = DFA115_eot;
			this.eof = DFA115_eof;
			this.min = DFA115_min;
			this.max = DFA115_max;
			this.accept = DFA115_accept;
			this.special = DFA115_special;
			this.transition = DFA115_transition;
		}
		@Override
		public String getDescription() {
			return "1273:1: statement : ( block | ASSERT expression ( ':' expression )? ';' | 'if' parExpression statement ( options {k=1; } : 'else' statement )? | 'for' '(' forControl ')' statement | 'while' parExpression statement | 'do' statement 'while' parExpression ';' | 'try' block ( catches 'finally' block | catches | 'finally' block ) | 'switch' parExpression '{' switchBlockStatementGroups '}' | 'synchronized' parExpression block | 'return' ( expression )? ';' | 'throw' expression ';' | 'break' ( Identifier )? ';' | 'continue' ( Identifier )? ';' | ';' | statementExpression ';' | Identifier ':' statement );";
		}
	}

	static final String DFA118_eotS =
		"\106\uffff";
	static final String DFA118_eofS =
		"\1\1\105\uffff";
	static final String DFA118_minS =
		"\1\4\55\uffff\2\0\26\uffff";
	static final String DFA118_maxS =
		"\1\163\55\uffff\2\0\26\uffff";
	static final String DFA118_acceptS =
		"\1\uffff\1\2\102\uffff\1\1\1\uffff";
	static final String DFA118_specialS =
		"\56\uffff\1\0\1\1\26\uffff}>";
	static final String[] DFA118_transitionS = {
			"\1\1\1\uffff\2\1\1\uffff\1\1\3\uffff\1\1\1\uffff\2\1\6\uffff\2\1\2\uffff"+
			"\1\1\6\uffff\1\1\3\uffff\2\1\2\uffff\2\1\6\uffff\1\1\5\uffff\1\1\4\uffff"+
			"\4\1\1\56\1\uffff\3\1\1\57\2\1\2\uffff\2\1\1\uffff\3\1\3\uffff\3\1\1"+
			"\uffff\2\1\1\uffff\14\1\2\uffff\3\1\1\uffff\2\1\3\uffff\2\1",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			""
	};

	static final short[] DFA118_eot = DFA.unpackEncodedString(DFA118_eotS);
	static final short[] DFA118_eof = DFA.unpackEncodedString(DFA118_eofS);
	static final char[] DFA118_min = DFA.unpackEncodedStringToUnsignedChars(DFA118_minS);
	static final char[] DFA118_max = DFA.unpackEncodedStringToUnsignedChars(DFA118_maxS);
	static final short[] DFA118_accept = DFA.unpackEncodedString(DFA118_acceptS);
	static final short[] DFA118_special = DFA.unpackEncodedString(DFA118_specialS);
	static final short[][] DFA118_transition;

	static {
		int numStates = DFA118_transitionS.length;
		DFA118_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA118_transition[i] = DFA.unpackEncodedString(DFA118_transitionS[i]);
		}
	}

	protected class DFA118 extends DFA {

		public DFA118(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 118;
			this.eot = DFA118_eot;
			this.eof = DFA118_eof;
			this.min = DFA118_min;
			this.max = DFA118_max;
			this.accept = DFA118_accept;
			this.special = DFA118_special;
			this.transition = DFA118_transition;
		}
		@Override
		public String getDescription() {
			return "()+ loopback of 1317:9: ( switchLabel )+";
		}
		@Override
		public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
			TokenStream input = (TokenStream)_input;
			int _s = s;
			switch ( s ) {
					case 0 : 
						int LA118_46 = input.LA(1);
						 
						int index118_46 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred179_Java()) ) {s = 68;}
						else if ( (true) ) {s = 1;}
						 
						input.seek(index118_46);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA118_47 = input.LA(1);
						 
						int index118_47 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred179_Java()) ) {s = 68;}
						else if ( (true) ) {s = 1;}
						 
						input.seek(index118_47);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 118, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	static final String DFA124_eotS =
		"\u0087\uffff";
	static final String DFA124_eofS =
		"\u0087\uffff";
	static final String DFA124_minS =
		"\1\6\4\20\22\uffff\5\20\1\6\1\20\1\6\1\51\30\uffff\1\72\1\51\1\uffff\21"+
		"\0\2\uffff\3\0\21\uffff\1\0\5\uffff\1\0\30\uffff\1\0\5\uffff";
	static final String DFA124_maxS =
		"\1\163\1\137\1\20\1\161\1\71\22\uffff\2\71\1\137\1\20\1\137\1\163\1\145"+
		"\1\163\1\71\30\uffff\1\72\1\71\1\uffff\21\0\2\uffff\3\0\21\uffff\1\0\5"+
		"\uffff\1\0\30\uffff\1\0\5\uffff";
	static final String DFA124_acceptS =
		"\5\uffff\1\2\166\uffff\1\1\12\uffff";
	static final String DFA124_specialS =
		"\73\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15"+
		"\1\16\1\17\1\20\2\uffff\1\21\1\22\1\23\21\uffff\1\24\5\uffff\1\25\30\uffff"+
		"\1\26\5\uffff}>";
	static final String[] DFA124_transitionS = {
			"\2\5\5\uffff\1\5\1\uffff\1\5\1\3\6\uffff\2\5\2\uffff\1\5\6\uffff\1\5"+
			"\3\uffff\2\5\2\uffff\2\5\6\uffff\1\5\5\uffff\1\2\5\uffff\1\4\1\uffff"+
			"\1\4\2\uffff\1\4\4\uffff\1\4\2\uffff\1\5\1\1\1\uffff\1\4\5\uffff\1\4"+
			"\1\uffff\1\4\1\uffff\2\5\5\uffff\1\4\2\uffff\1\5\2\uffff\1\5\3\uffff"+
			"\1\5\1\uffff\1\5\7\uffff\1\5",
			"\1\27\47\uffff\1\32\5\uffff\1\30\1\uffff\1\30\2\uffff\1\30\4\uffff\1"+
			"\30\3\uffff\1\31\1\uffff\1\30\5\uffff\1\30\1\uffff\1\30\10\uffff\1\30",
			"\1\33",
			"\1\37\13\uffff\7\5\1\uffff\11\5\1\35\1\uffff\2\5\1\uffff\1\5\1\34\4"+
			"\5\1\uffff\1\36\1\uffff\2\5\26\uffff\1\5\33\uffff\3\5",
			"\1\71\34\uffff\1\5\13\uffff\1\70",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\76\34\uffff\1\74\5\uffff\1\73\5\uffff\1\75",
			"\1\100\50\uffff\1\77",
			"\1\101\47\uffff\1\104\5\uffff\1\102\1\uffff\1\102\2\uffff\1\102\4\uffff"+
			"\1\102\3\uffff\1\103\1\uffff\1\102\5\uffff\1\102\1\uffff\1\102\10\uffff"+
			"\1\102",
			"\1\105",
			"\1\110\21\uffff\1\107\12\uffff\1\106\12\uffff\1\113\5\uffff\1\111\1"+
			"\uffff\1\111\2\uffff\1\111\4\uffff\1\111\3\uffff\1\112\1\uffff\1\111"+
			"\5\uffff\1\111\1\uffff\1\111\10\uffff\1\111",
			"\2\5\5\uffff\1\5\1\uffff\1\5\1\116\6\uffff\2\5\2\uffff\1\5\6\uffff\1"+
			"\5\3\uffff\2\5\2\uffff\2\5\7\uffff\2\5\2\uffff\1\120\6\uffff\1\117\1"+
			"\uffff\1\117\2\uffff\1\117\4\uffff\1\117\2\uffff\1\5\2\uffff\1\117\5"+
			"\uffff\1\117\1\uffff\1\117\1\uffff\2\5\5\uffff\1\117\2\uffff\1\5\2\uffff"+
			"\1\5\3\uffff\1\5\1\uffff\1\5\7\uffff\1\5",
			"\1\142\42\uffff\1\5\20\uffff\1\5\23\uffff\1\5\11\uffff\1\5\2\uffff\1"+
			"\5",
			"\2\5\5\uffff\1\5\1\uffff\2\5\6\uffff\2\5\2\uffff\1\5\6\uffff\1\5\3\uffff"+
			"\2\5\2\uffff\2\5\16\uffff\1\150\3\uffff\1\5\1\uffff\1\5\2\uffff\1\5\4"+
			"\uffff\1\5\2\uffff\1\5\2\uffff\1\5\5\uffff\1\5\1\uffff\1\5\1\uffff\2"+
			"\5\5\uffff\1\5\2\uffff\1\5\2\uffff\1\5\3\uffff\1\5\1\uffff\1\5\7\uffff"+
			"\1\5",
			"\1\5\7\uffff\1\174\1\5\1\uffff\1\5\4\uffff\1\5",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\u0081",
			"\1\5\7\uffff\1\174\1\5\1\uffff\1\5\4\uffff\1\5",
			"",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"",
			"",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			""
	};

	static final short[] DFA124_eot = DFA.unpackEncodedString(DFA124_eotS);
	static final short[] DFA124_eof = DFA.unpackEncodedString(DFA124_eofS);
	static final char[] DFA124_min = DFA.unpackEncodedStringToUnsignedChars(DFA124_minS);
	static final char[] DFA124_max = DFA.unpackEncodedStringToUnsignedChars(DFA124_maxS);
	static final short[] DFA124_accept = DFA.unpackEncodedString(DFA124_acceptS);
	static final short[] DFA124_special = DFA.unpackEncodedString(DFA124_specialS);
	static final short[][] DFA124_transition;

	static {
		int numStates = DFA124_transitionS.length;
		DFA124_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA124_transition[i] = DFA.unpackEncodedString(DFA124_transitionS[i]);
		}
	}

	protected class DFA124 extends DFA {

		public DFA124(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 124;
			this.eot = DFA124_eot;
			this.eof = DFA124_eof;
			this.min = DFA124_min;
			this.max = DFA124_max;
			this.accept = DFA124_accept;
			this.special = DFA124_special;
			this.transition = DFA124_transition;
		}
		@Override
		public String getDescription() {
			return "1326:1: forControl options {k=3; } : ( enhancedForControl | ( forInit )? ';' ( expression )? ';' ( forUpdate )? );";
		}
		@Override
		public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
			TokenStream input = (TokenStream)_input;
			int _s = s;
			switch ( s ) {
					case 0 : 
						int LA124_59 = input.LA(1);
						 
						int index124_59 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_59);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA124_60 = input.LA(1);
						 
						int index124_60 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_60);
						if ( s>=0 ) return s;
						break;

					case 2 : 
						int LA124_61 = input.LA(1);
						 
						int index124_61 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_61);
						if ( s>=0 ) return s;
						break;

					case 3 : 
						int LA124_62 = input.LA(1);
						 
						int index124_62 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_62);
						if ( s>=0 ) return s;
						break;

					case 4 : 
						int LA124_63 = input.LA(1);
						 
						int index124_63 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_63);
						if ( s>=0 ) return s;
						break;

					case 5 : 
						int LA124_64 = input.LA(1);
						 
						int index124_64 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_64);
						if ( s>=0 ) return s;
						break;

					case 6 : 
						int LA124_65 = input.LA(1);
						 
						int index124_65 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_65);
						if ( s>=0 ) return s;
						break;

					case 7 : 
						int LA124_66 = input.LA(1);
						 
						int index124_66 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_66);
						if ( s>=0 ) return s;
						break;

					case 8 : 
						int LA124_67 = input.LA(1);
						 
						int index124_67 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_67);
						if ( s>=0 ) return s;
						break;

					case 9 : 
						int LA124_68 = input.LA(1);
						 
						int index124_68 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_68);
						if ( s>=0 ) return s;
						break;

					case 10 : 
						int LA124_69 = input.LA(1);
						 
						int index124_69 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_69);
						if ( s>=0 ) return s;
						break;

					case 11 : 
						int LA124_70 = input.LA(1);
						 
						int index124_70 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_70);
						if ( s>=0 ) return s;
						break;

					case 12 : 
						int LA124_71 = input.LA(1);
						 
						int index124_71 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_71);
						if ( s>=0 ) return s;
						break;

					case 13 : 
						int LA124_72 = input.LA(1);
						 
						int index124_72 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_72);
						if ( s>=0 ) return s;
						break;

					case 14 : 
						int LA124_73 = input.LA(1);
						 
						int index124_73 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_73);
						if ( s>=0 ) return s;
						break;

					case 15 : 
						int LA124_74 = input.LA(1);
						 
						int index124_74 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_74);
						if ( s>=0 ) return s;
						break;

					case 16 : 
						int LA124_75 = input.LA(1);
						 
						int index124_75 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_75);
						if ( s>=0 ) return s;
						break;

					case 17 : 
						int LA124_78 = input.LA(1);
						 
						int index124_78 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_78);
						if ( s>=0 ) return s;
						break;

					case 18 : 
						int LA124_79 = input.LA(1);
						 
						int index124_79 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_79);
						if ( s>=0 ) return s;
						break;

					case 19 : 
						int LA124_80 = input.LA(1);
						 
						int index124_80 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_80);
						if ( s>=0 ) return s;
						break;

					case 20 : 
						int LA124_98 = input.LA(1);
						 
						int index124_98 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_98);
						if ( s>=0 ) return s;
						break;

					case 21 : 
						int LA124_104 = input.LA(1);
						 
						int index124_104 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_104);
						if ( s>=0 ) return s;
						break;

					case 22 : 
						int LA124_129 = input.LA(1);
						 
						int index124_129 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred183_Java()) ) {s = 124;}
						else if ( (true) ) {s = 5;}
						 
						input.seek(index124_129);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 124, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	static final String DFA127_eotS =
		"\u00c1\uffff";
	static final String DFA127_eofS =
		"\1\14\u00c0\uffff";
	static final String DFA127_minS =
		"\1\36\13\0\u00b5\uffff";
	static final String DFA127_maxS =
		"\1\162\13\0\u00b5\uffff";
	static final String DFA127_acceptS =
		"\14\uffff\1\2\31\uffff\1\1\u009a\uffff";
	static final String DFA127_specialS =
		"\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\u00b5\uffff}>";
	static final String[] DFA127_transitionS = {
			"\1\11\2\uffff\1\6\1\uffff\1\14\1\uffff\1\4\2\uffff\1\2\1\14\2\uffff\1"+
			"\3\3\uffff\1\5\2\14\1\12\1\1\1\uffff\1\13\3\uffff\1\14\1\uffff\1\10\63"+
			"\uffff\1\7\1\uffff\1\14",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			""
	};

	static final short[] DFA127_eot = DFA.unpackEncodedString(DFA127_eotS);
	static final short[] DFA127_eof = DFA.unpackEncodedString(DFA127_eofS);
	static final char[] DFA127_min = DFA.unpackEncodedStringToUnsignedChars(DFA127_minS);
	static final char[] DFA127_max = DFA.unpackEncodedStringToUnsignedChars(DFA127_maxS);
	static final short[] DFA127_accept = DFA.unpackEncodedString(DFA127_acceptS);
	static final short[] DFA127_special = DFA.unpackEncodedString(DFA127_specialS);
	static final short[][] DFA127_transition;

	static {
		int numStates = DFA127_transitionS.length;
		DFA127_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA127_transition[i] = DFA.unpackEncodedString(DFA127_transitionS[i]);
		}
	}

	protected class DFA127 extends DFA {

		public DFA127(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 127;
			this.eot = DFA127_eot;
			this.eof = DFA127_eof;
			this.min = DFA127_min;
			this.max = DFA127_max;
			this.accept = DFA127_accept;
			this.special = DFA127_special;
			this.transition = DFA127_transition;
		}
		@Override
		public String getDescription() {
			return "1365:31: ( assignmentOperator expression )?";
		}
		@Override
		public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
			TokenStream input = (TokenStream)_input;
			int _s = s;
			switch ( s ) {
					case 0 : 
						int LA127_1 = input.LA(1);
						 
						int index127_1 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred189_Java()) ) {s = 38;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index127_1);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA127_2 = input.LA(1);
						 
						int index127_2 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred189_Java()) ) {s = 38;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index127_2);
						if ( s>=0 ) return s;
						break;

					case 2 : 
						int LA127_3 = input.LA(1);
						 
						int index127_3 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred189_Java()) ) {s = 38;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index127_3);
						if ( s>=0 ) return s;
						break;

					case 3 : 
						int LA127_4 = input.LA(1);
						 
						int index127_4 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred189_Java()) ) {s = 38;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index127_4);
						if ( s>=0 ) return s;
						break;

					case 4 : 
						int LA127_5 = input.LA(1);
						 
						int index127_5 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred189_Java()) ) {s = 38;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index127_5);
						if ( s>=0 ) return s;
						break;

					case 5 : 
						int LA127_6 = input.LA(1);
						 
						int index127_6 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred189_Java()) ) {s = 38;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index127_6);
						if ( s>=0 ) return s;
						break;

					case 6 : 
						int LA127_7 = input.LA(1);
						 
						int index127_7 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred189_Java()) ) {s = 38;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index127_7);
						if ( s>=0 ) return s;
						break;

					case 7 : 
						int LA127_8 = input.LA(1);
						 
						int index127_8 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred189_Java()) ) {s = 38;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index127_8);
						if ( s>=0 ) return s;
						break;

					case 8 : 
						int LA127_9 = input.LA(1);
						 
						int index127_9 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred189_Java()) ) {s = 38;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index127_9);
						if ( s>=0 ) return s;
						break;

					case 9 : 
						int LA127_10 = input.LA(1);
						 
						int index127_10 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred189_Java()) ) {s = 38;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index127_10);
						if ( s>=0 ) return s;
						break;

					case 10 : 
						int LA127_11 = input.LA(1);
						 
						int index127_11 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred189_Java()) ) {s = 38;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index127_11);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 127, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	static final String DFA137_eotS =
		"\105\uffff";
	static final String DFA137_eofS =
		"\1\1\104\uffff";
	static final String DFA137_minS =
		"\1\34\26\uffff\2\6\54\uffff";
	static final String DFA137_maxS =
		"\1\162\26\uffff\2\163\54\uffff";
	static final String DFA137_acceptS =
		"\1\uffff\1\2\32\uffff\1\1\50\uffff";
	static final String DFA137_specialS =
		"\105\uffff}>";
	static final String[] DFA137_transitionS = {
			"\1\1\1\uffff\4\1\1\uffff\1\1\1\uffff\1\1\2\uffff\2\1\2\uffff\1\1\3\uffff"+
			"\3\1\1\27\2\1\1\30\1\1\2\uffff\3\1\26\uffff\1\1\33\uffff\4\1",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\2\34\5\uffff\1\34\1\uffff\2\34\6\uffff\2\34\2\uffff\1\34\6\uffff\1"+
			"\34\3\uffff\2\34\2\uffff\2\34\7\uffff\1\1\1\34\11\uffff\1\34\1\uffff"+
			"\1\34\2\uffff\1\34\4\uffff\1\34\2\uffff\1\34\2\uffff\1\34\5\uffff\1\34"+
			"\1\uffff\1\34\1\uffff\2\34\5\uffff\1\34\2\uffff\1\34\2\uffff\1\34\3\uffff"+
			"\1\34\1\uffff\1\34\7\uffff\1\34",
			"\2\34\5\uffff\1\34\1\uffff\2\34\6\uffff\2\34\2\uffff\1\34\6\uffff\1"+
			"\34\3\uffff\2\34\2\uffff\2\34\10\uffff\1\34\1\uffff\1\1\7\uffff\1\34"+
			"\1\uffff\1\34\2\uffff\1\34\4\uffff\1\34\2\uffff\1\34\2\uffff\1\34\5\uffff"+
			"\1\34\1\uffff\1\34\1\uffff\2\34\5\uffff\1\34\2\uffff\1\34\2\uffff\1\34"+
			"\3\uffff\1\34\1\uffff\1\34\7\uffff\1\34",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			""
	};

	static final short[] DFA137_eot = DFA.unpackEncodedString(DFA137_eotS);
	static final short[] DFA137_eof = DFA.unpackEncodedString(DFA137_eofS);
	static final char[] DFA137_min = DFA.unpackEncodedStringToUnsignedChars(DFA137_minS);
	static final char[] DFA137_max = DFA.unpackEncodedStringToUnsignedChars(DFA137_maxS);
	static final short[] DFA137_accept = DFA.unpackEncodedString(DFA137_acceptS);
	static final short[] DFA137_special = DFA.unpackEncodedString(DFA137_specialS);
	static final short[][] DFA137_transition;

	static {
		int numStates = DFA137_transitionS.length;
		DFA137_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA137_transition[i] = DFA.unpackEncodedString(DFA137_transitionS[i]);
		}
	}

	protected class DFA137 extends DFA {

		public DFA137(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 137;
			this.eot = DFA137_eot;
			this.eof = DFA137_eof;
			this.min = DFA137_min;
			this.max = DFA137_max;
			this.accept = DFA137_accept;
			this.special = DFA137_special;
			this.transition = DFA137_transition;
		}
		@Override
		public String getDescription() {
			return "()* loopback of 1430:25: ( relationalOp shiftExpression )*";
		}
	}

	static final String DFA139_eotS =
		"\106\uffff";
	static final String DFA139_eofS =
		"\1\3\105\uffff";
	static final String DFA139_minS =
		"\1\34\2\6\31\uffff\1\0\24\uffff\1\0\24\uffff";
	static final String DFA139_maxS =
		"\1\162\2\163\31\uffff\1\0\24\uffff\1\0\24\uffff";
	static final String DFA139_acceptS =
		"\3\uffff\1\2\101\uffff\1\1";
	static final String DFA139_specialS =
		"\34\uffff\1\0\24\uffff\1\1\24\uffff}>";
	static final String[] DFA139_transitionS = {
			"\1\3\1\uffff\4\3\1\uffff\1\3\1\uffff\1\3\2\uffff\2\3\2\uffff\1\3\3\uffff"+
			"\3\3\1\1\2\3\1\2\1\3\2\uffff\3\3\26\uffff\1\3\33\uffff\4\3",
			"\2\3\5\uffff\1\3\1\uffff\2\3\6\uffff\2\3\2\uffff\1\3\6\uffff\1\3\3\uffff"+
			"\2\3\2\uffff\2\3\7\uffff\1\34\1\3\11\uffff\1\3\1\uffff\1\3\2\uffff\1"+
			"\3\4\uffff\1\3\2\uffff\1\3\2\uffff\1\3\5\uffff\1\3\1\uffff\1\3\1\uffff"+
			"\2\3\5\uffff\1\3\2\uffff\1\3\2\uffff\1\3\3\uffff\1\3\1\uffff\1\3\7\uffff"+
			"\1\3",
			"\2\3\5\uffff\1\3\1\uffff\2\3\6\uffff\2\3\2\uffff\1\3\6\uffff\1\3\3\uffff"+
			"\2\3\2\uffff\2\3\10\uffff\1\3\1\uffff\1\61\7\uffff\1\3\1\uffff\1\3\2"+
			"\uffff\1\3\4\uffff\1\3\2\uffff\1\3\2\uffff\1\3\5\uffff\1\3\1\uffff\1"+
			"\3\1\uffff\2\3\5\uffff\1\3\2\uffff\1\3\2\uffff\1\3\3\uffff\1\3\1\uffff"+
			"\1\3\7\uffff\1\3",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			""
	};

	static final short[] DFA139_eot = DFA.unpackEncodedString(DFA139_eotS);
	static final short[] DFA139_eof = DFA.unpackEncodedString(DFA139_eofS);
	static final char[] DFA139_min = DFA.unpackEncodedStringToUnsignedChars(DFA139_minS);
	static final char[] DFA139_max = DFA.unpackEncodedStringToUnsignedChars(DFA139_maxS);
	static final short[] DFA139_accept = DFA.unpackEncodedString(DFA139_acceptS);
	static final short[] DFA139_special = DFA.unpackEncodedString(DFA139_specialS);
	static final short[][] DFA139_transition;

	static {
		int numStates = DFA139_transitionS.length;
		DFA139_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA139_transition[i] = DFA.unpackEncodedString(DFA139_transitionS[i]);
		}
	}

	protected class DFA139 extends DFA {

		public DFA139(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 139;
			this.eot = DFA139_eot;
			this.eof = DFA139_eof;
			this.min = DFA139_min;
			this.max = DFA139_max;
			this.accept = DFA139_accept;
			this.special = DFA139_special;
			this.transition = DFA139_transition;
		}
		@Override
		public String getDescription() {
			return "()* loopback of 1445:28: ( shiftOp additiveExpression )*";
		}
		@Override
		public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
			TokenStream input = (TokenStream)_input;
			int _s = s;
			switch ( s ) {
					case 0 : 
						int LA139_28 = input.LA(1);
						 
						int index139_28 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred215_Java()) ) {s = 69;}
						else if ( (true) ) {s = 3;}
						 
						input.seek(index139_28);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA139_49 = input.LA(1);
						 
						int index139_49 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred215_Java()) ) {s = 69;}
						else if ( (true) ) {s = 3;}
						 
						input.seek(index139_49);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 139, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	public static final BitSet FOLLOW_annotations_in_compilationUnit112 = new BitSet(new long[]{0x2100000000000200L,0x000000033C201010L});
	public static final BitSet FOLLOW_packageDeclaration_in_compilationUnit126 = new BitSet(new long[]{0x2104000000000202L,0x0000000338241010L});
	public static final BitSet FOLLOW_importDeclaration_in_compilationUnit128 = new BitSet(new long[]{0x2104000000000202L,0x0000000338241010L});
	public static final BitSet FOLLOW_typeDeclaration_in_compilationUnit131 = new BitSet(new long[]{0x2104000000000202L,0x0000000338201010L});
	public static final BitSet FOLLOW_classOrInterfaceDeclaration_in_compilationUnit146 = new BitSet(new long[]{0x2104000000000202L,0x0000000338201010L});
	public static final BitSet FOLLOW_typeDeclaration_in_compilationUnit148 = new BitSet(new long[]{0x2104000000000202L,0x0000000338201010L});
	public static final BitSet FOLLOW_packageDeclaration_in_compilationUnit169 = new BitSet(new long[]{0x2104000000000202L,0x0000000338241010L});
	public static final BitSet FOLLOW_importDeclaration_in_compilationUnit173 = new BitSet(new long[]{0x2104000000000202L,0x0000000338241010L});
	public static final BitSet FOLLOW_typeDeclaration_in_compilationUnit176 = new BitSet(new long[]{0x2104000000000202L,0x0000000338201010L});
	public static final BitSet FOLLOW_90_in_packageDeclaration197 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_qualifiedName_in_packageDeclaration201 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_packageDeclaration203 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_82_in_importDeclaration250 = new BitSet(new long[]{0x0000000000010000L,0x0000000100000000L});
	public static final BitSet FOLLOW_96_in_importDeclaration252 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_qualifiedName_in_importDeclaration265 = new BitSet(new long[]{0x0004200000000000L});
	public static final BitSet FOLLOW_45_in_importDeclaration278 = new BitSet(new long[]{0x0000001000000000L});
	public static final BitSet FOLLOW_36_in_importDeclaration280 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_importDeclaration287 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_classOrInterfaceDeclaration_in_typeDeclaration317 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_50_in_typeDeclaration327 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_classOrInterfaceModifiers_in_classOrInterfaceDeclaration348 = new BitSet(new long[]{0x0100000000000200L,0x0000000000200010L});
	public static final BitSet FOLLOW_classDeclaration_in_classOrInterfaceDeclaration362 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_interfaceDeclaration_in_classOrInterfaceDeclaration377 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_classOrInterfaceModifier_in_classOrInterfaceModifiers431 = new BitSet(new long[]{0x2100000000000002L,0x0000000338001000L});
	public static final BitSet FOLLOW_annotation_in_classOrInterfaceModifier479 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_93_in_classOrInterfaceModifier489 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_92_in_classOrInterfaceModifier505 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_91_in_classOrInterfaceModifier518 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_61_in_classOrInterfaceModifier533 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_96_in_classOrInterfaceModifier547 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_76_in_classOrInterfaceModifier563 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_97_in_classOrInterfaceModifier581 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_modifier_in_modifiers620 = new BitSet(new long[]{0x2100000000000002L,0x0000111338801000L});
	public static final BitSet FOLLOW_normalClassDeclaration_in_classDeclaration666 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enumDeclaration_in_classDeclaration677 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_68_in_normalClassDeclaration710 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_normalClassDeclaration714 = new BitSet(new long[]{0x0008000000000000L,0x0000400000020400L});
	public static final BitSet FOLLOW_typeParameters_in_normalClassDeclaration727 = new BitSet(new long[]{0x0000000000000000L,0x0000400000020400L});
	public static final BitSet FOLLOW_74_in_normalClassDeclaration743 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_type_in_normalClassDeclaration747 = new BitSet(new long[]{0x0000000000000000L,0x0000400000020000L});
	public static final BitSet FOLLOW_81_in_normalClassDeclaration763 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_typeList_in_normalClassDeclaration767 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_classBody_in_normalClassDeclaration801 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_51_in_typeParameters848 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_typeParameter_in_typeParameters879 = new BitSet(new long[]{0x0040020000000000L});
	public static final BitSet FOLLOW_41_in_typeParameters897 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_typeParameter_in_typeParameters901 = new BitSet(new long[]{0x0040020000000000L});
	public static final BitSet FOLLOW_54_in_typeParameters924 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Identifier_in_typeParameter1004 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000400L});
	public static final BitSet FOLLOW_74_in_typeParameter1030 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_typeBound_in_typeParameter1034 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
	public static final BitSet FOLLOW_98_in_typeParameter1058 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_typeBound_in_typeParameter1062 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_in_typeBound1126 = new BitSet(new long[]{0x0000000100000002L});
	public static final BitSet FOLLOW_32_in_typeBound1144 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_type_in_typeBound1148 = new BitSet(new long[]{0x0000000100000002L});
	public static final BitSet FOLLOW_ENUM_in_enumDeclaration1200 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_enumDeclaration1204 = new BitSet(new long[]{0x0000000000000000L,0x0000400000020000L});
	public static final BitSet FOLLOW_81_in_enumDeclaration1207 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_typeList_in_enumDeclaration1211 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_enumBody_in_enumDeclaration1245 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_110_in_enumBody1274 = new BitSet(new long[]{0x0104020000010000L,0x0004000000000000L});
	public static final BitSet FOLLOW_enumConstants_in_enumBody1276 = new BitSet(new long[]{0x0004020000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_41_in_enumBody1279 = new BitSet(new long[]{0x0004000000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_enumBodyDeclarations_in_enumBody1282 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_114_in_enumBody1285 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enumConstant_in_enumConstants1304 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_41_in_enumConstants1307 = new BitSet(new long[]{0x0100000000010000L});
	public static final BitSet FOLLOW_enumConstant_in_enumConstants1309 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_annotations_in_enumConstant1330 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_enumConstant1343 = new BitSet(new long[]{0x0000000400000002L,0x0000400000000000L});
	public static final BitSet FOLLOW_arguments_in_enumConstant1382 = new BitSet(new long[]{0x0000000000000002L,0x0000400000000000L});
	public static final BitSet FOLLOW_classBody_in_enumConstant1395 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_50_in_enumBodyDeclarations1416 = new BitSet(new long[]{0x610C000000010202L,0x00005913B8F05119L});
	public static final BitSet FOLLOW_classBodyDeclaration_in_enumBodyDeclarations1419 = new BitSet(new long[]{0x610C000000010202L,0x00005913B8F05119L});
	public static final BitSet FOLLOW_normalInterfaceDeclaration_in_interfaceDeclaration1446 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_annotationTypeDeclaration_in_interfaceDeclaration1457 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_85_in_normalInterfaceDeclaration1486 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_normalInterfaceDeclaration1490 = new BitSet(new long[]{0x0008000000000000L,0x0000400000000400L});
	public static final BitSet FOLLOW_typeParameters_in_normalInterfaceDeclaration1495 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000400L});
	public static final BitSet FOLLOW_74_in_normalInterfaceDeclaration1508 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_typeList_in_normalInterfaceDeclaration1512 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_interfaceBody_in_normalInterfaceDeclaration1546 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_in_typeList1581 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_41_in_typeList1601 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_type_in_typeList1605 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_110_in_classBody1638 = new BitSet(new long[]{0x610C000000010200L,0x00045913B8F05119L});
	public static final BitSet FOLLOW_classBodyDeclaration_in_classBody1640 = new BitSet(new long[]{0x610C000000010200L,0x00045913B8F05119L});
	public static final BitSet FOLLOW_114_in_classBody1643 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_110_in_interfaceBody1666 = new BitSet(new long[]{0x610C000000010200L,0x00041913B8F05119L});
	public static final BitSet FOLLOW_interfaceBodyDeclaration_in_interfaceBody1668 = new BitSet(new long[]{0x610C000000010200L,0x00041913B8F05119L});
	public static final BitSet FOLLOW_114_in_interfaceBody1671 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_50_in_classBodyDeclaration1690 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_96_in_classBodyDeclaration1700 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_block_in_classBodyDeclaration1703 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_modifiers_in_classBodyDeclaration1715 = new BitSet(new long[]{0x4108000000010200L,0x0000080080704119L});
	public static final BitSet FOLLOW_memberDecl_in_classBodyDeclaration1717 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_genericMethodOrConstructorDecl_in_memberDecl1742 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_memberDeclaration_in_memberDecl1753 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_107_in_memberDecl1764 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_memberDecl1768 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_voidMethodDeclaratorRest_in_memberDecl1770 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Identifier_in_memberDecl1783 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_constructorDeclaratorRest_in_memberDecl1785 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_interfaceDeclaration_in_memberDecl1796 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_classDeclaration_in_memberDecl1807 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_in_memberDeclaration1834 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_methodDeclaration_in_memberDeclaration1848 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_fieldDeclaration_in_memberDeclaration1863 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeParameters_in_genericMethodOrConstructorDecl1896 = new BitSet(new long[]{0x4000000000010000L,0x0000080080504109L});
	public static final BitSet FOLLOW_genericMethodOrConstructorRest_in_genericMethodOrConstructorDecl1898 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_in_genericMethodOrConstructorRest1930 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_107_in_genericMethodOrConstructorRest1936 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_genericMethodOrConstructorRest1952 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_methodDeclaratorRest_in_genericMethodOrConstructorRest1962 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Identifier_in_genericMethodOrConstructorRest1975 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_constructorDeclaratorRest_in_genericMethodOrConstructorRest1985 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Identifier_in_methodDeclaration2008 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_methodDeclaratorRest_in_methodDeclaration2010 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_variableDeclarators_in_fieldDeclaration2031 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_fieldDeclaration2034 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_modifiers_in_interfaceBodyDeclaration2063 = new BitSet(new long[]{0x4108000000010200L,0x0000080080704119L});
	public static final BitSet FOLLOW_interfaceMemberDecl_in_interfaceBodyDeclaration2065 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_50_in_interfaceBodyDeclaration2076 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_interfaceMethodOrFieldDecl_in_interfaceMemberDecl2096 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_interfaceGenericMethodDecl_in_interfaceMemberDecl2107 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_107_in_interfaceMemberDecl2118 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_interfaceMemberDecl2122 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_voidInterfaceMethodDeclaratorRest_in_interfaceMemberDecl2132 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_interfaceDeclaration_in_interfaceMemberDecl2143 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_classDeclaration_in_interfaceMemberDecl2154 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_in_interfaceMethodOrFieldDecl2177 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_interfaceMethodOrFieldDecl2181 = new BitSet(new long[]{0x0210000400000000L});
	public static final BitSet FOLLOW_interfaceMethodOrFieldRest_in_interfaceMethodOrFieldDecl2191 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_constantDeclaratorsRest_in_interfaceMethodOrFieldRest2212 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_interfaceMethodOrFieldRest2215 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_interfaceMethodDeclaratorRest_in_interfaceMethodOrFieldRest2225 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_formalParameters_in_methodDeclaratorRest2256 = new BitSet(new long[]{0x0204000000000000L,0x0000408000000000L});
	public static final BitSet FOLLOW_57_in_methodDeclaratorRest2259 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_methodDeclaratorRest2261 = new BitSet(new long[]{0x0204000000000000L,0x0000408000000000L});
	public static final BitSet FOLLOW_103_in_methodDeclaratorRest2277 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_qualifiedNameList_in_methodDeclaratorRest2279 = new BitSet(new long[]{0x0004000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_methodBody_in_methodDeclaratorRest2295 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_50_in_methodDeclaratorRest2309 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_formalParameters_in_voidMethodDeclaratorRest2368 = new BitSet(new long[]{0x0004000000000000L,0x0000408000000000L});
	public static final BitSet FOLLOW_103_in_voidMethodDeclaratorRest2371 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_qualifiedNameList_in_voidMethodDeclaratorRest2373 = new BitSet(new long[]{0x0004000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_methodBody_in_voidMethodDeclaratorRest2389 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_50_in_voidMethodDeclaratorRest2403 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_formalParameters_in_interfaceMethodDeclaratorRest2462 = new BitSet(new long[]{0x0204000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_57_in_interfaceMethodDeclaratorRest2465 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_interfaceMethodDeclaratorRest2467 = new BitSet(new long[]{0x0204000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_103_in_interfaceMethodDeclaratorRest2483 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_qualifiedNameList_in_interfaceMethodDeclaratorRest2485 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_interfaceMethodDeclaratorRest2497 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeParameters_in_interfaceGenericMethodDecl2546 = new BitSet(new long[]{0x4000000000010000L,0x0000080080504109L});
	public static final BitSet FOLLOW_type_in_interfaceGenericMethodDecl2551 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_107_in_interfaceGenericMethodDecl2557 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_interfaceGenericMethodDecl2573 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_interfaceMethodDeclaratorRest_in_interfaceGenericMethodDecl2583 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_formalParameters_in_voidInterfaceMethodDeclaratorRest2614 = new BitSet(new long[]{0x0004000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_103_in_voidInterfaceMethodDeclaratorRest2617 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_qualifiedNameList_in_voidInterfaceMethodDeclaratorRest2619 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_voidInterfaceMethodDeclaratorRest2631 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_formalParameters_in_constructorDeclaratorRest2680 = new BitSet(new long[]{0x0000000000000000L,0x0000408000000000L});
	public static final BitSet FOLLOW_103_in_constructorDeclaratorRest2701 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_qualifiedNameList_in_constructorDeclaratorRest2703 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_constructorBody_in_constructorDeclaratorRest2715 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Identifier_in_constantDeclarator2764 = new BitSet(new long[]{0x0210000000000000L});
	public static final BitSet FOLLOW_constantDeclaratorRest_in_constantDeclarator2776 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_variableDeclarator_in_variableDeclarators2797 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_41_in_variableDeclarators2809 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_variableDeclarator_in_variableDeclarators2811 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_variableDeclaratorId_in_variableDeclarator2844 = new BitSet(new long[]{0x0010000000000002L});
	public static final BitSet FOLLOW_equalsVariableInitializer_in_variableDeclarator2896 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_constantDeclaratorRest_in_constantDeclaratorsRest2951 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_41_in_constantDeclaratorsRest2963 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_constantDeclarator_in_constantDeclaratorsRest2965 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_57_in_constantDeclaratorRest2997 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_constantDeclaratorRest2999 = new BitSet(new long[]{0x0210000000000000L});
	public static final BitSet FOLLOW_equalsVariableInitializer_in_constantDeclaratorRest3028 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Identifier_in_variableDeclaratorId3057 = new BitSet(new long[]{0x0200000000000002L});
	public static final BitSet FOLLOW_57_in_variableDeclaratorId3060 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_variableDeclaratorId3062 = new BitSet(new long[]{0x0200000000000002L});
	public static final BitSet FOLLOW_52_in_equalsVariableInitializer3092 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00084A2483504909L});
	public static final BitSet FOLLOW_variableInitializer_in_equalsVariableInitializer3094 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_arrayInitializer_in_variableInitializer3113 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_variableInitializer3123 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_110_in_arrayInitializer3150 = new BitSet(new long[]{0x40000CC40981A0C0L,0x000C4A2483504909L});
	public static final BitSet FOLLOW_variableInitializer_in_arrayInitializer3153 = new BitSet(new long[]{0x0000020000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_41_in_arrayInitializer3156 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00084A2483504909L});
	public static final BitSet FOLLOW_variableInitializer_in_arrayInitializer3158 = new BitSet(new long[]{0x0000020000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_41_in_arrayInitializer3163 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_114_in_arrayInitializer3170 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_annotation_in_modifier3193 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_93_in_modifier3203 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_92_in_modifier3221 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_91_in_modifier3236 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_96_in_modifier3253 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_61_in_modifier3271 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_76_in_modifier3287 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_87_in_modifier3306 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_100_in_modifier3324 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_104_in_modifier3336 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_108_in_modifier3351 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_97_in_modifier3367 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_qualifiedName_in_packageOrTypeName3386 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Identifier_in_enumConstantName3405 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_qualifiedName_in_typeName3424 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_classOrInterfaceType_in_type3471 = new BitSet(new long[]{0x0200000000000002L});
	public static final BitSet FOLLOW_57_in_type3488 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_type3490 = new BitSet(new long[]{0x0200000000000002L});
	public static final BitSet FOLLOW_primitiveType_in_type3540 = new BitSet(new long[]{0x0200000000000002L});
	public static final BitSet FOLLOW_57_in_type3566 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_type3568 = new BitSet(new long[]{0x0200000000000002L});
	public static final BitSet FOLLOW_Identifier_in_classOrInterfaceType3655 = new BitSet(new long[]{0x0008200000000002L});
	public static final BitSet FOLLOW_typeArguments_in_classOrInterfaceType3660 = new BitSet(new long[]{0x0000200000000002L});
	public static final BitSet FOLLOW_45_in_classOrInterfaceType3681 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_classOrInterfaceType3685 = new BitSet(new long[]{0x0008200000000002L});
	public static final BitSet FOLLOW_typeArguments_in_classOrInterfaceType3704 = new BitSet(new long[]{0x0000200000000002L});
	public static final BitSet FOLLOW_76_in_variableModifier3839 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_annotation_in_variableModifier3851 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_51_in_typeArguments3870 = new BitSet(new long[]{0x4080000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_typeArgument_in_typeArguments3872 = new BitSet(new long[]{0x0040020000000000L});
	public static final BitSet FOLLOW_41_in_typeArguments3875 = new BitSet(new long[]{0x4080000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_typeArgument_in_typeArguments3877 = new BitSet(new long[]{0x0040020000000000L});
	public static final BitSet FOLLOW_54_in_typeArguments3881 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_in_typeArgument3904 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_55_in_typeArgument3914 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000400L});
	public static final BitSet FOLLOW_set_in_typeArgument3917 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_type_in_typeArgument3925 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_qualifiedName_in_qualifiedNameList3950 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_41_in_qualifiedNameList3953 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_qualifiedName_in_qualifiedNameList3955 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_34_in_formalParameters3980 = new BitSet(new long[]{0x4100000800010000L,0x0000000080505109L});
	public static final BitSet FOLLOW_formalParameterDecls_in_formalParameters3983 = new BitSet(new long[]{0x0000000800000000L});
	public static final BitSet FOLLOW_35_in_formalParameters3988 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_variableModifiers_in_formalParameterDecls4014 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_type_in_formalParameterDecls4018 = new BitSet(new long[]{0x0000400000010000L});
	public static final BitSet FOLLOW_formalParameterDeclsRest_in_formalParameterDecls4020 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_variableDeclaratorId_in_formalParameterDeclsRest4051 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_41_in_formalParameterDeclsRest4072 = new BitSet(new long[]{0x4100000000010000L,0x0000000080505109L});
	public static final BitSet FOLLOW_formalParameterDecls_in_formalParameterDeclsRest4074 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_46_in_formalParameterDeclsRest4087 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_variableDeclaratorId_in_formalParameterDeclsRest4091 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_block_in_methodBody4124 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_110_in_constructorBody4161 = new BitSet(new long[]{0xE10C0CC40981A2D0L,0x000C6E7FFB71D9B9L});
	public static final BitSet FOLLOW_explicitConstructorInvocation_in_constructorBody4163 = new BitSet(new long[]{0xE1040CC40981A2D0L,0x000C6E7FFB71D9B9L});
	public static final BitSet FOLLOW_blockStatement_in_constructorBody4166 = new BitSet(new long[]{0xE1040CC40981A2D0L,0x000C6E7FFB71D9B9L});
	public static final BitSet FOLLOW_114_in_constructorBody4169 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_nonWildcardTypeArguments_in_explicitConstructorInvocation4199 = new BitSet(new long[]{0x0000000000000000L,0x0000002400000000L});
	public static final BitSet FOLLOW_set_in_explicitConstructorInvocation4203 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_arguments_in_explicitConstructorInvocation4211 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_explicitConstructorInvocation4213 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_primary_in_explicitConstructorInvocation4223 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_45_in_explicitConstructorInvocation4225 = new BitSet(new long[]{0x0008000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_nonWildcardTypeArguments_in_explicitConstructorInvocation4227 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_98_in_explicitConstructorInvocation4230 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_arguments_in_explicitConstructorInvocation4232 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_explicitConstructorInvocation4234 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Identifier_in_qualifiedName4254 = new BitSet(new long[]{0x0000200000000002L});
	public static final BitSet FOLLOW_45_in_qualifiedName4257 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_qualifiedName4259 = new BitSet(new long[]{0x0000200000000002L});
	public static final BitSet FOLLOW_integerLiteral_in_literal4285 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FloatingPointLiteral_in_literal4295 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CharacterLiteral_in_literal4305 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_StringLiteral_in_literal4315 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_booleanLiteral_in_literal4325 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_89_in_literal4335 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_annotation_in_annotations4424 = new BitSet(new long[]{0x0100000000000002L});
	public static final BitSet FOLLOW_56_in_annotation4444 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_annotationName_in_annotation4448 = new BitSet(new long[]{0x0000000400000002L});
	public static final BitSet FOLLOW_34_in_annotation4470 = new BitSet(new long[]{0x41000CCC0981A0C0L,0x00084A2483504909L});
	public static final BitSet FOLLOW_elementValuePairs_in_annotation4474 = new BitSet(new long[]{0x0000000800000000L});
	public static final BitSet FOLLOW_elementValue_in_annotation4478 = new BitSet(new long[]{0x0000000800000000L});
	public static final BitSet FOLLOW_35_in_annotation4483 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Identifier_in_annotationName4513 = new BitSet(new long[]{0x0000200000000002L});
	public static final BitSet FOLLOW_45_in_annotationName4516 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_annotationName4518 = new BitSet(new long[]{0x0000200000000002L});
	public static final BitSet FOLLOW_elementValuePair_in_elementValuePairs4539 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_41_in_elementValuePairs4542 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_elementValuePair_in_elementValuePairs4544 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_Identifier_in_elementValuePair4565 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_52_in_elementValuePair4567 = new BitSet(new long[]{0x41000CC40981A0C0L,0x00084A2483504909L});
	public static final BitSet FOLLOW_elementValue_in_elementValuePair4569 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_conditionalExpression_in_elementValue4592 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_annotation_in_elementValue4602 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_elementValueArrayInitializer_in_elementValue4612 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_110_in_elementValueArrayInitializer4631 = new BitSet(new long[]{0x41000EC40981A0C0L,0x000C4A2483504909L});
	public static final BitSet FOLLOW_elementValue_in_elementValueArrayInitializer4634 = new BitSet(new long[]{0x0000020000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_41_in_elementValueArrayInitializer4637 = new BitSet(new long[]{0x41000CC40981A0C0L,0x00084A2483504909L});
	public static final BitSet FOLLOW_elementValue_in_elementValueArrayInitializer4639 = new BitSet(new long[]{0x0000020000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_41_in_elementValueArrayInitializer4646 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_114_in_elementValueArrayInitializer4650 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_56_in_annotationTypeDeclaration4670 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
	public static final BitSet FOLLOW_85_in_annotationTypeDeclaration4672 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_annotationTypeDeclaration4676 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_annotationTypeBody_in_annotationTypeDeclaration4696 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_110_in_annotationTypeBody4724 = new BitSet(new long[]{0x6100000000010200L,0x00041113B8F05119L});
	public static final BitSet FOLLOW_annotationTypeElementDeclaration_in_annotationTypeBody4727 = new BitSet(new long[]{0x6100000000010200L,0x00041113B8F05119L});
	public static final BitSet FOLLOW_114_in_annotationTypeBody4731 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_modifiers_in_annotationTypeElementDeclaration4750 = new BitSet(new long[]{0x4100000000010200L,0x0000000080704119L});
	public static final BitSet FOLLOW_annotationTypeElementRest_in_annotationTypeElementDeclaration4752 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_in_annotationTypeElementRest4771 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_annotationMethodOrConstantRest_in_annotationTypeElementRest4773 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_annotationTypeElementRest4775 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_normalClassDeclaration_in_annotationTypeElementRest4785 = new BitSet(new long[]{0x0004000000000002L});
	public static final BitSet FOLLOW_50_in_annotationTypeElementRest4788 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_normalInterfaceDeclaration_in_annotationTypeElementRest4799 = new BitSet(new long[]{0x0004000000000002L});
	public static final BitSet FOLLOW_50_in_annotationTypeElementRest4802 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enumDeclaration_in_annotationTypeElementRest4813 = new BitSet(new long[]{0x0004000000000002L});
	public static final BitSet FOLLOW_50_in_annotationTypeElementRest4816 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_annotationTypeDeclaration_in_annotationTypeElementRest4827 = new BitSet(new long[]{0x0004000000000002L});
	public static final BitSet FOLLOW_50_in_annotationTypeElementRest4830 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_annotationMethodRest_in_annotationMethodOrConstantRest4850 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_annotationConstantRest_in_annotationMethodOrConstantRest4860 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Identifier_in_annotationMethodRest4883 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_34_in_annotationMethodRest4885 = new BitSet(new long[]{0x0000000800000000L});
	public static final BitSet FOLLOW_35_in_annotationMethodRest4887 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000040L});
	public static final BitSet FOLLOW_defaultValue_in_annotationMethodRest4890 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_variableDeclarators_in_annotationConstantRest4915 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_70_in_defaultValue4939 = new BitSet(new long[]{0x41000CC40981A0C0L,0x00084A2483504909L});
	public static final BitSet FOLLOW_elementValue_in_defaultValue4941 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_110_in_block4980 = new BitSet(new long[]{0xE1040CC40981A2D0L,0x000C6E7FFB71D9B9L});
	public static final BitSet FOLLOW_blockStatement_in_block4982 = new BitSet(new long[]{0xE1040CC40981A2D0L,0x000C6E7FFB71D9B9L});
	public static final BitSet FOLLOW_114_in_block4985 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_localVariableDeclarationStatement_in_blockStatement5018 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_classOrInterfaceDeclaration_in_blockStatement5028 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_statement_in_blockStatement5038 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_localVariableDeclaration_in_localVariableDeclarationStatement5062 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_localVariableDeclarationStatement5064 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_variableModifiers_in_localVariableDeclaration5083 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_type_in_localVariableDeclaration5087 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_variableDeclarators_in_localVariableDeclaration5101 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_variableModifier_in_variableModifiers5132 = new BitSet(new long[]{0x0100000000000002L,0x0000000000001000L});
	public static final BitSet FOLLOW_block_in_statement5154 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASSERT_in_statement5164 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_statement5166 = new BitSet(new long[]{0x0006000000000000L});
	public static final BitSet FOLLOW_49_in_statement5169 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_statement5171 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_statement5175 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_80_in_statement5185 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_parExpression_in_statement5187 = new BitSet(new long[]{0xC0040CC40981A0D0L,0x00086E7CC351C9A9L});
	public static final BitSet FOLLOW_statement_in_statement5189 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000200L});
	public static final BitSet FOLLOW_73_in_statement5199 = new BitSet(new long[]{0xC0040CC40981A0D0L,0x00086E7CC351C9A9L});
	public static final BitSet FOLLOW_statement_in_statement5201 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_79_in_statement5213 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_34_in_statement5215 = new BitSet(new long[]{0x41040CC40981A0C0L,0x00080A2483505909L});
	public static final BitSet FOLLOW_forControl_in_statement5217 = new BitSet(new long[]{0x0000000800000000L});
	public static final BitSet FOLLOW_35_in_statement5219 = new BitSet(new long[]{0xC0040CC40981A0D0L,0x00086E7CC351C9A9L});
	public static final BitSet FOLLOW_statement_in_statement5221 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_109_in_statement5231 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_parExpression_in_statement5233 = new BitSet(new long[]{0xC0040CC40981A0D0L,0x00086E7CC351C9A9L});
	public static final BitSet FOLLOW_statement_in_statement5235 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_71_in_statement5245 = new BitSet(new long[]{0xC0040CC40981A0D0L,0x00086E7CC351C9A9L});
	public static final BitSet FOLLOW_statement_in_statement5247 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
	public static final BitSet FOLLOW_109_in_statement5249 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_parExpression_in_statement5251 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_statement5253 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_106_in_statement5263 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_block_in_statement5265 = new BitSet(new long[]{0x0000000000000000L,0x0000000000002004L});
	public static final BitSet FOLLOW_catches_in_statement5277 = new BitSet(new long[]{0x0000000000000000L,0x0000000000002000L});
	public static final BitSet FOLLOW_77_in_statement5279 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_block_in_statement5281 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_catches_in_statement5293 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_77_in_statement5307 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_block_in_statement5309 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_99_in_statement5329 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_parExpression_in_statement5331 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_110_in_statement5333 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000042L});
	public static final BitSet FOLLOW_switchBlockStatementGroups_in_statement5335 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_114_in_statement5337 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_100_in_statement5347 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_parExpression_in_statement5349 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_block_in_statement5351 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_94_in_statement5361 = new BitSet(new long[]{0x40040CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_statement5363 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_statement5366 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_102_in_statement5376 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_statement5378 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_statement5380 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_63_in_statement5390 = new BitSet(new long[]{0x0004000000010000L});
	public static final BitSet FOLLOW_Identifier_in_statement5392 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_statement5395 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_69_in_statement5405 = new BitSet(new long[]{0x0004000000010000L});
	public static final BitSet FOLLOW_Identifier_in_statement5407 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_statement5410 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_50_in_statement5420 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_statementExpression_in_statement5431 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_statement5433 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Identifier_in_statement5443 = new BitSet(new long[]{0x0002000000000000L});
	public static final BitSet FOLLOW_49_in_statement5445 = new BitSet(new long[]{0xC0040CC40981A0D0L,0x00086E7CC351C9A9L});
	public static final BitSet FOLLOW_statement_in_statement5447 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_catchClause_in_catches5470 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000004L});
	public static final BitSet FOLLOW_catchClause_in_catches5473 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000004L});
	public static final BitSet FOLLOW_66_in_catchClause5498 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_34_in_catchClause5500 = new BitSet(new long[]{0x4100000000010000L,0x0000000080505109L});
	public static final BitSet FOLLOW_formalParameter_in_catchClause5502 = new BitSet(new long[]{0x0000000800000000L});
	public static final BitSet FOLLOW_35_in_catchClause5504 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_block_in_catchClause5506 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_variableModifiers_in_formalParameter5525 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_type_in_formalParameter5527 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_variableDeclaratorId_in_formalParameter5529 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_switchBlockStatementGroup_in_switchBlockStatementGroups5557 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000042L});
	public static final BitSet FOLLOW_switchLabel_in_switchBlockStatementGroup5584 = new BitSet(new long[]{0xE1040CC40981A2D2L,0x00086E7FFB71D9FBL});
	public static final BitSet FOLLOW_blockStatement_in_switchBlockStatementGroup5587 = new BitSet(new long[]{0xE1040CC40981A2D2L,0x00086E7FFB71D9B9L});
	public static final BitSet FOLLOW_65_in_switchLabel5611 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_constantExpression_in_switchLabel5613 = new BitSet(new long[]{0x0002000000000000L});
	public static final BitSet FOLLOW_49_in_switchLabel5615 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_65_in_switchLabel5625 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_enumConstantName_in_switchLabel5627 = new BitSet(new long[]{0x0002000000000000L});
	public static final BitSet FOLLOW_49_in_switchLabel5629 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_70_in_switchLabel5639 = new BitSet(new long[]{0x0002000000000000L});
	public static final BitSet FOLLOW_49_in_switchLabel5641 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enhancedForControl_in_forControl5672 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_forInit_in_forControl5682 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_forControl5685 = new BitSet(new long[]{0x40040CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_forControl5687 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_forControl5690 = new BitSet(new long[]{0x40000CC40981A0C2L,0x00080A2483504909L});
	public static final BitSet FOLLOW_forUpdate_in_forControl5692 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_localVariableDeclaration_in_forInit5712 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expressionList_in_forInit5722 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_variableModifiers_in_enhancedForControl5745 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_type_in_enhancedForControl5747 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_enhancedForControl5749 = new BitSet(new long[]{0x0002000000000000L});
	public static final BitSet FOLLOW_49_in_enhancedForControl5751 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_enhancedForControl5753 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expressionList_in_forUpdate5772 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_34_in_parExpression5793 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_parExpression5795 = new BitSet(new long[]{0x0000000800000000L});
	public static final BitSet FOLLOW_35_in_parExpression5797 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_expressionList5820 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_41_in_expressionList5823 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_expressionList5825 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_expression_in_statementExpression5846 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_constantExpression5878 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_conditionalExpression_in_expression5901 = new BitSet(new long[]{0x1059112240000002L,0x0001000000000000L});
	public static final BitSet FOLLOW_assignmentOperator_in_expression5904 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_expression5906 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_52_in_assignmentOperator5931 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_40_in_assignmentOperator5941 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_44_in_assignmentOperator5951 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_37_in_assignmentOperator5961 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_48_in_assignmentOperator5971 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_33_in_assignmentOperator5981 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_112_in_assignmentOperator5991 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_60_in_assignmentOperator6001 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_30_in_assignmentOperator6011 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_51_in_assignmentOperator6032 = new BitSet(new long[]{0x0008000000000000L});
	public static final BitSet FOLLOW_51_in_assignmentOperator6036 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_52_in_assignmentOperator6040 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_54_in_assignmentOperator6074 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_54_in_assignmentOperator6078 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_54_in_assignmentOperator6082 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_52_in_assignmentOperator6086 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_54_in_assignmentOperator6117 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_54_in_assignmentOperator6121 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_52_in_assignmentOperator6125 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_conditionalOrExpression_in_conditionalExpression6154 = new BitSet(new long[]{0x0080000000000002L});
	public static final BitSet FOLLOW_55_in_conditionalExpression6158 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_conditionalExpression6160 = new BitSet(new long[]{0x0002000000000000L});
	public static final BitSet FOLLOW_49_in_conditionalExpression6162 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_conditionalExpression6164 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_conditionalAndExpression_in_conditionalOrExpression6186 = new BitSet(new long[]{0x0000000000000002L,0x0002000000000000L});
	public static final BitSet FOLLOW_113_in_conditionalOrExpression6190 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_conditionalAndExpression_in_conditionalOrExpression6192 = new BitSet(new long[]{0x0000000000000002L,0x0002000000000000L});
	public static final BitSet FOLLOW_inclusiveOrExpression_in_conditionalAndExpression6214 = new BitSet(new long[]{0x0000000080000002L});
	public static final BitSet FOLLOW_31_in_conditionalAndExpression6218 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_inclusiveOrExpression_in_conditionalAndExpression6220 = new BitSet(new long[]{0x0000000080000002L});
	public static final BitSet FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression6242 = new BitSet(new long[]{0x0000000000000002L,0x0000800000000000L});
	public static final BitSet FOLLOW_111_in_inclusiveOrExpression6246 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression6248 = new BitSet(new long[]{0x0000000000000002L,0x0000800000000000L});
	public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression6270 = new BitSet(new long[]{0x0800000000000002L});
	public static final BitSet FOLLOW_59_in_exclusiveOrExpression6274 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression6276 = new BitSet(new long[]{0x0800000000000002L});
	public static final BitSet FOLLOW_equalityExpression_in_andExpression6298 = new BitSet(new long[]{0x0000000100000002L});
	public static final BitSet FOLLOW_32_in_andExpression6302 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_equalityExpression_in_andExpression6304 = new BitSet(new long[]{0x0000000100000002L});
	public static final BitSet FOLLOW_instanceOfExpression_in_equalityExpression6326 = new BitSet(new long[]{0x0020000010000002L});
	public static final BitSet FOLLOW_set_in_equalityExpression6330 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_instanceOfExpression_in_equalityExpression6338 = new BitSet(new long[]{0x0020000010000002L});
	public static final BitSet FOLLOW_relationalExpression_in_instanceOfExpression6360 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
	public static final BitSet FOLLOW_83_in_instanceOfExpression6363 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_type_in_instanceOfExpression6365 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_shiftExpression_in_relationalExpression6386 = new BitSet(new long[]{0x0048000000000002L});
	public static final BitSet FOLLOW_relationalOp_in_relationalExpression6390 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_shiftExpression_in_relationalExpression6392 = new BitSet(new long[]{0x0048000000000002L});
	public static final BitSet FOLLOW_51_in_relationalOp6427 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_52_in_relationalOp6431 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_54_in_relationalOp6461 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_52_in_relationalOp6465 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_51_in_relationalOp6486 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_54_in_relationalOp6497 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_additiveExpression_in_shiftExpression6517 = new BitSet(new long[]{0x0048000000000002L});
	public static final BitSet FOLLOW_shiftOp_in_shiftExpression6521 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_additiveExpression_in_shiftExpression6523 = new BitSet(new long[]{0x0048000000000002L});
	public static final BitSet FOLLOW_51_in_shiftOp6554 = new BitSet(new long[]{0x0008000000000000L});
	public static final BitSet FOLLOW_51_in_shiftOp6558 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_54_in_shiftOp6590 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_54_in_shiftOp6594 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_54_in_shiftOp6598 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_54_in_shiftOp6628 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_54_in_shiftOp6632 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression6662 = new BitSet(new long[]{0x0000044000000002L});
	public static final BitSet FOLLOW_set_in_additiveExpression6666 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression6674 = new BitSet(new long[]{0x0000044000000002L});
	public static final BitSet FOLLOW_unaryExpression_in_multiplicativeExpression6696 = new BitSet(new long[]{0x0000801020000002L});
	public static final BitSet FOLLOW_set_in_multiplicativeExpression6700 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_unaryExpression_in_multiplicativeExpression6714 = new BitSet(new long[]{0x0000801020000002L});
	public static final BitSet FOLLOW_38_in_unaryExpression6740 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression6742 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_42_in_unaryExpression6752 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression6754 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_39_in_unaryExpression6764 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression6766 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_43_in_unaryExpression6776 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression6778 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unaryExpressionNotPlusMinus_in_unaryExpression6788 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_115_in_unaryExpressionNotPlusMinus6807 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus6809 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_27_in_unaryExpressionNotPlusMinus6819 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus6821 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_castExpression_in_unaryExpressionNotPlusMinus6831 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_primary_in_unaryExpressionNotPlusMinus6841 = new BitSet(new long[]{0x0200288000000002L});
	public static final BitSet FOLLOW_selector_in_unaryExpressionNotPlusMinus6843 = new BitSet(new long[]{0x0200288000000002L});
	public static final BitSet FOLLOW_34_in_castExpression6869 = new BitSet(new long[]{0x4000000000000000L,0x0000000080504109L});
	public static final BitSet FOLLOW_primitiveType_in_castExpression6871 = new BitSet(new long[]{0x0000000800000000L});
	public static final BitSet FOLLOW_35_in_castExpression6873 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_unaryExpression_in_castExpression6875 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_34_in_castExpression6884 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_type_in_castExpression6887 = new BitSet(new long[]{0x0000000800000000L});
	public static final BitSet FOLLOW_expression_in_castExpression6891 = new BitSet(new long[]{0x0000000800000000L});
	public static final BitSet FOLLOW_35_in_castExpression6894 = new BitSet(new long[]{0x400000040981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_unaryExpressionNotPlusMinus_in_castExpression6896 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parExpression_in_primary6923 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_101_in_primary6933 = new BitSet(new long[]{0x0200200400000002L});
	public static final BitSet FOLLOW_45_in_primary6936 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_primary6940 = new BitSet(new long[]{0x0200200400000002L});
	public static final BitSet FOLLOW_identifierSuffix_in_primary6956 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_98_in_primary6981 = new BitSet(new long[]{0x0000200400000000L});
	public static final BitSet FOLLOW_superSuffix_in_primary6983 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_literal_in_primary7003 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_88_in_primary7013 = new BitSet(new long[]{0x4008000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_creator_in_primary7015 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Identifier_in_primary7027 = new BitSet(new long[]{0x0200200400000002L});
	public static final BitSet FOLLOW_45_in_primary7041 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_primary7045 = new BitSet(new long[]{0x0200200400000002L});
	public static final BitSet FOLLOW_identifierSuffix_in_primary7061 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_primitiveType_in_primary7086 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_57_in_primary7089 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_primary7091 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_45_in_primary7095 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_68_in_primary7097 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_107_in_primary7107 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_45_in_primary7109 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_68_in_primary7111 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_57_in_identifierSuffix7131 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_identifierSuffix7133 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_45_in_identifierSuffix7137 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_68_in_identifierSuffix7139 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_57_in_identifierSuffix7150 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_identifierSuffix7152 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_identifierSuffix7154 = new BitSet(new long[]{0x0200000000000002L});
	public static final BitSet FOLLOW_arguments_in_identifierSuffix7167 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_45_in_identifierSuffix7177 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_68_in_identifierSuffix7179 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_45_in_identifierSuffix7189 = new BitSet(new long[]{0x0008000000000000L});
	public static final BitSet FOLLOW_explicitGenericInvocation_in_identifierSuffix7191 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_45_in_identifierSuffix7201 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_101_in_identifierSuffix7203 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_45_in_identifierSuffix7213 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_98_in_identifierSuffix7215 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_arguments_in_identifierSuffix7217 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_45_in_identifierSuffix7227 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
	public static final BitSet FOLLOW_88_in_identifierSuffix7229 = new BitSet(new long[]{0x0008000000010000L});
	public static final BitSet FOLLOW_innerCreator_in_identifierSuffix7231 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_nonWildcardTypeArguments_in_creator7250 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_createdName_in_creator7254 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_classCreatorRest_in_creator7256 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_createdName_in_creator7269 = new BitSet(new long[]{0x0200000400000000L});
	public static final BitSet FOLLOW_arrayCreatorRest_in_creator7272 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_classCreatorRest_in_creator7276 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_classOrInterfaceType_in_createdName7297 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_primitiveType_in_createdName7307 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_nonWildcardTypeArguments_in_innerCreator7331 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_innerCreator7337 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_classCreatorRest_in_innerCreator7339 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_57_in_arrayCreatorRest7359 = new BitSet(new long[]{0x44000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_58_in_arrayCreatorRest7373 = new BitSet(new long[]{0x0200000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_57_in_arrayCreatorRest7376 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_arrayCreatorRest7378 = new BitSet(new long[]{0x0200000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_arrayInitializer_in_arrayCreatorRest7382 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_arrayCreatorRest7396 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_arrayCreatorRest7398 = new BitSet(new long[]{0x0200000000000002L});
	public static final BitSet FOLLOW_57_in_arrayCreatorRest7401 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_arrayCreatorRest7403 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_arrayCreatorRest7405 = new BitSet(new long[]{0x0200000000000002L});
	public static final BitSet FOLLOW_57_in_arrayCreatorRest7410 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_arrayCreatorRest7412 = new BitSet(new long[]{0x0200000000000002L});
	public static final BitSet FOLLOW_arguments_in_classCreatorRest7444 = new BitSet(new long[]{0x0000000000000002L,0x0000400000000000L});
	public static final BitSet FOLLOW_classBody_in_classCreatorRest7492 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_nonWildcardTypeArguments_in_explicitGenericInvocation7540 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_explicitGenericInvocation7542 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_arguments_in_explicitGenericInvocation7544 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_51_in_nonWildcardTypeArguments7567 = new BitSet(new long[]{0x4000000000010000L,0x0000000080504109L});
	public static final BitSet FOLLOW_typeList_in_nonWildcardTypeArguments7569 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_54_in_nonWildcardTypeArguments7571 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_45_in_selector7594 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_selector7596 = new BitSet(new long[]{0x0000000400000002L});
	public static final BitSet FOLLOW_arguments_in_selector7599 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_45_in_selector7611 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_101_in_selector7613 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_45_in_selector7623 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_98_in_selector7625 = new BitSet(new long[]{0x0000200400000000L});
	public static final BitSet FOLLOW_superSuffix_in_selector7627 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_45_in_selector7637 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
	public static final BitSet FOLLOW_88_in_selector7639 = new BitSet(new long[]{0x0008000000010000L});
	public static final BitSet FOLLOW_innerCreator_in_selector7641 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_57_in_selector7651 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_selector7653 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_selector7655 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_arguments_in_superSuffix7678 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_45_in_superSuffix7688 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_superSuffix7690 = new BitSet(new long[]{0x0000000400000002L});
	public static final BitSet FOLLOW_arguments_in_superSuffix7693 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_34_in_arguments7714 = new BitSet(new long[]{0x40000CCC0981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expressionList_in_arguments7716 = new BitSet(new long[]{0x0000000800000000L});
	public static final BitSet FOLLOW_35_in_arguments7719 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_56_in_synpred1_Java108 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_explicitConstructorInvocation_in_synpred114_Java4163 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_nonWildcardTypeArguments_in_synpred118_Java4199 = new BitSet(new long[]{0x0000000000000000L,0x0000002400000000L});
	public static final BitSet FOLLOW_set_in_synpred118_Java4203 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_arguments_in_synpred118_Java4211 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_synpred118_Java4213 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_annotation_in_synpred129_Java4424 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_localVariableDeclarationStatement_in_synpred152_Java5018 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_classOrInterfaceDeclaration_in_synpred153_Java5028 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_73_in_synpred158_Java5199 = new BitSet(new long[]{0xC0040CC40981A0D0L,0x00086E7CC351C9A9L});
	public static final BitSet FOLLOW_statement_in_synpred158_Java5201 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_catches_in_synpred163_Java5277 = new BitSet(new long[]{0x0000000000000000L,0x0000000000002000L});
	public static final BitSet FOLLOW_77_in_synpred163_Java5279 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_block_in_synpred163_Java5281 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_catches_in_synpred164_Java5293 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_switchLabel_in_synpred179_Java5584 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_65_in_synpred181_Java5611 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_constantExpression_in_synpred181_Java5613 = new BitSet(new long[]{0x0002000000000000L});
	public static final BitSet FOLLOW_49_in_synpred181_Java5615 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_65_in_synpred182_Java5625 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_enumConstantName_in_synpred182_Java5627 = new BitSet(new long[]{0x0002000000000000L});
	public static final BitSet FOLLOW_49_in_synpred182_Java5629 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enhancedForControl_in_synpred183_Java5672 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_localVariableDeclaration_in_synpred187_Java5712 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_assignmentOperator_in_synpred189_Java5904 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_synpred189_Java5906 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_51_in_synpred199_Java6022 = new BitSet(new long[]{0x0008000000000000L});
	public static final BitSet FOLLOW_51_in_synpred199_Java6024 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_52_in_synpred199_Java6026 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_54_in_synpred200_Java6062 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_54_in_synpred200_Java6064 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_54_in_synpred200_Java6066 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_52_in_synpred200_Java6068 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_54_in_synpred201_Java6107 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_54_in_synpred201_Java6109 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_52_in_synpred201_Java6111 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_51_in_synpred212_Java6419 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_52_in_synpred212_Java6421 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_54_in_synpred213_Java6453 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_52_in_synpred213_Java6455 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_shiftOp_in_synpred215_Java6521 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_additiveExpression_in_synpred215_Java6523 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_51_in_synpred216_Java6546 = new BitSet(new long[]{0x0008000000000000L});
	public static final BitSet FOLLOW_51_in_synpred216_Java6548 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_54_in_synpred217_Java6580 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_54_in_synpred217_Java6582 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_54_in_synpred217_Java6584 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_54_in_synpred218_Java6620 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_54_in_synpred218_Java6622 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_castExpression_in_synpred230_Java6831 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_34_in_synpred234_Java6869 = new BitSet(new long[]{0x4000000000000000L,0x0000000080504109L});
	public static final BitSet FOLLOW_primitiveType_in_synpred234_Java6871 = new BitSet(new long[]{0x0000000800000000L});
	public static final BitSet FOLLOW_35_in_synpred234_Java6873 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_unaryExpression_in_synpred234_Java6875 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_in_synpred235_Java6887 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_45_in_synpred237_Java6936 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_synpred237_Java6940 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifierSuffix_in_synpred238_Java6956 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_45_in_synpred243_Java7041 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_Identifier_in_synpred243_Java7045 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifierSuffix_in_synpred244_Java7061 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_57_in_synpred250_Java7150 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_synpred250_Java7152 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_synpred250_Java7154 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_57_in_synpred263_Java7401 = new BitSet(new long[]{0x40000CC40981A0C0L,0x00080A2483504909L});
	public static final BitSet FOLLOW_expression_in_synpred263_Java7403 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_synpred263_Java7405 = new BitSet(new long[]{0x0000000000000002L});
}