docs: public final EObject ruleTypeReferenceWithTypeArgs() throws RecognitionException {
          EObject current = null;
  
          EObject this_ParameterizedTypeReferenceWithTypeArgs_0 = null;
  
          EObject this_TypeReferenceNoTypeArgs_3 = null;
  
          EObject this_XFunctionTypeRef_6 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:9235:2: ( ( (this_ParameterizedTypeReferenceWithTypeArgs_0= ruleParameterizedTypeReferenceWithTypeArgs ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )* ) | (this_TypeReferenceNoTypeArgs_3= ruleTypeReferenceNoTypeArgs ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )+ ) | this_XFunctionTypeRef_6= ruleXFunctionTypeRef ) )
              // InternalSARL.g:9236:2: ( (this_ParameterizedTypeReferenceWithTypeArgs_0= ruleParameterizedTypeReferenceWithTypeArgs ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )* ) | (this_TypeReferenceNoTypeArgs_3= ruleTypeReferenceNoTypeArgs ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )+ ) | this_XFunctionTypeRef_6= ruleXFunctionTypeRef )
              {
              // InternalSARL.g:9236:2: ( (this_ParameterizedTypeReferenceWithTypeArgs_0= ruleParameterizedTypeReferenceWithTypeArgs ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )* ) | (this_TypeReferenceNoTypeArgs_3= ruleTypeReferenceNoTypeArgs ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )+ ) | this_XFunctionTypeRef_6= ruleXFunctionTypeRef )
              int alt245=3;
              alt245 = dfa245.predict(input);
              switch (alt245) {
                  case 1 :
                      // InternalSARL.g:9237:3: (this_ParameterizedTypeReferenceWithTypeArgs_0= ruleParameterizedTypeReferenceWithTypeArgs ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )* )
                      {
                      // InternalSARL.g:9237:3: (this_ParameterizedTypeReferenceWithTypeArgs_0= ruleParameterizedTypeReferenceWithTypeArgs ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )* )
                      // InternalSARL.g:9238:4: this_ParameterizedTypeReferenceWithTypeArgs_0= ruleParameterizedTypeReferenceWithTypeArgs ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )*
                      {
                      if ( state.backtracking==0 ) {
  
                        				newCompositeNode(grammarAccess.getTypeReferenceWithTypeArgsAccess().getParameterizedTypeReferenceWithTypeArgsParserRuleCall_0_0());
                        			
                      }
                      pushFollow(FOLLOW_89);
                      this_ParameterizedTypeReferenceWithTypeArgs_0=ruleParameterizedTypeReferenceWithTypeArgs();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				current = this_ParameterizedTypeReferenceWithTypeArgs_0;
                        				afterParserOrEnumRuleCall();
                        			
                      }
                      // InternalSARL.g:9246:4: ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )*
                      loop243:
                      do {
                          int alt243=2;
                          int LA243_0 = input.LA(1);
  
                          if ( (LA243_0==55) && (synpred15_InternalSARL())) {
                              alt243=1;
                          }
  
  
                          switch (alt243) {
                      	case 1 :
                      	    // InternalSARL.g:9247:5: ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets )
                      	    {
                      	    // InternalSARL.g:9253:5: ( () ruleArrayBrackets )
                      	    // InternalSARL.g:9254:6: () ruleArrayBrackets
                      	    {
                      	    // InternalSARL.g:9254:6: ()
                      	    // InternalSARL.g:9255:7: 
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							current = forceCreateModelElementAndSet(
                      	      								grammarAccess.getTypeReferenceWithTypeArgsAccess().getJvmGenericArrayTypeReferenceComponentTypeAction_0_1_0_0(),
                      	      								current);
                      	      						
                      	    }
  
                      	    }
  
                      	    if ( state.backtracking==0 ) {
  
                      	      						newCompositeNode(grammarAccess.getTypeReferenceWithTypeArgsAccess().getArrayBracketsParserRuleCall_0_1_0_1());
                      	      					
                      	    }
                      	    pushFollow(FOLLOW_89);
                      	    ruleArrayBrackets();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      						afterParserOrEnumRuleCall();
                      	      					
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop243;
                          }
                      } while (true);
  
  
                      }
  
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:9272:3: (this_TypeReferenceNoTypeArgs_3= ruleTypeReferenceNoTypeArgs ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )+ )
                      {
                      // InternalSARL.g:9272:3: (this_TypeReferenceNoTypeArgs_3= ruleTypeReferenceNoTypeArgs ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )+ )
                      // InternalSARL.g:9273:4: this_TypeReferenceNoTypeArgs_3= ruleTypeReferenceNoTypeArgs ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )+
                      {
                      if ( state.backtracking==0 ) {
  
                        				newCompositeNode(grammarAccess.getTypeReferenceWithTypeArgsAccess().getTypeReferenceNoTypeArgsParserRuleCall_1_0());
                        			
                      }
                      pushFollow(FOLLOW_90);
                      this_TypeReferenceNoTypeArgs_3=ruleTypeReferenceNoTypeArgs();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				current = this_TypeReferenceNoTypeArgs_3;
                        				afterParserOrEnumRuleCall();
                        			
                      }
                      // InternalSARL.g:9281:4: ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )+
                      int cnt244=0;
                      loop244:
                      do {
                          int alt244=2;
                          int LA244_0 = input.LA(1);
  
                          if ( (LA244_0==55) && (synpred16_InternalSARL())) {
                              alt244=1;
                          }
  
  
                          switch (alt244) {
                      	case 1 :
                      	    // InternalSARL.g:9282:5: ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets )
                      	    {
                      	    // InternalSARL.g:9288:5: ( () ruleArrayBrackets )
                      	    // InternalSARL.g:9289:6: () ruleArrayBrackets
                      	    {
                      	    // InternalSARL.g:9289:6: ()
                      	    // InternalSARL.g:9290:7: 
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							current = forceCreateModelElementAndSet(
                      	      								grammarAccess.getTypeReferenceWithTypeArgsAccess().getJvmGenericArrayTypeReferenceComponentTypeAction_1_1_0_0(),
                      	      								current);
                      	      						
                      	    }
  
                      	    }
  
                      	    if ( state.backtracking==0 ) {
  
                      	      						newCompositeNode(grammarAccess.getTypeReferenceWithTypeArgsAccess().getArrayBracketsParserRuleCall_1_1_0_1());
                      	      					
                      	    }
                      	    pushFollow(FOLLOW_89);
                      	    ruleArrayBrackets();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      						afterParserOrEnumRuleCall();
                      	      					
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    if ( cnt244 >= 1 ) break loop244;
                      	    if (state.backtracking>0) {state.failed=true; return current;}
                                  EarlyExitException eee =
                                      new EarlyExitException(244, input);
                                  throw eee;
                          }
                          cnt244++;
                      } while (true);
  
  
                      }
  
  
                      }
                      break;
                  case 3 :
                      // InternalSARL.g:9307:3: this_XFunctionTypeRef_6= ruleXFunctionTypeRef
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getTypeReferenceWithTypeArgsAccess().getXFunctionTypeRefParserRuleCall_2());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XFunctionTypeRef_6=ruleXFunctionTypeRef();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XFunctionTypeRef_6;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }