docs: public final void annotation() throws RecognitionException {
  		int annotation_StartIndex = input.index();
  
  		try {
  			if ( state.backtracking>0 && alreadyParsedRule(input, 65) ) { return; }
  
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:613:5: ( '@' annotationName ( '(' ( elementValuePairs )? ')' )? )
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:613:7: '@' annotationName ( '(' ( elementValuePairs )? ')' )?
  			{
  			match(input,58,FOLLOW_58_in_annotation2305); if (state.failed) return;
  			pushFollow(FOLLOW_annotationName_in_annotation2307);
  			annotationName();
  			state._fsp--;
  			if (state.failed) return;
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:613:26: ( '(' ( elementValuePairs )? ')' )?
  			int alt87=2;
  			int LA87_0 = input.LA(1);
  			if ( (LA87_0==36) ) {
  				alt87=1;
  			}
  			switch (alt87) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:613:27: '(' ( elementValuePairs )? ')'
  					{
  					match(input,36,FOLLOW_36_in_annotation2310); if (state.failed) return;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:613:31: ( elementValuePairs )?
  					int alt86=2;
  					int LA86_0 = input.LA(1);
  					if ( ((LA86_0 >= CharacterLiteral && LA86_0 <= DecimalLiteral)||LA86_0==FloatingPointLiteral||(LA86_0 >= HexLiteral && LA86_0 <= Identifier)||(LA86_0 >= OctalLiteral && LA86_0 <= StringLiteral)||LA86_0==29||LA86_0==36||(LA86_0 >= 40 && LA86_0 <= 41)||(LA86_0 >= 44 && LA86_0 <= 45)||LA86_0==53||LA86_0==58||LA86_0==65||LA86_0==67||(LA86_0 >= 70 && LA86_0 <= 71)||LA86_0==77||(LA86_0 >= 79 && LA86_0 <= 80)||LA86_0==82||LA86_0==85||LA86_0==92||LA86_0==94||(LA86_0 >= 97 && LA86_0 <= 98)||LA86_0==105||LA86_0==108||LA86_0==111||LA86_0==115||LA86_0==118||LA86_0==121||LA86_0==126) ) {
  						alt86=1;
  					}
  					switch (alt86) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:613:31: elementValuePairs
  							{
  							pushFollow(FOLLOW_elementValuePairs_in_annotation2312);
  							elementValuePairs();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  					}
  
  					match(input,37,FOLLOW_37_in_annotation2315); 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, 65, annotation_StartIndex); }
  
  		}
  	}