docs: public final EObject ruleJvmFormalParameter() throws RecognitionException {
          EObject current = null;
  
          Token lv_extension_0_0=null;
          Token otherlv_2=null;
          AntlrDatatypeRuleToken lv_name_1_0 = null;
  
          EObject lv_parameterType_3_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:8184:2: ( ( ( (lv_extension_0_0= 'extension' ) )? ( (lv_name_1_0= ruleValidID ) ) ( ( ( ':' )=>otherlv_2= ':' ) ( (lv_parameterType_3_0= ruleJvmTypeReference ) ) )? ) )
              // InternalSARL.g:8185:2: ( ( (lv_extension_0_0= 'extension' ) )? ( (lv_name_1_0= ruleValidID ) ) ( ( ( ':' )=>otherlv_2= ':' ) ( (lv_parameterType_3_0= ruleJvmTypeReference ) ) )? )
              {
              // InternalSARL.g:8185:2: ( ( (lv_extension_0_0= 'extension' ) )? ( (lv_name_1_0= ruleValidID ) ) ( ( ( ':' )=>otherlv_2= ':' ) ( (lv_parameterType_3_0= ruleJvmTypeReference ) ) )? )
              // InternalSARL.g:8186:3: ( (lv_extension_0_0= 'extension' ) )? ( (lv_name_1_0= ruleValidID ) ) ( ( ( ':' )=>otherlv_2= ':' ) ( (lv_parameterType_3_0= ruleJvmTypeReference ) ) )?
              {
              // InternalSARL.g:8186:3: ( (lv_extension_0_0= 'extension' ) )?
              int alt225=2;
              int LA225_0 = input.LA(1);
  
              if ( (LA225_0==45) ) {
                  alt225=1;
              }
              switch (alt225) {
                  case 1 :
                      // InternalSARL.g:8187:4: (lv_extension_0_0= 'extension' )
                      {
                      // InternalSARL.g:8187:4: (lv_extension_0_0= 'extension' )
                      // InternalSARL.g:8188:5: lv_extension_0_0= 'extension'
                      {
                      lv_extension_0_0=(Token)match(input,45,FOLLOW_3); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(lv_extension_0_0, grammarAccess.getJvmFormalParameterAccess().getExtensionExtensionKeyword_0_0());
                        				
                      }
                      if ( state.backtracking==0 ) {
  
                        					if (current==null) {
                        						current = createModelElement(grammarAccess.getJvmFormalParameterRule());
                        					}
                        					setWithLastConsumed(current, "extension", true, "extension");
                        				
                      }
  
                      }
  
  
                      }
                      break;
  
              }
  
              // InternalSARL.g:8200:3: ( (lv_name_1_0= ruleValidID ) )
              // InternalSARL.g:8201:4: (lv_name_1_0= ruleValidID )
              {
              // InternalSARL.g:8201:4: (lv_name_1_0= ruleValidID )
              // InternalSARL.g:8202:5: lv_name_1_0= ruleValidID
              {
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getJvmFormalParameterAccess().getNameValidIDParserRuleCall_1_0());
                				
              }
              pushFollow(FOLLOW_79);
              lv_name_1_0=ruleValidID();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElementForParent(grammarAccess.getJvmFormalParameterRule());
                					}
                					set(
                						current,
                						"name",
                						lv_name_1_0,
                						"org.eclipse.xtend.core.Xtend.ValidID");
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
              // InternalSARL.g:8219:3: ( ( ( ':' )=>otherlv_2= ':' ) ( (lv_parameterType_3_0= ruleJvmTypeReference ) ) )?
              int alt226=2;
              int LA226_0 = input.LA(1);
  
              if ( (LA226_0==46) ) {
                  int LA226_1 = input.LA(2);
  
                  if ( (synpred9_InternalSARL()) ) {
                      alt226=1;
                  }
              }
              switch (alt226) {
                  case 1 :
                      // InternalSARL.g:8220:4: ( ( ':' )=>otherlv_2= ':' ) ( (lv_parameterType_3_0= ruleJvmTypeReference ) )
                      {
                      // InternalSARL.g:8220:4: ( ( ':' )=>otherlv_2= ':' )
                      // InternalSARL.g:8221:5: ( ':' )=>otherlv_2= ':'
                      {
                      otherlv_2=(Token)match(input,46,FOLLOW_41); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_2, grammarAccess.getJvmFormalParameterAccess().getColonKeyword_2_0());
                        				
                      }
  
                      }
  
                      // InternalSARL.g:8227:4: ( (lv_parameterType_3_0= ruleJvmTypeReference ) )
                      // InternalSARL.g:8228:5: (lv_parameterType_3_0= ruleJvmTypeReference )
                      {
                      // InternalSARL.g:8228:5: (lv_parameterType_3_0= ruleJvmTypeReference )
                      // InternalSARL.g:8229:6: lv_parameterType_3_0= ruleJvmTypeReference
                      {
                      if ( state.backtracking==0 ) {
  
                        						newCompositeNode(grammarAccess.getJvmFormalParameterAccess().getParameterTypeJvmTypeReferenceParserRuleCall_2_1_0());
                        					
                      }
                      pushFollow(FOLLOW_2);
                      lv_parameterType_3_0=ruleJvmTypeReference();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElementForParent(grammarAccess.getJvmFormalParameterRule());
                        						}
                        						set(
                        							current,
                        							"parameterType",
                        							lv_parameterType_3_0,
                        							"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                        						afterParserOrEnumRuleCall();
                        					
                      }
  
                      }
  
  
                      }
  
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }