diff options
author | brandjon <brandjon@google.com> | 2017-04-18 15:52:57 +0200 |
---|---|---|
committer | Klaus Aehlig <aehlig@google.com> | 2017-04-18 16:41:27 +0200 |
commit | d1b34d487bb83f0761d707cb8b27f88d547068e8 (patch) | |
tree | f1520c94627a67824b5ada44869e11c17c6847ed /src/main/java/com/google/devtools/common/options/OptionsParser.java | |
parent | 1357a0d1c172d1cfbd0ecb6f1a9014910a7b1fb3 (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.java | 60 |
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>() { |