docs: public final EObject ruleAbstractMetamodelDeclaration() throws RecognitionException {
          EObject current = null;
  
          EObject this_GeneratedMetamodel_0 = null;
  
          EObject this_ReferencedMetamodel_1 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalXtext.g:356:2: ( (this_GeneratedMetamodel_0= ruleGeneratedMetamodel | this_ReferencedMetamodel_1= ruleReferencedMetamodel ) )
              // InternalXtext.g:357:2: (this_GeneratedMetamodel_0= ruleGeneratedMetamodel | this_ReferencedMetamodel_1= ruleReferencedMetamodel )
              {
              // InternalXtext.g:357:2: (this_GeneratedMetamodel_0= ruleGeneratedMetamodel | this_ReferencedMetamodel_1= ruleReferencedMetamodel )
              int alt10=2;
              int LA10_0 = input.LA(1);
  
              if ( (LA10_0==18) ) {
                  alt10=1;
              }
              else if ( (LA10_0==20) ) {
                  alt10=2;
              }
              else {
                  NoViableAltException nvae =
                      new NoViableAltException("", 10, 0, input);
  
                  throw nvae;
              }
              switch (alt10) {
                  case 1 :
                      // InternalXtext.g:358:3: this_GeneratedMetamodel_0= ruleGeneratedMetamodel
                      {
  
                      			newCompositeNode(grammarAccess.getAbstractMetamodelDeclarationAccess().getGeneratedMetamodelParserRuleCall_0());
                      		
                      pushFollow(FollowSets000.FOLLOW_2);
                      this_GeneratedMetamodel_0=ruleGeneratedMetamodel();
  
                      state._fsp--;
  
  
                      			current = this_GeneratedMetamodel_0;
                      			afterParserOrEnumRuleCall();
                      		
  
                      }
                      break;
                  case 2 :
                      // InternalXtext.g:367:3: this_ReferencedMetamodel_1= ruleReferencedMetamodel
                      {
  
                      			newCompositeNode(grammarAccess.getAbstractMetamodelDeclarationAccess().getReferencedMetamodelParserRuleCall_1());
                      		
                      pushFollow(FollowSets000.FOLLOW_2);
                      this_ReferencedMetamodel_1=ruleReferencedMetamodel();
  
                      state._fsp--;
  
  
                      			current = this_ReferencedMetamodel_1;
                      			afterParserOrEnumRuleCall();
                      		
  
                      }
                      break;
  
              }
  
  
              }
  
  
              	leaveRule();
  
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }