docs: public final EObject ruleFullJvmFormalParameter() 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:8264:2: ( ( ( (lv_extension_0_0= 'extension' ) )? ( (lv_name_1_0= ruleValidID ) ) otherlv_2= ':' ( (lv_parameterType_3_0= ruleMultiTypeReference ) ) ) )
              // InternalSARL.g:8265:2: ( ( (lv_extension_0_0= 'extension' ) )? ( (lv_name_1_0= ruleValidID ) ) otherlv_2= ':' ( (lv_parameterType_3_0= ruleMultiTypeReference ) ) )
              {
              // InternalSARL.g:8265:2: ( ( (lv_extension_0_0= 'extension' ) )? ( (lv_name_1_0= ruleValidID ) ) otherlv_2= ':' ( (lv_parameterType_3_0= ruleMultiTypeReference ) ) )
              // InternalSARL.g:8266:3: ( (lv_extension_0_0= 'extension' ) )? ( (lv_name_1_0= ruleValidID ) ) otherlv_2= ':' ( (lv_parameterType_3_0= ruleMultiTypeReference ) )
              {
              // InternalSARL.g:8266:3: ( (lv_extension_0_0= 'extension' ) )?
              int alt227=2;
              int LA227_0 = input.LA(1);
  
              if ( (LA227_0==45) ) {
                  alt227=1;
              }
              switch (alt227) {
                  case 1 :
                      // InternalSARL.g:8267:4: (lv_extension_0_0= 'extension' )
                      {
                      // InternalSARL.g:8267:4: (lv_extension_0_0= 'extension' )
                      // InternalSARL.g:8268: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.getFullJvmFormalParameterAccess().getExtensionExtensionKeyword_0_0());
                        				
                      }
                      if ( state.backtracking==0 ) {
  
                        					if (current==null) {
                        						current = createModelElement(grammarAccess.getFullJvmFormalParameterRule());
                        					}
                        					setWithLastConsumed(current, "extension", true, "extension");
                        				
                      }
  
                      }
  
  
                      }
                      break;
  
              }
  
              // InternalSARL.g:8280:3: ( (lv_name_1_0= ruleValidID ) )
              // InternalSARL.g:8281:4: (lv_name_1_0= ruleValidID )
              {
              // InternalSARL.g:8281:4: (lv_name_1_0= ruleValidID )
              // InternalSARL.g:8282:5: lv_name_1_0= ruleValidID
              {
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getFullJvmFormalParameterAccess().getNameValidIDParserRuleCall_1_0());
                				
              }
              pushFollow(FOLLOW_40);
              lv_name_1_0=ruleValidID();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElementForParent(grammarAccess.getFullJvmFormalParameterRule());
                					}
                					set(
                						current,
                						"name",
                						lv_name_1_0,
                						"org.eclipse.xtend.core.Xtend.ValidID");
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
              otherlv_2=(Token)match(input,46,FOLLOW_41); if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                			newLeafNode(otherlv_2, grammarAccess.getFullJvmFormalParameterAccess().getColonKeyword_2());
                		
              }
              // InternalSARL.g:8303:3: ( (lv_parameterType_3_0= ruleMultiTypeReference ) )
              // InternalSARL.g:8304:4: (lv_parameterType_3_0= ruleMultiTypeReference )
              {
              // InternalSARL.g:8304:4: (lv_parameterType_3_0= ruleMultiTypeReference )
              // InternalSARL.g:8305:5: lv_parameterType_3_0= ruleMultiTypeReference
              {
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getFullJvmFormalParameterAccess().getParameterTypeMultiTypeReferenceParserRuleCall_3_0());
                				
              }
              pushFollow(FOLLOW_2);
              lv_parameterType_3_0=ruleMultiTypeReference();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElementForParent(grammarAccess.getFullJvmFormalParameterRule());
                					}
                					set(
                						current,
                						"parameterType",
                						lv_parameterType_3_0,
                						"org.eclipse.xtend.core.Xtend.MultiTypeReference");
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }