docs: public final EObject ruleParameterizedTypeReferenceWithTypeArgs() throws RecognitionException {
          EObject current = null;
  
          Token otherlv_1=null;
          Token otherlv_3=null;
          Token otherlv_5=null;
          Token otherlv_7=null;
          Token otherlv_9=null;
          Token otherlv_11=null;
          Token otherlv_13=null;
          EObject lv_arguments_2_0 = null;
  
          EObject lv_arguments_4_0 = null;
  
          EObject lv_arguments_10_0 = null;
  
          EObject lv_arguments_12_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:9332:2: ( ( ( ( ruleQualifiedName ) ) (otherlv_1= '<' ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )* ) ) )
              // InternalSARL.g:9333:2: ( ( ( ruleQualifiedName ) ) (otherlv_1= '<' ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )* ) )
              {
              // InternalSARL.g:9333:2: ( ( ( ruleQualifiedName ) ) (otherlv_1= '<' ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )* ) )
              // InternalSARL.g:9334:3: ( ( ruleQualifiedName ) ) (otherlv_1= '<' ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )* )
              {
              // InternalSARL.g:9334:3: ( ( ruleQualifiedName ) )
              // InternalSARL.g:9335:4: ( ruleQualifiedName )
              {
              // InternalSARL.g:9335:4: ( ruleQualifiedName )
              // InternalSARL.g:9336:5: ruleQualifiedName
              {
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElement(grammarAccess.getParameterizedTypeReferenceWithTypeArgsRule());
                					}
                				
              }
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getParameterizedTypeReferenceWithTypeArgsAccess().getTypeJvmTypeCrossReference_0_0());
                				
              }
              pushFollow(FOLLOW_91);
              ruleQualifiedName();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
              // InternalSARL.g:9350:3: (otherlv_1= '<' ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )* )
              // InternalSARL.g:9351:4: otherlv_1= '<' ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )*
              {
              otherlv_1=(Token)match(input,40,FOLLOW_92); if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                				newLeafNode(otherlv_1, grammarAccess.getParameterizedTypeReferenceWithTypeArgsAccess().getLessThanSignKeyword_1_0());
                			
              }
              // InternalSARL.g:9355:4: ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) )
              // InternalSARL.g:9356:5: (lv_arguments_2_0= ruleJvmArgumentTypeReference )
              {
              // InternalSARL.g:9356:5: (lv_arguments_2_0= ruleJvmArgumentTypeReference )
              // InternalSARL.g:9357:6: lv_arguments_2_0= ruleJvmArgumentTypeReference
              {
              if ( state.backtracking==0 ) {
  
                						newCompositeNode(grammarAccess.getParameterizedTypeReferenceWithTypeArgsAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_0());
                					
              }
              pushFollow(FOLLOW_28);
              lv_arguments_2_0=ruleJvmArgumentTypeReference();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                						if (current==null) {
                							current = createModelElementForParent(grammarAccess.getParameterizedTypeReferenceWithTypeArgsRule());
                						}
                						add(
                							current,
                							"arguments",
                							lv_arguments_2_0,
                							"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
                						afterParserOrEnumRuleCall();
                					
              }
  
              }
  
  
              }
  
              // InternalSARL.g:9374:4: (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )*
              loop246:
              do {
                  int alt246=2;
                  int LA246_0 = input.LA(1);
  
                  if ( (LA246_0==32) ) {
                      alt246=1;
                  }
  
  
                  switch (alt246) {
              	case 1 :
              	    // InternalSARL.g:9375:5: otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) )
              	    {
              	    otherlv_3=(Token)match(input,32,FOLLOW_92); if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      					newLeafNode(otherlv_3, grammarAccess.getParameterizedTypeReferenceWithTypeArgsAccess().getCommaKeyword_1_2_0());
              	      				
              	    }
              	    // InternalSARL.g:9379:5: ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) )
              	    // InternalSARL.g:9380:6: (lv_arguments_4_0= ruleJvmArgumentTypeReference )
              	    {
              	    // InternalSARL.g:9380:6: (lv_arguments_4_0= ruleJvmArgumentTypeReference )
              	    // InternalSARL.g:9381:7: lv_arguments_4_0= ruleJvmArgumentTypeReference
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      							newCompositeNode(grammarAccess.getParameterizedTypeReferenceWithTypeArgsAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_2_1_0());
              	      						
              	    }
              	    pushFollow(FOLLOW_28);
              	    lv_arguments_4_0=ruleJvmArgumentTypeReference();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      							if (current==null) {
              	      								current = createModelElementForParent(grammarAccess.getParameterizedTypeReferenceWithTypeArgsRule());
              	      							}
              	      							add(
              	      								current,
              	      								"arguments",
              	      								lv_arguments_4_0,
              	      								"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
              	      							afterParserOrEnumRuleCall();
              	      						
              	    }
  
              	    }
  
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop246;
                  }
              } while (true);
  
              otherlv_5=(Token)match(input,41,FOLLOW_93); if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                				newLeafNode(otherlv_5, grammarAccess.getParameterizedTypeReferenceWithTypeArgsAccess().getGreaterThanSignKeyword_1_3());
                			
              }
              // InternalSARL.g:9403:4: ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )*
              loop249:
              do {
                  int alt249=2;
                  int LA249_0 = input.LA(1);
  
                  if ( (LA249_0==77) && (synpred17_InternalSARL())) {
                      alt249=1;
                  }
  
  
                  switch (alt249) {
              	case 1 :
              	    // InternalSARL.g:9404:5: ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )?
              	    {
              	    // InternalSARL.g:9404:5: ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) )
              	    // InternalSARL.g:9405:6: ( ( () '.' ) )=> ( () otherlv_7= '.' )
              	    {
              	    // InternalSARL.g:9411:6: ( () otherlv_7= '.' )
              	    // InternalSARL.g:9412:7: () otherlv_7= '.'
              	    {
              	    // InternalSARL.g:9412:7: ()
              	    // InternalSARL.g:9413:8: 
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      								current = forceCreateModelElementAndSet(
              	      									grammarAccess.getParameterizedTypeReferenceWithTypeArgsAccess().getJvmInnerTypeReferenceOuterAction_1_4_0_0_0(),
              	      									current);
              	      							
              	    }
  
              	    }
  
              	    otherlv_7=(Token)match(input,77,FOLLOW_3); if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      							newLeafNode(otherlv_7, grammarAccess.getParameterizedTypeReferenceWithTypeArgsAccess().getFullStopKeyword_1_4_0_0_1());
              	      						
              	    }
  
              	    }
  
  
              	    }
  
              	    // InternalSARL.g:9425:5: ( ( ruleValidID ) )
              	    // InternalSARL.g:9426:6: ( ruleValidID )
              	    {
              	    // InternalSARL.g:9426:6: ( ruleValidID )
              	    // InternalSARL.g:9427:7: ruleValidID
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      							if (current==null) {
              	      								current = createModelElement(grammarAccess.getParameterizedTypeReferenceWithTypeArgsRule());
              	      							}
              	      						
              	    }
              	    if ( state.backtracking==0 ) {
  
              	      							newCompositeNode(grammarAccess.getParameterizedTypeReferenceWithTypeArgsAccess().getTypeJvmTypeCrossReference_1_4_1_0());
              	      						
              	    }
              	    pushFollow(FOLLOW_94);
              	    ruleValidID();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      							afterParserOrEnumRuleCall();
              	      						
              	    }
  
              	    }
  
  
              	    }
  
              	    // InternalSARL.g:9441:5: ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )?
              	    int alt248=2;
              	    int LA248_0 = input.LA(1);
  
              	    if ( (LA248_0==40) && (synpred18_InternalSARL())) {
              	        alt248=1;
              	    }
              	    switch (alt248) {
              	        case 1 :
              	            // InternalSARL.g:9442:6: ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>'
              	            {
              	            // InternalSARL.g:9442:6: ( ( '<' )=>otherlv_9= '<' )
              	            // InternalSARL.g:9443:7: ( '<' )=>otherlv_9= '<'
              	            {
              	            otherlv_9=(Token)match(input,40,FOLLOW_92); if (state.failed) return current;
              	            if ( state.backtracking==0 ) {
  
              	              							newLeafNode(otherlv_9, grammarAccess.getParameterizedTypeReferenceWithTypeArgsAccess().getLessThanSignKeyword_1_4_2_0());
              	              						
              	            }
  
              	            }
  
              	            // InternalSARL.g:9449:6: ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) )
              	            // InternalSARL.g:9450:7: (lv_arguments_10_0= ruleJvmArgumentTypeReference )
              	            {
              	            // InternalSARL.g:9450:7: (lv_arguments_10_0= ruleJvmArgumentTypeReference )
              	            // InternalSARL.g:9451:8: lv_arguments_10_0= ruleJvmArgumentTypeReference
              	            {
              	            if ( state.backtracking==0 ) {
  
              	              								newCompositeNode(grammarAccess.getParameterizedTypeReferenceWithTypeArgsAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_4_2_1_0());
              	              							
              	            }
              	            pushFollow(FOLLOW_28);
              	            lv_arguments_10_0=ruleJvmArgumentTypeReference();
  
              	            state._fsp--;
              	            if (state.failed) return current;
              	            if ( state.backtracking==0 ) {
  
              	              								if (current==null) {
              	              									current = createModelElementForParent(grammarAccess.getParameterizedTypeReferenceWithTypeArgsRule());
              	              								}
              	              								add(
              	              									current,
              	              									"arguments",
              	              									lv_arguments_10_0,
              	              									"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
              	              								afterParserOrEnumRuleCall();
              	              							
              	            }
  
              	            }
  
  
              	            }
  
              	            // InternalSARL.g:9468:6: (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )*
              	            loop247:
              	            do {
              	                int alt247=2;
              	                int LA247_0 = input.LA(1);
  
              	                if ( (LA247_0==32) ) {
              	                    alt247=1;
              	                }
  
  
              	                switch (alt247) {
              	            	case 1 :
              	            	    // InternalSARL.g:9469:7: otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) )
              	            	    {
              	            	    otherlv_11=(Token)match(input,32,FOLLOW_92); if (state.failed) return current;
              	            	    if ( state.backtracking==0 ) {
  
              	            	      							newLeafNode(otherlv_11, grammarAccess.getParameterizedTypeReferenceWithTypeArgsAccess().getCommaKeyword_1_4_2_2_0());
              	            	      						
              	            	    }
              	            	    // InternalSARL.g:9473:7: ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) )
              	            	    // InternalSARL.g:9474:8: (lv_arguments_12_0= ruleJvmArgumentTypeReference )
              	            	    {
              	            	    // InternalSARL.g:9474:8: (lv_arguments_12_0= ruleJvmArgumentTypeReference )
              	            	    // InternalSARL.g:9475:9: lv_arguments_12_0= ruleJvmArgumentTypeReference
              	            	    {
              	            	    if ( state.backtracking==0 ) {
  
              	            	      									newCompositeNode(grammarAccess.getParameterizedTypeReferenceWithTypeArgsAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_4_2_2_1_0());
              	            	      								
              	            	    }
              	            	    pushFollow(FOLLOW_28);
              	            	    lv_arguments_12_0=ruleJvmArgumentTypeReference();
  
              	            	    state._fsp--;
              	            	    if (state.failed) return current;
              	            	    if ( state.backtracking==0 ) {
  
              	            	      									if (current==null) {
              	            	      										current = createModelElementForParent(grammarAccess.getParameterizedTypeReferenceWithTypeArgsRule());
              	            	      									}
              	            	      									add(
              	            	      										current,
              	            	      										"arguments",
              	            	      										lv_arguments_12_0,
              	            	      										"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
              	            	      									afterParserOrEnumRuleCall();
              	            	      								
              	            	    }
  
              	            	    }
  
  
              	            	    }
  
  
              	            	    }
              	            	    break;
  
              	            	default :
              	            	    break loop247;
              	                }
              	            } while (true);
  
              	            otherlv_13=(Token)match(input,41,FOLLOW_93); if (state.failed) return current;
              	            if ( state.backtracking==0 ) {
  
              	              						newLeafNode(otherlv_13, grammarAccess.getParameterizedTypeReferenceWithTypeArgsAccess().getGreaterThanSignKeyword_1_4_2_3());
              	              					
              	            }
  
              	            }
              	            break;
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop249;
                  }
              } while (true);
  
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }