docs: public final void primary() throws RecognitionException {
  		int primary_StartIndex = input.index();
  
  		Token i=null;
  
  		try {
  			if ( state.backtracking>0 && alreadyParsedRule(input, 127) ) { return; }
  
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1216:5: ( parExpression | nonWildcardTypeArguments ( explicitGenericInvocationSuffix | 'this' arguments ) | 'this' ( '.' Identifier )* ( identifierSuffix )? | 'super' superSuffix | epStatement ( '.' methodName )* ( identifierSuffix )? | literal | 'new' creator |i= Identifier ( '.' methodName )* ( identifierSuffix )? | primitiveType ( '[' ']' )* '.' 'class' | 'void' '.' 'class' )
  			int alt170=10;
  			switch ( input.LA(1) ) {
  			case 36:
  				{
  				alt170=1;
  				}
  				break;
  			case 53:
  				{
  				alt170=2;
  				}
  				break;
  			case 111:
  				{
  				alt170=3;
  				}
  				break;
  			case 108:
  				{
  				alt170=4;
  				}
  				break;
  			case 70:
  			case 79:
  			case 80:
  				{
  				alt170=5;
  				}
  				break;
  			case CharacterLiteral:
  			case DecimalLiteral:
  			case FloatingPointLiteral:
  			case HexLiteral:
  			case OctalLiteral:
  			case StringLiteral:
  			case 82:
  			case 98:
  			case 115:
  				{
  				alt170=6;
  				}
  				break;
  			case 97:
  				{
  				alt170=7;
  				}
  				break;
  			case Identifier:
  				{
  				alt170=8;
  				}
  				break;
  			case 65:
  			case 67:
  			case 71:
  			case 77:
  			case 85:
  			case 92:
  			case 94:
  			case 105:
  				{
  				alt170=9;
  				}
  				break;
  			case 118:
  				{
  				alt170=10;
  				}
  				break;
  			default:
  				if (state.backtracking>0) {state.failed=true; return;}
  				NoViableAltException nvae =
  					new NoViableAltException("", 170, 0, input);
  				throw nvae;
  			}
  			switch (alt170) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1216:7: parExpression
  					{
  					pushFollow(FOLLOW_parExpression_in_primary5654);
  					parExpression();
  					state._fsp--;
  					if (state.failed) return;
  					}
  					break;
  				case 2 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1217:9: nonWildcardTypeArguments ( explicitGenericInvocationSuffix | 'this' arguments )
  					{
  					pushFollow(FOLLOW_nonWildcardTypeArguments_in_primary5664);
  					nonWildcardTypeArguments();
  					state._fsp--;
  					if (state.failed) return;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1218:9: ( explicitGenericInvocationSuffix | 'this' arguments )
  					int alt162=2;
  					int LA162_0 = input.LA(1);
  					if ( (LA162_0==Identifier||LA162_0==108) ) {
  						alt162=1;
  					}
  					else if ( (LA162_0==111) ) {
  						alt162=2;
  					}
  
  					else {
  						if (state.backtracking>0) {state.failed=true; return;}
  						NoViableAltException nvae =
  							new NoViableAltException("", 162, 0, input);
  						throw nvae;
  					}
  
  					switch (alt162) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1218:10: explicitGenericInvocationSuffix
  							{
  							pushFollow(FOLLOW_explicitGenericInvocationSuffix_in_primary5675);
  							explicitGenericInvocationSuffix();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  						case 2 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1218:44: 'this' arguments
  							{
  							match(input,111,FOLLOW_111_in_primary5679); if (state.failed) return;
  							pushFollow(FOLLOW_arguments_in_primary5681);
  							arguments();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  					}
  
  					}
  					break;
  				case 3 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1219:9: 'this' ( '.' Identifier )* ( identifierSuffix )?
  					{
  					match(input,111,FOLLOW_111_in_primary5692); if (state.failed) return;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1219:16: ( '.' Identifier )*
  					loop163:
  					while (true) {
  						int alt163=2;
  						int LA163_0 = input.LA(1);
  						if ( (LA163_0==47) ) {
  							int LA163_3 = input.LA(2);
  							if ( (LA163_3==Identifier) ) {
  								int LA163_37 = input.LA(3);
  								if ( (synpred249_Java()) ) {
  									alt163=1;
  								}
  
  							}
  
  						}
  
  						switch (alt163) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1219:17: '.' Identifier
  							{
  							match(input,47,FOLLOW_47_in_primary5695); if (state.failed) return;
  							match(input,Identifier,FOLLOW_Identifier_in_primary5697); if (state.failed) return;
  							}
  							break;
  
  						default :
  							break loop163;
  						}
  					}
  
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1219:34: ( identifierSuffix )?
  					int alt164=2;
  					alt164 = dfa164.predict(input);
  					switch (alt164) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1219:35: identifierSuffix
  							{
  							pushFollow(FOLLOW_identifierSuffix_in_primary5702);
  							identifierSuffix();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  					}
  
  					}
  					break;
  				case 4 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1220:9: 'super' superSuffix
  					{
  					match(input,108,FOLLOW_108_in_primary5714); if (state.failed) return;
  					pushFollow(FOLLOW_superSuffix_in_primary5716);
  					superSuffix();
  					state._fsp--;
  					if (state.failed) return;
  					}
  					break;
  				case 5 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1221:9: epStatement ( '.' methodName )* ( identifierSuffix )?
  					{
  					pushFollow(FOLLOW_epStatement_in_primary5726);
  					epStatement();
  					state._fsp--;
  					if (state.failed) return;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1221:21: ( '.' methodName )*
  					loop165:
  					while (true) {
  						int alt165=2;
  						int LA165_0 = input.LA(1);
  						if ( (LA165_0==47) ) {
  							int LA165_3 = input.LA(2);
  							if ( (LA165_3==Identifier||LA165_3==75||LA165_3==90||LA165_3==95||LA165_3==103||LA165_3==117) ) {
  								int LA165_38 = input.LA(3);
  								if ( (synpred253_Java()) ) {
  									alt165=1;
  								}
  
  							}
  
  						}
  
  						switch (alt165) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1221:22: '.' methodName
  							{
  							match(input,47,FOLLOW_47_in_primary5729); if (state.failed) return;
  							pushFollow(FOLLOW_methodName_in_primary5731);
  							methodName();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  						default :
  							break loop165;
  						}
  					}
  
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1221:39: ( identifierSuffix )?
  					int alt166=2;
  					alt166 = dfa166.predict(input);
  					switch (alt166) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1221:40: identifierSuffix
  							{
  							pushFollow(FOLLOW_identifierSuffix_in_primary5736);
  							identifierSuffix();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  					}
  
  					}
  					break;
  				case 6 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1222:9: literal
  					{
  					pushFollow(FOLLOW_literal_in_primary5748);
  					literal();
  					state._fsp--;
  					if (state.failed) return;
  					}
  					break;
  				case 7 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1223:9: 'new' creator
  					{
  					match(input,97,FOLLOW_97_in_primary5758); if (state.failed) return;
  					pushFollow(FOLLOW_creator_in_primary5760);
  					creator();
  					state._fsp--;
  					if (state.failed) return;
  					}
  					break;
  				case 8 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1224:9: i= Identifier ( '.' methodName )* ( identifierSuffix )?
  					{
  					i=(Token)match(input,Identifier,FOLLOW_Identifier_in_primary5772); if (state.failed) return;
  					if ( state.backtracking==0 ) { if( ! "(".equals( input.LT(1) == null ? "" : input.LT(1).getText() ) ) identifiers.add( (i!=null?i.getText():null) );  }
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1224:126: ( '.' methodName )*
  					loop167:
  					while (true) {
  						int alt167=2;
  						int LA167_0 = input.LA(1);
  						if ( (LA167_0==47) ) {
  							int LA167_3 = input.LA(2);
  							if ( (LA167_3==Identifier||LA167_3==75||LA167_3==90||LA167_3==95||LA167_3==103||LA167_3==117) ) {
  								int LA167_38 = input.LA(3);
  								if ( (synpred258_Java()) ) {
  									alt167=1;
  								}
  
  							}
  
  						}
  
  						switch (alt167) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1224:127: '.' methodName
  							{
  							match(input,47,FOLLOW_47_in_primary5777); if (state.failed) return;
  							pushFollow(FOLLOW_methodName_in_primary5779);
  							methodName();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  						default :
  							break loop167;
  						}
  					}
  
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1224:144: ( identifierSuffix )?
  					int alt168=2;
  					alt168 = dfa168.predict(input);
  					switch (alt168) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1224:145: identifierSuffix
  							{
  							pushFollow(FOLLOW_identifierSuffix_in_primary5784);
  							identifierSuffix();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  					}
  
  					}
  					break;
  				case 9 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1225:9: primitiveType ( '[' ']' )* '.' 'class'
  					{
  					pushFollow(FOLLOW_primitiveType_in_primary5796);
  					primitiveType();
  					state._fsp--;
  					if (state.failed) return;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1225:23: ( '[' ']' )*
  					loop169:
  					while (true) {
  						int alt169=2;
  						int LA169_0 = input.LA(1);
  						if ( (LA169_0==59) ) {
  							alt169=1;
  						}
  
  						switch (alt169) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1225:24: '[' ']'
  							{
  							match(input,59,FOLLOW_59_in_primary5799); if (state.failed) return;
  							match(input,60,FOLLOW_60_in_primary5801); if (state.failed) return;
  							}
  							break;
  
  						default :
  							break loop169;
  						}
  					}
  
  					match(input,47,FOLLOW_47_in_primary5805); if (state.failed) return;
  					match(input,72,FOLLOW_72_in_primary5807); if (state.failed) return;
  					}
  					break;
  				case 10 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1226:9: 'void' '.' 'class'
  					{
  					match(input,118,FOLLOW_118_in_primary5817); if (state.failed) return;
  					match(input,47,FOLLOW_47_in_primary5819); if (state.failed) return;
  					match(input,72,FOLLOW_72_in_primary5821); 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, 127, primary_StartIndex); }
  
  		}
  	}