docs: public final EObject ruleRuleNameAndParams(EObject in_current) throws RecognitionException {
          EObject current = in_current;
  
          Token otherlv_1=null;
          Token otherlv_3=null;
          Token otherlv_5=null;
          AntlrDatatypeRuleToken lv_name_0_0 = null;
  
          EObject lv_parameters_2_0 = null;
  
          EObject lv_parameters_4_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalXtext.g:807:2: ( ( ( (lv_name_0_0= ruleValidID ) ) (otherlv_1= '<' ( ( (lv_parameters_2_0= ruleParameter ) ) (otherlv_3= ',' ( (lv_parameters_4_0= ruleParameter ) ) )* )? otherlv_5= '>' )? ) )
              // InternalXtext.g:808:2: ( ( (lv_name_0_0= ruleValidID ) ) (otherlv_1= '<' ( ( (lv_parameters_2_0= ruleParameter ) ) (otherlv_3= ',' ( (lv_parameters_4_0= ruleParameter ) ) )* )? otherlv_5= '>' )? )
              {
              // InternalXtext.g:808:2: ( ( (lv_name_0_0= ruleValidID ) ) (otherlv_1= '<' ( ( (lv_parameters_2_0= ruleParameter ) ) (otherlv_3= ',' ( (lv_parameters_4_0= ruleParameter ) ) )* )? otherlv_5= '>' )? )
              // InternalXtext.g:809:3: ( (lv_name_0_0= ruleValidID ) ) (otherlv_1= '<' ( ( (lv_parameters_2_0= ruleParameter ) ) (otherlv_3= ',' ( (lv_parameters_4_0= ruleParameter ) ) )* )? otherlv_5= '>' )?
              {
              // InternalXtext.g:809:3: ( (lv_name_0_0= ruleValidID ) )
              // InternalXtext.g:810:4: (lv_name_0_0= ruleValidID )
              {
              // InternalXtext.g:810:4: (lv_name_0_0= ruleValidID )
              // InternalXtext.g:811:5: lv_name_0_0= ruleValidID
              {
  
              					newCompositeNode(grammarAccess.getRuleNameAndParamsAccess().getNameValidIDParserRuleCall_0_0());
              				
              pushFollow(FollowSets000.FOLLOW_21);
              lv_name_0_0=ruleValidID();
  
              state._fsp--;
  
  
              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getRuleNameAndParamsRule());
              					}
              					set(
              						current,
              						"name",
              						lv_name_0_0,
              						"org.eclipse.xtext.Xtext.ValidID");
              					afterParserOrEnumRuleCall();
              				
  
              }
  
  
              }
  
              // InternalXtext.g:828:3: (otherlv_1= '<' ( ( (lv_parameters_2_0= ruleParameter ) ) (otherlv_3= ',' ( (lv_parameters_4_0= ruleParameter ) ) )* )? otherlv_5= '>' )?
              int alt23=2;
              int LA23_0 = input.LA(1);
  
              if ( (LA23_0==27) ) {
                  alt23=1;
              }
              switch (alt23) {
                  case 1 :
                      // InternalXtext.g:829:4: otherlv_1= '<' ( ( (lv_parameters_2_0= ruleParameter ) ) (otherlv_3= ',' ( (lv_parameters_4_0= ruleParameter ) ) )* )? otherlv_5= '>'
                      {
                      otherlv_1=(Token)match(input,27,FollowSets000.FOLLOW_22); 
  
                      				newLeafNode(otherlv_1, grammarAccess.getRuleNameAndParamsAccess().getLessThanSignKeyword_1_0());
                      			
                      // InternalXtext.g:833:4: ( ( (lv_parameters_2_0= ruleParameter ) ) (otherlv_3= ',' ( (lv_parameters_4_0= ruleParameter ) ) )* )?
                      int alt22=2;
                      int LA22_0 = input.LA(1);
  
                      if ( (LA22_0==RULE_ID) ) {
                          alt22=1;
                      }
                      switch (alt22) {
                          case 1 :
                              // InternalXtext.g:834:5: ( (lv_parameters_2_0= ruleParameter ) ) (otherlv_3= ',' ( (lv_parameters_4_0= ruleParameter ) ) )*
                              {
                              // InternalXtext.g:834:5: ( (lv_parameters_2_0= ruleParameter ) )
                              // InternalXtext.g:835:6: (lv_parameters_2_0= ruleParameter )
                              {
                              // InternalXtext.g:835:6: (lv_parameters_2_0= ruleParameter )
                              // InternalXtext.g:836:7: lv_parameters_2_0= ruleParameter
                              {
  
                              							newCompositeNode(grammarAccess.getRuleNameAndParamsAccess().getParametersParameterParserRuleCall_1_1_0_0());
                              						
                              pushFollow(FollowSets000.FOLLOW_23);
                              lv_parameters_2_0=ruleParameter();
  
                              state._fsp--;
  
  
                              							if (current==null) {
                              								current = createModelElementForParent(grammarAccess.getRuleNameAndParamsRule());
                              							}
                              							add(
                              								current,
                              								"parameters",
                              								lv_parameters_2_0,
                              								"org.eclipse.xtext.Xtext.Parameter");
                              							afterParserOrEnumRuleCall();
                              						
  
                              }
  
  
                              }
  
                              // InternalXtext.g:853:5: (otherlv_3= ',' ( (lv_parameters_4_0= ruleParameter ) ) )*
                              loop21:
                              do {
                                  int alt21=2;
                                  int LA21_0 = input.LA(1);
  
                                  if ( (LA21_0==13) ) {
                                      alt21=1;
                                  }
  
  
                                  switch (alt21) {
                              	case 1 :
                              	    // InternalXtext.g:854:6: otherlv_3= ',' ( (lv_parameters_4_0= ruleParameter ) )
                              	    {
                              	    otherlv_3=(Token)match(input,13,FollowSets000.FOLLOW_13); 
  
                              	    						newLeafNode(otherlv_3, grammarAccess.getRuleNameAndParamsAccess().getCommaKeyword_1_1_1_0());
                              	    					
                              	    // InternalXtext.g:858:6: ( (lv_parameters_4_0= ruleParameter ) )
                              	    // InternalXtext.g:859:7: (lv_parameters_4_0= ruleParameter )
                              	    {
                              	    // InternalXtext.g:859:7: (lv_parameters_4_0= ruleParameter )
                              	    // InternalXtext.g:860:8: lv_parameters_4_0= ruleParameter
                              	    {
  
                              	    								newCompositeNode(grammarAccess.getRuleNameAndParamsAccess().getParametersParameterParserRuleCall_1_1_1_1_0());
                              	    							
                              	    pushFollow(FollowSets000.FOLLOW_23);
                              	    lv_parameters_4_0=ruleParameter();
  
                              	    state._fsp--;
  
  
                              	    								if (current==null) {
                              	    									current = createModelElementForParent(grammarAccess.getRuleNameAndParamsRule());
                              	    								}
                              	    								add(
                              	    									current,
                              	    									"parameters",
                              	    									lv_parameters_4_0,
                              	    									"org.eclipse.xtext.Xtext.Parameter");
                              	    								afterParserOrEnumRuleCall();
                              	    							
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop21;
                                  }
                              } while (true);
  
  
                              }
                              break;
  
                      }
  
                      otherlv_5=(Token)match(input,28,FollowSets000.FOLLOW_2); 
  
                      				newLeafNode(otherlv_5, grammarAccess.getRuleNameAndParamsAccess().getGreaterThanSignKeyword_1_2());
                      			
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
  
              	leaveRule();
  
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }