public final void localVariableDeclaration() throws RecognitionException {
		VarDecl_stack.push(new VarDecl_scope());

		int localVariableDeclaration_StartIndex = input.index();

		ParserRuleReturnScope variableModifier1 =null;
		ParserRuleReturnScope type2 =null;


		            VarDecl_stack.peek().descr = new JavaLocalDeclarationDescr();
		        
		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 82) ) { return; }

			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:710:5: ( ( variableModifier )* type variableDeclarators ';' )
			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:711:5: ( variableModifier )* type variableDeclarators ';'
			{
			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:711:5: ( variableModifier )*
			loop106:
			while (true) {
				int alt106=2;
				int LA106_0 = input.LA(1);
				if ( (LA106_0==58||LA106_0==83) ) {
					alt106=1;
				}

				switch (alt106) {
				case 1 :
					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:711:7: variableModifier
					{
					pushFollow(FOLLOW_variableModifier_in_localVariableDeclaration2865);
					variableModifier1=variableModifier();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {
					            VarDecl_stack.peek().descr.updateStart( ((CommonToken)(variableModifier1!=null?(variableModifier1.start):null)).getStartIndex() - 1 );
					            VarDecl_stack.peek().descr.addModifier( (variableModifier1!=null?input.toString(variableModifier1.start,variableModifier1.stop):null) );
					        }
					}
					break;

				default :
					break loop106;
				}
			}

			pushFollow(FOLLOW_type_in_localVariableDeclaration2888);
			type2=type();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {
			            VarDecl_stack.peek().descr.updateStart( ((CommonToken)(type2!=null?(type2.start):null)).getStartIndex() - 1 );
			            VarDecl_stack.peek().descr.setType( (type2!=null?input.toString(type2.start,type2.stop):null) );
			            VarDecl_stack.peek().descr.setEnd( ((CommonToken)(type2!=null?(type2.stop):null)).getStopIndex() );
			        }
			pushFollow(FOLLOW_variableDeclarators_in_localVariableDeclaration2904);
			variableDeclarators();
			state._fsp--;
			if (state.failed) return;
			match(input,52,FOLLOW_52_in_localVariableDeclaration2906); if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			            addLocalDeclaration( VarDecl_stack.peek().descr );
			        }
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 82, localVariableDeclaration_StartIndex); }

			VarDecl_stack.pop();

		}
	}
public final void localVariableDeclaration ( ) throws RecognitionException { VarDecl_stack . push ( new VarDecl_scope ( ) ) ; int localVariableDeclaration_StartIndex = input . index ( ) ; ParserRuleReturnScope variableModifier1 = null ; ParserRuleReturnScope type2 = null ; VarDecl_stack . peek ( ) . descr = new JavaLocalDeclarationDescr ( ) ; try { if ( state . backtracking > 0 && alreadyParsedRule ( input , 82 ) ) { return ; } { loop106 : while ( true ) { int alt106 = 2 ; int LA106_0 = input . LA ( 1 ) ; if ( ( LA106_0 == 58 || LA106_0 == 83 ) ) { alt106 = 1 ; } switch ( alt106 ) { case 1 : { pushFollow ( FOLLOW_variableModifier_in_localVariableDeclaration2865 ) ; variableModifier1 = variableModifier ( ) ; state . _fsp -- ; if ( state . failed ) return ; if ( state . backtracking == 0 ) { VarDecl_stack . peek ( ) . descr . updateStart ( ( ( CommonToken ) ( variableModifier1 != null ? ( variableModifier1 . start ) : null ) ) . getStartIndex ( ) - 1 ) ; VarDecl_stack . peek ( ) . descr . addModifier ( ( variableModifier1 != null ? input . toString ( variableModifier1 . start , variableModifier1 . stop ) : null ) ) ; } } break ; default : break loop106 ; } } pushFollow ( FOLLOW_type_in_localVariableDeclaration2888 ) ; type2 = type ( ) ; state . _fsp -- ; if ( state . failed ) return ; if ( state . backtracking == 0 ) { VarDecl_stack . peek ( ) . descr . updateStart ( ( ( CommonToken ) ( type2 != null ? ( type2 . start ) : null ) ) . getStartIndex ( ) - 1 ) ; VarDecl_stack . peek ( ) . descr . setType ( ( type2 != null ? input . toString ( type2 . start , type2 . stop ) : null ) ) ; VarDecl_stack . peek ( ) . descr . setEnd ( ( ( CommonToken ) ( type2 != null ? ( type2 . stop ) : null ) ) . getStopIndex ( ) ) ; } pushFollow ( FOLLOW_variableDeclarators_in_localVariableDeclaration2904 ) ; variableDeclarators ( ) ; state . _fsp -- ; if ( state . failed ) return ; match ( input , 52 , FOLLOW_52_in_localVariableDeclaration2906 ) ; if ( state . failed ) return ; } if ( state . backtracking == 0 ) { addLocalDeclaration ( VarDecl_stack . peek ( ) . descr ) ; } } catch ( RecognitionException re ) { reportError ( re ) ; recover ( input , re ) ; } finally { if ( state . backtracking > 0 ) { memoize ( input , 82 , localVariableDeclaration_StartIndex ) ; } VarDecl_stack . pop ( ) ; } }
src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:702:1: localVariableDeclaration : ( variableModifier )* type variableDeclarators ';' ;