From a6298007e0b8338aa4ac5cbc9f6d42d5d44b6d6d Mon Sep 17 00:00:00 2001 From: juliexxia Date: Mon, 13 Aug 2018 15:21:42 -0700 Subject: Add a getSkylarkOptions 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 get 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 --- .../google/devtools/build/lib/buildtool/BuildRequest.java | 8 ++++++++ .../com/google/devtools/common/options/OptionsParser.java | 10 ++++++++++ .../google/devtools/common/options/OptionsProvider.java | 14 ++++++++++++++ 3 files changed, 32 insertions(+) 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, Optional> optionsCache; + private final Map 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 optionsClass : MANDATORY_OPTIONS) { Preconditions.checkNotNull(getOptions(optionsClass)); } } + private Map 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 residue = new ArrayList(); private boolean allowResidue = true; + private Map 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 getSkylarkOptions() { + return skylarkOptions; + } + + void setSkylarkOptions(Map 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. + * + *

These follow the basics of the option syntax, --= but are parsed and stored + * differently than native options based on 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 getSkylarkOptions(); + + /** * Returns an immutable copy of the residue, that is, the arguments that * have not been parsed. -- cgit v1.2.3