aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/common/options/OptionsParser.java
diff options
context:
space:
mode:
authorGravatar brandjon <brandjon@google.com>2017-04-18 15:52:57 +0200
committerGravatar Klaus Aehlig <aehlig@google.com>2017-04-18 16:41:27 +0200
commitd1b34d487bb83f0761d707cb8b27f88d547068e8 (patch)
treef1520c94627a67824b5ada44869e11c17c6847ed /src/main/java/com/google/devtools/common/options/OptionsParser.java
parent1357a0d1c172d1cfbd0ecb6f1a9014910a7b1fb3 (diff)
Eliminate some middleman methods
Reduce spaghetti code by exposing the parser's OptionsData as package-private, rather than exposing individual methods ad hoc between OptionsParser and OptionsParserImpl. Also change some calls from static constructors to diamond syntax. RELNOTES: None PiperOrigin-RevId: 153457442
Diffstat (limited to 'src/main/java/com/google/devtools/common/options/OptionsParser.java')
-rw-r--r--src/main/java/com/google/devtools/common/options/OptionsParser.java60
1 files changed, 32 insertions, 28 deletions
diff --git a/src/main/java/com/google/devtools/common/options/OptionsParser.java b/src/main/java/com/google/devtools/common/options/OptionsParser.java
index 3b55c744c0..9574a90162 100644
--- a/src/main/java/com/google/devtools/common/options/OptionsParser.java
+++ b/src/main/java/com/google/devtools/common/options/OptionsParser.java
@@ -20,16 +20,14 @@ import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ListMultimap;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
import com.google.common.escape.Escaper;
import java.lang.reflect.Field;
import java.nio.file.FileSystem;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
@@ -93,7 +91,7 @@ public class OptionsParser implements OptionsProvider {
* options classes on the classpath.
*/
private static final Map<ImmutableList<Class<? extends OptionsBase>>, OptionsData> optionsData =
- Maps.newHashMap();
+ new HashMap<>();
/**
* Returns {@link OpaqueOptionsData} suitable for passing along to {@link
@@ -104,32 +102,35 @@ public class OptionsParser implements OptionsProvider {
* construct lots of different {@link OptionsParser} instances).
*/
public static OpaqueOptionsData getOptionsData(
- ImmutableList<Class<? extends OptionsBase>> optionsClasses) throws ConstructionException {
+ List<Class<? extends OptionsBase>> optionsClasses) throws ConstructionException {
return getOptionsDataInternal(optionsClasses);
}
- private static synchronized OptionsData getOptionsDataInternal(
- ImmutableList<Class<? extends OptionsBase>> optionsClasses) throws ConstructionException {
- OptionsData result = optionsData.get(optionsClasses);
+ /**
+ * Returns the {@link OptionsData} associated with the given list of options classes.
+ */
+ static synchronized OptionsData getOptionsDataInternal(
+ List<Class<? extends OptionsBase>> optionsClasses) throws ConstructionException {
+ ImmutableList<Class<? extends OptionsBase>> immutableOptionsClasses =
+ ImmutableList.copyOf(optionsClasses);
+ OptionsData result = optionsData.get(immutableOptionsClasses);
if (result == null) {
try {
- result = OptionsData.from(optionsClasses);
+ result = OptionsData.from(immutableOptionsClasses);
} catch (Exception e) {
throw new ConstructionException(e.getMessage(), e);
}
- optionsData.put(optionsClasses, result);
+ optionsData.put(immutableOptionsClasses, result);
}
return result;
}
/**
- * Returns all the annotated fields for the given class, including inherited
- * ones.
+ * Returns the {@link OptionsData} associated with the given options class.
*/
- static Collection<Field> getAllAnnotatedFields(Class<? extends OptionsBase> optionsClass) {
- OptionsData data = getOptionsDataInternal(
- ImmutableList.<Class<? extends OptionsBase>>of(optionsClass));
- return data.getFieldsForClass(optionsClass);
+ static OptionsData getOptionsDataInternal(Class<? extends OptionsBase> optionsClass)
+ throws ConstructionException {
+ return getOptionsDataInternal(ImmutableList.<Class<? extends OptionsBase>>of(optionsClass));
}
/**
@@ -328,7 +329,7 @@ public class OptionsParser implements OptionsProvider {
// The generic type of the list is not known at runtime, so we can't
// use it here. It was already checked in the constructor, so this is
// type-safe.
- List result = Lists.newArrayList();
+ List result = new ArrayList<>();
ListMultimap realValue = (ListMultimap) value;
for (OptionPriority priority : OptionPriority.values()) {
// If there is no mapping for this key, this check avoids object creation (because
@@ -536,11 +537,12 @@ public class OptionsParser implements OptionsProvider {
*/
public String describeOptions(
Map<String, String> categoryDescriptions, HelpVerbosity helpVerbosity) {
+ OptionsData data = impl.getOptionsData();
StringBuilder desc = new StringBuilder();
- if (!impl.getOptionsClasses().isEmpty()) {
- List<Field> allFields = Lists.newArrayList();
- for (Class<? extends OptionsBase> optionsClass : impl.getOptionsClasses()) {
- allFields.addAll(impl.getAnnotatedFieldsFor(optionsClass));
+ if (!data.getOptionsClasses().isEmpty()) {
+ List<Field> allFields = new ArrayList<>();
+ for (Class<? extends OptionsBase> optionsClass : data.getOptionsClasses()) {
+ allFields.addAll(data.getFieldsForClass(optionsClass));
}
Collections.sort(allFields, OptionsUsage.BY_CATEGORY);
String prevCategory = null;
@@ -579,11 +581,12 @@ public class OptionsParser implements OptionsProvider {
* of the category.
*/
public String describeOptionsHtml(Map<String, String> categoryDescriptions, Escaper escaper) {
+ OptionsData data = impl.getOptionsData();
StringBuilder desc = new StringBuilder();
- if (!impl.getOptionsClasses().isEmpty()) {
- List<Field> allFields = Lists.newArrayList();
- for (Class<? extends OptionsBase> optionsClass : impl.getOptionsClasses()) {
- allFields.addAll(impl.getAnnotatedFieldsFor(optionsClass));
+ if (!data.getOptionsClasses().isEmpty()) {
+ List<Field> allFields = new ArrayList<>();
+ for (Class<? extends OptionsBase> optionsClass : data.getOptionsClasses()) {
+ allFields.addAll(data.getFieldsForClass(optionsClass));
}
Collections.sort(allFields, OptionsUsage.BY_CATEGORY);
String prevCategory = null;
@@ -620,12 +623,13 @@ public class OptionsParser implements OptionsProvider {
* details on the format for the flag completion.
*/
public String getOptionsCompletion() {
+ OptionsData data = impl.getOptionsData();
StringBuilder desc = new StringBuilder();
// List all options
- List<Field> allFields = Lists.newArrayList();
- for (Class<? extends OptionsBase> optionsClass : impl.getOptionsClasses()) {
- allFields.addAll(impl.getAnnotatedFieldsFor(optionsClass));
+ List<Field> allFields = new ArrayList<>();
+ for (Class<? extends OptionsBase> optionsClass : data.getOptionsClasses()) {
+ allFields.addAll(data.getFieldsForClass(optionsClass));
}
// Sort field for deterministic ordering
Collections.sort(allFields, new Comparator<Field>() {