001    package com.oxygenxml.validate.nvdl;
002    
003    /**
004     * An action that allows any element.
005     */
006    class AllowAction extends NoResultAction {
007      /**
008       * Creates this no result action with a given mode usage.
009       * @param modeUsage The mode usage.
010       */
011      AllowAction(ModeUsage modeUsage) {
012        super(modeUsage);
013      }
014    
015      /**
016       * Perform this action on the section state.
017       * @param state The section state.
018       */
019      void perform(SectionState state) {
020        state.addChildMode(getModeUsage(), null);
021        state.addAttributeValidationModeUsage(getModeUsage());
022      }
023    
024      /**
025       * Get a new allow action with a mode usage with the current mode changed.
026       * This is useful when we have modes extending other modes as we need to get
027       * the actions from the base mode as actions on the new mode.
028       */
029      NoResultAction changeCurrentMode(Mode mode) {
030        return new AllowAction(getModeUsage().changeCurrentMode(mode));
031      }
032    }