docs: public final void tryStatement() throws RecognitionException {
  		int tryStatement_StartIndex = input.index();
  
  		Token s=null;
  		Token bs=null;
  		Token c=null;
  		ParserRuleReturnScope formalParameter6 =null;
  
  
  		         JavaTryBlockDescr td = null;
  		         JavaCatchBlockDescr cd = null;
  		         JavaFinalBlockDescr fd = null;
  		         
  		    
  		try {
  			if ( state.backtracking>0 && alreadyParsedRule(input, 88) ) { return; }
  
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:882:5: (s= 'try' bs= '{' ( blockStatement )* c= '}' (s= 'catch' '(' formalParameter ')' bs= '{' ( blockStatement )* c= '}' )* (s= 'finally' bs= '{' ( blockStatement )* c= '}' )? )
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:883:5: s= 'try' bs= '{' ( blockStatement )* c= '}' (s= 'catch' '(' formalParameter ')' bs= '{' ( blockStatement )* c= '}' )* (s= 'finally' bs= '{' ( blockStatement )* c= '}' )?
  			{
  			s=(Token)match(input,116,FOLLOW_116_in_tryStatement3772); if (state.failed) return;
  			if ( state.backtracking==0 ) {   increaseLevel();
  			        td = new JavaTryBlockDescr( ); td.setStart( ((CommonToken)s).getStartIndex() ); pushContainerBlockDescr(td, true);    
  			    }
  			bs=(Token)match(input,121,FOLLOW_121_in_tryStatement3783); if (state.failed) return;
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:886:14: ( blockStatement )*
  			loop119:
  			while (true) {
  				int alt119=2;
  				int LA119_0 = input.LA(1);
  				if ( ((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==29||LA119_0==36||(LA119_0 >= 40 && LA119_0 <= 41)||(LA119_0 >= 44 && LA119_0 <= 45)||(LA119_0 >= 52 && LA119_0 <= 53)||LA119_0==58||(LA119_0 >= 63 && LA119_0 <= 67)||(LA119_0 >= 70 && LA119_0 <= 73)||(LA119_0 >= 75 && LA119_0 <= 77)||(LA119_0 >= 79 && LA119_0 <= 80)||(LA119_0 >= 82 && LA119_0 <= 83)||(LA119_0 >= 85 && LA119_0 <= 87)||LA119_0==90||(LA119_0 >= 92 && LA119_0 <= 98)||(LA119_0 >= 100 && LA119_0 <= 112)||(LA119_0 >= 114 && LA119_0 <= 121)||LA119_0==126) ) {
  					alt119=1;
  				}
  
  				switch (alt119) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:886:14: blockStatement
  					{
  					pushFollow(FOLLOW_blockStatement_in_tryStatement3785);
  					blockStatement();
  					state._fsp--;
  					if (state.failed) return;
  					}
  					break;
  
  				default :
  					break loop119;
  				}
  			}
  
  			if ( state.backtracking==0 ) {
  			                
  			        td.setTextStart( ((CommonToken)bs).getStartIndex() );        
  
  			    }
  			c=(Token)match(input,125,FOLLOW_125_in_tryStatement3796); if (state.failed) return;
  			if ( state.backtracking==0 ) {td.setEnd( ((CommonToken)c).getStopIndex() ); decreaseLevel(); popContainerBlockDescr();    }
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:894:5: (s= 'catch' '(' formalParameter ')' bs= '{' ( blockStatement )* c= '}' )*
  			loop121:
  			while (true) {
  				int alt121=2;
  				alt121 = dfa121.predict(input);
  				switch (alt121) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:894:6: s= 'catch' '(' formalParameter ')' bs= '{' ( blockStatement )* c= '}'
  					{
  					s=(Token)match(input,69,FOLLOW_69_in_tryStatement3814); if (state.failed) return;
  					match(input,36,FOLLOW_36_in_tryStatement3816); if (state.failed) return;
  					pushFollow(FOLLOW_formalParameter_in_tryStatement3818);
  					formalParameter6=formalParameter();
  					state._fsp--;
  					if (state.failed) return;
  					match(input,37,FOLLOW_37_in_tryStatement3820); if (state.failed) return;
  					if ( state.backtracking==0 ) {  increaseLevel();
  					        cd = new JavaCatchBlockDescr( (formalParameter6!=null?input.toString(formalParameter6.start,formalParameter6.stop):null) );
  					        cd.setClauseStart( ((CommonToken)(formalParameter6!=null?(formalParameter6.start):null)).getStartIndex() ); 
  					        cd.setStart( ((CommonToken)s).getStartIndex() );  pushContainerBlockDescr(cd, false);
  					     }
  					bs=(Token)match(input,121,FOLLOW_121_in_tryStatement3832); if (state.failed) return;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:899:15: ( blockStatement )*
  					loop120:
  					while (true) {
  						int alt120=2;
  						int LA120_0 = input.LA(1);
  						if ( ((LA120_0 >= CharacterLiteral && LA120_0 <= DecimalLiteral)||LA120_0==ENUM||LA120_0==FloatingPointLiteral||(LA120_0 >= HexLiteral && LA120_0 <= Identifier)||(LA120_0 >= OctalLiteral && LA120_0 <= StringLiteral)||LA120_0==29||LA120_0==36||(LA120_0 >= 40 && LA120_0 <= 41)||(LA120_0 >= 44 && LA120_0 <= 45)||(LA120_0 >= 52 && LA120_0 <= 53)||LA120_0==58||(LA120_0 >= 63 && LA120_0 <= 67)||(LA120_0 >= 70 && LA120_0 <= 73)||(LA120_0 >= 75 && LA120_0 <= 77)||(LA120_0 >= 79 && LA120_0 <= 80)||(LA120_0 >= 82 && LA120_0 <= 83)||(LA120_0 >= 85 && LA120_0 <= 87)||LA120_0==90||(LA120_0 >= 92 && LA120_0 <= 98)||(LA120_0 >= 100 && LA120_0 <= 112)||(LA120_0 >= 114 && LA120_0 <= 121)||LA120_0==126) ) {
  							alt120=1;
  						}
  
  						switch (alt120) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:899:15: blockStatement
  							{
  							pushFollow(FOLLOW_blockStatement_in_tryStatement3834);
  							blockStatement();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  						default :
  							break loop120;
  						}
  					}
  
  					if ( state.backtracking==0 ) { 
  					        cd.setTextStart( ((CommonToken)bs).getStartIndex() );
  					        td.addCatch( cd );        
  					     }
  					c=(Token)match(input,125,FOLLOW_125_in_tryStatement3847); if (state.failed) return;
  					if ( state.backtracking==0 ) {cd.setEnd( ((CommonToken)c).getStopIndex() ); decreaseLevel(); popContainerBlockDescr(); }
  					}
  					break;
  
  				default :
  					break loop121;
  				}
  			}
  
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:907:6: (s= 'finally' bs= '{' ( blockStatement )* c= '}' )?
  			int alt123=2;
  			alt123 = dfa123.predict(input);
  			switch (alt123) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:907:7: s= 'finally' bs= '{' ( blockStatement )* c= '}'
  					{
  					s=(Token)match(input,84,FOLLOW_84_in_tryStatement3881); if (state.failed) return;
  					if ( state.backtracking==0 ) {  increaseLevel();
  					        fd = new JavaFinalBlockDescr( ); fd.setStart( ((CommonToken)s).getStartIndex() ); pushContainerBlockDescr(fd, false);
  					     }
  					bs=(Token)match(input,121,FOLLOW_121_in_tryStatement3893); if (state.failed) return;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:910:15: ( blockStatement )*
  					loop122:
  					while (true) {
  						int alt122=2;
  						int LA122_0 = input.LA(1);
  						if ( ((LA122_0 >= CharacterLiteral && LA122_0 <= DecimalLiteral)||LA122_0==ENUM||LA122_0==FloatingPointLiteral||(LA122_0 >= HexLiteral && LA122_0 <= Identifier)||(LA122_0 >= OctalLiteral && LA122_0 <= StringLiteral)||LA122_0==29||LA122_0==36||(LA122_0 >= 40 && LA122_0 <= 41)||(LA122_0 >= 44 && LA122_0 <= 45)||(LA122_0 >= 52 && LA122_0 <= 53)||LA122_0==58||(LA122_0 >= 63 && LA122_0 <= 67)||(LA122_0 >= 70 && LA122_0 <= 73)||(LA122_0 >= 75 && LA122_0 <= 77)||(LA122_0 >= 79 && LA122_0 <= 80)||(LA122_0 >= 82 && LA122_0 <= 83)||(LA122_0 >= 85 && LA122_0 <= 87)||LA122_0==90||(LA122_0 >= 92 && LA122_0 <= 98)||(LA122_0 >= 100 && LA122_0 <= 112)||(LA122_0 >= 114 && LA122_0 <= 121)||LA122_0==126) ) {
  							alt122=1;
  						}
  
  						switch (alt122) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:910:15: blockStatement
  							{
  							pushFollow(FOLLOW_blockStatement_in_tryStatement3895);
  							blockStatement();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  						default :
  							break loop122;
  						}
  					}
  
  					if ( state.backtracking==0 ) {
  					        fd.setTextStart( ((CommonToken)bs).getStartIndex() );        
  					        td.setFinally( fd );         
  					      }
  					c=(Token)match(input,125,FOLLOW_125_in_tryStatement3909); if (state.failed) return;
  					if ( state.backtracking==0 ) {fd.setEnd( ((CommonToken)c).getStopIndex() ); decreaseLevel(); popContainerBlockDescr(); }
  					}
  					break;
  
  			}
  
  			}
  
  		}
  		catch (RecognitionException re) {
  			reportError(re);
  			recover(input,re);
  		}
  		finally {
  			// do for sure before leaving
  			if ( state.backtracking>0 ) { memoize(input, 88, tryStatement_StartIndex); }
  
  		}
  	}