// $ANTLR start "entryRulePackage"
  // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:67:1: entryRulePackage returns [EObject current=null] : iv_rulePackage= rulePackage EOF ;
  public final EObject entryRulePackage() throws RecognitionException {
    EObject current = null;

    EObject iv_rulePackage = null;

    try {
      // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:68:2: (iv_rulePackage= rulePackage EOF )
      // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:69:2: iv_rulePackage= rulePackage EOF
      {
        newCompositeNode(grammarAccess.getPackageRule());
        pushFollow(FOLLOW_rulePackage_in_entryRulePackage75);
        iv_rulePackage = rulePackage();

        state._fsp--;

        current = iv_rulePackage;
        match(input, EOF, FOLLOW_EOF_in_entryRulePackage85);
      }

    } catch (RecognitionException re) {
      recover(input, re);
      appendSkippedTokens();
    } finally {
    }
    return current;
  }
  // $ANTLR start "rulePackage"
  // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:76:1: rulePackage returns [EObject current=null] : (otherlv_0= 'package' ( (lv_name_1_0= ruleFQN ) ) ( (lv_locations_2_0= ruleLocation ) )* ) ;
  public final EObject rulePackage() throws RecognitionException {
    EObject current = null;

    Token otherlv_0 = null;
    AntlrDatatypeRuleToken lv_name_1_0 = null;

    EObject lv_locations_2_0 = null;

    enterRule();

    try {
      // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:79:28: ( (otherlv_0= 'package' ( (lv_name_1_0= ruleFQN ) ) ( (lv_locations_2_0= ruleLocation ) )* ) )
      // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:80:1: (otherlv_0= 'package' ( (lv_name_1_0= ruleFQN ) ) ( (lv_locations_2_0= ruleLocation ) )* )
      {
        // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:80:1: (otherlv_0= 'package' ( (lv_name_1_0= ruleFQN ) ) ( (lv_locations_2_0= ruleLocation ) )* )
        // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:80:3: otherlv_0= 'package' ( (lv_name_1_0= ruleFQN ) ) ( (lv_locations_2_0= ruleLocation ) )*
        {
          otherlv_0 = (Token) match(input, 11, FOLLOW_11_in_rulePackage122);

          newLeafNode(otherlv_0, grammarAccess.getPackageAccess().getPackageKeyword_0());

          // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:84:1: ( (lv_name_1_0= ruleFQN ) )
          // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:85:1: (lv_name_1_0= ruleFQN )
          {
            // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:85:1: (lv_name_1_0= ruleFQN )
            // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:86:3: lv_name_1_0= ruleFQN
            {
              newCompositeNode(grammarAccess.getPackageAccess().getNameFQNParserRuleCall_1_0());

              pushFollow(FOLLOW_ruleFQN_in_rulePackage143);
              lv_name_1_0 = ruleFQN();

              state._fsp--;

              if (current == null) {
                current = createModelElementForParent(grammarAccess.getPackageRule());
              }
              set(current, "name", lv_name_1_0, "FQN");
              afterParserOrEnumRuleCall();
            }
          }

          // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:102:2: ( (lv_locations_2_0= ruleLocation ) )*
          loop1:
          do {
            int alt1 = 2;
            int LA1_0 = input.LA(1);

            if ((LA1_0 == 12)) {
              alt1 = 1;
            }

            switch (alt1) {
              case 1:
                // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:103:1: (lv_locations_2_0= ruleLocation )
                {
                  // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:103:1: (lv_locations_2_0= ruleLocation )
                  // ../org.eclipse.eclipsecon.location/src-gen/org/eclipse/eclipsecon/parser/antlr/internal/InternalLocation.g:104:3: lv_locations_2_0= ruleLocation
                  {
                    newCompositeNode(
                        grammarAccess.getPackageAccess().getLocationsLocationParserRuleCall_2_0());

                    pushFollow(FOLLOW_ruleLocation_in_rulePackage164);
                    lv_locations_2_0 = ruleLocation();

                    state._fsp--;

                    if (current == null) {
                      current = createModelElementForParent(grammarAccess.getPackageRule());
                    }
                    add(current, "locations", lv_locations_2_0, "Location");
                    afterParserOrEnumRuleCall();
                  }
                }
                break;

              default:
                break loop1;
            }
          } while (true);
        }
      }

      leaveRule();
    } catch (RecognitionException re) {
      recover(input, re);
      appendSkippedTokens();
    } finally {
    }
    return current;
  }