public static @NotNull ShelvedBinaryFile readExternal(@NotNull Element element, @NotNull PathMacroSubstitutor pathMacroSubstitutor) {
    String beforePath = null;
    String afterPath = null;
    String shelvedPath = null;
    for (Map.Entry<String, String> field : readFields(element).entrySet()) {
      String value = pathMacroSubstitutor.expandPath(Objects.requireNonNull(field.getValue()));
      if (field.getKey().equals(BEFORE_PATH_FIELD_NAME)) {
        beforePath = value;
      }
      else if (field.getKey().equals(AFTER_PATH_FIELD_NAME)) {
        afterPath = value;
      }
      else if (field.getKey().equals(SHELVED_PATH_FIELD_NAME)) {
        shelvedPath = value;
      }
    }
    return new ShelvedBinaryFile(beforePath, afterPath, shelvedPath);
  }
public static @NotNull ShelvedBinaryFile readExternal(@NotNull Element element, @NotNull PathMacroSubstitutor pathMacroSubstitutor)