Would people like to use a library like
http://code.google.com/p/google-collections/ to make code more terse.
It provides a number of utility classes that make good use of java
generic type inference.
So instead of
Map<KeyTypeName, ValueTypeName> myMap = new HashMap<KeyTypeName,
ValueTypeName>();
you can write
Map<KeyTypeName, ValueTypeName> myMap = Maps.newHashMap();
without warnings and without losing type checking.
This is due to some peculiarities of the language that require types
on constructor invocations, but that allows inference of type
parameters on calls that appear in the right hand of assignments.
It also reduces import clutter to some degree, and some of the classes
like Sets provide union factories and the like.
Finally, they have a Multimap class which would simplify code around
Map<KeyType, List<ValueType>> in a number of places in our code.
A quick grep shows 332 places that could be simplified by adopting
this library. I am not advocating doing a fixup of old code. Just
include the library for new code, and rewrite as code is touched.
(12:56:20)> find src tests -name \*.java | xargs egrep -h 'new
(ArrayList|(Linked|Identity|)Hash(Map|Set))'
List<Escape> escapes = new ArrayList<Escape>();
List<String> pathParts = new ArrayList<String>(
private static final Set<String> VALUELESS_ATTRIB_NAMES = new HashSet<String>(
Map<String, Integer> entities = new HashMap<String, Integer>();
new HashMap<String, Punctuation>();
= new HashMap<String, Keyword>();
if (null == filtered) { filtered = new ArrayList<Token<T>>(); }
= new HashMap<Name, HtmlTextEscapingMode>();
return new ArrayList<Map.Entry<String, T>>(
private final List<TableRow> rows = new ArrayList<TableRow>();
private List<Integer> indentStack = new ArrayList<Integer>();
List<String> punctuationStrings = new ArrayList<String>();
List<Integer> openBracketStack = new ArrayList<Integer>();
= new HashMap<InputSource, Integer>();
private final List<Chunk> chunks = new ArrayList<Chunk>();
this.originalSourceLines = new HashMap<InputSource, String[]>();
List<Pair<String, Integer>> chunks = new ArrayList<Pair<String, Integer>>();
private final List<String> outputTokens = new ArrayList<String>();
private static final Set<String> KEYWORDS = new HashSet<String>();
List<String> outputTokens = new ArrayList<String>();
private Map<Integer, Integer> evidence = new HashMap<Integer, Integer>();
new HashMap<InputSource, Map<Integer, OriginalSourceLine>>();
m = new HashMap<Integer, OriginalSourceLine>();
List<Integer> sortedLines = new ArrayList<Integer>(forSource.keySet());
= new ArrayList<RenderedSourceLine>();
= new HashMap<InputSource, List<OriginalSourceLine>>();
private List<FilePosition> marks = new ArrayList<FilePosition>();
List<OriginalSourceLine> lines = new ArrayList<OriginalSourceLine>();
private final List<Object> pending = new ArrayList<Object>();
private final List<FilePosition> marks = new ArrayList<FilePosition>();
private final List<String> sourceLocationMap = new ArrayList<String>();
new ArrayList<List<FilePosition>>();
List<FilePosition> result = new ArrayList<FilePosition>();
new ArrayList<List<Integer>>();
new ArrayList<Set<InputSource>>();
new HashMap<FilePosition, Integer>();
new ArrayList<FilePosition>();
linePositionIndicesByLine.add(new ArrayList<Integer>());
List<StringLiteral> keys = new ArrayList<StringLiteral>();
List<IntegerLiteral> values = new ArrayList<IntegerLiteral>();
List<StringLiteral> keys = new ArrayList<StringLiteral>();
List<IntegerLiteral> values = new ArrayList<IntegerLiteral>();
List<StringLiteral> keys = new ArrayList<StringLiteral>();
List<IntegerLiteral> values = new ArrayList<IntegerLiteral>();
List<StringLiteral> keys = new ArrayList<StringLiteral>();
List<IntegerLiteral> values = new ArrayList<IntegerLiteral>();
Set<File> inputsAndDeps = new HashSet<File>();
new ArrayList<Attribute>(attrs));
this.allowedAttributes = new HashSet<Pair<Name, Name>>();
= new HashMap<Pair<Name, Name>, RegularCriterion>();
this.attributeDetails = new HashMap<Pair<Name, Name>, HTML.Attribute>();
= new HashMap<Name, List<HTML.Attribute>>();
byElement = new ArrayList<HTML.Attribute>();
this.allowedElements = new HashSet<Name>();
this.elementDetails = new HashMap<Name, HTML.Element>();
final Set<String> valueSet = new LinkedHashSet<String>();
new HashMap<Name, CssPropertyInfo>();
new HashMap<Name, SymbolInfo>();
private final Set<Name> keywords = new HashSet<Name>();
final Set<String> elements = new HashSet<String>();
List<String> members = new ArrayList<String>();
dom2properties = new ArrayList<String>();
functionsAllowed = new LinkedHashSet<Name>();
propertiesAllowed = new LinkedHashSet<Name>();
new HashSet<Name>(
List<Pattern> children = new ArrayList<Pattern>();
List<Pattern> children = new ArrayList<Pattern>();
List<Pattern> children = new ArrayList<Pattern>();
= new HashMap<String, String>();
List<Pattern> newChildren = new ArrayList<Pattern>();
List<Pattern> newChildren = new ArrayList<Pattern>();
List<Pattern> newChildren = new ArrayList<Pattern>();
Set<Pattern> seen = new HashSet<Pattern>();
= new ArrayList<CssSchema.CssPropertyInfo>(schema.getCssProperties());
Map<String, int[]> constantPoolMap = new HashMap<String, int[]>();
= new ArrayList<Pair<CssSchema.CssPropertyInfo, String>>();
List<RegexpLiteral> constantPool = new ArrayList<RegexpLiteral>();
= new ArrayList<Pair<Literal, Expression>>();
= new ArrayList<Pair<Literal, Expression>>();
= new ArrayList<Pair<Literal, Expression>>();
Set<File> inputsAndDeps = new HashSet<File>();
permitsUsed = new LinkedHashMap<String, Permit>();
private final Set<String> ruleNames = new HashSet<String>();
List<ParseTreeNode> matches = new ArrayList<ParseTreeNode>();
private final List<Rule> rules = new ArrayList<Rule>();
= new HashMap<Class<? extends ParseTreeNode>, List<Rule>>();
new HashMap<String, Class<? extends ParseTreeNode>>());
List<Rule> applicableRules = new ArrayList<Rule>();
List<ParseTreeNode> keyList = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> valueList = new ArrayList<ParseTreeNode>();
List<Expression> children = new ArrayList<Expression>();
new HashMap<String, PermitTemplate>();
List<ParseTreeNode> expanded = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> expanded = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> expanded = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> expanded = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> expanded = new ArrayList<ParseTreeNode>();
Map<String, ParseTreeNode> bindings = new
LinkedHashMap<String, ParseTreeNode>();
List <Expression> newChildren = new ArrayList<Expression>();
List<ParseTreeNode> newVals = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> specimenChildren = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> children = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> rewrittenChildren = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> stmts = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> refs = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> keys = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> vals = new ArrayList<ParseTreeNode>();
return new LinkedHashMap<String, ParseTreeNode>();
List<Expression> temporaries = new ArrayList<Expression>();
private final HashSet<LocalType> implications = new HashSet<LocalType>();
= new HashMap<String, Pair<LocalType, FilePosition>>();
private final List<Statement> startStatements = new ArrayList<Statement>();
private final List<Reference> references = new ArrayList<Reference>();
private final List<Declaration> declarations = new ArrayList<Declaration>();
private final List<String> exceptionVariables = new ArrayList<String>();
public static final Set<String> UNMASKABLE_IDENTIFIERS = new HashSet<String>(
List<ParseTreeNode> nodes = new ArrayList<ParseTreeNode>(node.children());
List<Statement> stats = new ArrayList<Statement>();
List<ParseTreeNode> nodes = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> expanded = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> importedVars = new ArrayList<ParseTreeNode>();
Set<String> orderedImportNames = new LinkedHashSet<String>();
List<Statement> expanded = new ArrayList<Statement>();
List<ParseTreeNode> expanded = new ArrayList<ParseTreeNode>();
List<Declaration> declarations = new ArrayList<Declaration>();
List<Expression> initializers = new ArrayList<Expression>();
List<ParseTreeNode> items = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> specimens = new ArrayList<ParseTreeNode>();
List<ParseTreeNode> results = new ArrayList<ParseTreeNode>();
= new HashMap<String, QuasiNode>();
List<QuasiNode> children = new ArrayList<QuasiNode>();
this.subsetNames = new LinkedHashSet<String>(subsetNames);
List<UseSubset> subsets = new ArrayList<UseSubset>();
List<ParseTreeNode> expanded = new ArrayList<ParseTreeNode>();
= new HashMap<String, Integer>();
= new HashMap<Integer, CajoledModule>();
List<ParseTreeNode> moduleDefs = new ArrayList<ParseTreeNode>();
attribs = new ArrayList<Attr>();
private final List<Node> openNodes = new ArrayList<Node>();
private final Set<Node> unpoppedElements = new HashSet<Node>();
List<Attr> newAttribs = new ArrayList<Attr>();
new ArrayList<CssPropertySignature>(children));
List<String> toks = new ArrayList<String>();
new ArrayList<CssPropertySignature>();
new ArrayList<CssPropertySignature>();
new ArrayList<CssPropertySignature>();
List<ProgIdAttrSignature> attrs = new ArrayList<ProgIdAttrSignature>();
List<CssTree.CssStatement> stmts = new ArrayList<CssTree.CssStatement>();
List<CssTree.Declaration> decls = new ArrayList<CssTree.Declaration>();
media = new ArrayList<CssTree.Medium>();
List<CssTree> children = new ArrayList<CssTree>();
List<CssTree.PageElement> elements = new ArrayList<CssTree.PageElement>();
List<CssTree.Declaration> elements = new ArrayList<CssTree.Declaration>();
List<CssTree> elements = new ArrayList<CssTree>();
List<CssTree> elements = new ArrayList<CssTree>();
List<CssTree> elements = new ArrayList<CssTree>();
List<CssTree> children = new ArrayList<CssTree>(3);
List<CssTree> children = new ArrayList<CssTree>();
List<ProgIdAttribute> attrs = new ArrayList<ProgIdAttribute>();
List<T> l = new ArrayList<T>(a.size() + b.size());
List<Medium> media = new ArrayList<Medium>();
List<Medium> media = new ArrayList<Medium>();
breaksReaching.put(label, breaks = new ArrayList<BreakStmt>());
List<Statement> stmts = new ArrayList<Statement>();
List<UseSubset> subsets = new ArrayList<UseSubset>();
List<SwitchCase> cases = new ArrayList<SwitchCase>();
List<Statement> caseBodyContents = new ArrayList<Statement>();
new ArrayList<Pair<Expression, Statement>>();
List<Statement> blockParts = new ArrayList<Statement>();
actuals = new ArrayList<Expression>();
List<Expression> elements = new ArrayList<Expression>();
= new ArrayList<Pair<Literal, Expression>>();
List<Declaration> decls = new ArrayList<Declaration>();
List<FormalParam> params = new ArrayList<FormalParam>();
Set<String> paramNames = new HashSet<String>();
Set<String> names = new LinkedHashSet<String>();
Map<String, Operator> symbolMap = new HashMap<String, Operator>();
= new ArrayList<Pair<InputSource, File>>();
List<String> abbreviatedOriginalFileNames = new ArrayList<String>();
List<List<String>> originalFileContents = new ArrayList<List<String>>();
new ArrayList<ParseTreeNode>(contents.size());
new ArrayList<ParseTreeNode>(strings.size());
continuesReaching.put(label, continues = new ArrayList<ContinueStmt>());
new HashMap<Class<? extends ParseTreeNode>, Constructor<?>>());
? Collections.unmodifiableList(new ArrayList<Token<?>>(tokens))
= new ArrayList<ParseTreeNode>(children.getImmutableFacet().size());
private List<Change> changes = new ArrayList<Change>();
this.backingList = new ArrayList<T>(source.backingList);
backingList = new ArrayList<T>();
= new HashMap<InputSource, CharSequence>();
private final Map<String, String> modulePrefs = new HashMap<String, String>();
private final List<String> requiredFeatures = new ArrayList<String>();
List<CharProducer> chunks = new ArrayList<CharProducer>();
List<FilePosition> positions = new ArrayList<FilePosition>();
List<Node> ihtmlRoots = new ArrayList<Node>();
List<CssTree.StyleSheet> stylesheets = new ArrayList<CssTree.StyleSheet>();
final Set<String> variablesInScope = new HashSet<String>();
= new ArrayList<AncestorChain<FunctionConstructor>>();
return flattenStringsOnto(e, new ArrayList<StringLiteral>());
List<StringLiteral> literals = new ArrayList<StringLiteral>();
List<Expression> parts = new ArrayList<Expression>();
List<CharProducer> producers = new ArrayList<CharProducer>();
= new ArrayList<Pair<String, FilePosition>>();
= new LinkedHashMap<FilePosition, Integer>();
List<Expression> debugTable = new ArrayList<Expression>(
Set<InputSource> sources = new HashSet<InputSource>();
= new LinkedHashMap<String, ParseTreeNode>();
= new LinkedHashMap<String, ParseTreeNode>();
new ArrayList<ParseTreeNode>(keyValuePairs.get("values").children());
List<CssTree> mediaBlockChildren = new ArrayList<CssTree>();
Set<Name> mediaTypes = new LinkedHashSet<Name>();
mediaTypes = new LinkedHashSet<Name>();
final List<CssTree.RuleSet> rules = new ArrayList<CssTree.RuleSet>();
List<CssTree> mediaChildren = new ArrayList<CssTree>();
List<Text> textNodes = new ArrayList<Text>();
List<CharProducer> content = new ArrayList<CharProducer>();
= new HashMap<InputSource, String>();
final Set<File> canonFiles = new HashSet<File>();
= new ArrayList<Pair<InputSource, File>>();
private final List<Block> js = new ArrayList<Block>();
List<DomBone> domSkeleton = new ArrayList<DomBone>();
List<Node> safe = new ArrayList<Node>(roots.size());
return Pair.pair(safeHtml, (List<Block>) new ArrayList<Block>(js));
List<Node> foldedChildren = new ArrayList<Node>();
= new IdentityHashMap<Node, ParseTreeNode>();
this.ihtmlRoots = new ArrayList<Node>(ihtmlRoots);
this.safeStylesheets = new ArrayList<CssTree.StyleSheet>(safeStylesheets);
List<Expression> cssParts = new ArrayList<Expression>();
= new HashMap<String, String>();
private final List<Statement> handlers = new ArrayList<Statement>();
private final List<Part> parts = new ArrayList<Part>();
return new Emitter(new ArrayList<Part>(parts)).toExpression(mustBeString);
List<Part> newParts = new ArrayList<Part>();
List<StringPart> stringParts = new ArrayList<StringPart>();
inputUris = new ArrayList<URI>();
final List<Expression> cssParts = new ArrayList<Expression>();
private static final Set<Name> LINK_PSEUDO_CLASSES = new HashSet<Name>(
linkeyChildren = new ArrayList<CssTree>();
nonLinkeyChildren = new ArrayList<CssTree>();
private static final Set<Name> ALLOWED_PSEUDO_CLASSES = new HashSet<Name>(
Set<Name> propNames = new HashSet<Name>(Arrays.asList(
List<ParseTreeNode> outputs = new ArrayList<ParseTreeNode>();
private final List<Job> jobs = new ArrayList<Job>();
List<Job> matches = new ArrayList<Job>();
= new HashMap<InputSource, CapturingReader>();
new HashMap<InputSource, CharSequence>();
List<Candidate> passed = new ArrayList<Candidate>();
toApply = new ArrayList<Candidate>(toApply);
List<Candidate> passedSet = new ArrayList<Candidate>();
private final List<Include> includes = new ArrayList<Include>();
private final List<Depend> depends = new ArrayList<Depend>();
private final List<Output> outputs = new ArrayList<Output>();
List<File> inputs = new ArrayList<File>();
List<File> dependees = new ArrayList<File>();
return new HashMap<String, Object>();
List<WhiteListSkeleton> inherited = new ArrayList<WhiteListSkeleton>();
Set<String> allowedItemSet = new HashSet<String>();
Set<String> deniedItemSet = new HashSet<String>();
List<JSONObject> typeDefinitions = new ArrayList<JSONObject>();
= new HashMap<String, WhiteList.TypeDefinition>();
Map<String, Object> map = new HashMap<String, Object>();
List<Object> list = new ArrayList<Object>();
m.put(key, values = new ArrayList<V>());
final Set<String> allowed = new HashSet<String>();
final Set<String> denied = new HashSet<String>();
= new HashMap<String, List<JSONObject>>();
List<Expression> valueExprs = new ArrayList<Expression>();
private List<Message> messages = new ArrayList<Message>();
List<Message> backing = new ArrayList<Message>();
inputSources = new LinkedHashSet<InputSource>();
Set<String> uris = new HashSet<String>();
private final List<Stage<T>> stages = new ArrayList<Stage<T>>();
attributes = new HashMap<SyntheticAttributeKey<?>, Object>(attributes);
HashSet<K> keys = new HashSet<K>(wrapped.keySet());
Set<Map.Entry<K, V>> entries = new HashSet<Map.Entry<K, V>>();
changes = new HashMap<K, Object>();
if (null == changes) { changes = new HashMap<K, Object>(); }
if (null == changes) { changes = new HashMap<K, Object>(); }
= new HashMap<String, URLStreamHandler>();
private final Map<String, String> itemToAbbrev = new HashMap<String,
String>();
Map<String, String> abbrevToUri = new HashMap<String, String>();
private final Map<String, String> canonicalMimeType = new
HashMap<String,String>();
List<String> actual = new ArrayList<String>();
= new ArrayList<Pair<String, FilePosition>>();
Set<PunctuationTrie<?>> uniq = new HashSet<PunctuationTrie<?>>();
Map<InputSource, String> originalSrcs = new HashMap<InputSource, String>();
List<String> actualTokens = new ArrayList<String>();
List<String> puncStrs = new ArrayList<String>();
List<String> tokens = new ArrayList<String>();
List<String> actualTokens = new ArrayList<String>();
List<String> simplifiedRandomTokens = new ArrayList<String>();
List<String> tokens = new ArrayList<String>();
List<StringLiteral> literals = new ArrayList<StringLiteral>();
List<String> actual = new ArrayList<String>();
HashMap<Block,CajoledModule> cMemo = new HashMap<Block, CajoledModule>();
HashMap<Block, CajoledModule> vMemo = new HashMap<Block, CajoledModule>();
private List<Message> messages = new ArrayList<Message>();
= new HashMap<InputSource, String>();
List<Statement> children = new ArrayList<Statement>();
new ParseTreeNodeContainer(new ArrayList<ParseTreeNode>()));
Map<String, ParseTreeNode> bindings = new HashMap<String, ParseTreeNode>();
List<String> actualMessages = new ArrayList<String>();
List<Message> messages = new ArrayList<Message>(mq.getMessages());
List<String> snippets = new ArrayList<String>();
List<String> actualErrors = new ArrayList<String>();
private List<Number> nums = new ArrayList<Number>();
this.toRemove = new HashSet<Long>();
= new ArrayList<ParseTreeNode>(p.children());
List<Message> matches = new ArrayList<Message>();
= new HashMap<InputSource, CharSequence>();
gadgetList = new ArrayList<URI>();
= new ArrayList<Map.Entry<MessageTypeInt, Integer>>(
= new LinkedHashMap<MessageTypeInt, Integer>();
= new IdentityHashMap<Object, VisitationRecord>();
List<Pair<String, Object>> props = new ArrayList<Pair<String, Object>>();
List<Input> inputs = new ArrayList<Input>();
= new ArrayList<Pair<String, InputSource>>();
List<Element> scripts = new ArrayList<Element>();
List<CharProducer> parts = new ArrayList<CharProducer>();
new HashSet<String>(Arrays.asList(
new HashSet<String>(Arrays.asList(
List<JobStub> actualJobs = new ArrayList<JobStub>();
= new ArrayList<Pair<URI, CharProducer>>();
for (Job job : new ArrayList<Job>(jobs.getJobsByType(JobType.HTML))) {
List<String> actualWarnings = new ArrayList<String>();
List<Node> html = new ArrayList<Node>();
List<CssTree.StyleSheet> css = new ArrayList<CssTree.StyleSheet>();
List<Statement> statements = new ArrayList<Statement>();
mc.relevantKeys = new LinkedHashSet<SyntheticAttributeKey<?>>(
List<String> actualWarnings = new ArrayList<String>();
uriContent = new HashMap<URI, CajolingService.FetchedData>();
params.put(k, new ArrayList<String>());