docs: public final EObject ruleRuleCall() throws RecognitionException {
          EObject current = null;
  
          Token otherlv_1=null;
          Token otherlv_3=null;
          Token otherlv_5=null;
          EObject lv_arguments_2_0 = null;
  
          EObject lv_arguments_4_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalXtext.g:1568:2: ( ( ( ( ruleRuleID ) ) (otherlv_1= '<' ( (lv_arguments_2_0= ruleNamedArgument ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleNamedArgument ) ) )* otherlv_5= '>' )? ) )
              // InternalXtext.g:1569:2: ( ( ( ruleRuleID ) ) (otherlv_1= '<' ( (lv_arguments_2_0= ruleNamedArgument ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleNamedArgument ) ) )* otherlv_5= '>' )? )
              {
              // InternalXtext.g:1569:2: ( ( ( ruleRuleID ) ) (otherlv_1= '<' ( (lv_arguments_2_0= ruleNamedArgument ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleNamedArgument ) ) )* otherlv_5= '>' )? )
              // InternalXtext.g:1570:3: ( ( ruleRuleID ) ) (otherlv_1= '<' ( (lv_arguments_2_0= ruleNamedArgument ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleNamedArgument ) ) )* otherlv_5= '>' )?
              {
              // InternalXtext.g:1570:3: ( ( ruleRuleID ) )
              // InternalXtext.g:1571:4: ( ruleRuleID )
              {
              // InternalXtext.g:1571:4: ( ruleRuleID )
              // InternalXtext.g:1572:5: ruleRuleID
              {
  
              					if (current==null) {
              						current = createModelElement(grammarAccess.getRuleCallRule());
              					}
              				
  
              					newCompositeNode(grammarAccess.getRuleCallAccess().getRuleAbstractRuleCrossReference_0_0());
              				
              pushFollow(FollowSets000.FOLLOW_21);
              ruleRuleID();
  
              state._fsp--;
  
  
              					afterParserOrEnumRuleCall();
              				
  
              }
  
  
              }
  
              // InternalXtext.g:1586:3: (otherlv_1= '<' ( (lv_arguments_2_0= ruleNamedArgument ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleNamedArgument ) ) )* otherlv_5= '>' )?
              int alt41=2;
              int LA41_0 = input.LA(1);
  
              if ( (LA41_0==27) ) {
                  alt41=1;
              }
              switch (alt41) {
                  case 1 :
                      // InternalXtext.g:1587:4: otherlv_1= '<' ( (lv_arguments_2_0= ruleNamedArgument ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleNamedArgument ) ) )* otherlv_5= '>'
                      {
                      otherlv_1=(Token)match(input,27,FollowSets000.FOLLOW_26); 
  
                      				newLeafNode(otherlv_1, grammarAccess.getRuleCallAccess().getLessThanSignKeyword_1_0());
                      			
                      // InternalXtext.g:1591:4: ( (lv_arguments_2_0= ruleNamedArgument ) )
                      // InternalXtext.g:1592:5: (lv_arguments_2_0= ruleNamedArgument )
                      {
                      // InternalXtext.g:1592:5: (lv_arguments_2_0= ruleNamedArgument )
                      // InternalXtext.g:1593:6: lv_arguments_2_0= ruleNamedArgument
                      {
  
                      						newCompositeNode(grammarAccess.getRuleCallAccess().getArgumentsNamedArgumentParserRuleCall_1_1_0());
                      					
                      pushFollow(FollowSets000.FOLLOW_23);
                      lv_arguments_2_0=ruleNamedArgument();
  
                      state._fsp--;
  
  
                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getRuleCallRule());
                      						}
                      						add(
                      							current,
                      							"arguments",
                      							lv_arguments_2_0,
                      							"org.eclipse.xtext.Xtext.NamedArgument");
                      						afterParserOrEnumRuleCall();
                      					
  
                      }
  
  
                      }
  
                      // InternalXtext.g:1610:4: (otherlv_3= ',' ( (lv_arguments_4_0= ruleNamedArgument ) ) )*
                      loop40:
                      do {
                          int alt40=2;
                          int LA40_0 = input.LA(1);
  
                          if ( (LA40_0==13) ) {
                              alt40=1;
                          }
  
  
                          switch (alt40) {
                      	case 1 :
                      	    // InternalXtext.g:1611:5: otherlv_3= ',' ( (lv_arguments_4_0= ruleNamedArgument ) )
                      	    {
                      	    otherlv_3=(Token)match(input,13,FollowSets000.FOLLOW_26); 
  
                      	    					newLeafNode(otherlv_3, grammarAccess.getRuleCallAccess().getCommaKeyword_1_2_0());
                      	    				
                      	    // InternalXtext.g:1615:5: ( (lv_arguments_4_0= ruleNamedArgument ) )
                      	    // InternalXtext.g:1616:6: (lv_arguments_4_0= ruleNamedArgument )
                      	    {
                      	    // InternalXtext.g:1616:6: (lv_arguments_4_0= ruleNamedArgument )
                      	    // InternalXtext.g:1617:7: lv_arguments_4_0= ruleNamedArgument
                      	    {
  
                      	    							newCompositeNode(grammarAccess.getRuleCallAccess().getArgumentsNamedArgumentParserRuleCall_1_2_1_0());
                      	    						
                      	    pushFollow(FollowSets000.FOLLOW_23);
                      	    lv_arguments_4_0=ruleNamedArgument();
  
                      	    state._fsp--;
  
  
                      	    							if (current==null) {
                      	    								current = createModelElementForParent(grammarAccess.getRuleCallRule());
                      	    							}
                      	    							add(
                      	    								current,
                      	    								"arguments",
                      	    								lv_arguments_4_0,
                      	    								"org.eclipse.xtext.Xtext.NamedArgument");
                      	    							afterParserOrEnumRuleCall();
                      	    						
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop40;
                          }
                      } while (true);
  
                      otherlv_5=(Token)match(input,28,FollowSets000.FOLLOW_2); 
  
                      				newLeafNode(otherlv_5, grammarAccess.getRuleCallAccess().getGreaterThanSignKeyword_1_3());
                      			
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
  
              	leaveRule();
  
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }