diff options
Diffstat (limited to 'java/com/google/gerrit/server/notedb/RevisionNoteBuilder.java')
-rw-r--r-- | java/com/google/gerrit/server/notedb/RevisionNoteBuilder.java | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/java/com/google/gerrit/server/notedb/RevisionNoteBuilder.java b/java/com/google/gerrit/server/notedb/RevisionNoteBuilder.java index 7998476ef3..35a014cb84 100644 --- a/java/com/google/gerrit/server/notedb/RevisionNoteBuilder.java +++ b/java/com/google/gerrit/server/notedb/RevisionNoteBuilder.java @@ -21,6 +21,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.collect.ListMultimap; import com.google.common.collect.Maps; import com.google.common.collect.MultimapBuilder; +import com.google.gerrit.common.Nullable; import com.google.gerrit.entities.Comment; import com.google.gerrit.entities.SubmitRequirementResult; import java.io.ByteArrayOutputStream; @@ -73,7 +74,13 @@ class RevisionNoteBuilder { final Map<Comment.Key, Comment> put; private final Set<Comment.Key> delete; - private List<SubmitRequirementResult> submitRequirementResults; + /** + * Submit requirement results to be stored in the revision note. If this field is null, we don't + * store results in the revision note. Otherwise, we store a "submit requirements" section in the + * revision note even if it's empty. + */ + @Nullable private List<SubmitRequirementResult> submitRequirementResults; + private String pushCert; private RevisionNoteBuilder(RevisionNote<? extends Comment> base) { @@ -83,6 +90,7 @@ class RevisionNoteBuilder { put = Maps.newHashMapWithExpectedSize(baseComments.size()); if (base instanceof ChangeRevisionNote) { pushCert = ((ChangeRevisionNote) base).getPushCert(); + submitRequirementResults = ((ChangeRevisionNote) base).getSubmitRequirementsResult(); } } else { baseRaw = new byte[0]; @@ -90,7 +98,6 @@ class RevisionNoteBuilder { put = new HashMap<>(); pushCert = null; } - submitRequirementResults = new ArrayList<>(); delete = new HashSet<>(); } @@ -109,7 +116,22 @@ class RevisionNoteBuilder { put.put(comment.key, comment); } + /** + * Call this method to designate that we should store submit requirement results in the revision + * note. Even if no results are added, an empty submit requirements section will be added. + */ + void createEmptySubmitRequirementResults() { + submitRequirementResults = new ArrayList<>(); + } + + void clearSubmitRequirementResults() { + submitRequirementResults = null; + } + void putSubmitRequirementResult(SubmitRequirementResult result) { + if (submitRequirementResults == null) { + submitRequirementResults = new ArrayList<>(); + } submitRequirementResults.add(result); } @@ -140,19 +162,19 @@ class RevisionNoteBuilder { private void buildNoteJson(ChangeNoteJson noteUtil, OutputStream out) throws IOException { ListMultimap<Integer, Comment> comments = buildCommentMap(); - if (submitRequirementResults.isEmpty() && comments.isEmpty() && pushCert == null) { + if (submitRequirementResults == null && comments.isEmpty() && pushCert == null) { return; } RevisionNoteData data = new RevisionNoteData(); data.comments = COMMENT_ORDER.sortedCopy(comments.values()); data.pushCert = pushCert; - if (!submitRequirementResults.isEmpty()) { - data.submitRequirementResults = - submitRequirementResults.stream() - .sorted(SUBMIT_REQUIREMENT_RESULT_COMPARATOR) - .collect(Collectors.toList()); - } + data.submitRequirementResults = + submitRequirementResults == null + ? null + : submitRequirementResults.stream() + .sorted(SUBMIT_REQUIREMENT_RESULT_COMPARATOR) + .collect(Collectors.toList()); try (OutputStreamWriter osw = new OutputStreamWriter(out, UTF_8)) { noteUtil.getGson().toJson(data, osw); |