docs: public final EObject ruleAnnotation() throws RecognitionException {
          EObject current = null;
  
          Token otherlv_0=null;
          Token lv_name_1_0=null;
  
  
          	enterRule();
  
          try {
              // InternalXtext.g:533:2: ( (otherlv_0= '@' ( (lv_name_1_0= RULE_ID ) ) ) )
              // InternalXtext.g:534:2: (otherlv_0= '@' ( (lv_name_1_0= RULE_ID ) ) )
              {
              // InternalXtext.g:534:2: (otherlv_0= '@' ( (lv_name_1_0= RULE_ID ) ) )
              // InternalXtext.g:535:3: otherlv_0= '@' ( (lv_name_1_0= RULE_ID ) )
              {
              otherlv_0=(Token)match(input,21,FollowSets000.FOLLOW_13); 
  
              			newLeafNode(otherlv_0, grammarAccess.getAnnotationAccess().getCommercialAtKeyword_0());
              		
              // InternalXtext.g:539:3: ( (lv_name_1_0= RULE_ID ) )
              // InternalXtext.g:540:4: (lv_name_1_0= RULE_ID )
              {
              // InternalXtext.g:540:4: (lv_name_1_0= RULE_ID )
              // InternalXtext.g:541:5: lv_name_1_0= RULE_ID
              {
              lv_name_1_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_2); 
  
              					newLeafNode(lv_name_1_0, grammarAccess.getAnnotationAccess().getNameIDTerminalRuleCall_1_0());
              				
  
              					if (current==null) {
              						current = createModelElement(grammarAccess.getAnnotationRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
  
              }
  
  
              }
  
  
              }
  
  
              }
  
  
              	leaveRule();
  
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }