bazel syntax: make @Skylark-annotated classes implement SkylarkValue
This CL adds a check to the @SkylarkCallable annotation processor to require
that all SkylarkModule- or SkylarkGlobalLibary-annotated classes implement
SkylarkValue, thus ensuring that all Starlark values besides str/int/bool
satisfy this interface.
Future changes will add assertions at the public API (e.g. StarlarkList.add)
that Object values conform to this requirement.
All changes except to .../main/.../{skylarkinterface,syntax}/* are mechanical.
PiperOrigin-RevId: 278876512
diff --git a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java b/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java
index 31aaa63..a876bec 100644
--- a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java
+++ b/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java
@@ -25,6 +25,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.skylarkinterface.SkylarkSignature;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.CallUtils;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
@@ -37,12 +38,11 @@
*/
final class SkylarkDocumentationCollector {
@SkylarkModule(
- name = "globals",
- title = "Globals",
- category = SkylarkModuleCategory.TOP_LEVEL_TYPE,
- doc = "Objects, functions and modules registered in the global environment."
- )
- private static final class TopLevelModule {}
+ name = "globals",
+ title = "Globals",
+ category = SkylarkModuleCategory.TOP_LEVEL_TYPE,
+ doc = "Objects, functions and modules registered in the global environment.")
+ private static final class TopLevelModule implements SkylarkValue {}
private SkylarkDocumentationCollector() {}
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index 5431c8dd..c7dec59 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -1,4 +1,5 @@
load("@rules_java//java:defs.bzl", "java_binary", "java_library")
+load(":merge_licenses.bzl", "merge_licenses")
# Description:
# Main Java code for Bazel
@@ -6,8 +7,6 @@
default_visibility = ["//src:__subpackages__"],
)
-load(":merge_licenses.bzl", "merge_licenses")
-
# Generate list of all srcs via:
# bazel query 'filter("srcs", kind("filegroup rule", //src/main/java/com/google/devtools/build/lib/...))' | sort | sed -e "s/^/\"/" | sed -e "s/$/\",/" | fgrep -v "build/lib:srcs"
filegroup(
@@ -399,6 +398,7 @@
],
deps = [
":skylark_semantics",
+ "//src/main/java/com/google/devtools/build/lib/concurrent",
"//third_party:jsr305",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkBuildLibrary.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkBuildLibrary.java
index 26df081..e6a1f9e 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkBuildLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkBuildLibrary.java
@@ -34,7 +34,7 @@
import java.util.Set;
/** A global library of Starlark functions which are available only when evaluating BUILD files. */
-@SkylarkGlobalLibrary()
+@SkylarkGlobalLibrary
class StarlarkBuildLibrary {
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java
index 025f749..9dddcc0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java
@@ -27,6 +27,7 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.SkylarkList;
import java.util.List;
@@ -35,7 +36,7 @@
/** Marks configured targets that are able to supply message bundles to their dependents. */
@AutoCodec
@Immutable
-public final class MessageBundleInfo extends NativeInfo {
+public final class MessageBundleInfo extends NativeInfo implements SkylarkValue {
public static final String SKYLARK_NAME = "MessageBundleInfo";
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java
index 1a5feb0..1e5058f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java
@@ -23,6 +23,7 @@
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.common.options.TriState;
@@ -35,7 +36,7 @@
name = "py",
doc = "A configuration fragment for Python.",
category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT)
-public class PythonConfiguration extends BuildConfiguration.Fragment {
+public class PythonConfiguration extends BuildConfiguration.Fragment implements SkylarkValue {
private final PythonVersion version;
private final PythonVersion defaultVersion;
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BuildConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BuildConfigurationApi.java
index c445eb9..71ee936 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BuildConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BuildConfigurationApi.java
@@ -18,16 +18,17 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/** Interface for a configuration object which holds information about the build environment. */
@SkylarkModule(
name = "configuration",
category = SkylarkModuleCategory.BUILTIN,
- doc = "This object holds information about the environment in which the build is running. See "
- + "the <a href='../rules.$DOC_EXT#configurations'>Rules page</a> for more on the general "
- + "concept of configurations."
-)
-public interface BuildConfigurationApi {
+ doc =
+ "This object holds information about the environment in which the build is running. See"
+ + " the <a href='../rules.$DOC_EXT#configurations'>Rules page</a> for more on the"
+ + " general concept of configurations.")
+public interface BuildConfigurationApi extends SkylarkValue {
@SkylarkCallable(name = "bin_dir", structField = true, documented = false)
@Deprecated
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileProviderApi.java
index da52412..c645e58 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileProviderApi.java
@@ -18,13 +18,14 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/** A representation of the concept "this builds these files". */
@SkylarkModule(
name = "file_provider",
doc = "An interface for rules that provide files.",
category = SkylarkModuleCategory.PROVIDER)
-public interface FileProviderApi {
+public interface FileProviderApi extends SkylarkValue {
/**
* Returns the set of files that are the "output" of this rule.
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FilesToRunProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FilesToRunProviderApi.java
index 6fb18ea..a55ff00 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FilesToRunProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FilesToRunProviderApi.java
@@ -17,11 +17,12 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import javax.annotation.Nullable;
/** Returns information about executables produced by a target and the files needed to run it. */
@SkylarkModule(name = "FilesToRunProvider", doc = "", category = SkylarkModuleCategory.PROVIDER)
-public interface FilesToRunProviderApi<FileT extends FileApi> {
+public interface FilesToRunProviderApi<FileT extends FileApi> extends SkylarkValue {
@SkylarkCallable(
name = "executable",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FilesetEntryApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FilesetEntryApi.java
index 53bc977..eae1e35 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FilesetEntryApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FilesetEntryApi.java
@@ -15,13 +15,8 @@
package com.google.devtools.build.lib.skylarkbuildapi;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-/**
- * A value object used to represent an entry inside a "Fileset" BUILD rule.
- */
-@SkylarkModule(
- name = "FilesetEntry",
- doc = "",
- documented = false)
-public interface FilesetEntryApi {
-}
+/** A value object used to represent an entry inside a "Fileset" BUILD rule. */
+@SkylarkModule(name = "FilesetEntry", doc = "", documented = false)
+public interface FilesetEntryApi extends SkylarkValue {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FragmentCollectionApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FragmentCollectionApi.java
index c264b01..1401f18 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FragmentCollectionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FragmentCollectionApi.java
@@ -16,6 +16,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.ClassObject;
/** Represents a collection of configuration fragments in Skylark. */
@@ -31,4 +32,4 @@
+ "ex:</p><code>ctx.fragments.apple</code></p>"
+ "Note that rules have to declare their required fragments in order to access them "
+ "(see <a href=\"../rules.md#fragments\">here</a>).")
-public interface FragmentCollectionApi extends ClassObject {}
+public interface FragmentCollectionApi extends ClassObject, SkylarkValue {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/ProtoConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/ProtoConfigurationApi.java
index 6082ba8..73f0f9e 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/ProtoConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/ProtoConfigurationApi.java
@@ -16,14 +16,11 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-/**
- * A configuration fragment representing protocol buffers.
- */
+/** A configuration fragment representing protocol buffers. */
@SkylarkModule(
name = "proto",
category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT,
- doc = "A configuration fragment representing protocol buffers."
-)
-public interface ProtoConfigurationApi {
-}
+ doc = "A configuration fragment representing protocol buffers.")
+public interface ProtoConfigurationApi extends SkylarkValue {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/RunfilesApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/RunfilesApi.java
index cdc9de0..e43073c 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/RunfilesApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/RunfilesApi.java
@@ -19,13 +19,14 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/** An interface for a set of runfiles. */
@SkylarkModule(
name = "runfiles",
category = SkylarkModuleCategory.BUILTIN,
doc = "An interface for a set of runfiles.")
-public interface RunfilesApi {
+public interface RunfilesApi extends SkylarkValue {
@SkylarkCallable(
name = "files",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkCommandLineApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkCommandLineApi.java
index 2aaeb7a..2d14e41 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkCommandLineApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkCommandLineApi.java
@@ -18,6 +18,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.skylarkinterface.StarlarkDeprecated;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
@@ -29,7 +30,7 @@
category = SkylarkModuleCategory.TOP_LEVEL_TYPE,
doc = "Deprecated. Module for creating memory efficient command lines.")
@StarlarkDeprecated
-public interface SkylarkCommandLineApi {
+public interface SkylarkCommandLineApi extends SkylarkValue {
@SkylarkCallable(
name = "join_paths",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkNativeModuleApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkNativeModuleApi.java
index 228b838..e4c9d0a 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkNativeModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkNativeModuleApi.java
@@ -19,15 +19,14 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.Runtime;
import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.StarlarkThread;
-/**
- * Interface for a module with native rule and package helper functions.
- */
+/** Interface for a module with native rule and package helper functions. */
@SkylarkModule(
name = "native",
category = SkylarkModuleCategory.BUILTIN,
@@ -38,9 +37,8 @@
+ "Note that the native module is only available in the loading phase "
+ "(i.e. for macros, not for rule implementations). Attributes will ignore "
+ "<code>None</code> values, and treat them as if the attribute was unset.<br>"
- + "The following functions are also available:"
-)
-public interface SkylarkNativeModuleApi {
+ + "The following functions are also available:")
+public interface SkylarkNativeModuleApi extends SkylarkValue {
@SkylarkCallable(
name = "glob",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/TargetApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/TargetApi.java
index 549e864..9bfdc5a 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/TargetApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/TargetApi.java
@@ -17,12 +17,11 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-/**
- * A node in the build dependency graph, identified by a Label.
- */
+/** A node in the build dependency graph, identified by a Label. */
@SkylarkModule(name = "target", doc = "", documented = false)
-public interface TargetApi {
+public interface TargetApi extends SkylarkValue {
/**
* Returns the label of this target. (e.g. "//foo:bar")
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/TransitiveInfoCollectionApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/TransitiveInfoCollectionApi.java
index 790ac7d..967c4f1 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/TransitiveInfoCollectionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/TransitiveInfoCollectionApi.java
@@ -18,36 +18,29 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
-/**
- * Interface for a build target.
- */
+/** Interface for a build target. */
@SkylarkModule(
- name = "Target",
- category = SkylarkModuleCategory.BUILTIN,
- doc =
- "A BUILD target. It is essentially a <code>struct</code> with the following fields:"
- + "<ul>"
- + "<li><h3 id=\"modules.Target.label\">label</h3><code><a class=\"anchor\" "
- + "href=\"Label.html\">Label</a> Target.label</code><br>The identifier of the "
- + "target.</li>"
- + "<li><h3 id=\"modules.Target.files\">files</h3><code><a class=\"anchor\" "
- + "href=\"depset.html\">depset</a> Target.files </code><br>The set of "
- + "<a class=\"anchor\" href=\"File.html\">File</a>s produced directly by this "
- + "target.</li>"
- + "<li><h3 id=\"modules.Target.aspect_ids\">aspect_ids</h3><code><a class=\"anchor\""
- + "href=\"list.html\">list</a> Target.aspect_ids </code><br>The list of "
- + "<a class=\"anchor\" href=\"ctx.html#aspect_id\">aspect_id</a>s applied to this "
- + "target.</li>"
- + "<li><h3 id=\"modules.Target.extraproviders\">Extra providers</h3>For rule targets all "
- + "additional providers provided by this target are accessible as <code>struct</code> "
- + "fields. These extra providers are defined in the <code>struct</code> returned by the "
- + "rule implementation function.</li>"
- + "</ul>"
-)
-public interface TransitiveInfoCollectionApi {
+ name = "Target",
+ category = SkylarkModuleCategory.BUILTIN,
+ doc =
+ "A BUILD target. It is essentially a <code>struct</code> with the following fields:"
+ + "<ul><li><h3 id=\"modules.Target.label\">label</h3><code><a class=\"anchor\""
+ + " href=\"Label.html\">Label</a> Target.label</code><br>The identifier of the "
+ + "target.</li><li><h3 id=\"modules.Target.files\">files</h3><code><a class=\"anchor\""
+ + " href=\"depset.html\">depset</a> Target.files </code><br>The set of <a"
+ + " class=\"anchor\" href=\"File.html\">File</a>s produced directly by this "
+ + "target.</li><li><h3 id=\"modules.Target.aspect_ids\">aspect_ids</h3><code><a"
+ + " class=\"anchor\"href=\"list.html\">list</a> Target.aspect_ids </code><br>The list"
+ + " of <a class=\"anchor\" href=\"ctx.html#aspect_id\">aspect_id</a>s applied to this "
+ + "target.</li><li><h3 id=\"modules.Target.extraproviders\">Extra providers</h3>For"
+ + " rule targets all additional providers provided by this target are accessible as"
+ + " <code>struct</code> fields. These extra providers are defined in the"
+ + " <code>struct</code> returned by the rule implementation function.</li></ul>")
+public interface TransitiveInfoCollectionApi extends SkylarkValue {
@SkylarkCallable(
name = "output_group",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBinaryDataSettingsApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBinaryDataSettingsApi.java
index 3cc126f..92ff890 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBinaryDataSettingsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBinaryDataSettingsApi.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.skylarkbuildapi.android;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/** Wraps common settings for working with android binary assets, resources, and manifests. */
@SkylarkModule(
@@ -24,4 +25,4 @@
+ "Wraps common settings for working with android binary assets, resources, and "
+ "manifest",
documented = false)
-public interface AndroidBinaryDataSettingsApi {}
+public interface AndroidBinaryDataSettingsApi extends SkylarkValue {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidConfigurationApi.java
index 404c2ad..363fb69 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidConfigurationApi.java
@@ -17,6 +17,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/** Configuration fragment for Android rules. */
@SkylarkModule(
@@ -27,7 +28,7 @@
+ "A configuration fragment for Android.",
documented = false,
category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT)
-public interface AndroidConfigurationApi {
+public interface AndroidConfigurationApi extends SkylarkValue {
@SkylarkCallable(
name = "android_cpu",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDataContextApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDataContextApi.java
index f6bfc56..2a03d90 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDataContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDataContextApi.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.skylarkbuildapi.android;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
* Wraps common tools and settings used for working with Android assets, resources, and manifests.
@@ -26,4 +27,4 @@
+ "Wraps common tools and settings used for working with Android assets, resources, and"
+ " manifests",
documented = false)
-public interface AndroidDataContextApi {}
+public interface AndroidDataContextApi extends SkylarkValue {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDataProcessingApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDataProcessingApi.java
index c3a26cf..920778f 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDataProcessingApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDataProcessingApi.java
@@ -22,6 +22,7 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.SkylarkList;
@@ -38,16 +39,17 @@
+ "This API is non-final and subject to change without warning; do not rely on it.",
documented = false)
public interface AndroidDataProcessingApi<
- AndroidDataContextT extends AndroidDataContextApi,
- TransitiveInfoCollectionT extends TransitiveInfoCollectionApi,
- FileT extends FileApi,
- SpecialFileT extends FileApi,
- AndroidAssetsInfoT extends AndroidAssetsInfoApi<?, ?>,
- AndroidResourcesInfoT extends AndroidResourcesInfoApi<?, ?, ?>,
- AndroidManifestInfoT extends AndroidManifestInfoApi<?>,
- AndroidLibraryAarInfoT extends AndroidLibraryAarInfoApi<?>,
- AndroidBinaryDataInfoT extends AndroidBinaryDataInfoApi<?>,
- ValidatedAndroidDataT extends ValidatedAndroidDataApi<?, ?>> {
+ AndroidDataContextT extends AndroidDataContextApi,
+ TransitiveInfoCollectionT extends TransitiveInfoCollectionApi,
+ FileT extends FileApi,
+ SpecialFileT extends FileApi,
+ AndroidAssetsInfoT extends AndroidAssetsInfoApi<?, ?>,
+ AndroidResourcesInfoT extends AndroidResourcesInfoApi<?, ?, ?>,
+ AndroidManifestInfoT extends AndroidManifestInfoApi<?>,
+ AndroidLibraryAarInfoT extends AndroidLibraryAarInfoApi<?>,
+ AndroidBinaryDataInfoT extends AndroidBinaryDataInfoApi<?>,
+ ValidatedAndroidDataT extends ValidatedAndroidDataApi<?, ?>>
+ extends SkylarkValue {
@SkylarkCallable(
name = "assets_from_deps",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidManifestApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidManifestApi.java
index 5ebe825..1049f13 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidManifestApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidManifestApi.java
@@ -15,6 +15,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/** Wraps an Android Manifest and provides utilities for working with it */
@SkylarkModule(
@@ -25,4 +26,4 @@
+ "Wraps an Android Manifest and provides utilities to work with it.",
documented = false,
category = SkylarkModuleCategory.PROVIDER)
-public interface AndroidManifestApi {}
+public interface AndroidManifestApi extends SkylarkValue {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkApiProviderApi.java
index be95a45..4649889 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkApiProviderApi.java
@@ -21,6 +21,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import javax.annotation.Nullable;
/**
@@ -38,7 +39,7 @@
+ "provides this struct, accessible as a <code>android</code> field on a "
+ "<a href=\"Target.html\">target</a>.",
documented = false)
-public interface AndroidSkylarkApiProviderApi<FileT extends FileApi> {
+public interface AndroidSkylarkApiProviderApi<FileT extends FileApi> extends SkylarkValue {
@SkylarkCallable(
name = "apk",
@@ -152,7 +153,7 @@
+ "it, you will be broken when it is removed."
+ "Provides access to information about Android rules.",
documented = false)
- interface IdlInfoApi<FileT extends FileApi> {
+ interface IdlInfoApi<FileT extends FileApi> extends SkylarkValue {
@SkylarkCallable(
name = "import_root",
structField = true,
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkCommonApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkCommonApi.java
index 76c6bd1..ab0d5d2 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkCommonApi.java
@@ -18,6 +18,7 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
/** Common utilities for Skylark rules related to Android. */
@@ -28,7 +29,8 @@
+ "you will be broken when it is removed."
+ "Common utilities and functionality related to Android rules.",
documented = false)
-public interface AndroidSkylarkCommonApi<FileT extends FileApi, JavaInfoT extends JavaInfoApi<?>> {
+public interface AndroidSkylarkCommonApi<FileT extends FileApi, JavaInfoT extends JavaInfoApi<?>>
+ extends SkylarkValue {
@SkylarkCallable(
name = "create_device_broker_info",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/DataBindingV2ProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/DataBindingV2ProviderApi.java
index bf9e66a..b7f4f9d 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/DataBindingV2ProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/DataBindingV2ProviderApi.java
@@ -22,6 +22,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.SkylarkList;
import javax.annotation.Nullable;
@@ -49,7 +50,7 @@
"Do not use this module. It is intended for migration purposes only. If you depend on "
+ "it, you will be broken when it is removed.",
documented = false)
- public class LabelJavaPackagePair {
+ public class LabelJavaPackagePair implements SkylarkValue {
private final String label;
private final String javaPackage;
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ParsedAndroidAssetsApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ParsedAndroidAssetsApi.java
index f8e772d..1b2b7d1 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ParsedAndroidAssetsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ParsedAndroidAssetsApi.java
@@ -15,6 +15,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/** Parsed Android assets which can be merged together with assets from dependencies. */
@SkylarkModule(
@@ -25,4 +26,4 @@
+ "Information about the Android assets provided by a rule.",
documented = false,
category = SkylarkModuleCategory.PROVIDER)
-public interface ParsedAndroidAssetsApi {}
+public interface ParsedAndroidAssetsApi extends SkylarkValue {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ValidatedAndroidDataApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ValidatedAndroidDataApi.java
index 30fb3a6..3e89181 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ValidatedAndroidDataApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ValidatedAndroidDataApi.java
@@ -17,6 +17,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
import javax.annotation.Nullable;
@@ -31,12 +32,13 @@
documented = false,
category = SkylarkModuleCategory.PROVIDER)
public interface ValidatedAndroidDataApi<
- FileT extends FileApi,
- AndroidResourcesInfoT extends
- AndroidResourcesInfoApi<
- FileT,
- ? extends ValidatedAndroidDataApi<FileT, AndroidResourcesInfoT>,
- ? extends AndroidManifestInfoApi<FileT>>> {
+ FileT extends FileApi,
+ AndroidResourcesInfoT extends
+ AndroidResourcesInfoApi<
+ FileT,
+ ? extends ValidatedAndroidDataApi<FileT, AndroidResourcesInfoT>,
+ ? extends AndroidManifestInfoApi<FileT>>>
+ extends SkylarkValue {
@SkylarkCallable(
name = "to_provider",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleCommonApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleCommonApi.java
index 7f646f6..5a7c2e6 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleCommonApi.java
@@ -25,6 +25,7 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.SkylarkList;
@@ -36,10 +37,11 @@
name = "apple_common",
doc = "Functions for Starlark to access internals of the apple rule implementations.")
public interface AppleCommonApi<
- FileApiT extends FileApi,
- ObjcProviderApiT extends ObjcProviderApi<?>,
- XcodeConfigProviderApiT extends XcodeConfigProviderApi<?, ?>,
- ApplePlatformApiT extends ApplePlatformApi> {
+ FileApiT extends FileApi,
+ ObjcProviderApiT extends ObjcProviderApi<?>,
+ XcodeConfigProviderApiT extends XcodeConfigProviderApi<?, ?>,
+ ApplePlatformApiT extends ApplePlatformApi>
+ extends SkylarkValue {
@SkylarkCallable(
name = "apple_toolchain",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleConfigurationApi.java
index 8d5e042..8a7a8c6 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleConfigurationApi.java
@@ -18,15 +18,16 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.skylarkinterface.StarlarkDeprecated;
/** An interface for a configuration type containing info for Apple platforms and tools. */
@SkylarkModule(
name = "apple",
doc = "A configuration fragment for Apple platforms.",
- category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT
-)
-public interface AppleConfigurationApi<ApplePlatformTypeApiT extends ApplePlatformTypeApi> {
+ category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT)
+public interface AppleConfigurationApi<ApplePlatformTypeApiT extends ApplePlatformTypeApi>
+ extends SkylarkValue {
@SkylarkCallable(
name = "ios_cpu",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleToolchainApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleToolchainApi.java
index e097692..14698ea 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleToolchainApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleToolchainApi.java
@@ -17,15 +17,14 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-/**
- * Interface for a utility module involving the Apple toolchain.
- */
+/** Interface for a utility module involving the Apple toolchain. */
@SkylarkModule(
name = "apple_toolchain",
- doc = "Utilities for resolving items from the Apple toolchain."
-)
-public interface AppleToolchainApi<AppleConfigurationApiT extends AppleConfigurationApi<?>> {
+ doc = "Utilities for resolving items from the Apple toolchain.")
+public interface AppleToolchainApi<AppleConfigurationApiT extends AppleConfigurationApi<?>>
+ extends SkylarkValue {
@SkylarkCallable(
name = "sdk_dir",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/J2ObjcConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/J2ObjcConfigurationApi.java
index 0af2f36..b4be93d 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/J2ObjcConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/J2ObjcConfigurationApi.java
@@ -18,16 +18,14 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-/**
- * A configuration fragment for j2objc.
- */
+/** A configuration fragment for j2objc. */
@SkylarkModule(
name = "j2objc",
category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT,
- doc = "A configuration fragment for j2Objc."
-)
-public interface J2ObjcConfigurationApi {
+ doc = "A configuration fragment for j2Objc.")
+public interface J2ObjcConfigurationApi extends SkylarkValue {
@SkylarkCallable(
name = "translation_flags",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/ObjcConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/ObjcConfigurationApi.java
index 1109e45..88e50aa 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/ObjcConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/ObjcConfigurationApi.java
@@ -19,17 +19,16 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import javax.annotation.Nullable;
-/**
- * A configuration fragment for Objective C.
- */
+/** A configuration fragment for Objective C. */
@SkylarkModule(
- name = "objc",
- category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT,
- doc = "A configuration fragment for Objective-C."
-)
-public interface ObjcConfigurationApi<ApplePlatformTypeApiT extends ApplePlatformTypeApi> {
+ name = "objc",
+ category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT,
+ doc = "A configuration fragment for Objective-C.")
+public interface ObjcConfigurationApi<ApplePlatformTypeApiT extends ApplePlatformTypeApi>
+ extends SkylarkValue {
@SkylarkCallable(
name = "ios_simulator_device",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/SwiftConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/SwiftConfigurationApi.java
index bfea060..24d5057 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/SwiftConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/SwiftConfigurationApi.java
@@ -18,16 +18,14 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-/**
- * A configuration fragment for Swift tools.
- */
+/** A configuration fragment for Swift tools. */
@SkylarkModule(
name = "swift",
doc = "A configuration fragment for Swift tools.",
- category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT
-)
-public interface SwiftConfigurationApi {
+ category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT)
+public interface SwiftConfigurationApi extends SkylarkValue {
@SkylarkCallable(
name = "copts",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigSkylarkCommonApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigSkylarkCommonApi.java
index 73fee38..7127909 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigSkylarkCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigSkylarkCommonApi.java
@@ -17,12 +17,13 @@
import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/** Helper utility containing functions regarding configurations.ss */
@SkylarkModule(
name = "config_common",
doc = "Functions for Starlark to interact with Blaze's configurability APIs.")
-public interface ConfigSkylarkCommonApi {
+public interface ConfigSkylarkCommonApi extends SkylarkValue {
@SkylarkCallable(
name = "FeatureFlagInfo",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java
index fb0df89..bda0516 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java
@@ -17,6 +17,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
/**
@@ -28,7 +29,7 @@
doc =
"Immutable store of information needed for C++ compilation that is aggregated across "
+ "dependencies.")
-public interface CcCompilationContextApi {
+public interface CcCompilationContextApi extends SkylarkValue {
@SkylarkCallable(
name = "defines",
doc =
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationOutputsApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationOutputsApi.java
index fcb1196..fe5b519 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationOutputsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationOutputsApi.java
@@ -20,6 +20,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.StarlarkThread;
@@ -30,7 +31,7 @@
category = SkylarkModuleCategory.BUILTIN,
documented = true,
doc = "Helper class containing CC compilation outputs.")
-public interface CcCompilationOutputsApi<FileT extends FileApi> {
+public interface CcCompilationOutputsApi<FileT extends FileApi> extends SkylarkValue {
/** @deprecated use {@link #getSkylarkObjects} or {@link #getSkylarkPicObjects}. */
@SkylarkCallable(
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingContextApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingContextApi.java
index bdba1bc..51fa062 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingContextApi.java
@@ -18,6 +18,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
@@ -30,7 +31,7 @@
doc =
"Immutable store of information needed for C++ linking that is aggregated across "
+ "dependencies.")
-public interface CcLinkingContextApi<FileT extends FileApi> {
+public interface CcLinkingContextApi<FileT extends FileApi> extends SkylarkValue {
@SkylarkCallable(
name = "user_link_flags",
doc = "Returns the list of user link flags passed as strings.",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingOutputsApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingOutputsApi.java
index 71286aa..bae0f35 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingOutputsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingOutputsApi.java
@@ -18,6 +18,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/** Interface for a structured representation of the linking outputs of a C++ rule. */
@SkylarkModule(
@@ -25,7 +26,7 @@
category = SkylarkModuleCategory.BUILTIN,
documented = true,
doc = "Helper class containing CC compilation outputs.")
-public interface CcLinkingOutputsApi<FileT extends FileApi> {
+public interface CcLinkingOutputsApi<FileT extends FileApi> extends SkylarkValue {
@SkylarkCallable(
name = "library_to_link",
structField = true,
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
index 542e951..668a934 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
@@ -24,6 +24,7 @@
import com.google.devtools.build.lib.skylarkinterface.ParamType;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.Runtime.NoneType;
import com.google.devtools.build.lib.syntax.SkylarkDict;
@@ -38,18 +39,19 @@
name = "cc_common",
doc = "Utilities for C++ compilation, linking, and command line generation.")
public interface CcModuleApi<
- SkylarkActionFactoryT extends SkylarkActionFactoryApi,
- FileT extends FileApi,
- CcToolchainProviderT extends CcToolchainProviderApi<?>,
- FeatureConfigurationT extends FeatureConfigurationApi,
- CompilationContextT extends CcCompilationContextApi,
- LinkerInputT extends LinkerInputApi<LibraryToLinkT, FileT>,
- LinkingContextT extends CcLinkingContextApi<?>,
- LibraryToLinkT extends LibraryToLinkApi<FileT>,
- CcToolchainVariablesT extends CcToolchainVariablesApi,
- SkylarkRuleContextT extends SkylarkRuleContextApi,
- CcToolchainConfigInfoT extends CcToolchainConfigInfoApi,
- CompilationOutputsT extends CcCompilationOutputsApi<FileT>> {
+ SkylarkActionFactoryT extends SkylarkActionFactoryApi,
+ FileT extends FileApi,
+ CcToolchainProviderT extends CcToolchainProviderApi<?>,
+ FeatureConfigurationT extends FeatureConfigurationApi,
+ CompilationContextT extends CcCompilationContextApi,
+ LinkerInputT extends LinkerInputApi<LibraryToLinkT, FileT>,
+ LinkingContextT extends CcLinkingContextApi<?>,
+ LibraryToLinkT extends LibraryToLinkApi<FileT>,
+ CcToolchainVariablesT extends CcToolchainVariablesApi,
+ SkylarkRuleContextT extends SkylarkRuleContextApi,
+ CcToolchainConfigInfoT extends CcToolchainConfigInfoApi,
+ CompilationOutputsT extends CcCompilationOutputsApi<FileT>>
+ extends SkylarkValue {
@SkylarkCallable(
name = "CcToolchainInfo",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcSkylarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcSkylarkApiProviderApi.java
index 79fe8a1..3788c1b 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcSkylarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcSkylarkApiProviderApi.java
@@ -20,19 +20,17 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-/**
- * Object with information about C++ rules. Every C++-related target should provide this.
- */
+/** Object with information about C++ rules. Every C++-related target should provide this. */
@SkylarkModule(
- name = "CcSkylarkApiProvider",
- category = SkylarkModuleCategory.PROVIDER,
- doc =
- "Provides access to information about C++ rules. "
- + "Every C++-related target provides this struct, accessible as a <code>cc</code> field "
- + "on <a href=\"Target.html\">target</a>."
-)
-public interface CcSkylarkApiProviderApi<FileT extends FileApi> {
+ name = "CcSkylarkApiProvider",
+ category = SkylarkModuleCategory.PROVIDER,
+ doc =
+ "Provides access to information about C++ rules. Every C++-related target provides this"
+ + " struct, accessible as a <code>cc</code> field on <a"
+ + " href=\"Target.html\">target</a>.")
+public interface CcSkylarkApiProviderApi<FileT extends FileApi> extends SkylarkValue {
@SkylarkCallable(
name = "transitive_headers",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainVariablesApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainVariablesApi.java
index 2ac30a3..6718b29 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainVariablesApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainVariablesApi.java
@@ -16,6 +16,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/** Type encapsulating build variables. */
@SkylarkModule(
@@ -23,4 +24,4 @@
documented = false,
category = SkylarkModuleCategory.BUILTIN,
doc = "Class encapsulating cc_toolchain variables.")
-public interface CcToolchainVariablesApi {}
+public interface CcToolchainVariablesApi extends SkylarkValue {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CompilationInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CompilationInfoApi.java
index a408159..9dd0594 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CompilationInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CompilationInfoApi.java
@@ -17,17 +17,15 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-/**
- * Interface for a helper class containing CC compilation providers.
- */
+/** Interface for a helper class containing CC compilation providers. */
@SkylarkModule(
name = "compilation_info",
documented = false,
category = SkylarkModuleCategory.BUILTIN,
- doc = "Helper class containing CC compilation providers."
-)
-public interface CompilationInfoApi {
+ doc = "Helper class containing CC compilation providers.")
+public interface CompilationInfoApi extends SkylarkValue {
@SkylarkCallable(name = "cc_compilation_outputs", structField = true, documented = false)
CcCompilationOutputsApi<?> getCcCompilationOutputs();
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CppConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CppConfigurationApi.java
index 55f2d43..dd403a1 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CppConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CppConfigurationApi.java
@@ -18,17 +18,16 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
-/**
- * The C++ configuration fragment.
- */
+/** The C++ configuration fragment. */
@SkylarkModule(
- name = "cpp",
- doc = "A configuration fragment for C++.",
- category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT
-)
-public interface CppConfigurationApi <InvalidConfigurationExceptionT extends Exception> {
+ name = "cpp",
+ doc = "A configuration fragment for C++.",
+ category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT)
+public interface CppConfigurationApi<InvalidConfigurationExceptionT extends Exception>
+ extends SkylarkValue {
@SkylarkCallable(
name = "copts",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/FeatureConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/FeatureConfigurationApi.java
index a406c6e..c99e7bf 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/FeatureConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/FeatureConfigurationApi.java
@@ -16,10 +16,11 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/** Class used to construct command lines from CROSSTOOL features. */
@SkylarkModule(
name = "FeatureConfiguration",
category = SkylarkModuleCategory.BUILTIN,
doc = "Class used to construct command lines from CROSSTOOL features.")
-public interface FeatureConfigurationApi {}
+public interface FeatureConfigurationApi extends SkylarkValue {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LibraryToLinkApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LibraryToLinkApi.java
index 05eac498..1bfc17f 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LibraryToLinkApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LibraryToLinkApi.java
@@ -18,6 +18,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkList;
/**
@@ -28,7 +29,7 @@
name = "LibraryToLink",
category = SkylarkModuleCategory.BUILTIN,
doc = "A library the user can link against.")
-public interface LibraryToLinkApi<FileT extends FileApi> {
+public interface LibraryToLinkApi<FileT extends FileApi> extends SkylarkValue {
@SkylarkCallable(
name = "objects",
allowReturnNones = true,
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkerInputApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkerInputApi.java
index 10371d6..a82f769 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkerInputApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkerInputApi.java
@@ -20,6 +20,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
@@ -31,7 +32,8 @@
category = SkylarkModuleCategory.BUILTIN,
doc = "Either libraries, flags or other files that may be passed to the linker as inputs.")
public interface LinkerInputApi<
- LibraryToLinkT extends LibraryToLinkApi<FileT>, FileT extends FileApi> {
+ LibraryToLinkT extends LibraryToLinkApi<FileT>, FileT extends FileApi>
+ extends SkylarkValue {
@SkylarkCallable(
name = "owner",
doc = "Returns the owner of this LinkerInput.",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkingInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkingInfoApi.java
index 3dbc4b4..7cf889c 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkingInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkingInfoApi.java
@@ -17,17 +17,15 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-/**
- * Helper object containing CC linking info objects.
- */
+/** Helper object containing CC linking info objects. */
@SkylarkModule(
- name = "linking_info",
- documented = false,
- category = SkylarkModuleCategory.BUILTIN,
- doc = "Helper class containing CC linking providers."
-)
-public interface LinkingInfoApi {
+ name = "linking_info",
+ documented = false,
+ category = SkylarkModuleCategory.BUILTIN,
+ doc = "Helper class containing CC linking providers.")
+public interface LinkingInfoApi extends SkylarkValue {
@SkylarkCallable(name = "linking_context", structField = true, documented = false)
CcLinkingContextApi<?> getCcLinkingContext();
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java
index 07c7be6..27eede4 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java
@@ -21,6 +21,7 @@
import com.google.devtools.build.lib.skylarkinterface.ParamType;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.Runtime.NoneType;
import com.google.devtools.build.lib.syntax.SkylarkList;
@@ -35,13 +36,14 @@
*/
@SkylarkModule(name = "WrapCcHelperDoNotUse", doc = "", documented = false)
public interface WrapCcHelperApi<
- FeatureConfigurationT extends FeatureConfigurationApi,
- SkylarkRuleContextT extends SkylarkRuleContextApi,
- CcToolchainProviderT extends CcToolchainProviderApi<FeatureConfigurationT>,
- CompilationInfoT extends CompilationInfoApi,
- FileT extends FileApi,
- CcCompilationContextT extends CcCompilationContextApi,
- WrapCcIncludeProviderT extends WrapCcIncludeProviderApi> {
+ FeatureConfigurationT extends FeatureConfigurationApi,
+ SkylarkRuleContextT extends SkylarkRuleContextApi,
+ CcToolchainProviderT extends CcToolchainProviderApi<FeatureConfigurationT>,
+ CompilationInfoT extends CompilationInfoApi,
+ FileT extends FileApi,
+ CcCompilationContextT extends CcCompilationContextApi,
+ WrapCcIncludeProviderT extends WrapCcIncludeProviderApi>
+ extends SkylarkValue {
@SkylarkCallable(
name = "feature_configuration",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoConfigurationApi.java
index 3a72cd3..d896d56 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoConfigurationApi.java
@@ -16,10 +16,11 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/** A configuration fragment for Go. */
@SkylarkModule(
name = "go",
doc = "A configuration fragment for Go.",
category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT)
-public interface GoConfigurationApi {}
+public interface GoConfigurationApi extends SkylarkValue {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaAnnotationProcessingApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaAnnotationProcessingApi.java
index 5fb7905..6be778c 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaAnnotationProcessingApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaAnnotationProcessingApi.java
@@ -20,6 +20,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import javax.annotation.Nullable;
/**
@@ -30,7 +31,7 @@
name = "java_annotation_processing",
category = SkylarkModuleCategory.BUILTIN,
doc = "Information about jars that are a result of annotation processing for a Java rule.")
-public interface JavaAnnotationProcessingApi<FileTypeT extends FileApi> {
+public interface JavaAnnotationProcessingApi<FileTypeT extends FileApi> extends SkylarkValue {
@SkylarkCallable(
name = "enabled",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCcLinkParamsProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCcLinkParamsProviderApi.java
index 31b659d..23295ba 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCcLinkParamsProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCcLinkParamsProviderApi.java
@@ -21,6 +21,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
@@ -33,7 +34,7 @@
+ "Information about the c++ libraries to be linked into Java targets.",
documented = true,
category = SkylarkModuleCategory.PROVIDER)
-public interface JavaCcLinkParamsProviderApi<CcInfoApiT extends CcInfoApi> {
+public interface JavaCcLinkParamsProviderApi<CcInfoApiT extends CcInfoApi> extends SkylarkValue {
/** Name of this info object. */
public static String NAME = "JavaCcLinkParamsInfo";
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java
index 99d5d90..bdeacba 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java
@@ -25,6 +25,7 @@
import com.google.devtools.build.lib.skylarkinterface.ParamType;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
@@ -35,12 +36,13 @@
/** Utilities for Java compilation support in Skylark. */
@SkylarkModule(name = "java_common", doc = "Utilities for Java compilation support in Starlark.")
public interface JavaCommonApi<
- FileT extends FileApi,
- JavaInfoT extends JavaInfoApi<FileT>,
- JavaToolchainT extends JavaToolchainSkylarkApiProviderApi,
- JavaRuntimeT extends JavaRuntimeInfoApi,
- SkylarkRuleContextT extends SkylarkRuleContextApi,
- SkylarkActionFactoryT extends SkylarkActionFactoryApi> {
+ FileT extends FileApi,
+ JavaInfoT extends JavaInfoApi<FileT>,
+ JavaToolchainT extends JavaToolchainSkylarkApiProviderApi,
+ JavaRuntimeT extends JavaRuntimeInfoApi,
+ SkylarkRuleContextT extends SkylarkRuleContextApi,
+ SkylarkActionFactoryT extends SkylarkActionFactoryApi>
+ extends SkylarkValue {
@SkylarkCallable(
name = "provider",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCompilationInfoProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCompilationInfoProviderApi.java
index b344eef..7127cbe 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCompilationInfoProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCompilationInfoProviderApi.java
@@ -19,6 +19,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
/** Info object for compilation information for java rules. */
@@ -26,7 +27,7 @@
name = "java_compilation_info",
category = SkylarkModuleCategory.PROVIDER,
doc = "Provides access to compilation information for Java rules.")
-public interface JavaCompilationInfoProviderApi<FileT extends FileApi> {
+public interface JavaCompilationInfoProviderApi<FileT extends FileApi> extends SkylarkValue {
@SkylarkCallable(name = "javac_options", structField = true, doc = "Options to java compiler.")
public ImmutableList<String> getJavacOpts();
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaConfigurationApi.java
index 7f314cd..78ab970 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaConfigurationApi.java
@@ -19,16 +19,14 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-/**
- * A java compiler configuration.
- */
+/** A java compiler configuration. */
@SkylarkModule(
name = "java",
doc = "A java compiler configuration.",
- category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT
-)
-public interface JavaConfigurationApi {
+ category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT)
+public interface JavaConfigurationApi extends SkylarkValue {
@SkylarkCallable(name = "default_javac_flags", structField = true,
doc = "The default flags for the Java compiler.")
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaProtoCommonApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaProtoCommonApi.java
index e06096f..7679b52 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaProtoCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaProtoCommonApi.java
@@ -20,15 +20,16 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
-/**
- * Helper class for Java proto compilation.
- */
+/** Helper class for Java proto compilation. */
@SkylarkModule(name = "java_proto_common", doc = "Helper class for Java proto compilation.")
-public interface JavaProtoCommonApi<FileT extends FileApi,
- SkylarkRuleContextT extends SkylarkRuleContextApi,
- TransitiveInfoCollectionT extends TransitiveInfoCollectionApi> {
+public interface JavaProtoCommonApi<
+ FileT extends FileApi,
+ SkylarkRuleContextT extends SkylarkRuleContextApi,
+ TransitiveInfoCollectionT extends TransitiveInfoCollectionApi>
+ extends SkylarkValue {
@SkylarkCallable(
name = "create_java_lite_proto_compile_action",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuleOutputJarsProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuleOutputJarsProviderApi.java
index 778a1bf..faadd82 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuleOutputJarsProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuleOutputJarsProviderApi.java
@@ -19,13 +19,15 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/** Info object about outputs of a Java rule. */
@SkylarkModule(
name = "java_output_jars",
category = SkylarkModuleCategory.PROVIDER,
doc = "Information about outputs of a Java rule.")
-public interface JavaRuleOutputJarsProviderApi<OutputJarT extends OutputJarApi<?>> {
+public interface JavaRuleOutputJarsProviderApi<OutputJarT extends OutputJarApi<?>>
+ extends SkylarkValue {
@SkylarkCallable(name = "jars", doc = "A list of jars the rule outputs.", structField = true)
public ImmutableList<OutputJarT> getOutputJars();
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeClasspathProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeClasspathProviderApi.java
index 8c80ca8..78261db 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeClasspathProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeClasspathProviderApi.java
@@ -16,11 +16,12 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
/** Provider for the runtime classpath contributions of a Java binary. */
@SkylarkModule(name = "JavaRuntimeClasspathProvider", doc = "", documented = false)
-public interface JavaRuntimeClasspathProviderApi {
+public interface JavaRuntimeClasspathProviderApi extends SkylarkValue {
@SkylarkCallable(name = "runtime_classpath", documented = false, structField = true)
public SkylarkNestedSet /*<File>*/ getRuntimeClasspath();
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaSkylarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaSkylarkApiProviderApi.java
index f100116..c6cd44b 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaSkylarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaSkylarkApiProviderApi.java
@@ -17,6 +17,7 @@
import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.skylarkinterface.StarlarkDeprecated;
/**
@@ -32,4 +33,4 @@
+ " href=\"https://docs.bazel.build/versions/master/skylark/lib/JavaInfo.html\">JavaInfo</a>"
+ " instead.")
@StarlarkDeprecated
-public interface JavaSkylarkApiProviderApi<FileT extends FileApi> {}
+public interface JavaSkylarkApiProviderApi<FileT extends FileApi> extends SkylarkValue {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/OutputJarApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/OutputJarApi.java
index 5ef2cd7..dcc01af 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/OutputJarApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/OutputJarApi.java
@@ -18,6 +18,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkList;
/** A tuple of a java classes jar and its associated source and interface archives. */
@@ -25,7 +26,7 @@
name = "java_output",
category = SkylarkModuleCategory.BUILTIN,
doc = "Java classes jar, together with their associated source and interface archives.")
-public interface OutputJarApi<FileT extends FileApi> {
+public interface OutputJarApi<FileT extends FileApi> extends SkylarkValue {
@SkylarkCallable(
name = "class_jar",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/platform/PlatformCommonApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/platform/PlatformCommonApi.java
index e07a30b..6413346 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/platform/PlatformCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/platform/PlatformCommonApi.java
@@ -17,13 +17,14 @@
import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
/** Module containing functions to interact with the platform APIs. */
@SkylarkModule(
name = "platform_common",
doc = "Functions for Starlark to interact with the platform APIs.")
-public interface PlatformCommonApi {
+public interface PlatformCommonApi extends SkylarkValue {
@SkylarkCallable(
name = "TemplateVariableInfo",
doc =
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/platform/PlatformConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/platform/PlatformConfigurationApi.java
index 06841e9..c2e551f 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/platform/PlatformConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/platform/PlatformConfigurationApi.java
@@ -19,17 +19,15 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import java.util.List;
-/**
- * The platform configuration.
- */
+/** The platform configuration. */
@SkylarkModule(
name = "platform",
doc = "The platform configuration.",
- category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT
-)
-public interface PlatformConfigurationApi {
+ category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT)
+public interface PlatformConfigurationApi extends SkylarkValue {
@SkylarkCallable(name = "host_platform", structField = true, doc = "The current host platform")
Label getHostPlatform();
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/ProtoModuleApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/ProtoModuleApi.java
index 3c36c85..94d9d30 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/ProtoModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/ProtoModuleApi.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.skylarkbuildapi.proto;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
* Interface for protocol buffers support in Bazel.
@@ -30,4 +31,4 @@
+ "to load this symbol from <a href=\"https://github.com/bazelbuild/rules_proto\">"
+ "rules_proto</a>"
+ "</p>")
-public interface ProtoModuleApi {}
+public interface ProtoModuleApi extends SkylarkValue {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python/PyStarlarkTransitionsApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python/PyStarlarkTransitionsApi.java
index 1cd58f3..16295b0 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python/PyStarlarkTransitionsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python/PyStarlarkTransitionsApi.java
@@ -29,7 +29,7 @@
"DO NOT USE. This is intended for Python 2 to 3 migration purposes only. If you depend"
+ " on it, you will be broken when it is removed.",
documented = false)
-public interface PyStarlarkTransitionsApi {
+public interface PyStarlarkTransitionsApi extends SkylarkValue {
@SkylarkCallable(
name = "cfg",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkExecutionResultApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkExecutionResultApi.java
index 0003f55..c0311af 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkExecutionResultApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkExecutionResultApi.java
@@ -17,6 +17,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
* A structure callable from Skylark that stores the result of repository_ctx.execute() method. It
@@ -30,7 +31,7 @@
"A structure storing result of repository_ctx.execute() method. It contains the standard"
+ " output stream content, the standard error stream content and the execution return"
+ " code.")
-public interface SkylarkExecutionResultApi {
+public interface SkylarkExecutionResultApi extends SkylarkValue {
@SkylarkCallable(
name = "return_code",
structField = true,
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkOSApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkOSApi.java
index 7ac322f..51a3b71 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkOSApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkOSApi.java
@@ -18,13 +18,14 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/** A Skylark structure to deliver information about the system we are running on. */
@SkylarkModule(
name = "repository_os",
category = SkylarkModuleCategory.BUILTIN,
doc = "Various data about the current platform Bazel is running on.")
-public interface SkylarkOSApi {
+public interface SkylarkOSApi extends SkylarkValue {
@SkylarkCallable(name = "environ", structField = true, doc = "The list of environment variables.")
public ImmutableMap<String, String> getEnvironmentVariables();
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkRepositoryContextApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkRepositoryContextApi.java
index 4b28d0c..3f7e470 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkRepositoryContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkRepositoryContextApi.java
@@ -22,6 +22,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.SkylarkList;
@@ -34,9 +35,9 @@
"The context of the repository rule containing"
+ " helper functions and information about attributes. You get a repository_ctx object"
+ " as an argument to the <code>implementation</code> function when you create a"
- + " repository rule."
-)
-public interface SkylarkRepositoryContextApi<RepositoryFunctionExceptionT extends Throwable> {
+ + " repository rule.")
+public interface SkylarkRepositoryContextApi<RepositoryFunctionExceptionT extends Throwable>
+ extends SkylarkValue {
@SkylarkCallable(
name = "name",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/test/TestingModuleApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/test/TestingModuleApi.java
index 42d7d5f..c005b20 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/test/TestingModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/test/TestingModuleApi.java
@@ -17,6 +17,7 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.SkylarkDict;
@@ -24,7 +25,7 @@
@SkylarkModule(
name = "testing",
doc = "Helper methods for Starlark to access testing infrastructure.")
-public interface TestingModuleApi {
+public interface TestingModuleApi extends SkylarkValue {
// TODO(bazel-team): Change this function to be the actual ExecutionInfo.PROVIDER.
@SkylarkCallable(
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkModule.java b/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkModule.java
index 6a6c2ac..30a4366 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkModule.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkModule.java
@@ -45,9 +45,11 @@
* them to define different methods, while annotating {@link SkylarkList} allows them to be
* identified as a single type for the purpose of type checking, documentation, and error messages.
*
- * <p>All {@code @SkylarkModule}-annotated types should implement {@link SkylarkValue}. Conversely,
- * all non-abstract implementations of {@link SkylarkValue} should have or inherit a {@code
- * @SkylarkModule} annotation.
+ * <p>All {@code @SkylarkModule}-annotated types must implement {@link SkylarkValue}. Nearly all
+ * non-abstract implementations of {@link SkylarkValue} have or inherit a {@code @SkylarkModule}
+ * annotation. (It is possible, though quite unusual, to declare an implementation of {@code
+ * SkylarkValue} without using the annotation mechanism defined in this package. {@code
+ * StarlarkFunction} is one example.)
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkValue.java b/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkValue.java
index d3f25f8..f44420c 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkValue.java
@@ -14,6 +14,8 @@
package com.google.devtools.build.lib.skylarkinterface;
+import com.google.devtools.build.lib.concurrent.ThreadSafety;
+
/** Base interface for all Starlark values besides boxed Java primitives. */
public interface SkylarkValue {
@@ -63,8 +65,14 @@
* <p>Immutability is deep, i.e. in order for a value to be immutable, all values it is composed
* of must be immutable, too.
*/
+ // TODO(adonovan): eliminate this concept. All uses really need to know is, is it hashable?,
+ // because Starlark values must have stable hashes: a hashable value must either be immutable or
+ // its hash must be part of its identity.
+ // But this must wait until --incompatible_disallow_hashing_frozen_mutables=true is removed.
+ // (see github.com/bazelbuild/bazel/issues/7800)
default boolean isImmutable() {
- return false;
+ // TODO(adonovan): this is an abuse of an unrelated annotation.
+ return getClass().isAnnotationPresent(ThreadSafety.Immutable.class);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessor.java b/src/main/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessor.java
index 0a98d5c..48b7ea7 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessor.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessor.java
@@ -18,6 +18,8 @@
import com.google.common.collect.SetMultimap;
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkGlobalLibrary;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
import java.util.HashSet;
import java.util.List;
@@ -49,19 +51,19 @@
* <li>The method must be non-static.
* <li>If structField=true, there must be zero user-supplied parameters.
* <li>Method parameters must be supplied in the following order:
- * <pre>method([positionals]*[other user-args](Location)(FuncallExpression)(Environment))
+ * <pre>method([positionals]*[other user-args](Location)(FuncallExpression)(StarlarkThread))
* </pre>
- * where Location, FuncallExpression, and Environment are supplied by the interpreter if and
- * only if useLocation, useAst, and useStarlarkThread are specified, respectively.
+ * where Location, FuncallExpression, and StarlarkThread are supplied by the interpreter if
+ * and only if useLocation, useAst, and useStarlarkThread are specified, respectively.
* <li>The number of method parameters must match the number of annotation-declared parameters
* plus the number of interpreter-supplied parameters.
* <li>Each parameter, if explicitly typed, may only use either 'type' or 'allowedTypes', not
* both.
* <li>Parameters may not specify their generic types (they must use the <code>?</code> wildcard
* exclusively.
- * <li>Noneable parameters must have java parameter type Object (as the actual value may be either
- * {@code None} or a value of a non-{@code None} type, which do not share a superclass other
- * than Object (or SkylarkValue, which is typically no more descriptive than Object).
+ * <li>Noneable parameters must have Java parameter type Object, as the actual value may be either
+ * {@code None} or some other value, which do not share a superclass other than Object (or
+ * SkylarkValue, which is typically no more descriptive than Object).
* <li>Each parameter must be positional or named (or both).
* <li>Positional-only parameters must be specified before any named parameters.
* <li>Positional parameters must be specified before any non-positional parameters.
@@ -71,12 +73,18 @@
* <li>Each class may only have one annotated method with selfCall=true.
* <li>A method annotated with selfCall=true must have a non-empty name.
* <li>A method annotated with selfCall=true must have structField=false.
+ * <li>The method's class must implement SkylarkValue.
* </ul>
*
* <p>These properties can be relied upon at runtime without additional checks.
*/
-@SupportedAnnotationTypes({"com.google.devtools.build.lib.skylarkinterface.SkylarkCallable"})
+@SupportedAnnotationTypes({
+ "com.google.devtools.build.lib.skylarkinterface.SkylarkCallable",
+ "com.google.devtools.build.lib.skylarkinterface.SkylarkGlobalLibrary",
+ "com.google.devtools.build.lib.skylarkinterface.SkylarkModule"
+})
public final class SkylarkCallableProcessor extends AbstractProcessor {
+ private ProcessingEnvironment env;
private Messager messager;
// A set containing the names of all classes which have a method with @SkylarkCallable.selfCall.
@@ -90,9 +98,12 @@
"com.google.devtools.build.lib.syntax.SkylarkDict<?,?>";
private static final String LOCATION = "com.google.devtools.build.lib.events.Location";
private static final String AST = "com.google.devtools.build.lib.syntax.FuncallExpression";
- private static final String ENVIRONMENT = "com.google.devtools.build.lib.syntax.StarlarkThread";
+ private static final String STARLARK_THREAD =
+ "com.google.devtools.build.lib.syntax.StarlarkThread";
private static final String STARLARK_SEMANTICS =
"com.google.devtools.build.lib.syntax.StarlarkSemantics";
+ private static final String SKYLARK_VALUE =
+ "com.google.devtools.build.lib.skylarkinterface.SkylarkValue";
@Override
public SourceVersion getSupportedSourceVersion() {
@@ -100,17 +111,41 @@
}
@Override
- public synchronized void init(ProcessingEnvironment processingEnv) {
- super.init(processingEnv);
- messager = processingEnv.getMessager();
+ public synchronized void init(ProcessingEnvironment env) {
+ super.init(env);
+ this.env = env;
+ messager = env.getMessager();
classesWithSelfcall = new HashSet<>();
processedClassMethods = LinkedHashMultimap.create();
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
- for (Element element : roundEnv.getElementsAnnotatedWith(SkylarkCallable.class)) {
+ // Ensure SkylarkModule-annotated classes implement SkylarkValue.
+ TypeElement skylarkValueType = env.getElementUtils().getTypeElement(SKYLARK_VALUE);
+ if (skylarkValueType == null) {
+ messager.printMessage(Diagnostic.Kind.ERROR, "no SkylarkValue type in compilation unit");
+ return true;
+ }
+ for (Element cls : roundEnv.getElementsAnnotatedWith(SkylarkModule.class)) {
+ if (!env.getTypeUtils().isAssignable(cls.asType(), skylarkValueType.asType())) {
+ error(
+ cls,
+ String.format(
+ "class %s has @SkylarkModule annotation but does not implement SkylarkValue",
+ cls.getSimpleName()));
+ }
+ }
+ // TODO(adonovan): reject a SkylarkCallable-annotated method whose class doesn't have (or
+ // inherit) a SkylarkModule documentation annotation.
+
+ // Only SkylarkGlobalLibrary-annotated classes, and those that implement SkylarkValue,
+ // are allowed SkylarkCallable-annotated methods.
+ Set<Element> okClasses =
+ new HashSet<>(roundEnv.getElementsAnnotatedWith(SkylarkGlobalLibrary.class));
+
+ for (Element element : roundEnv.getElementsAnnotatedWith(SkylarkCallable.class)) {
// Only methods are annotated with SkylarkCallable. This is verified by the
// @Target(ElementType.METHOD) annotation.
ExecutableElement methodElement = (ExecutableElement) element;
@@ -136,8 +171,23 @@
verifyFlagToggles(methodElement, annotation);
verifyNoNameConflict(methodElement, annotation);
} catch (SkylarkCallableProcessorException exception) {
+ // TODO(adonovan): don't use exceptions; report multiple errors per pass
+ // as this saves time in compiler-driven refactoring.
error(exception.methodElement, exception.errorMessage);
}
+
+ // Check that the method's class is SkylarkGlobalLibrary-annotated,
+ // or implements SkylarkValue, or an error has already been reported.
+ Element cls = methodElement.getEnclosingElement();
+ if (okClasses.add(cls)
+ && !env.getTypeUtils().isAssignable(cls.asType(), skylarkValueType.asType())) {
+ error(
+ cls,
+ String.format(
+ "method %s has @SkylarkCallable annotation but enclosing class %s does not"
+ + " implement SkylarkValue nor has @SkylarkGlobalLibrary annotation",
+ methodElement.getSimpleName(), cls.getSimpleName()));
+ }
}
return true;
@@ -472,14 +522,14 @@
currentIndex++;
}
if (annotation.useStarlarkThread()) {
- if (!ENVIRONMENT.equals(methodSignatureParams.get(currentIndex).asType().toString())) {
+ if (!STARLARK_THREAD.equals(methodSignatureParams.get(currentIndex).asType().toString())) {
throw new SkylarkCallableProcessorException(
methodElement,
String.format(
"Expected parameter index %d to be the %s type, matching useStarlarkThread, "
+ "but was %s",
currentIndex,
- ENVIRONMENT,
+ STARLARK_THREAD,
methodSignatureParams.get(currentIndex).asType().toString()));
}
currentIndex++;
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
index 08c71f5..370ccd6 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
@@ -162,14 +162,15 @@
}
/**
- * Is this class known to be *recursively* immutable by Skylark?
- * For instance, class Tuple is not it, because it can contain mutable values.
+ * Is this class known to be *recursively* immutable by Skylark? For instance, class Tuple is not
+ * it, because it can contain mutable values.
+ *
* @param c a Class
* @return true if the class is known to represent only recursively immutable values.
*/
// NB: This is used as the basis for accepting objects in SkylarkNestedSet-s,
// as well as for accepting objects as keys for Skylark dict-s.
- static boolean isImmutable(Class<?> c) {
+ private static boolean isImmutable(Class<?> c) {
return c.isAnnotationPresent(Immutable.class) // TODO(bazel-team): beware of containers!
|| c.equals(String.class)
|| c.equals(Integer.class)
@@ -184,6 +185,7 @@
|| c.equals(String.class) // basic values
|| c.equals(Integer.class)
|| c.equals(Boolean.class)
+ // TODO(adonovan): delete those below, and order those above by cost.
// there is a registered Skylark ancestor class (useful e.g. when using AutoValue)
|| SkylarkInterfaceUtils.getSkylarkModule(c) != null
|| ImmutableMap.class.isAssignableFrom(c); // will be converted to SkylarkDict
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
index a81b058..6d6758c 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
@@ -31,6 +31,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkGlobalLibrary;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalUtils.ComparisonException;
import com.google.devtools.build.lib.syntax.SkylarkList.MutableList;
import com.google.devtools.build.lib.syntax.SkylarkList.Tuple;
@@ -1232,7 +1233,7 @@
+ "100 % -7 # -5 (unlike in some other languages)\n"
+ "int(\"18\")\n"
+ "</pre>")
- public static final class IntModule {}
+ static final class IntModule implements SkylarkValue {} // (documentation only)
/** Skylark bool type. */
@SkylarkModule(
@@ -1244,7 +1245,7 @@
+ "<a href=\"globals.html#False\">False</a>. "
+ "Any value can be converted to a boolean using the "
+ "<a href=\"globals.html#bool\">bool</a> function.")
- public static final class BoolModule {}
+ static final class BoolModule implements SkylarkValue {} // (documentation only)
/** Adds bindings for all the builtin functions of this class to the given map builder. */
public static void addBindingsToBuilder(ImmutableMap.Builder<String, Object> builder) {
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java b/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java
index ef57182..3c3e6f6 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java
@@ -24,6 +24,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkList.MutableList;
import com.google.devtools.build.lib.syntax.SkylarkList.Tuple;
import java.util.ArrayList;
@@ -43,30 +44,29 @@
* 'String self' parameter as the first parameter of the method.
*/
@SkylarkModule(
- name = "string",
- category = SkylarkModuleCategory.BUILTIN,
- doc =
- "A language built-in type to support strings. "
- + "Examples of string literals:<br>"
- + "<pre class=\"language-python\">a = 'abc\\ndef'\n"
- + "b = \"ab'cd\"\n"
- + "c = \"\"\"multiline string\"\"\"\n"
- + "\n"
- + "# Strings support slicing (negative index starts from the end):\n"
- + "x = \"hello\"[2:4] # \"ll\"\n"
- + "y = \"hello\"[1:-1] # \"ell\"\n"
- + "z = \"hello\"[:4] # \"hell\""
- + "# Slice steps can be used, too:\n"
- + "s = \"hello\"[::2] # \"hlo\"\n"
- + "t = \"hello\"[3:0:-1] # \"lle\"\n</pre>"
- + "Strings are iterable and support the <code>in</code> operator. Examples:<br>"
- + "<pre class=\"language-python\">\"bc\" in \"abcd\" # evaluates to True\n"
- + "x = [s for s in \"abc\"] # x == [\"a\", \"b\", \"c\"]</pre>\n"
- + "Implicit concatenation of strings is not allowed; use the <code>+</code> "
- + "operator instead. Comparison operators perform a lexicographical comparison; "
- + "use <code>==</code> to test for equality."
-)
-public final class StringModule {
+ name = "string",
+ category = SkylarkModuleCategory.BUILTIN,
+ doc =
+ "A language built-in type to support strings. "
+ + "Examples of string literals:<br>"
+ + "<pre class=\"language-python\">a = 'abc\\ndef'\n"
+ + "b = \"ab'cd\"\n"
+ + "c = \"\"\"multiline string\"\"\"\n"
+ + "\n"
+ + "# Strings support slicing (negative index starts from the end):\n"
+ + "x = \"hello\"[2:4] # \"ll\"\n"
+ + "y = \"hello\"[1:-1] # \"ell\"\n"
+ + "z = \"hello\"[:4] # \"hell\""
+ + "# Slice steps can be used, too:\n"
+ + "s = \"hello\"[::2] # \"hlo\"\n"
+ + "t = \"hello\"[3:0:-1] # \"lle\"\n</pre>"
+ + "Strings are iterable and support the <code>in</code> operator. Examples:<br>"
+ + "<pre class=\"language-python\">\"bc\" in \"abcd\" # evaluates to True\n"
+ + "x = [s for s in \"abc\"] # x == [\"a\", \"b\", \"c\"]</pre>\n"
+ + "Implicit concatenation of strings is not allowed; use the <code>+</code> "
+ + "operator instead. Comparison operators perform a lexicographical comparison; "
+ + "use <code>==</code> to test for equality.")
+public final class StringModule implements SkylarkValue {
private StringModule() {}
@@ -1116,5 +1116,5 @@
return false;
}
- public static final StringModule INSTANCE = new StringModule();
+ static final StringModule INSTANCE = new StringModule();
}
diff --git a/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationFailuresTest.java b/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationFailuresTest.java
index a4d0c20..05962c2 100644
--- a/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationFailuresTest.java
+++ b/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationFailuresTest.java
@@ -19,6 +19,7 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -32,9 +33,8 @@
public final class SkylarkDocumentationFailuresTest {
/** MockClassCommonNameOne */
- @SkylarkModule(name = "MockClassCommonName",
- doc = "MockClassCommonName")
- private static class MockClassCommonNameOne {
+ @SkylarkModule(name = "MockClassCommonName", doc = "MockClassCommonName")
+ private static class MockClassCommonNameOne implements SkylarkValue {
@SkylarkCallable(name = "one", doc = "one")
public Integer one() {
@@ -43,9 +43,8 @@
}
/** MockClassCommonNameTwo */
- @SkylarkModule(name = "MockClassCommonName",
- doc = "MockClassCommonName")
- private static class MockClassCommonNameTwo {
+ @SkylarkModule(name = "MockClassCommonName", doc = "MockClassCommonName")
+ private static class MockClassCommonNameTwo implements SkylarkValue {
@SkylarkCallable(name = "two", doc = "two")
public Integer two() {
@@ -54,9 +53,8 @@
}
/** PointsToCommonName */
- @SkylarkModule(name = "PointsToCommonName",
- doc = "PointsToCommonName")
- private static class PointsToCommonName {
+ @SkylarkModule(name = "PointsToCommonName", doc = "PointsToCommonName")
+ private static class PointsToCommonName implements SkylarkValue {
@SkylarkCallable(name = "one", doc = "one")
public MockClassCommonNameOne getOne() {
return null;
diff --git a/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java b/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java
index f312932..2d89c1a 100644
--- a/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java
+++ b/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java
@@ -26,6 +26,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkGlobalLibrary;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.SkylarkList.MutableList;
@@ -95,7 +96,7 @@
/** MockClassA */
@SkylarkModule(name = "MockClassA", doc = "MockClassA")
- private static class MockClassA {
+ private static class MockClassA implements SkylarkValue {
@SkylarkCallable(name = "get", doc = "MockClassA#get")
public Integer get() {
return 0;
@@ -104,7 +105,7 @@
/** MockClassD */
@SkylarkModule(name = "MockClassD", doc = "MockClassD")
- private static class MockClassD {
+ private static class MockClassD implements SkylarkValue {
@SkylarkCallable(
name = "test",
doc = "MockClassD#test",
@@ -131,7 +132,7 @@
/** MockClassF */
@SkylarkModule(name = "MockClassF", doc = "MockClassF")
- private static class MockClassF {
+ private static class MockClassF implements SkylarkValue {
@SkylarkCallable(
name = "test",
doc = "MockClassF#test",
@@ -150,7 +151,7 @@
/** MockClassG */
@SkylarkModule(name = "MockClassG", doc = "MockClassG")
- private static class MockClassG {
+ private static class MockClassG implements SkylarkValue {
@SkylarkCallable(
name = "test",
doc = "MockClassG#test",
@@ -169,7 +170,7 @@
/** MockClassH */
@SkylarkModule(name = "MockClassH", doc = "MockClassH")
- private static class MockClassH {
+ private static class MockClassH implements SkylarkValue {
@SkylarkCallable(
name = "test",
doc = "MockClassH#test",
@@ -216,7 +217,7 @@
@SkylarkModule(
name = "MockClassWithContainerReturnValues",
doc = "MockClassWithContainerReturnValues")
- private static class MockClassWithContainerReturnValues {
+ private static class MockClassWithContainerReturnValues implements SkylarkValue {
@SkylarkCallable(name = "depset", doc = "depset")
public SkylarkNestedSet /*<Integer>*/ getNestedSet() {
@@ -245,9 +246,8 @@
}
/** MockClassCommonNameOne */
- @SkylarkModule(name = "MockClassCommonName",
- doc = "MockClassCommonName")
- private static class MockClassCommonNameOne {
+ @SkylarkModule(name = "MockClassCommonName", doc = "MockClassCommonName")
+ private static class MockClassCommonNameOne implements SkylarkValue {
@SkylarkCallable(name = "one", doc = "one")
public Integer one() {
@@ -267,9 +267,10 @@
}
/** PointsToCommonNameOneWithSubclass */
- @SkylarkModule(name = "PointsToCommonNameOneWithSubclass",
+ @SkylarkModule(
+ name = "PointsToCommonNameOneWithSubclass",
doc = "PointsToCommonNameOneWithSubclass")
- private static class PointsToCommonNameOneWithSubclass {
+ private static class PointsToCommonNameOneWithSubclass implements SkylarkValue {
@SkylarkCallable(name = "one", doc = "one")
public MockClassCommonNameOne getOne() {
return null;
@@ -282,10 +283,8 @@
}
/** MockClassCommonNameOneUndocumented */
- @SkylarkModule(name = "MockClassCommonName",
- documented = false,
- doc = "")
- private static class MockClassCommonNameUndocumented {
+ @SkylarkModule(name = "MockClassCommonName", documented = false, doc = "")
+ private static class MockClassCommonNameUndocumented implements SkylarkValue {
@SkylarkCallable(name = "two", doc = "two")
public Integer two() {
@@ -294,9 +293,10 @@
}
/** PointsToCommonNameAndUndocumentedModule */
- @SkylarkModule(name = "PointsToCommonNameAndUndocumentedModule",
+ @SkylarkModule(
+ name = "PointsToCommonNameAndUndocumentedModule",
doc = "PointsToCommonNameAndUndocumentedModule")
- private static class PointsToCommonNameAndUndocumentedModule {
+ private static class PointsToCommonNameAndUndocumentedModule implements SkylarkValue {
@SkylarkCallable(name = "one", doc = "one")
public MockClassCommonNameOne getOne() {
return null;
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java
index ee74719..400594a 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java
@@ -34,6 +34,7 @@
import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
import com.google.devtools.build.lib.skyframe.AspectValue;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.testutil.Suite;
import com.google.devtools.build.lib.testutil.TestConstants.InternalTestExecutionMode;
import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
@@ -601,7 +602,8 @@
}
@SkylarkModule(name = "test_diff_fragment", doc = "fragment for testing differy fragments")
- private static final class DiffResetFragment extends BuildConfiguration.Fragment {}
+ private static final class DiffResetFragment extends BuildConfiguration.Fragment
+ implements SkylarkValue {}
private static final class DiffResetFactory implements ConfigurationFragmentFactory {
@Override
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
index e22f62e..b92c36e 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
@@ -35,6 +35,7 @@
import com.google.devtools.build.lib.packages.NativeAspectClass;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.util.FileTypeSet;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -309,5 +310,5 @@
}
@SkylarkModule(name = "test_fragment", doc = "test fragment")
- private static final class TestFragment {}
+ private static final class TestFragment implements SkylarkValue {}
}
diff --git a/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java b/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java
index 93b4d04..f196288 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java
@@ -22,6 +22,7 @@
import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -34,13 +35,13 @@
public final class ConfigurationFragmentPolicyTest {
@SkylarkModule(name = "test_fragment", doc = "first fragment")
- private static final class TestFragment {}
+ private static final class TestFragment implements SkylarkValue {}
@SkylarkModule(name = "other_fragment", doc = "second fragment")
- private static final class OtherFragment {}
+ private static final class OtherFragment implements SkylarkValue {}
@SkylarkModule(name = "unknown_fragment", doc = "useless waste of permgen")
- private static final class UnknownFragment {}
+ private static final class UnknownFragment implements SkylarkValue {}
@Test
public void testMissingFragmentPolicy() throws Exception {
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java b/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java
index 953363c..783b58b 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java
@@ -60,6 +60,7 @@
import com.google.devtools.build.lib.rules.repository.BindRule;
import com.google.devtools.build.lib.rules.repository.WorkspaceBaseRule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.Printer;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
@@ -445,7 +446,7 @@
/** Test configuration fragment. */
@SkylarkModule(name = "alpha", doc = "Test config fragment.")
- public static final class AConfig extends BuildConfiguration.Fragment {
+ public static final class AConfig extends BuildConfiguration.Fragment implements SkylarkValue {
public static final ConfigurationFragmentFactory FACTORY =
new FragmentLoader<>(
AConfig.class, AOptions.class, (options) -> new AConfig(options.alpha));
@@ -474,7 +475,7 @@
/** Test configuration fragment. */
@SkylarkModule(name = "bravo", doc = "Test config fragment.")
- public static final class BConfig extends BuildConfiguration.Fragment {
+ public static final class BConfig extends BuildConfiguration.Fragment implements SkylarkValue {
public static final ConfigurationFragmentFactory FACTORY =
new FragmentLoader<>(
BConfig.class, BOptions.class, (options) -> new BConfig(options.bravo));
@@ -503,7 +504,7 @@
/** Test configuration fragment. */
@SkylarkModule(name = "charlie", doc = "Test config fragment.")
- public static final class CConfig extends BuildConfiguration.Fragment {
+ public static final class CConfig extends BuildConfiguration.Fragment implements SkylarkValue {
public static final ConfigurationFragmentFactory FACTORY =
new FragmentLoader<>(
CConfig.class, COptions.class, (options) -> new CConfig(options.charlie));
@@ -532,7 +533,7 @@
/** Test configuration fragment. */
@SkylarkModule(name = "delta", doc = "Test config fragment.")
- public static final class DConfig extends BuildConfiguration.Fragment {
+ public static final class DConfig extends BuildConfiguration.Fragment implements SkylarkValue {
public static final ConfigurationFragmentFactory FACTORY =
new FragmentLoader<>(
DConfig.class, DOptions.class, (options) -> new DConfig(options.delta));
@@ -564,7 +565,7 @@
/** Test configuration fragment. */
@SkylarkModule(name = "echo", doc = "Test config fragment.")
- public static final class EConfig extends BuildConfiguration.Fragment {
+ public static final class EConfig extends BuildConfiguration.Fragment implements SkylarkValue {
public static final ConfigurationFragmentFactory FACTORY =
new FragmentLoader<>(EConfig.class, EOptions.class, (options) -> new EConfig(options.echo));
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessorTest.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessorTest.java
index 1aad801..898c6fe 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessorTest.java
@@ -387,4 +387,16 @@
"Expected type 'Object' but got type 'java.lang.String' "
+ "for noneable parameter 'aParameter'.");
}
+
+ @Test
+ public void testDoesntImplementSkylarkValue() throws Exception {
+ assertAbout(javaSource())
+ .that(getFile("DoesntImplementSkylarkValue.java"))
+ .processedWith(new SkylarkCallableProcessor())
+ .failsToCompile()
+ .withErrorContaining(
+ "method x has @SkylarkCallable annotation but enclosing class"
+ + " DoesntImplementSkylarkValue does not implement SkylarkValue nor has"
+ + " @SkylarkGlobalLibrary annotation");
+ }
}
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ArgumentMissing.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ArgumentMissing.java
index 9265adc..fcfdb32 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ArgumentMissing.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ArgumentMissing.java
@@ -16,12 +16,13 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
* Test case for a SkylarkCallable method which has no arguments when the annotation indicates it
* should.
*/
-public class ArgumentMissing {
+public class ArgumentMissing implements SkylarkValue {
@SkylarkCallable(
name = "method_with_params",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ConflictingMethodNames.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ConflictingMethodNames.java
index e721402..028841c 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ConflictingMethodNames.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ConflictingMethodNames.java
@@ -16,12 +16,13 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
- * Test case for a class which contains multiple SkylarkCallable methods with the same name.
- * This should cause a compile failure -- overrides are not allowed.
+ * Test case for a class which contains multiple SkylarkCallable methods with the same name. This
+ * should cause a compile failure -- overrides are not allowed.
*/
-public class ConflictingMethodNames {
+public class ConflictingMethodNames implements SkylarkValue {
@SkylarkCallable(
name = "conflicting_method",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DisabledValueParamNoToggle.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DisabledValueParamNoToggle.java
index 16e4edb..2ea9c46 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DisabledValueParamNoToggle.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DisabledValueParamNoToggle.java
@@ -16,12 +16,13 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
* Test case for a SkylarkCallable method which has a parameter which has a "disabled value" set but
* is always-on.
*/
-public class DisabledValueParamNoToggle {
+public class DisabledValueParamNoToggle implements SkylarkValue {
@SkylarkCallable(
name = "no_toggle_method",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DocumentationMissing.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DocumentationMissing.java
index 5efd975..8778472 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DocumentationMissing.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DocumentationMissing.java
@@ -15,12 +15,13 @@
package com.google.devtools.build.lib.skylarkinterface.processor.testsources;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
* Test case for a SkylarkCallable method which has no documentation and is not explicitly marked
* "documented=false".
*/
-public class DocumentationMissing {
+public class DocumentationMissing implements SkylarkValue {
@SkylarkCallable(name = "undocumented_method")
public String undocumentedMethod() {
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DoesntImplementSkylarkValue.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DoesntImplementSkylarkValue.java
new file mode 100644
index 0000000..16c7cf3
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DoesntImplementSkylarkValue.java
@@ -0,0 +1,25 @@
+// Copyright 2019 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.skylarkinterface.processor.testsources;
+
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+
+/** A SkylarkCallable-annotated method whose class doesn't implement SkylarkValue. */
+class DoesntImplementSkylarkValue {
+ @SkylarkCallable(name = "x", documented = false)
+ public Object x() {
+ return null;
+ }
+}
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/EnablingAndDisablingFlag.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/EnablingAndDisablingFlag.java
index 1200f7f..b3d4618 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/EnablingAndDisablingFlag.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/EnablingAndDisablingFlag.java
@@ -16,12 +16,13 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
/**
* Test case for a SkylarkCallable method which has both enablingFlag and disablingFlag specified.
*/
-public class EnablingAndDisablingFlag {
+public class EnablingAndDisablingFlag implements SkylarkValue {
@SkylarkCallable(
name = "someMethod",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/EnablingAndDisablingFlagParam.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/EnablingAndDisablingFlagParam.java
index 43db843..27d2820 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/EnablingAndDisablingFlagParam.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/EnablingAndDisablingFlagParam.java
@@ -16,13 +16,14 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
/**
* Test case for a SkylarkCallable method which has a parameter with both enableOnlyWithFlag and
* disableWithFlag specified.
*/
-public class EnablingAndDisablingFlagParam {
+public class EnablingAndDisablingFlagParam implements SkylarkValue {
@SkylarkCallable(
name = "someMethod",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ExtraKeywordsOutOfOrder.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ExtraKeywordsOutOfOrder.java
index 69d4d91..c46a66e 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ExtraKeywordsOutOfOrder.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ExtraKeywordsOutOfOrder.java
@@ -17,6 +17,7 @@
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.StarlarkThread;
@@ -24,7 +25,7 @@
* Test case for a SkylarkCallable method which specifies extraKeywords, but specifies the argument
* out of order.
*/
-public class ExtraKeywordsOutOfOrder {
+public class ExtraKeywordsOutOfOrder implements SkylarkValue {
@SkylarkCallable(
name = "extra_kwargs_out_of_order",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ExtraPositionalsMissing.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ExtraPositionalsMissing.java
index 55c7dd6..038c007 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ExtraPositionalsMissing.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ExtraPositionalsMissing.java
@@ -17,12 +17,13 @@
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.StarlarkThread;
/**
* Test case for a SkylarkCallable method which specifies extraPositionals, but omits that argument.
*/
-public class ExtraPositionalsMissing {
+public class ExtraPositionalsMissing implements SkylarkValue {
@SkylarkCallable(
name = "extra_positionals_missing",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/GoldenCase.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/GoldenCase.java
index de7f3f1..a3200bf 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/GoldenCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/GoldenCase.java
@@ -18,16 +18,15 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.ParamType;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.FuncallExpression;
import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.syntax.StarlarkThread;
-/**
- * Test source file verifying various proper uses of SkylarkCallable.
- */
-public class GoldenCase {
+/** Test source file verifying various proper uses of SkylarkCallable. */
+public class GoldenCase implements SkylarkValue {
@SkylarkCallable(
name = "struct_field_method",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/InvalidNoneableParameter.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/InvalidNoneableParameter.java
index 69fbb36..b96f94b 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/InvalidNoneableParameter.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/InvalidNoneableParameter.java
@@ -16,12 +16,13 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
* Test case for a SkylarkCallable method which has a parameter with both type and allowedTypes
* specified.
*/
-public class InvalidNoneableParameter {
+public class InvalidNoneableParameter implements SkylarkValue {
@SkylarkCallable(
name = "invalid_noneable_parameter",
@@ -32,4 +33,5 @@
public Integer invalidNoneableParameter(String aParameter) {
return 42;
}
+
}
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/InvalidParamNoneDefault.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/InvalidParamNoneDefault.java
index a34cb5c..57767c6 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/InvalidParamNoneDefault.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/InvalidParamNoneDefault.java
@@ -16,12 +16,13 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
- * Test case for a SkylarkCallable method which has a parameter with "None" set as the default,
- * but noneable is not true.
+ * Test case for a SkylarkCallable method which has a parameter with "None" set as the default, but
+ * noneable is not true.
*/
-public class InvalidParamNoneDefault {
+public class InvalidParamNoneDefault implements SkylarkValue {
@SkylarkCallable(
name = "method_with_invalid_default",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/LocationMissing.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/LocationMissing.java
index fcac8b0..458c56c 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/LocationMissing.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/LocationMissing.java
@@ -16,13 +16,14 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.StarlarkThread;
/**
* Test case for a SkylarkCallable method which does not have an appropriate StarlarkThread
* parameter despite having useLocation set.
*/
-public class LocationMissing {
+public class LocationMissing implements SkylarkValue {
@SkylarkCallable(
name = "three_arg_method_missing_location",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/MultipleSelfCallMethods.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/MultipleSelfCallMethods.java
index 674df67..65fca81 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/MultipleSelfCallMethods.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/MultipleSelfCallMethods.java
@@ -16,11 +16,10 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-/**
- * Test case for a class with multiple SkylarkCallable methods which have selfCall=true.
- */
-public class MultipleSelfCallMethods {
+/** Test case for a class with multiple SkylarkCallable methods which have selfCall=true. */
+public class MultipleSelfCallMethods implements SkylarkValue {
@SkylarkCallable(
name = "selfCallMethod",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/NonDefaultParamAfterDefault.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/NonDefaultParamAfterDefault.java
index 3e736f8..98bb529 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/NonDefaultParamAfterDefault.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/NonDefaultParamAfterDefault.java
@@ -16,12 +16,13 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
* Test case for a SkylarkCallable method which has a positional parameter with no default value
* specified after a positional parameter with a default value.
*/
-public class NonDefaultParamAfterDefault {
+public class NonDefaultParamAfterDefault implements SkylarkValue {
@SkylarkCallable(
name = "non_default_after_default",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ParamNeitherNamedNorPositional.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ParamNeitherNamedNorPositional.java
index 7c7bb1c..b02234b 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ParamNeitherNamedNorPositional.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ParamNeitherNamedNorPositional.java
@@ -16,12 +16,13 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
* Test case for a SkylarkCallable method which has a parameter with is neither named nor
* positional.
*/
-public class ParamNeitherNamedNorPositional {
+public class ParamNeitherNamedNorPositional implements SkylarkValue {
@SkylarkCallable(
name = "param_neither_named_nor_positional",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ParamTypeConflict.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ParamTypeConflict.java
index a3b601d..86669e6 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ParamTypeConflict.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ParamTypeConflict.java
@@ -17,12 +17,13 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.ParamType;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
* Test case for a SkylarkCallable method which has a parameter with both type and allowedTypes
* specified.
*/
-public class ParamTypeConflict {
+public class ParamTypeConflict implements SkylarkValue {
@SkylarkCallable(
name = "param_type_conflict",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/PositionalOnlyParamAfterNamed.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/PositionalOnlyParamAfterNamed.java
index 74ae4ea..6485738 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/PositionalOnlyParamAfterNamed.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/PositionalOnlyParamAfterNamed.java
@@ -16,12 +16,13 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
* Test case for a SkylarkCallable method which has a positional-only parameter specified after a
* named positional parameter.
*/
-public class PositionalOnlyParamAfterNamed {
+public class PositionalOnlyParamAfterNamed implements SkylarkValue {
@SkylarkCallable(
name = "positional_only_after_named",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/PositionalParamAfterNonPositional.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/PositionalParamAfterNonPositional.java
index 713f52e..1ee618a 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/PositionalParamAfterNonPositional.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/PositionalParamAfterNonPositional.java
@@ -16,12 +16,13 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
- * Test case for a SkylarkCallable method which has a positional parameter specified after a
- * non positional parameter.
+ * Test case for a SkylarkCallable method which has a positional parameter specified after a non
+ * positional parameter.
*/
-public class PositionalParamAfterNonPositional {
+public class PositionalParamAfterNonPositional implements SkylarkValue {
@SkylarkCallable(
name = "positional_after_non_positional",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/PrivateMethod.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/PrivateMethod.java
index 88d2c14..369f98c 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/PrivateMethod.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/PrivateMethod.java
@@ -15,11 +15,10 @@
package com.google.devtools.build.lib.skylarkinterface.processor.testsources;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-/**
- * Test case which verifies a method annotated with SkylarkCallable cannot be private.
- */
-public class PrivateMethod {
+/** Test case which verifies a method annotated with SkylarkCallable cannot be private. */
+public class PrivateMethod implements SkylarkValue {
@SkylarkCallable(name = "private_method", doc = "A private method")
private String privateMethod() {
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SelfCallWithNoName.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SelfCallWithNoName.java
index 769600d..4b17a3c 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SelfCallWithNoName.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SelfCallWithNoName.java
@@ -15,11 +15,10 @@
package com.google.devtools.build.lib.skylarkinterface.processor.testsources;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-/**
- * Test case for a class with a SkylarkCallable method which has selfCall=true but no name.
- */
-public class SelfCallWithNoName {
+/** Test case for a class with a SkylarkCallable method which has selfCall=true but no name. */
+public class SelfCallWithNoName implements SkylarkValue {
@SkylarkCallable(
name = "",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SelfCallWithStructField.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SelfCallWithStructField.java
index e096bf5..a3f76b5 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SelfCallWithStructField.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SelfCallWithStructField.java
@@ -15,12 +15,12 @@
package com.google.devtools.build.lib.skylarkinterface.processor.testsources;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
- * Test case for a class with a SkylarkCallable method which has selfCall=true and
- * structField=true.
+ * Test case for a class with a SkylarkCallable method which has selfCall=true and structField=true.
*/
-public class SelfCallWithStructField {
+public class SelfCallWithStructField implements SkylarkValue {
@SkylarkCallable(
name = "selfCallMethod",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SkylarkInfoBeforeParams.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SkylarkInfoBeforeParams.java
index 9eeed84..f0545f5 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SkylarkInfoBeforeParams.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SkylarkInfoBeforeParams.java
@@ -17,13 +17,14 @@
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.StarlarkThread;
/**
* Test case for a SkylarkCallable method which specifies skylark-info parameters (for example
* StarlarkThread) before other parameters.
*/
-public class SkylarkInfoBeforeParams {
+public class SkylarkInfoBeforeParams implements SkylarkValue {
@SkylarkCallable(
name = "skylark_info_wrong_order",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SkylarkInfoParamsWrongOrder.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SkylarkInfoParamsWrongOrder.java
index 770d944..721d78a 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SkylarkInfoParamsWrongOrder.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SkylarkInfoParamsWrongOrder.java
@@ -17,13 +17,14 @@
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.StarlarkThread;
/**
* Test case for a SkylarkCallable method which specifies skylark-info parameters in the incorrect
* relative order.
*/
-public class SkylarkInfoParamsWrongOrder {
+public class SkylarkInfoParamsWrongOrder implements SkylarkValue {
@SkylarkCallable(
name = "skylark_info_params_wrong_order",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SpecifiedGenericType.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SpecifiedGenericType.java
index c852451..0d0755c 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SpecifiedGenericType.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SpecifiedGenericType.java
@@ -16,6 +16,7 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.SkylarkList;
@@ -24,7 +25,7 @@
* type. (Parameters, if generic, may only have wildcards, as the types of these parameters must be
* validated dynamically.)
*/
-public class SpecifiedGenericType {
+public class SpecifiedGenericType implements SkylarkValue {
@SkylarkCallable(
name = "specified_generic_type",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StarlarkThreadMissing.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StarlarkThreadMissing.java
index 21e4021..76ed47e 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StarlarkThreadMissing.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StarlarkThreadMissing.java
@@ -16,12 +16,13 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
* Test case for a SkylarkCallable method which does not have an appropriate StarlarkThread
* parameter despite having useStarlarkThread set.
*/
-public class StarlarkThreadMissing {
+public class StarlarkThreadMissing implements SkylarkValue {
@SkylarkCallable(
name = "three_arg_method_missing_env",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StaticMethod.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StaticMethod.java
index fd0e498..b929c9a 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StaticMethod.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StaticMethod.java
@@ -15,11 +15,10 @@
package com.google.devtools.build.lib.skylarkinterface.processor.testsources;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-/**
- * Test case which verifies a method annotated with SkylarkCallable cannot be static.
- */
-public class StaticMethod {
+/** Test case which verifies a method annotated with SkylarkCallable cannot be static. */
+public class StaticMethod implements SkylarkValue {
@SkylarkCallable(name = "private_method", doc = "A private method")
public static String staticMethod() {
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithArguments.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithArguments.java
index 9ec6166..eaadbcc 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithArguments.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithArguments.java
@@ -16,11 +16,10 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-/**
- * Test case which verifies a struct field method cannot have arguments.
- */
-public class StructFieldWithArguments {
+/** Test case which verifies a struct field method cannot have arguments. */
+public class StructFieldWithArguments implements SkylarkValue {
@SkylarkCallable(name = "struct_field_method",
parameters = {
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithExtraArgs.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithExtraArgs.java
index 8c8c508..1472480 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithExtraArgs.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithExtraArgs.java
@@ -16,10 +16,11 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkList;
/** Test case which verifies a struct field method cannot specify extraArgs. */
-public class StructFieldWithExtraArgs {
+public class StructFieldWithExtraArgs implements SkylarkValue {
@SkylarkCallable(
name = "struct_field_method_with_extra_args",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithExtraKeywords.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithExtraKeywords.java
index 9055172..a98f7dc 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithExtraKeywords.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithExtraKeywords.java
@@ -16,10 +16,11 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkDict;
/** Test case which verifies a struct field method cannot specify extraArgs. */
-public class StructFieldWithExtraKeywords {
+public class StructFieldWithExtraKeywords implements SkylarkValue {
@SkylarkCallable(
name = "struct_field_method_with_extra_kwargs",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithInvalidInfo.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithInvalidInfo.java
index 0bab6a8..4d77ae6 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithInvalidInfo.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StructFieldWithInvalidInfo.java
@@ -15,10 +15,11 @@
package com.google.devtools.build.lib.skylarkinterface.processor.testsources;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.FuncallExpression;
/** Test case which verifies a struct field method cannot specify useStarlarkThread. */
-public class StructFieldWithInvalidInfo {
+public class StructFieldWithInvalidInfo implements SkylarkValue {
@SkylarkCallable(
name = "struct_field_method_with_info",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ToggledKwargsParam.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ToggledKwargsParam.java
index 63e9638..d0eded9 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ToggledKwargsParam.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ToggledKwargsParam.java
@@ -16,6 +16,7 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
@@ -25,7 +26,7 @@
* Test case for a SkylarkCallable method which has a "extraKeywords" parameter which has
* enableOnlyWithFlag set. (This is unsupported.)
*/
-public class ToggledKwargsParam {
+public class ToggledKwargsParam implements SkylarkValue {
@SkylarkCallable(
name = "toggled_kwargs_method",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ToggledParamNoDisabledValue.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ToggledParamNoDisabledValue.java
index ed2d8d3..e75acee 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ToggledParamNoDisabledValue.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ToggledParamNoDisabledValue.java
@@ -16,13 +16,14 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
/**
* Test case for a SkylarkCallable method which has a parameter which may be disabled with semantic
* flag but has no "disabled value".
*/
-public class ToggledParamNoDisabledValue {
+public class ToggledParamNoDisabledValue implements SkylarkValue {
@SkylarkCallable(
name = "no_disabled_value_method",
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/TooManyArguments.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/TooManyArguments.java
index 2c6e17f..cd0540b 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/TooManyArguments.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/TooManyArguments.java
@@ -16,12 +16,13 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
* Test case for a SkylarkCallable method which has more arguments than are declared by the
* annotation.
*/
-public class TooManyArguments {
+public class TooManyArguments implements SkylarkValue {
@SkylarkCallable(
name = "method_with_too_many_arguments",
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EvalUtilsTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EvalUtilsTest.java
index a24a691..a834dcb 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/EvalUtilsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/EvalUtilsTest.java
@@ -48,8 +48,7 @@
/** MockClassA */
@SkylarkModule(name = "MockClassA", doc = "MockClassA")
- public static class MockClassA {
- }
+ public static class MockClassA implements SkylarkValue {}
/** MockClassB */
public static class MockClassB extends MockClassA {
@@ -127,11 +126,8 @@
() -> EvalUtils.SKYLARK_COMPARATOR.compare(Runtime.NONE, Runtime.NONE));
}
- @SkylarkModule(
- name = "ParentType",
- doc = "A parent class annotated with @SkylarkModule."
- )
- private static class ParentClassWithSkylarkModule {}
+ @SkylarkModule(name = "ParentType", doc = "A parent class annotated with @SkylarkModule.")
+ private static class ParentClassWithSkylarkModule implements SkylarkValue {}
private static class ChildClass extends ParentClassWithSkylarkModule {}
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
index 5ca992a..d1756bc 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
@@ -21,6 +21,7 @@
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.util.EvaluationTestCase;
import org.junit.Before;
import org.junit.Test;
@@ -176,7 +177,7 @@
}
@SkylarkModule(name = "AStruct", documented = false, doc = "")
- static final class AStruct implements ClassObject {
+ static final class AStruct implements ClassObject, SkylarkValue {
@Override
public Object getValue(String name) {
switch (name) {
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
index 3287dcc..829bdc1 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
@@ -126,7 +126,7 @@
}
@SkylarkModule(name = "Mock", doc = "")
- static class Mock {
+ static class Mock implements SkylarkValue {
@SkylarkCallable(
name = "MockFn",
selfCall = true,
@@ -513,7 +513,7 @@
}
@SkylarkModule(name = "MockInterface", doc = "")
- static interface MockInterface {
+ static interface MockInterface extends SkylarkValue {
@SkylarkCallable(name = "is_empty_interface",
parameters = { @Param(name = "str", type = String.class) },
documented = false)
@@ -533,7 +533,7 @@
}
@SkylarkModule(name = "MockClassObject", documented = false, doc = "")
- static final class MockClassObject implements ClassObject {
+ static final class MockClassObject implements ClassObject, SkylarkValue {
@Override
public Object getValue(String name) {
switch (name) {
@@ -555,7 +555,7 @@
}
@SkylarkModule(name = "ParamterizedMock", doc = "")
- static interface ParameterizedApi<ObjectT> {
+ static interface ParameterizedApi<ObjectT> extends SkylarkValue {
@SkylarkCallable(
name = "method",
documented = false,
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java
index f20be49..f2d358a 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java
@@ -20,20 +20,19 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkInterfaceUtils;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import java.lang.reflect.Method;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-/**
- * Test Skylark interface annotations and utilities.
- */
+/** Test Skylark interface annotations and utilities. */
@RunWith(JUnit4.class)
public class SkylarkInterfaceUtilsTest {
/** MockClassA */
@SkylarkModule(name = "MockClassA", doc = "MockClassA")
- public static class MockClassA {
+ public static class MockClassA implements SkylarkValue {
@SkylarkCallable(name = "foo", doc = "MockClassA#foo")
public void foo() {}
@SkylarkCallable(name = "bar", doc = "MockClassA#bar")
@@ -43,7 +42,7 @@
/** MockInterfaceB1 */
@SkylarkModule(name = "MockInterfaceB1", doc = "MockInterfaceB1")
- public static interface MockInterfaceB1 {
+ public static interface MockInterfaceB1 extends SkylarkValue {
@SkylarkCallable(name = "foo", doc = "MockInterfaceB1#foo")
void foo();
@SkylarkCallable(name = "bar", doc = "MockInterfaceB1#bar")
@@ -54,7 +53,7 @@
/** MockInterfaceB2 */
@SkylarkModule(name = "MockInterfaceB2", doc = "MockInterfaceB2")
- public static interface MockInterfaceB2 {
+ public static interface MockInterfaceB2 extends SkylarkValue {
@SkylarkCallable(name = "baz", doc = "MockInterfaceB2#baz")
void baz();
@SkylarkCallable(name = "qux", doc = "MockInterfaceB2#qux")
@@ -100,14 +99,14 @@
/** ClassAModule test class */
@SkylarkModule(name = "ClassAModule", doc = "ClassAModule")
- public static class ClassAModule {}
+ public static class ClassAModule implements SkylarkValue {}
/** ExtendsClassA test class */
public static class ExtendsClassA extends ClassAModule {}
/** InterfaceBModule test interface */
@SkylarkModule(name = "InterfaceBModule", doc = "InterfaceBModule")
- public static interface InterfaceBModule {}
+ public static interface InterfaceBModule extends SkylarkValue {}
/** ExtendsInterfaceB test interface */
public static interface ExtendsInterfaceB extends InterfaceBModule {}
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkTypeTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkTypeTest.java
index 7e09c96..a30bb36 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkTypeTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkTypeTest.java
@@ -17,6 +17,7 @@
import static com.google.common.truth.Truth.assertThat;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -25,11 +26,8 @@
@RunWith(JUnit4.class)
public final class SkylarkTypeTest {
- @SkylarkModule(
- name = "ParentType",
- doc = "A parent class annotated with @SkylarkModule."
- )
- private static class ParentClassWithSkylarkModule {}
+ @SkylarkModule(name = "ParentType", doc = "A parent class annotated with @SkylarkModule.")
+ private static class ParentClassWithSkylarkModule implements SkylarkValue {}
private static class ChildClass extends ParentClassWithSkylarkModule {}
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/StarlarkFlagGuardingTest.java b/src/test/java/com/google/devtools/build/lib/syntax/StarlarkFlagGuardingTest.java
index faa7339..04321ad 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/StarlarkFlagGuardingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/StarlarkFlagGuardingTest.java
@@ -16,6 +16,7 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
import com.google.devtools.build.lib.syntax.util.EvaluationTestCase;
import com.google.devtools.build.lib.testutil.TestMode;
@@ -38,7 +39,7 @@
/** Mock containing exposed methods for flag-guarding tests. */
@SkylarkModule(name = "Mock", doc = "")
- public static class Mock {
+ public static class Mock implements SkylarkValue {
@SkylarkCallable(
name = "positionals_only_method",