docs: public final void whileStatement() throws RecognitionException {
  		int whileStatement_StartIndex = input.index();
  
  		Token s=null;
  		ParserRuleReturnScope bs =null;
  
  
  		         JavaWhileBlockDescr wd = null;         
  		    
  		try {
  			if ( state.backtracking>0 && alreadyParsedRule(input, 87) ) { return; }
  
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:863:5: (s= 'while' parExpression bs= statement )
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:865:5: s= 'while' parExpression bs= statement
  			{
  			s=(Token)match(input,120,FOLLOW_120_in_whileStatement3700); if (state.failed) return;
  			pushFollow(FOLLOW_parExpression_in_whileStatement3702);
  			parExpression();
  			state._fsp--;
  			if (state.failed) return;
  			if ( state.backtracking==0 ) {   wd = new JavaWhileBlockDescr( ); wd.setStart( ((CommonToken)s).getStartIndex() ); pushContainerBlockDescr(wd, true);    
  			    }
  			pushFollow(FOLLOW_statement_in_whileStatement3719);
  			bs=statement();
  			state._fsp--;
  			if (state.failed) return;
  			if ( state.backtracking==0 ) {                
  			        wd.setTextStart(((CommonToken)(bs!=null?(bs.start):null)).getStartIndex() );
  			        wd.setEnd(((CommonToken)(bs!=null?(bs.stop):null)).getStopIndex() ); popContainerBlockDescr();     
  			    }
  			}
  
  		}
  		catch (RecognitionException re) {
  			reportError(re);
  			recover(input,re);
  		}
  		finally {
  			// do for sure before leaving
  			if ( state.backtracking>0 ) { memoize(input, 87, whileStatement_StartIndex); }
  
  		}
  	}