Make ValidationError an AutoValue
Change-Id: I4da4e0bd67f4127f3f37b68f7166b3c024b3f9cf
This commit is contained in:
		@@ -219,7 +219,7 @@ public class ProjectWatches {
 | 
			
		||||
      int i = notifyValue.lastIndexOf('[');
 | 
			
		||||
      if (i < 0 || notifyValue.charAt(notifyValue.length() - 1) != ']') {
 | 
			
		||||
        validationErrorSink.error(
 | 
			
		||||
            new ValidationError(
 | 
			
		||||
            ValidationError.create(
 | 
			
		||||
                WATCH_CONFIG,
 | 
			
		||||
                String.format(
 | 
			
		||||
                    "Invalid project watch of account %d for project %s: %s",
 | 
			
		||||
@@ -240,7 +240,7 @@ public class ProjectWatches {
 | 
			
		||||
          NotifyType notifyType = Enums.getIfPresent(NotifyType.class, nt).orNull();
 | 
			
		||||
          if (notifyType == null) {
 | 
			
		||||
            validationErrorSink.error(
 | 
			
		||||
                new ValidationError(
 | 
			
		||||
                ValidationError.create(
 | 
			
		||||
                    WATCH_CONFIG,
 | 
			
		||||
                    String.format(
 | 
			
		||||
                        "Invalid notify type %s in project watch "
 | 
			
		||||
 
 | 
			
		||||
@@ -183,7 +183,7 @@ public class StoredPreferences {
 | 
			
		||||
      return PreferencesParserUtil.parseGeneralPreferences(cfg, defaultCfg, input);
 | 
			
		||||
    } catch (ConfigInvalidException e) {
 | 
			
		||||
      validationErrorSink.error(
 | 
			
		||||
          new ValidationError(
 | 
			
		||||
          ValidationError.create(
 | 
			
		||||
              PREFERENCES_CONFIG,
 | 
			
		||||
              String.format(
 | 
			
		||||
                  "Invalid general preferences for account %d: %s",
 | 
			
		||||
@@ -197,7 +197,7 @@ public class StoredPreferences {
 | 
			
		||||
      return PreferencesParserUtil.parseDiffPreferences(cfg, defaultCfg, input);
 | 
			
		||||
    } catch (ConfigInvalidException e) {
 | 
			
		||||
      validationErrorSink.error(
 | 
			
		||||
          new ValidationError(
 | 
			
		||||
          ValidationError.create(
 | 
			
		||||
              PREFERENCES_CONFIG,
 | 
			
		||||
              String.format(
 | 
			
		||||
                  "Invalid diff preferences for account %d: %s", accountId.get(), e.getMessage())));
 | 
			
		||||
@@ -210,7 +210,7 @@ public class StoredPreferences {
 | 
			
		||||
      return PreferencesParserUtil.parseEditPreferences(cfg, defaultCfg, input);
 | 
			
		||||
    } catch (ConfigInvalidException e) {
 | 
			
		||||
      validationErrorSink.error(
 | 
			
		||||
          new ValidationError(
 | 
			
		||||
          ValidationError.create(
 | 
			
		||||
              PREFERENCES_CONFIG,
 | 
			
		||||
              String.format(
 | 
			
		||||
                  "Invalid edit preferences for account %d: %s", accountId.get(), e.getMessage())));
 | 
			
		||||
 
 | 
			
		||||
@@ -14,51 +14,26 @@
 | 
			
		||||
 | 
			
		||||
package com.google.gerrit.server.git;
 | 
			
		||||
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
import com.google.auto.value.AutoValue;
 | 
			
		||||
 | 
			
		||||
/** Indicates a problem with Git based data. */
 | 
			
		||||
public class ValidationError {
 | 
			
		||||
  private final String message;
 | 
			
		||||
@AutoValue
 | 
			
		||||
public abstract class ValidationError {
 | 
			
		||||
  public abstract String getMessage();
 | 
			
		||||
 | 
			
		||||
  public ValidationError(String file, String message) {
 | 
			
		||||
    this(file + ": " + message);
 | 
			
		||||
  public static ValidationError create(String file, String message) {
 | 
			
		||||
    return create(file + ": " + message);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public ValidationError(String file, int line, String message) {
 | 
			
		||||
    this(file + ":" + line + ": " + message);
 | 
			
		||||
  public static ValidationError create(String file, int line, String message) {
 | 
			
		||||
    return create(file + ":" + line + ": " + message);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public ValidationError(String message) {
 | 
			
		||||
    this.message = message;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public String getMessage() {
 | 
			
		||||
    return message;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public String toString() {
 | 
			
		||||
    return "ValidationError[" + message + "]";
 | 
			
		||||
  public static ValidationError create(String message) {
 | 
			
		||||
    return new AutoValue_ValidationError(message);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public interface Sink {
 | 
			
		||||
    void error(ValidationError error);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public boolean equals(Object o) {
 | 
			
		||||
    if (o == this) {
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
    if (o instanceof ValidationError) {
 | 
			
		||||
      ValidationError that = (ValidationError) o;
 | 
			
		||||
      return Objects.equals(this.message, that.message);
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public int hashCode() {
 | 
			
		||||
    return Objects.hashCode(message);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,7 @@ public class TabFile {
 | 
			
		||||
 | 
			
		||||
      int tab = s.indexOf('\t');
 | 
			
		||||
      if (tab < 0) {
 | 
			
		||||
        errors.error(new ValidationError(filename, lineNumber, "missing tab delimiter"));
 | 
			
		||||
        errors.error(ValidationError.create(filename, lineNumber, "missing tab delimiter"));
 | 
			
		||||
        continue;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -584,7 +584,7 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
    if (rc.getStringList(ACCESS, null, KEY_INHERIT_FROM).length > 1) {
 | 
			
		||||
      // The config must not contain more than one parent to inherit from
 | 
			
		||||
      // as there is no guarantee which of the parents would be used then.
 | 
			
		||||
      error(new ValidationError(PROJECT_CONFIG, "Cannot inherit from multiple projects"));
 | 
			
		||||
      error(ValidationError.create(PROJECT_CONFIG, "Cannot inherit from multiple projects"));
 | 
			
		||||
    }
 | 
			
		||||
    p.setParentName(rc.getString(ACCESS, null, KEY_INHERIT_FROM));
 | 
			
		||||
 | 
			
		||||
@@ -634,7 +634,7 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
      String lower = name.toLowerCase();
 | 
			
		||||
      if (lowerNames.containsKey(lower)) {
 | 
			
		||||
        error(
 | 
			
		||||
            new ValidationError(
 | 
			
		||||
            ValidationError.create(
 | 
			
		||||
                PROJECT_CONFIG,
 | 
			
		||||
                String.format(
 | 
			
		||||
                    "Extension Panels \"%s\" conflicts with \"%s\"", name, lowerNames.get(lower))));
 | 
			
		||||
@@ -663,7 +663,7 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
        ca.setAutoVerify(null);
 | 
			
		||||
      } else if (rules.size() > 1) {
 | 
			
		||||
        error(
 | 
			
		||||
            new ValidationError(
 | 
			
		||||
            ValidationError.create(
 | 
			
		||||
                PROJECT_CONFIG,
 | 
			
		||||
                "Invalid rule in "
 | 
			
		||||
                    + CONTRIBUTOR_AGREEMENT
 | 
			
		||||
@@ -674,7 +674,7 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
                    + ": at most one group may be set"));
 | 
			
		||||
      } else if (rules.get(0).getAction() != Action.ALLOW) {
 | 
			
		||||
        error(
 | 
			
		||||
            new ValidationError(
 | 
			
		||||
            ValidationError.create(
 | 
			
		||||
                PROJECT_CONFIG,
 | 
			
		||||
                "Invalid rule in "
 | 
			
		||||
                    + CONTRIBUTOR_AGREEMENT
 | 
			
		||||
@@ -730,18 +730,18 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
            n.addEmail(ref);
 | 
			
		||||
          } else {
 | 
			
		||||
            error(
 | 
			
		||||
                new ValidationError(
 | 
			
		||||
                ValidationError.create(
 | 
			
		||||
                    PROJECT_CONFIG,
 | 
			
		||||
                    "group \"" + ref.getName() + "\" not in " + GroupList.FILE_NAME));
 | 
			
		||||
          }
 | 
			
		||||
        } else if (dst.startsWith("user ")) {
 | 
			
		||||
          error(new ValidationError(PROJECT_CONFIG, dst + " not supported"));
 | 
			
		||||
          error(ValidationError.create(PROJECT_CONFIG, dst + " not supported"));
 | 
			
		||||
        } else {
 | 
			
		||||
          try {
 | 
			
		||||
            n.addEmail(Address.parse(dst));
 | 
			
		||||
          } catch (IllegalArgumentException err) {
 | 
			
		||||
            error(
 | 
			
		||||
                new ValidationError(
 | 
			
		||||
                ValidationError.create(
 | 
			
		||||
                    PROJECT_CONFIG,
 | 
			
		||||
                    "notify section \"" + sectionName + "\" has invalid email \"" + dst + "\""));
 | 
			
		||||
          }
 | 
			
		||||
@@ -801,7 +801,7 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
    try {
 | 
			
		||||
      RefPattern.validateRegExp(refPattern);
 | 
			
		||||
    } catch (InvalidNameException e) {
 | 
			
		||||
      error(new ValidationError(PROJECT_CONFIG, "Invalid ref name: " + e.getMessage()));
 | 
			
		||||
      error(ValidationError.create(PROJECT_CONFIG, "Invalid ref name: " + e.getMessage()));
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
@@ -822,7 +822,9 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
        // to fail fast if any of the patterns are invalid.
 | 
			
		||||
        patterns.add(Pattern.compile(patternString).pattern());
 | 
			
		||||
      } catch (PatternSyntaxException e) {
 | 
			
		||||
        error(new ValidationError(PROJECT_CONFIG, "Invalid regular expression: " + e.getMessage()));
 | 
			
		||||
        error(
 | 
			
		||||
            ValidationError.create(
 | 
			
		||||
                PROJECT_CONFIG, "Invalid regular expression: " + e.getMessage()));
 | 
			
		||||
        continue;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
@@ -849,7 +851,7 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
        rule = PermissionRule.fromString(ruleString, useRange);
 | 
			
		||||
      } catch (IllegalArgumentException notRule) {
 | 
			
		||||
        error(
 | 
			
		||||
            new ValidationError(
 | 
			
		||||
            ValidationError.create(
 | 
			
		||||
                PROJECT_CONFIG,
 | 
			
		||||
                "Invalid rule in "
 | 
			
		||||
                    + section
 | 
			
		||||
@@ -869,7 +871,7 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
        //
 | 
			
		||||
        ref = groupList.resolve(rule.getGroup());
 | 
			
		||||
        error(
 | 
			
		||||
            new ValidationError(
 | 
			
		||||
            ValidationError.create(
 | 
			
		||||
                PROJECT_CONFIG, "group \"" + ref.getName() + "\" not in " + GroupList.FILE_NAME));
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@@ -896,7 +898,7 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
      String lower = name.toLowerCase();
 | 
			
		||||
      if (lowerNames.containsKey(lower)) {
 | 
			
		||||
        error(
 | 
			
		||||
            new ValidationError(
 | 
			
		||||
            ValidationError.create(
 | 
			
		||||
                PROJECT_CONFIG,
 | 
			
		||||
                String.format("Label \"%s\" conflicts with \"%s\"", name, lowerNames.get(lower))));
 | 
			
		||||
      }
 | 
			
		||||
@@ -911,13 +913,13 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
            values.add(labelValue);
 | 
			
		||||
          } else {
 | 
			
		||||
            error(
 | 
			
		||||
                new ValidationError(
 | 
			
		||||
                ValidationError.create(
 | 
			
		||||
                    PROJECT_CONFIG,
 | 
			
		||||
                    String.format("Duplicate %s \"%s\" for label \"%s\"", KEY_VALUE, value, name)));
 | 
			
		||||
          }
 | 
			
		||||
        } catch (IllegalArgumentException notValue) {
 | 
			
		||||
          error(
 | 
			
		||||
              new ValidationError(
 | 
			
		||||
              ValidationError.create(
 | 
			
		||||
                  PROJECT_CONFIG,
 | 
			
		||||
                  String.format(
 | 
			
		||||
                      "Invalid %s \"%s\" for label \"%s\": %s",
 | 
			
		||||
@@ -929,7 +931,7 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
      try {
 | 
			
		||||
        label = new LabelType(name, values);
 | 
			
		||||
      } catch (IllegalArgumentException badName) {
 | 
			
		||||
        error(new ValidationError(PROJECT_CONFIG, String.format("Invalid label \"%s\"", name)));
 | 
			
		||||
        error(ValidationError.create(PROJECT_CONFIG, String.format("Invalid label \"%s\"", name)));
 | 
			
		||||
        continue;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@@ -940,7 +942,7 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
              : Optional.of(LabelFunction.MAX_WITH_BLOCK);
 | 
			
		||||
      if (!function.isPresent()) {
 | 
			
		||||
        error(
 | 
			
		||||
            new ValidationError(
 | 
			
		||||
            ValidationError.create(
 | 
			
		||||
                PROJECT_CONFIG,
 | 
			
		||||
                String.format(
 | 
			
		||||
                    "Invalid %s for label \"%s\". Valid names are: %s",
 | 
			
		||||
@@ -954,7 +956,7 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
          label.setDefaultValue(dv);
 | 
			
		||||
        } else {
 | 
			
		||||
          error(
 | 
			
		||||
              new ValidationError(
 | 
			
		||||
              ValidationError.create(
 | 
			
		||||
                  PROJECT_CONFIG,
 | 
			
		||||
                  String.format(
 | 
			
		||||
                      "Invalid %s \"%s\" for label \"%s\"", KEY_DEFAULT_VALUE, dv, name)));
 | 
			
		||||
@@ -1000,14 +1002,14 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
          short copyValue = Shorts.checkedCast(PermissionRule.parseInt(value));
 | 
			
		||||
          if (!copyValues.add(copyValue)) {
 | 
			
		||||
            error(
 | 
			
		||||
                new ValidationError(
 | 
			
		||||
                ValidationError.create(
 | 
			
		||||
                    PROJECT_CONFIG,
 | 
			
		||||
                    String.format(
 | 
			
		||||
                        "Duplicate %s \"%s\" for label \"%s\"", KEY_COPY_VALUE, value, name)));
 | 
			
		||||
          }
 | 
			
		||||
        } catch (IllegalArgumentException notValue) {
 | 
			
		||||
          error(
 | 
			
		||||
              new ValidationError(
 | 
			
		||||
              ValidationError.create(
 | 
			
		||||
                  PROJECT_CONFIG,
 | 
			
		||||
                  String.format(
 | 
			
		||||
                      "Invalid %s \"%s\" for label \"%s\": %s",
 | 
			
		||||
@@ -1045,14 +1047,14 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
        commentLinkSections.put(name, buildCommentLink(rc, name, false));
 | 
			
		||||
      } catch (PatternSyntaxException e) {
 | 
			
		||||
        error(
 | 
			
		||||
            new ValidationError(
 | 
			
		||||
            ValidationError.create(
 | 
			
		||||
                PROJECT_CONFIG,
 | 
			
		||||
                String.format(
 | 
			
		||||
                    "Invalid pattern \"%s\" in commentlink.%s.match: %s",
 | 
			
		||||
                    rc.getString(COMMENTLINK, name, KEY_MATCH), name, e.getMessage())));
 | 
			
		||||
      } catch (IllegalArgumentException e) {
 | 
			
		||||
        error(
 | 
			
		||||
            new ValidationError(
 | 
			
		||||
            ValidationError.create(
 | 
			
		||||
                PROJECT_CONFIG,
 | 
			
		||||
                String.format(
 | 
			
		||||
                    "Error in pattern \"%s\" in commentlink.%s.match: %s",
 | 
			
		||||
@@ -1099,7 +1101,7 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
          GroupReference ref = groupList.byName(groupName);
 | 
			
		||||
          if (ref == null) {
 | 
			
		||||
            error(
 | 
			
		||||
                new ValidationError(
 | 
			
		||||
                ValidationError.create(
 | 
			
		||||
                    PROJECT_CONFIG, "group \"" + groupName + "\" not in " + GroupList.FILE_NAME));
 | 
			
		||||
          }
 | 
			
		||||
          rc.setString(PLUGIN, plugin, name, value);
 | 
			
		||||
@@ -1572,7 +1574,7 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
 | 
			
		||||
    try {
 | 
			
		||||
      return rc.getEnum(section, subsection, name, defaultValue);
 | 
			
		||||
    } catch (IllegalArgumentException err) {
 | 
			
		||||
      error(new ValidationError(PROJECT_CONFIG, err.getMessage()));
 | 
			
		||||
      error(ValidationError.create(PROJECT_CONFIG, err.getMessage()));
 | 
			
		||||
      return defaultValue;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -132,7 +132,7 @@ public class DestinationListTest {
 | 
			
		||||
    List<ValidationError> errors = new ArrayList<>();
 | 
			
		||||
    new DestinationList().parseLabel(LABEL, L_BAD, errors::add);
 | 
			
		||||
    assertThat(errors)
 | 
			
		||||
        .containsExactly(new ValidationError("destinationslabel", 1, "missing tab delimiter"));
 | 
			
		||||
        .containsExactly(ValidationError.create("destinationslabel", 1, "missing tab delimiter"));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
 
 | 
			
		||||
@@ -101,7 +101,8 @@ public class QueryListTest {
 | 
			
		||||
  public void testParseBad() throws Exception {
 | 
			
		||||
    List<ValidationError> errors = new ArrayList<>();
 | 
			
		||||
    assertThat(QueryList.parse(L_BAD, errors::add).asText()).isNull();
 | 
			
		||||
    assertThat(errors).containsExactly(new ValidationError("queries", 1, "missing tab delimiter"));
 | 
			
		||||
    assertThat(errors)
 | 
			
		||||
        .containsExactly(ValidationError.create("queries", 1, "missing tab delimiter"));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
 
 | 
			
		||||
@@ -571,7 +571,7 @@ public class ProjectConfigTest {
 | 
			
		||||
    assertThat(cfg.getCommentLinkSections()).isEmpty();
 | 
			
		||||
    assertThat(cfg.getValidationErrors())
 | 
			
		||||
        .containsExactly(
 | 
			
		||||
            new ValidationError(
 | 
			
		||||
            ValidationError.create(
 | 
			
		||||
                "project.config: Invalid pattern \"(bugs{+#?)(d+)\" in commentlink.bugzilla.match: "
 | 
			
		||||
                    + "Illegal repetition near index 4\n"
 | 
			
		||||
                    + "(bugs{+#?)(d+)\n"
 | 
			
		||||
@@ -592,7 +592,7 @@ public class ProjectConfigTest {
 | 
			
		||||
    assertThat(cfg.getCommentLinkSections()).isEmpty();
 | 
			
		||||
    assertThat(cfg.getValidationErrors())
 | 
			
		||||
        .containsExactly(
 | 
			
		||||
            new ValidationError(
 | 
			
		||||
            ValidationError.create(
 | 
			
		||||
                "project.config: Error in pattern \"(bugs#?)(d+)\" in commentlink.bugzilla.match: "
 | 
			
		||||
                    + "Raw html replacement not allowed"));
 | 
			
		||||
  }
 | 
			
		||||
@@ -607,7 +607,7 @@ public class ProjectConfigTest {
 | 
			
		||||
    assertThat(cfg.getCommentLinkSections()).isEmpty();
 | 
			
		||||
    assertThat(cfg.getValidationErrors())
 | 
			
		||||
        .containsExactly(
 | 
			
		||||
            new ValidationError(
 | 
			
		||||
            ValidationError.create(
 | 
			
		||||
                "project.config: Error in pattern \"(bugs#?)(d+)\" in commentlink.bugzilla.match: "
 | 
			
		||||
                    + "commentlink.bugzilla must have either link or html"));
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user