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");
}