public void readData()

in src/main/java/com/maddyhome/idea/vim/group/RegisterGroup.java [90:158]


  public void readData(final @NotNull Element element) {
    logger.debug("Read registers data");
    final Element registersElement = element.getChild("registers");
    if (registersElement != null) {
      logger.trace("'registers' element is not null");
      final List<Element> registerElements = registersElement.getChildren("register");
      if (logger.isTraceEnabled()) {
        logger.trace("Detected " + registerElements.size() + " register elements");
      }
      for (Element registerElement : registerElements) {
        final char key = registerElement.getAttributeValue("name").charAt(0);
        if (logger.isTraceEnabled()) {
          logger.trace("Read register '" + key + "'");
        }
        final Register register;
        final Element textElement = registerElement.getChild("text");
        final String typeText = registerElement.getAttributeValue("type");
        SelectionType type;
        try {
          type = SelectionType.valueOf(typeText);
        }
        catch (IllegalArgumentException e) {
          // This whole `if` keeps compatibility with the mode when SelectionType had numbers
          if (Integer.toString(1 << 1).equals(typeText)) {
            type = SelectionType.CHARACTER_WISE;
          }
          else if (Integer.toString(1 << 2).equals(typeText)) {
            type = SelectionType.LINE_WISE;
          }
          else if (Integer.toString(1 << 3).equals(typeText)) {
            type = SelectionType.BLOCK_WISE;
          }
          else {
            type = SelectionType.CHARACTER_WISE;
          }
        }
        if (textElement != null) {
          logger.trace("Register has 'text' element");
          final String text = VimPlugin.getXML().getSafeXmlText(textElement);
          if (text != null) {
            logger.trace("Register data parsed");
            register = new Register(key, injector.getClipboardManager().dumbCopiedText(text), type);
          }
          else {
            logger.trace("Cannot parse register data");
            register = null;
          }
        }
        else {
          logger.trace("Register has 'keys' element");
          final Element keysElement = registerElement.getChild("keys");
          final List<Element> keyElements = keysElement.getChildren("key");
          final List<KeyStroke> strokes = new ArrayList<>();
          for (Element keyElement : keyElements) {
            final int code = Integer.parseInt(keyElement.getAttributeValue("code"));
            final int modifiers = Integer.parseInt(keyElement.getAttributeValue("mods"));
            final char c = (char)Integer.parseInt(keyElement.getAttributeValue("char"));
            //noinspection MagicConstant
            strokes.add(
              c == KeyEvent.CHAR_UNDEFINED ? KeyStroke.getKeyStroke(code, modifiers) : KeyStroke.getKeyStroke(c));
          }
          register = new Register(key, type, strokes);
        }
        logger.trace("Save register to vim registers");
        myRegisters.put(key, register);
      }
    }
    logger.debug("Finish reading registers data");
  }