aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/common/options/OptionsParser.java
diff options
context:
space:
mode:
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.java30
1 files changed, 26 insertions, 4 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 e47d219e7d..fd6d91507f 100644
--- a/src/main/java/com/google/devtools/common/options/OptionsParser.java
+++ b/src/main/java/com/google/devtools/common/options/OptionsParser.java
@@ -72,7 +72,20 @@ public class OptionsParser implements OptionsProvider {
private static final Map<ImmutableList<Class<? extends OptionsBase>>, OptionsData> optionsData =
Maps.newHashMap();
- private static synchronized OptionsData getOptionsData(
+ /**
+ * Returns {@link OpaqueOptionsData} suitable for passing along to
+ * {@link #newOptionsParser(OpaqueOptionsData optionsData)}.
+ *
+ * This is useful when you want to do the work of analyzing the given {@code optionsClasses}
+ * exactly once, but you want to parse lots of different lists of strings (and thus need to
+ * construct lots of different {@link OptionsParser} instances).
+ */
+ public static OpaqueOptionsData getOptionsData(
+ ImmutableList<Class<? extends OptionsBase>> optionsClasses) {
+ return getOptionsDataInternal(optionsClasses);
+ }
+
+ private static synchronized OptionsData getOptionsDataInternal(
ImmutableList<Class<? extends OptionsBase>> optionsClasses) {
OptionsData result = optionsData.get(optionsClasses);
if (result == null) {
@@ -87,7 +100,8 @@ public class OptionsParser implements OptionsProvider {
* ones.
*/
static Collection<Field> getAllAnnotatedFields(Class<? extends OptionsBase> optionsClass) {
- OptionsData data = getOptionsData(ImmutableList.<Class<? extends OptionsBase>>of(optionsClass));
+ OptionsData data = getOptionsDataInternal(
+ ImmutableList.<Class<? extends OptionsBase>>of(optionsClass));
return data.getFieldsForClass(optionsClass);
}
@@ -111,8 +125,16 @@ public class OptionsParser implements OptionsProvider {
*/
public static OptionsParser newOptionsParser(
Iterable<? extends Class<? extends OptionsBase>> optionsClasses) {
- return new OptionsParser(
- getOptionsData(ImmutableList.<Class<? extends OptionsBase>>copyOf(optionsClasses)));
+ return newOptionsParser(
+ getOptionsDataInternal(ImmutableList.<Class<? extends OptionsBase>>copyOf(optionsClasses)));
+ }
+
+ /**
+ * Create a new {@link OptionsParser}, using {@link OpaqueOptionsData} previously returned from
+ * {@link #getOptionsData}.
+ */
+ public static OptionsParser newOptionsParser(OpaqueOptionsData optionsData) {
+ return new OptionsParser((OptionsData) optionsData);
}
private final OptionsParserImpl impl;