Prefer subtypes of Multimap
Guava team recommends using the subinterfaces of Multimap, for the same reasons they recommend using Set and List rather than Collection: it documents expectations about ordering, uniqueness, and behavior of equals. Do this across the board in Gerrit. Mostly this is straightforward and I tried to exactly match existing behavior where possible. However, there were a few wrinkles, where different callers passed different subtypes to the same method. The main one is arguments to ParameterParser#parse and splitQueryString, where some callers used SetMultimaps (perhaps semi-intentionally, or perhaps misunderstanding the nature of HashMultimap). For the purposes of parameter parsing, a ListMultimap makes more sense, because it preserves argument order and repetition. Another instance is a couple places in ReceiveCommits and downstream where there were SetMultimap<?, Ref>. Since Refs do not implement equals, this is effectively the same thing as a ListMultimap, and changing the interface no longer misleads readers into thinking there might be some deduplication happening. Finally, this change includes a breaking API change to the return type of ExternalIncludedIn#getIncludedIn. Change-Id: I5f1d15e27a32e534a6aaefe204e7a31815f4c8d7
This commit is contained in:
committed by
David Pursehouse
parent
e5c5953205
commit
484da493b3
@@ -35,9 +35,9 @@
|
||||
package com.google.gerrit.util.cli;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.LinkedHashMultimap;
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
import com.google.common.collect.ListMultimap;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.assistedinject.Assisted;
|
||||
|
||||
@@ -224,7 +224,7 @@ public class CmdLineParser {
|
||||
|
||||
public void parseOptionMap(Map<String, String[]> parameters)
|
||||
throws CmdLineException {
|
||||
Multimap<String, String> map = LinkedHashMultimap.create();
|
||||
ListMultimap<String, String> map = ArrayListMultimap.create();
|
||||
for (Map.Entry<String, String[]> ent : parameters.entrySet()) {
|
||||
for (String val : ent.getValue()) {
|
||||
map.put(ent.getKey(), val);
|
||||
@@ -233,7 +233,7 @@ public class CmdLineParser {
|
||||
parseOptionMap(map);
|
||||
}
|
||||
|
||||
public void parseOptionMap(Multimap<String, String> params)
|
||||
public void parseOptionMap(ListMultimap<String, String> params)
|
||||
throws CmdLineException {
|
||||
List<String> tmp = Lists.newArrayListWithCapacity(2 * params.size());
|
||||
for (final String key : params.keySet()) {
|
||||
|
||||
Reference in New Issue
Block a user