docs: public final void identifierSuffix() throws RecognitionException {
  		int identifierSuffix_StartIndex = input.index();
  
  		try {
  			if ( state.backtracking>0 && alreadyParsedRule(input, 129) ) { return; }
  
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1234:5: ( ( '[' ']' )+ '.' 'class' | ( '[' expression ']' )+ | arguments | '.' 'class' | '.' explicitGenericInvocation | '.' 'this' | '.' 'super' arguments | '.' 'new' ( nonWildcardTypeArguments )? innerCreator )
  			int alt174=8;
  			switch ( input.LA(1) ) {
  			case 59:
  				{
  				int LA174_1 = input.LA(2);
  				if ( (LA174_1==60) ) {
  					alt174=1;
  				}
  				else if ( ((LA174_1 >= CharacterLiteral && LA174_1 <= DecimalLiteral)||LA174_1==FloatingPointLiteral||(LA174_1 >= HexLiteral && LA174_1 <= Identifier)||(LA174_1 >= OctalLiteral && LA174_1 <= StringLiteral)||LA174_1==29||LA174_1==36||(LA174_1 >= 40 && LA174_1 <= 41)||(LA174_1 >= 44 && LA174_1 <= 45)||LA174_1==53||LA174_1==65||LA174_1==67||(LA174_1 >= 70 && LA174_1 <= 71)||LA174_1==77||(LA174_1 >= 79 && LA174_1 <= 80)||LA174_1==82||LA174_1==85||LA174_1==92||LA174_1==94||(LA174_1 >= 97 && LA174_1 <= 98)||LA174_1==105||LA174_1==108||LA174_1==111||LA174_1==115||LA174_1==118||LA174_1==126) ) {
  					alt174=2;
  				}
  
  				else {
  					if (state.backtracking>0) {state.failed=true; return;}
  					int nvaeMark = input.mark();
  					try {
  						input.consume();
  						NoViableAltException nvae =
  							new NoViableAltException("", 174, 1, input);
  						throw nvae;
  					} finally {
  						input.rewind(nvaeMark);
  					}
  				}
  
  				}
  				break;
  			case 36:
  				{
  				alt174=3;
  				}
  				break;
  			case 47:
  				{
  				switch ( input.LA(2) ) {
  				case 72:
  					{
  					alt174=4;
  					}
  					break;
  				case 111:
  					{
  					alt174=6;
  					}
  					break;
  				case 108:
  					{
  					alt174=7;
  					}
  					break;
  				case 97:
  					{
  					alt174=8;
  					}
  					break;
  				case 53:
  					{
  					alt174=5;
  					}
  					break;
  				default:
  					if (state.backtracking>0) {state.failed=true; return;}
  					int nvaeMark = input.mark();
  					try {
  						input.consume();
  						NoViableAltException nvae =
  							new NoViableAltException("", 174, 3, input);
  						throw nvae;
  					} finally {
  						input.rewind(nvaeMark);
  					}
  				}
  				}
  				break;
  			default:
  				if (state.backtracking>0) {state.failed=true; return;}
  				NoViableAltException nvae =
  					new NoViableAltException("", 174, 0, input);
  				throw nvae;
  			}
  			switch (alt174) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1234:7: ( '[' ']' )+ '.' 'class'
  					{
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1234:7: ( '[' ']' )+
  					int cnt171=0;
  					loop171:
  					while (true) {
  						int alt171=2;
  						int LA171_0 = input.LA(1);
  						if ( (LA171_0==59) ) {
  							alt171=1;
  						}
  
  						switch (alt171) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1234:8: '[' ']'
  							{
  							match(input,59,FOLLOW_59_in_identifierSuffix5876); if (state.failed) return;
  							match(input,60,FOLLOW_60_in_identifierSuffix5878); if (state.failed) return;
  							}
  							break;
  
  						default :
  							if ( cnt171 >= 1 ) break loop171;
  							if (state.backtracking>0) {state.failed=true; return;}
  							EarlyExitException eee = new EarlyExitException(171, input);
  							throw eee;
  						}
  						cnt171++;
  					}
  
  					match(input,47,FOLLOW_47_in_identifierSuffix5882); if (state.failed) return;
  					match(input,72,FOLLOW_72_in_identifierSuffix5884); if (state.failed) return;
  					}
  					break;
  				case 2 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1235:7: ( '[' expression ']' )+
  					{
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1235:7: ( '[' expression ']' )+
  					int cnt172=0;
  					loop172:
  					while (true) {
  						int alt172=2;
  						int LA172_0 = input.LA(1);
  						if ( (LA172_0==59) ) {
  							switch ( input.LA(2) ) {
  							case 40:
  								{
  								int LA172_32 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 44:
  								{
  								int LA172_33 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 41:
  								{
  								int LA172_34 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 45:
  								{
  								int LA172_35 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 126:
  								{
  								int LA172_36 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 29:
  								{
  								int LA172_37 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 36:
  								{
  								int LA172_38 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 53:
  								{
  								int LA172_39 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 111:
  								{
  								int LA172_40 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 108:
  								{
  								int LA172_41 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 80:
  								{
  								int LA172_42 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 79:
  								{
  								int LA172_43 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 70:
  								{
  								int LA172_44 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case DecimalLiteral:
  							case HexLiteral:
  							case OctalLiteral:
  								{
  								int LA172_45 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case FloatingPointLiteral:
  								{
  								int LA172_46 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case CharacterLiteral:
  								{
  								int LA172_47 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case StringLiteral:
  								{
  								int LA172_48 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 82:
  							case 115:
  								{
  								int LA172_49 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 98:
  								{
  								int LA172_50 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 97:
  								{
  								int LA172_51 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case Identifier:
  								{
  								int LA172_52 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 65:
  							case 67:
  							case 71:
  							case 77:
  							case 85:
  							case 92:
  							case 94:
  							case 105:
  								{
  								int LA172_53 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							case 118:
  								{
  								int LA172_54 = input.LA(3);
  								if ( (synpred270_Java()) ) {
  									alt172=1;
  								}
  
  								}
  								break;
  							}
  						}
  
  						switch (alt172) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1235:8: '[' expression ']'
  							{
  							match(input,59,FOLLOW_59_in_identifierSuffix5893); if (state.failed) return;
  							pushFollow(FOLLOW_expression_in_identifierSuffix5895);
  							expression();
  							state._fsp--;
  							if (state.failed) return;
  							match(input,60,FOLLOW_60_in_identifierSuffix5897); if (state.failed) return;
  							}
  							break;
  
  						default :
  							if ( cnt172 >= 1 ) break loop172;
  							if (state.backtracking>0) {state.failed=true; return;}
  							EarlyExitException eee = new EarlyExitException(172, input);
  							throw eee;
  						}
  						cnt172++;
  					}
  
  					}
  					break;
  				case 3 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1236:9: arguments
  					{
  					pushFollow(FOLLOW_arguments_in_identifierSuffix5910);
  					arguments();
  					state._fsp--;
  					if (state.failed) return;
  					}
  					break;
  				case 4 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1237:9: '.' 'class'
  					{
  					match(input,47,FOLLOW_47_in_identifierSuffix5920); if (state.failed) return;
  					match(input,72,FOLLOW_72_in_identifierSuffix5922); if (state.failed) return;
  					}
  					break;
  				case 5 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1238:9: '.' explicitGenericInvocation
  					{
  					match(input,47,FOLLOW_47_in_identifierSuffix5932); if (state.failed) return;
  					pushFollow(FOLLOW_explicitGenericInvocation_in_identifierSuffix5934);
  					explicitGenericInvocation();
  					state._fsp--;
  					if (state.failed) return;
  					}
  					break;
  				case 6 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1239:9: '.' 'this'
  					{
  					match(input,47,FOLLOW_47_in_identifierSuffix5944); if (state.failed) return;
  					match(input,111,FOLLOW_111_in_identifierSuffix5946); if (state.failed) return;
  					}
  					break;
  				case 7 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1240:9: '.' 'super' arguments
  					{
  					match(input,47,FOLLOW_47_in_identifierSuffix5956); if (state.failed) return;
  					match(input,108,FOLLOW_108_in_identifierSuffix5958); if (state.failed) return;
  					pushFollow(FOLLOW_arguments_in_identifierSuffix5960);
  					arguments();
  					state._fsp--;
  					if (state.failed) return;
  					}
  					break;
  				case 8 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1241:9: '.' 'new' ( nonWildcardTypeArguments )? innerCreator
  					{
  					match(input,47,FOLLOW_47_in_identifierSuffix5970); if (state.failed) return;
  					match(input,97,FOLLOW_97_in_identifierSuffix5972); if (state.failed) return;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1241:19: ( nonWildcardTypeArguments )?
  					int alt173=2;
  					int LA173_0 = input.LA(1);
  					if ( (LA173_0==53) ) {
  						alt173=1;
  					}
  					switch (alt173) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1241:20: nonWildcardTypeArguments
  							{
  							pushFollow(FOLLOW_nonWildcardTypeArguments_in_identifierSuffix5975);
  							nonWildcardTypeArguments();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  					}
  
  					pushFollow(FOLLOW_innerCreator_in_identifierSuffix5979);
  					innerCreator();
  					state._fsp--;
  					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, 129, identifierSuffix_StartIndex); }
  
  		}
  	}