From 861377b3ec352e48fc981cde25903c454972267f Mon Sep 17 00:00:00 2001 From: Liam Miller-Cushon Date: Fri, 24 Mar 2023 16:09:16 -0700 Subject: [PATCH] Use LinkedHashMap to keep track of severities The order of these entries became significant after https://github.com/google/error-prone/commit/48bbef0e51c2f5098efe6a2587fafc0ebc31bca5, which allowed using -Xep flags to configure checks using alt names. https://github.com/google/error-prone/issues/3831 PiperOrigin-RevId: 519261645 --- .../google/errorprone/ErrorProneOptions.java | 4 ++-- .../errorprone/ErrorProneOptionsTest.java | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/check_api/src/main/java/com/google/errorprone/ErrorProneOptions.java b/check_api/src/main/java/com/google/errorprone/ErrorProneOptions.java index ca9d9a5541e..f60c1ce85dc 100644 --- a/check_api/src/main/java/com/google/errorprone/ErrorProneOptions.java +++ b/check_api/src/main/java/com/google/errorprone/ErrorProneOptions.java @@ -31,7 +31,7 @@ import java.nio.file.FileSystems; import java.nio.file.Files; import java.util.Arrays; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.regex.Pattern; @@ -259,7 +259,7 @@ private static class Builder { private boolean isTestOnlyTarget = false; private boolean ignoreSuppressionAnnotations = false; private boolean ignoreLargeCodeGenerators = true; - private Map severityMap = new HashMap<>(); + private final Map severityMap = new LinkedHashMap<>(); private final ErrorProneFlags.Builder flagsBuilder = ErrorProneFlags.builder(); private final PatchingOptions.Builder patchingOptionsBuilder = PatchingOptions.builder(); private Pattern excludedPattern; diff --git a/check_api/src/test/java/com/google/errorprone/ErrorProneOptionsTest.java b/check_api/src/test/java/com/google/errorprone/ErrorProneOptionsTest.java index 6c73bf63aa3..80903468aef 100644 --- a/check_api/src/test/java/com/google/errorprone/ErrorProneOptionsTest.java +++ b/check_api/src/test/java/com/google/errorprone/ErrorProneOptionsTest.java @@ -16,13 +16,18 @@ package com.google.errorprone; +import static com.google.common.collect.ImmutableList.toImmutableList; +import static com.google.common.collect.ImmutableMap.toImmutableMap; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; +import com.google.common.collect.Collections2; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.errorprone.ErrorProneOptions.Severity; import com.google.errorprone.apply.ImportOrganizer; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.regex.Pattern; import org.junit.Test; @@ -276,4 +281,19 @@ public void noSuchXepFlag() { InvalidCommandLineOptionException.class, () -> ErrorProneOptions.processArgs(new String[] {"-XepNoSuchFlag"})); } + + @Test + public void severityOrder() { + for (Collection permutation : + Collections2.permutations(ImmutableList.of("A", "B", "C"))) { + ImmutableMap severityMap = + permutation.stream().collect(toImmutableMap(x -> x, x -> Severity.ERROR)); + ErrorProneOptions options = + ErrorProneOptions.processArgs( + permutation.stream() + .map(x -> String.format("-Xep:%s:ERROR", x)) + .collect(toImmutableList())); + assertThat(options.getSeverityMap()).containsExactlyEntriesIn(severityMap).inOrder(); + } + } }