aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar juliexxia <juliexxia@google.com>2018-08-13 15:21:42 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-13 15:23:28 -0700
commita6298007e0b8338aa4ac5cbc9f6d42d5d44b6d6d (patch)
treebd4a4357d6b36e90ea7382421ef0c27911230a31
parent3bace1b937934fb2cea6260067ecc1cdbe526847 (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
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildtool/BuildRequest.java8
-rw-r--r--src/main/java/com/google/devtools/common/options/OptionsParser.java10
-rw-r--r--src/main/java/com/google/devtools/common/options/OptionsProvider.java14
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.