docs: public final void modifier() throws RecognitionException {
  		int modifier_StartIndex = input.index();
  
  		try {
  			if ( state.backtracking>0 && alreadyParsedRule(input, 46) ) { return; }
  
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:504:5: ( annotation | 'public' | 'protected' | 'private' | 'static' | 'abstract' | 'final' | 'native' | 'synchronized' | 'transient' | 'volatile' | 'strictfp' )
  			int alt64=12;
  			switch ( input.LA(1) ) {
  			case 58:
  				{
  				alt64=1;
  				}
  				break;
  			case 102:
  				{
  				alt64=2;
  				}
  				break;
  			case 101:
  				{
  				alt64=3;
  				}
  				break;
  			case 100:
  				{
  				alt64=4;
  				}
  				break;
  			case 106:
  				{
  				alt64=5;
  				}
  				break;
  			case 63:
  				{
  				alt64=6;
  				}
  				break;
  			case 83:
  				{
  				alt64=7;
  				}
  				break;
  			case 96:
  				{
  				alt64=8;
  				}
  				break;
  			case 110:
  				{
  				alt64=9;
  				}
  				break;
  			case 114:
  				{
  				alt64=10;
  				}
  				break;
  			case 119:
  				{
  				alt64=11;
  				}
  				break;
  			case 107:
  				{
  				alt64=12;
  				}
  				break;
  			default:
  				if (state.backtracking>0) {state.failed=true; return;}
  				NoViableAltException nvae =
  					new NoViableAltException("", 64, 0, input);
  				throw nvae;
  			}
  			switch (alt64) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:504:9: annotation
  					{
  					pushFollow(FOLLOW_annotation_in_modifier1573);
  					annotation();
  					state._fsp--;
  					if (state.failed) return;
  					}
  					break;
  				case 2 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:505:9: 'public'
  					{
  					match(input,102,FOLLOW_102_in_modifier1583); if (state.failed) return;
  					}
  					break;
  				case 3 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:506:9: 'protected'
  					{
  					match(input,101,FOLLOW_101_in_modifier1593); if (state.failed) return;
  					}
  					break;
  				case 4 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:507:9: 'private'
  					{
  					match(input,100,FOLLOW_100_in_modifier1603); if (state.failed) return;
  					}
  					break;
  				case 5 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:508:9: 'static'
  					{
  					match(input,106,FOLLOW_106_in_modifier1613); if (state.failed) return;
  					}
  					break;
  				case 6 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:509:9: 'abstract'
  					{
  					match(input,63,FOLLOW_63_in_modifier1623); if (state.failed) return;
  					}
  					break;
  				case 7 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:510:9: 'final'
  					{
  					match(input,83,FOLLOW_83_in_modifier1633); if (state.failed) return;
  					}
  					break;
  				case 8 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:511:9: 'native'
  					{
  					match(input,96,FOLLOW_96_in_modifier1643); if (state.failed) return;
  					}
  					break;
  				case 9 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:512:9: 'synchronized'
  					{
  					match(input,110,FOLLOW_110_in_modifier1653); if (state.failed) return;
  					}
  					break;
  				case 10 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:513:9: 'transient'
  					{
  					match(input,114,FOLLOW_114_in_modifier1663); if (state.failed) return;
  					}
  					break;
  				case 11 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:514:9: 'volatile'
  					{
  					match(input,119,FOLLOW_119_in_modifier1673); if (state.failed) return;
  					}
  					break;
  				case 12 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:515:9: 'strictfp'
  					{
  					match(input,107,FOLLOW_107_in_modifier1683); 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, 46, modifier_StartIndex); }
  
  		}
  	}