diff options
author | juliexxia <juliexxia@google.com> | 2018-08-13 15:21:42 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-08-13 15:23:28 -0700 |
commit | a6298007e0b8338aa4ac5cbc9f6d42d5d44b6d6d (patch) | |
tree | bd4a4357d6b36e90ea7382421ef0c27911230a31 | |
parent | 3bace1b937934fb2cea6260067ecc1cdbe526847 (diff) |
Add a <code>getSkylarkOptions</code> helper function to all OptionsProviders.
This is to allow OptionsProviders to access the new skylark options which aren't held in a fragment class like native options and thus can't be accessed with the traditional <code>get</code> method. Currently this function isn't called anywhere and would just return an empty map. But in the future it will return a map of skylark flag names to values.
PiperOrigin-RevId: 208552510
3 files changed, 32 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/BuildRequest.java b/src/main/java/com/google/devtools/build/lib/buildtool/BuildRequest.java index 263195a699..02a99e7e24 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/BuildRequest.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/BuildRequest.java @@ -38,6 +38,7 @@ import com.google.devtools.common.options.OptionsClassProvider; import com.google.devtools.common.options.OptionsProvider; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.UUID; import java.util.concurrent.ExecutionException; @@ -50,6 +51,7 @@ import java.util.concurrent.ExecutionException; public class BuildRequest implements OptionsClassProvider { private final UUID id; private final LoadingCache<Class<? extends OptionsBase>, Optional<OptionsBase>> optionsCache; + private final Map<String, Object> skylarkOptions; /** A human-readable description of all the non-default option settings. */ private final String optionsDescription; @@ -105,12 +107,17 @@ public class BuildRequest implements OptionsClassProvider { return Optional.fromNullable(result); } }); + this.skylarkOptions = options.getSkylarkOptions(); for (Class<? extends OptionsBase> optionsClass : MANDATORY_OPTIONS) { Preconditions.checkNotNull(getOptions(optionsClass)); } } + private Map<String, Object> getSkylarkOptions() { + return skylarkOptions; + } + /** * Returns a unique identifier that universally identifies this build. */ @@ -177,6 +184,7 @@ public class BuildRequest implements OptionsClassProvider { } } + /** * Returns the set of command-line options specified for this request. */ 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 6f1d7b6479..e1c7cbb8a0 100644 --- a/src/main/java/com/google/devtools/common/options/OptionsParser.java +++ b/src/main/java/com/google/devtools/common/options/OptionsParser.java @@ -176,6 +176,7 @@ public class OptionsParser implements OptionsProvider { private final OptionsParserImpl impl; private final List<String> residue = new ArrayList<String>(); private boolean allowResidue = true; + private Map<String, Object> skylarkOptions = new HashMap<>(); OptionsParser(OptionsData optionsData) { impl = new OptionsParserImpl(optionsData); @@ -191,6 +192,15 @@ public class OptionsParser implements OptionsProvider { this.allowResidue = allowResidue; } + @Override + public Map<String, Object> getSkylarkOptions() { + return skylarkOptions; + } + + void setSkylarkOptions(Map<String, Object> skylarkOptions) { + this.skylarkOptions = skylarkOptions; + } + /** * Indicates whether or not the parser will allow long options with a * single-dash, instead of the usual double-dash, too, eg. -example instead of just --example. diff --git a/src/main/java/com/google/devtools/common/options/OptionsProvider.java b/src/main/java/com/google/devtools/common/options/OptionsProvider.java index ece5d5d2ed..31685648fa 100644 --- a/src/main/java/com/google/devtools/common/options/OptionsProvider.java +++ b/src/main/java/com/google/devtools/common/options/OptionsProvider.java @@ -15,6 +15,7 @@ package com.google.devtools.common.options; import java.util.List; +import java.util.Map; /** * A read-only interface for options parser results, which does not allow any @@ -22,6 +23,19 @@ import java.util.List; */ public interface OptionsProvider extends OptionsClassProvider { + + /** + * Returns the skylark options in a name:value map. + * + * <p>These follow the basics of the option syntax, --<name>=<value> but are parsed and stored + * differently than native options based on <name> starting with "//". This is a sufficient + * demarcation between skylark flags and native flags for now since all skylark flags are targets + * and are identified by their package path. But in the future when we implement short names for + * skylark options, this will need to change. + */ + Map<String, Object> getSkylarkOptions(); + + /** * Returns an immutable copy of the residue, that is, the arguments that * have not been parsed. |