docs: public final JavaParser.type_return type() throws RecognitionException {
  		JavaParser.type_return retval = new JavaParser.type_return();
  		retval.start = input.LT(1);
  		int type_StartIndex = input.index();
  
  		try {
  			if ( state.backtracking>0 && alreadyParsedRule(input, 50) ) { return retval; }
  
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:532:5: ( Identifier ( typeArguments )? ( '.' Identifier ( typeArguments )? )* ( '[' ']' )* | primitiveType ( '[' ']' )* )
  			int alt72=2;
  			int LA72_0 = input.LA(1);
  			if ( (LA72_0==Identifier) ) {
  				alt72=1;
  			}
  			else if ( (LA72_0==65||LA72_0==67||LA72_0==71||LA72_0==77||LA72_0==85||LA72_0==92||LA72_0==94||LA72_0==105) ) {
  				alt72=2;
  			}
  
  			else {
  				if (state.backtracking>0) {state.failed=true; return retval;}
  				NoViableAltException nvae =
  					new NoViableAltException("", 72, 0, input);
  				throw nvae;
  			}
  
  			switch (alt72) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:532:7: Identifier ( typeArguments )? ( '.' Identifier ( typeArguments )? )* ( '[' ']' )*
  					{
  					match(input,Identifier,FOLLOW_Identifier_in_type1776); if (state.failed) return retval;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:532:18: ( typeArguments )?
  					int alt67=2;
  					int LA67_0 = input.LA(1);
  					if ( (LA67_0==53) ) {
  						int LA67_1 = input.LA(2);
  						if ( (LA67_1==Identifier||LA67_1==57||LA67_1==65||LA67_1==67||LA67_1==71||LA67_1==77||LA67_1==85||LA67_1==92||LA67_1==94||LA67_1==105) ) {
  							alt67=1;
  						}
  					}
  					switch (alt67) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:532:19: typeArguments
  							{
  							pushFollow(FOLLOW_typeArguments_in_type1779);
  							typeArguments();
  							state._fsp--;
  							if (state.failed) return retval;
  							}
  							break;
  
  					}
  
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:532:35: ( '.' Identifier ( typeArguments )? )*
  					loop69:
  					while (true) {
  						int alt69=2;
  						int LA69_0 = input.LA(1);
  						if ( (LA69_0==47) ) {
  							alt69=1;
  						}
  
  						switch (alt69) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:532:36: '.' Identifier ( typeArguments )?
  							{
  							match(input,47,FOLLOW_47_in_type1784); if (state.failed) return retval;
  							match(input,Identifier,FOLLOW_Identifier_in_type1786); if (state.failed) return retval;
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:532:51: ( typeArguments )?
  							int alt68=2;
  							int LA68_0 = input.LA(1);
  							if ( (LA68_0==53) ) {
  								int LA68_1 = input.LA(2);
  								if ( (LA68_1==Identifier||LA68_1==57||LA68_1==65||LA68_1==67||LA68_1==71||LA68_1==77||LA68_1==85||LA68_1==92||LA68_1==94||LA68_1==105) ) {
  									alt68=1;
  								}
  							}
  							switch (alt68) {
  								case 1 :
  									// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:532:52: typeArguments
  									{
  									pushFollow(FOLLOW_typeArguments_in_type1789);
  									typeArguments();
  									state._fsp--;
  									if (state.failed) return retval;
  									}
  									break;
  
  							}
  
  							}
  							break;
  
  						default :
  							break loop69;
  						}
  					}
  
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:532:71: ( '[' ']' )*
  					loop70:
  					while (true) {
  						int alt70=2;
  						int LA70_0 = input.LA(1);
  						if ( (LA70_0==59) ) {
  							alt70=1;
  						}
  
  						switch (alt70) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:532:72: '[' ']'
  							{
  							match(input,59,FOLLOW_59_in_type1797); if (state.failed) return retval;
  							match(input,60,FOLLOW_60_in_type1799); if (state.failed) return retval;
  							}
  							break;
  
  						default :
  							break loop70;
  						}
  					}
  
  					}
  					break;
  				case 2 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:533:7: primitiveType ( '[' ']' )*
  					{
  					pushFollow(FOLLOW_primitiveType_in_type1809);
  					primitiveType();
  					state._fsp--;
  					if (state.failed) return retval;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:533:21: ( '[' ']' )*
  					loop71:
  					while (true) {
  						int alt71=2;
  						int LA71_0 = input.LA(1);
  						if ( (LA71_0==59) ) {
  							alt71=1;
  						}
  
  						switch (alt71) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:533:22: '[' ']'
  							{
  							match(input,59,FOLLOW_59_in_type1812); if (state.failed) return retval;
  							match(input,60,FOLLOW_60_in_type1814); if (state.failed) return retval;
  							}
  							break;
  
  						default :
  							break loop71;
  						}
  					}
  
  					}
  					break;
  
  			}
  			retval.stop = input.LT(-1);
  
  		}
  		catch (RecognitionException re) {
  			reportError(re);
  			recover(input,re);
  		}
  		finally {
  			// do for sure before leaving
  			if ( state.backtracking>0 ) { memoize(input, 50, type_StartIndex); }
  
  		}
  		return retval;
  	}