From 9331632b4f8dfb7502e29d69c9b229f324df1115 Mon Sep 17 00:00:00 2001
From: Googler
Date: Wed, 6 Nov 2019 09:26:19 -0800
Subject: [PATCH] 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
---
.../docgen/SkylarkDocumentationCollector.java | 12 +--
.../java/com/google/devtools/build/lib/BUILD | 4 +-
.../lib/packages/StarlarkBuildLibrary.java | 2 +-
.../lib/rules/java/MessageBundleInfo.java | 3 +-
.../lib/rules/python/PythonConfiguration.java | 3 +-
.../BuildConfigurationApi.java | 11 +--
.../lib/skylarkbuildapi/FileProviderApi.java | 3 +-
.../FilesToRunProviderApi.java | 3 +-
.../lib/skylarkbuildapi/FilesetEntryApi.java | 13 +---
.../FragmentCollectionApi.java | 3 +-
.../ProtoConfigurationApi.java | 11 +--
.../lib/skylarkbuildapi/RunfilesApi.java | 3 +-
.../SkylarkCommandLineApi.java | 3 +-
.../SkylarkNativeModuleApi.java | 10 +--
.../build/lib/skylarkbuildapi/TargetApi.java | 7 +-
.../TransitiveInfoCollectionApi.java | 45 +++++------
.../android/AndroidBinaryDataSettingsApi.java | 3 +-
.../android/AndroidConfigurationApi.java | 3 +-
.../android/AndroidDataContextApi.java | 3 +-
.../android/AndroidDataProcessingApi.java | 22 +++---
.../android/AndroidManifestApi.java | 3 +-
.../android/AndroidSkylarkApiProviderApi.java | 5 +-
.../android/AndroidSkylarkCommonApi.java | 4 +-
.../android/DataBindingV2ProviderApi.java | 3 +-
.../android/ParsedAndroidAssetsApi.java | 3 +-
.../android/ValidatedAndroidDataApi.java | 14 ++--
.../skylarkbuildapi/apple/AppleCommonApi.java | 10 ++-
.../apple/AppleConfigurationApi.java | 7 +-
.../apple/AppleToolchainApi.java | 11 ++-
.../apple/J2ObjcConfigurationApi.java | 10 +--
.../apple/ObjcConfigurationApi.java | 15 ++--
.../apple/SwiftConfigurationApi.java | 10 +--
.../config/ConfigSkylarkCommonApi.java | 3 +-
.../cpp/CcCompilationContextApi.java | 3 +-
.../cpp/CcCompilationOutputsApi.java | 3 +-
.../cpp/CcLinkingContextApi.java | 3 +-
.../cpp/CcLinkingOutputsApi.java | 3 +-
.../lib/skylarkbuildapi/cpp/CcModuleApi.java | 26 ++++---
.../cpp/CcSkylarkApiProviderApi.java | 20 +++--
.../cpp/CcToolchainVariablesApi.java | 3 +-
.../cpp/CompilationInfoApi.java | 10 +--
.../cpp/CppConfigurationApi.java | 15 ++--
.../cpp/FeatureConfigurationApi.java | 3 +-
.../skylarkbuildapi/cpp/LibraryToLinkApi.java | 3 +-
.../skylarkbuildapi/cpp/LinkerInputApi.java | 4 +-
.../skylarkbuildapi/cpp/LinkingInfoApi.java | 16 ++--
.../skylarkbuildapi/cpp/WrapCcHelperApi.java | 16 ++--
.../go/GoConfigurationApi.java | 3 +-
.../java/JavaAnnotationProcessingApi.java | 3 +-
.../java/JavaCcLinkParamsProviderApi.java | 3 +-
.../skylarkbuildapi/java/JavaCommonApi.java | 14 ++--
.../java/JavaCompilationInfoProviderApi.java | 3 +-
.../java/JavaConfigurationApi.java | 10 +--
.../java/JavaProtoCommonApi.java | 13 ++--
.../java/JavaRuleOutputJarsProviderApi.java | 4 +-
.../java/JavaRuntimeClasspathProviderApi.java | 3 +-
.../java/JavaSkylarkApiProviderApi.java | 3 +-
.../skylarkbuildapi/java/OutputJarApi.java | 3 +-
.../platform/PlatformCommonApi.java | 3 +-
.../platform/PlatformConfigurationApi.java | 10 +--
.../skylarkbuildapi/proto/ProtoModuleApi.java | 3 +-
.../python/PyStarlarkTransitionsApi.java | 2 +-
.../repository/SkylarkExecutionResultApi.java | 3 +-
.../repository/SkylarkOSApi.java | 3 +-
.../SkylarkRepositoryContextApi.java | 7 +-
.../test/TestingModuleApi.java | 3 +-
.../lib/skylarkinterface/SkylarkModule.java | 8 +-
.../lib/skylarkinterface/SkylarkValue.java | 10 ++-
.../processor/SkylarkCallableProcessor.java | 78 +++++++++++++++----
.../devtools/build/lib/syntax/EvalUtils.java | 8 +-
.../build/lib/syntax/MethodLibrary.java | 5 +-
.../build/lib/syntax/StringModule.java | 50 ++++++------
.../SkylarkDocumentationFailuresTest.java | 16 ++--
.../docgen/SkylarkDocumentationTest.java | 34 ++++----
.../lib/analysis/AnalysisCachingTest.java | 4 +-
.../lib/analysis/AspectDefinitionTest.java | 3 +-
.../ConfigurationFragmentPolicyTest.java | 7 +-
.../TrimmableTestConfigurationFragments.java | 11 +--
.../SkylarkCallableProcessorTest.java | 12 +++
.../testsources/ArgumentMissing.java | 3 +-
.../testsources/ConflictingMethodNames.java | 7 +-
.../DisabledValueParamNoToggle.java | 3 +-
.../testsources/DocumentationMissing.java | 3 +-
.../DoesntImplementSkylarkValue.java | 25 ++++++
.../testsources/EnablingAndDisablingFlag.java | 3 +-
.../EnablingAndDisablingFlagParam.java | 3 +-
.../testsources/ExtraKeywordsOutOfOrder.java | 3 +-
.../testsources/ExtraPositionalsMissing.java | 3 +-
.../processor/testsources/GoldenCase.java | 7 +-
.../testsources/InvalidNoneableParameter.java | 4 +-
.../testsources/InvalidParamNoneDefault.java | 7 +-
.../testsources/LocationMissing.java | 3 +-
.../testsources/MultipleSelfCallMethods.java | 7 +-
.../NonDefaultParamAfterDefault.java | 3 +-
.../ParamNeitherNamedNorPositional.java | 3 +-
.../testsources/ParamTypeConflict.java | 3 +-
.../PositionalOnlyParamAfterNamed.java | 3 +-
.../PositionalParamAfterNonPositional.java | 7 +-
.../processor/testsources/PrivateMethod.java | 7 +-
.../testsources/SelfCallWithNoName.java | 7 +-
.../testsources/SelfCallWithStructField.java | 6 +-
.../testsources/SkylarkInfoBeforeParams.java | 3 +-
.../SkylarkInfoParamsWrongOrder.java | 3 +-
.../testsources/SpecifiedGenericType.java | 3 +-
.../testsources/StarlarkThreadMissing.java | 3 +-
.../processor/testsources/StaticMethod.java | 7 +-
.../testsources/StructFieldWithArguments.java | 7 +-
.../testsources/StructFieldWithExtraArgs.java | 3 +-
.../StructFieldWithExtraKeywords.java | 3 +-
.../StructFieldWithInvalidInfo.java | 3 +-
.../testsources/ToggledKwargsParam.java | 3 +-
.../ToggledParamNoDisabledValue.java | 3 +-
.../testsources/TooManyArguments.java | 3 +-
.../build/lib/syntax/EvalUtilsTest.java | 10 +--
.../build/lib/syntax/MethodLibraryTest.java | 3 +-
.../lib/syntax/SkylarkEvaluationTest.java | 8 +-
.../lib/syntax/SkylarkInterfaceUtilsTest.java | 15 ++--
.../build/lib/syntax/SkylarkTypeTest.java | 8 +-
.../lib/syntax/StarlarkFlagGuardingTest.java | 3 +-
119 files changed, 543 insertions(+), 403 deletions(-)
create mode 100644 src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DoesntImplementSkylarkValue.java
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 31aaa638750229..a876bec9f4def4 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 5431c8dd9c437b..c7dec590630bdf 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 @@ package(
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 @@ java_library(
],
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 26df081ad2eca9..e6a1f9efb4486d 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 025f749db39feb..9dddcc01f2151e 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 1a5feb0a8eb2e1..1e5058f03b6a2c 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 c445eb9e1322d0..71ee936eef47fb 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 Rules page 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 Rules page 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 da524123b22cf5..c645e5888baa2c 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 6fb18ea692f341..a55ff00431bb8a 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 {
+public interface FilesToRunProviderApi 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 53bc977177d329..eae1e35d9de9d5 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 c264b011645410..1401f185052d38 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:
ctx.fragments.apple"
+ "Note that rules have to declare their required fragments in order to access them "
+ "(see here).")
-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 6082ba850b35af..73f0f9ecbbb1ce 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 cdc9de0888a9d8..e43073c4a4a1b6 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 2aaeb7a8ee0ad3..2d14e41c856e94 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 228b838091cc2e..e4c9d0a32cc7b8 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 "
+ "None values, and treat them as if the attribute was unset. "
- + "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 549e8640eae877..9bfdc5a44d4c8d 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 790ac7dd15ad7c..967c4f186ebf30 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 struct with the following fields:"
- + "
"
- + "
label
Label Target.label The identifier of the "
- + "target.
"
- + "
files
depset Target.files The set of "
- + "Files produced directly by this "
- + "target.
"
- + "
aspect_ids
list Target.aspect_ids The list of "
- + "aspect_ids applied to this "
- + "target.
"
- + "
Extra providers
For rule targets all "
- + "additional providers provided by this target are accessible as struct "
- + "fields. These extra providers are defined in the struct returned by the "
- + "rule implementation function.
"
- + "
"
-)
-public interface TransitiveInfoCollectionApi {
+ name = "Target",
+ category = SkylarkModuleCategory.BUILTIN,
+ doc =
+ "A BUILD target. It is essentially a struct with the following fields:"
+ + "
label
Label Target.label The identifier of the "
+ + "target.
files
depset Target.files The set of Files produced directly by this "
+ + "target.
aspect_ids
list Target.aspect_ids The list"
+ + " of aspect_ids applied to this "
+ + "target.
Extra providers
For"
+ + " rule targets all additional providers provided by this target are accessible as"
+ + " struct fields. These extra providers are defined in the"
+ + " struct returned by the rule implementation function.
")
+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 3cc126f15addf8..92ff890090180a 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 404c2ada1ef6f1..363fb694646903 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 f6bfc562a9e476..2a03d90592a79e 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 c3a26cfdbec7d1..920778f3467317 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 5ebe8257cc9bad..1049f13693a31b 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 be95a45d02453e..464988989a3570 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 android field on a "
+ "target.",
documented = false)
-public interface AndroidSkylarkApiProviderApi {
+public interface AndroidSkylarkApiProviderApi extends SkylarkValue {
@SkylarkCallable(
name = "apk",
@@ -152,7 +153,7 @@ public interface AndroidSkylarkApiProviderApi {
+ "it, you will be broken when it is removed."
+ "Provides access to information about Android rules.",
documented = false)
- interface IdlInfoApi {
+ interface IdlInfoApi 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 76c6bd18d08535..ab0d5d261a9847 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> {
+public interface AndroidSkylarkCommonApi>
+ 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 bf9e66a0a07859..b7f4f9dc609137 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 @@ public interface DataBindingV2ProviderApi extends StructApi {
"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 f8e772dae954c3..1b2b7d11c3b3be 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 30fb3a67d2ca3e..3e8918107588fd 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,
- ? extends AndroidManifestInfoApi>> {
+ FileT extends FileApi,
+ AndroidResourcesInfoT extends
+ AndroidResourcesInfoApi<
+ FileT,
+ ? extends ValidatedAndroidDataApi,
+ ? extends AndroidManifestInfoApi>>
+ 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 7f646f672bc049..5a7c2e6a1c734f 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 8d5e042e58f3c5..8a7a8c65af338a 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 {
+ category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT)
+public interface AppleConfigurationApi
+ 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 e097692e028d3b..14698ea137fdb5 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> {
+ doc = "Utilities for resolving items from the Apple toolchain.")
+public interface AppleToolchainApi>
+ 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 0af2f36d0e4688..b4be93d862821e 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 1109e45b9007a8..88e50aae4f86d5 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 {
+ name = "objc",
+ category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT,
+ doc = "A configuration fragment for Objective-C.")
+public interface ObjcConfigurationApi
+ 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 bfea06043ccbe9..24d5057a8ace0b 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 73fee38d600080..7127909b1ebca3 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 fb0df89f4f3cd7..bda051669bec03 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 fcb119600fe67c..fe5b519ec7eec6 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 {
+public interface CcCompilationOutputsApi 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 bdba1bc97140f1..51fa062ed94e27 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 {
+public interface CcLinkingContextApi 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 71286aaeb76db4..bae0f353733c22 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 {
+public interface CcLinkingOutputsApi 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 542e95131ea882..668a934398ebda 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,
- LinkingContextT extends CcLinkingContextApi>,
- LibraryToLinkT extends LibraryToLinkApi,
- CcToolchainVariablesT extends CcToolchainVariablesApi,
- SkylarkRuleContextT extends SkylarkRuleContextApi,
- CcToolchainConfigInfoT extends CcToolchainConfigInfoApi,
- CompilationOutputsT extends CcCompilationOutputsApi> {
+ SkylarkActionFactoryT extends SkylarkActionFactoryApi,
+ FileT extends FileApi,
+ CcToolchainProviderT extends CcToolchainProviderApi>,
+ FeatureConfigurationT extends FeatureConfigurationApi,
+ CompilationContextT extends CcCompilationContextApi,
+ LinkerInputT extends LinkerInputApi,
+ LinkingContextT extends CcLinkingContextApi>,
+ LibraryToLinkT extends LibraryToLinkApi,
+ CcToolchainVariablesT extends CcToolchainVariablesApi,
+ SkylarkRuleContextT extends SkylarkRuleContextApi,
+ CcToolchainConfigInfoT extends CcToolchainConfigInfoApi,
+ CompilationOutputsT extends CcCompilationOutputsApi>
+ 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 79fe8a1d8cca9c..3788c1b46cb927 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 cc field "
- + "on target."
-)
-public interface CcSkylarkApiProviderApi {
+ name = "CcSkylarkApiProvider",
+ category = SkylarkModuleCategory.PROVIDER,
+ doc =
+ "Provides access to information about C++ rules. Every C++-related target provides this"
+ + " struct, accessible as a cc field on target.")
+public interface CcSkylarkApiProviderApi 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 2ac30a3e001e00..6718b29ebb7061 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 a40815906dac52..9dd0594a7ce054 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 55f2d43d153501..dd403a1abe7922 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 {
+ name = "cpp",
+ doc = "A configuration fragment for C++.",
+ category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT)
+public interface CppConfigurationApi
+ 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 a406c6e55c4f5d..c99e7bfad2c909 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 05eac4987a71b2..1bfc17f1c139a4 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 {
+public interface LibraryToLinkApi 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 10371d64a8ca9c..a82f7699770b72 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 extends FileApi> {
+ LibraryToLinkT extends LibraryToLinkApi, 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 3dbc4b4a9b334c..7cf889cab0a326 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 07c7be6e96fd51..27eede4b4a0047 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,
- CompilationInfoT extends CompilationInfoApi,
- FileT extends FileApi,
- CcCompilationContextT extends CcCompilationContextApi,
- WrapCcIncludeProviderT extends WrapCcIncludeProviderApi> {
+ FeatureConfigurationT extends FeatureConfigurationApi,
+ SkylarkRuleContextT extends SkylarkRuleContextApi,
+ CcToolchainProviderT extends CcToolchainProviderApi,
+ 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 3a72cd37052603..d896d5623585ab 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 5fb790546f26be..6be778c424eb70 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 {
+public interface JavaAnnotationProcessingApi 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 31b659d317318c..23295ba40d925c 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 {
+public interface JavaCcLinkParamsProviderApi 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 99d5d902a41e32..bdeacbaacb483b 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,
- JavaToolchainT extends JavaToolchainSkylarkApiProviderApi,
- JavaRuntimeT extends JavaRuntimeInfoApi,
- SkylarkRuleContextT extends SkylarkRuleContextApi,
- SkylarkActionFactoryT extends SkylarkActionFactoryApi> {
+ FileT extends FileApi,
+ JavaInfoT extends JavaInfoApi,
+ 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 b344eef0488f84..7127cbeb498e42 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 {
+public interface JavaCompilationInfoProviderApi extends SkylarkValue {
@SkylarkCallable(name = "javac_options", structField = true, doc = "Options to java compiler.")
public ImmutableList 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 7f314cd0119089..78ab970a32676d 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 e06096f5c05407..7679b522c9b6a1 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 {
+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 778a1bf1f6368d..faadd826e3f250 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> {
+public interface JavaRuleOutputJarsProviderApi>
+ extends SkylarkValue {
@SkylarkCallable(name = "jars", doc = "A list of jars the rule outputs.", structField = true)
public ImmutableList 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 8c80ca8aeee7d8..78261db1393c37 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 /**/ 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 f1001164012161..c6cd44bb2ef733 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"
+ " instead.")
@StarlarkDeprecated
-public interface JavaSkylarkApiProviderApi {}
+public interface JavaSkylarkApiProviderApi 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 5ef2cd70341f80..dcc01af11fa159 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 {
+public interface OutputJarApi 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 e07a30b3d20c7f..6413346fcb5172 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 06841e91cbc351..c2e551f57da739 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 3c36c8524f285f..94d9d30e4dc6a4 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 "
+ "rules_proto"
+ "")
-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 1cd58f349b4121..16295b0c1ae0f7 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 0003f557a1eeac..c0311af89f7996 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 7ac322f13c8e7d..51a3b71e6df446 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 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 4b28d0cbad8fe2..3f7e470eff9a4b 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 implementation function when you create a"
- + " repository rule."
-)
-public interface SkylarkRepositoryContextApi {
+ + " repository rule.")
+public interface SkylarkRepositoryContextApi
+ 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 42d7d5f69fa926..c005b2024330de 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 6a6c2ac21da258..30a43667a550cc 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.
*
- *
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.
+ *
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 d3f25f82bb0ac1..f44420c549584c 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 @@ default void debugPrint(SkylarkPrinter printer) {
*
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 0a98d5ca5423a4..48b7ea74ece002 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 @@
*
The method must be non-static.
*
If structField=true, there must be zero user-supplied parameters.
*
Method parameters must be supplied in the following order:
- *
- * 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.
*
The number of method parameters must match the number of annotation-declared parameters
* plus the number of interpreter-supplied parameters.
*
Each parameter, if explicitly typed, may only use either 'type' or 'allowedTypes', not
* both.
*
Parameters may not specify their generic types (they must use the ? wildcard
* exclusively.
- *
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).
+ *
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).
*
Each parameter must be positional or named (or both).
*
Positional-only parameters must be specified before any named parameters.
*
Positional parameters must be specified before any non-positional parameters.
@@ -71,12 +73,18 @@
*
Each class may only have one annotated method with selfCall=true.
*
A method annotated with selfCall=true must have a non-empty name.
*
A method annotated with selfCall=true must have structField=false.
+ *
The method's class must implement SkylarkValue.
*
*
*
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 @@ public final class SkylarkCallableProcessor extends AbstractProcessor {
"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 @@ public SourceVersion getSupportedSourceVersion() {
}
@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 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 @@ public boolean process(Set extends TypeElement> annotations, RoundEnvironment
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 @@ private void verifyExtraInterpreterParams(ExecutableElement methodElement,
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 08c71f589466d0..370ccd616f2eff 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 @@ public static boolean isImmutable(Object o) {
}
/**
- * 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 @@ public static boolean isSkylarkAcceptable(Class> c) {
|| 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 a81b05863a06d1..6d6758c7b2d41f 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 @@ public MutableList> zip(SkylarkList> args, Location loc, StarlarkThread thre
+ "100 % -7 # -5 (unlike in some other languages)\n"
+ "int(\"18\")\n"
+ "")
- public static final class IntModule {}
+ static final class IntModule implements SkylarkValue {} // (documentation only)
/** Skylark bool type. */
@SkylarkModule(
@@ -1244,7 +1245,7 @@ public static final class IntModule {}
+ "False. "
+ "Any value can be converted to a boolean using the "
+ "bool 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 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 ef5718204cac1b..3c3e6f67443cae 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: "
- + "
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
"
- + "Strings are iterable and support the in operator. Examples: "
- + "
\"bc\" in \"abcd\" # evaluates to True\n"
- + "x = [s for s in \"abc\"] # x == [\"a\", \"b\", \"c\"]
\n"
- + "Implicit concatenation of strings is not allowed; use the + "
- + "operator instead. Comparison operators perform a lexicographical comparison; "
- + "use == 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: "
+ + "
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
"
+ + "Strings are iterable and support the in operator. Examples: "
+ + "
\"bc\" in \"abcd\" # evaluates to True\n"
+ + "x = [s for s in \"abc\"] # x == [\"a\", \"b\", \"c\"]
\n"
+ + "Implicit concatenation of strings is not allowed; use the + "
+ + "operator instead. Comparison operators perform a lexicographical comparison; "
+ + "use == to test for equality.")
+public final class StringModule implements SkylarkValue {
private StringModule() {}
@@ -1116,5 +1116,5 @@ public Boolean startsWith(String self, Object sub, Integer start, Object end)
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 a4d0c20f9b96a2..05962c29922231 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 @@ public Integer one() {
}
/** 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 @@ public Integer two() {
}
/** 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 f312932a7a73a9..2d89c1ae1809f1 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 @@ public void testDirectJavaMethodsAreGenerated() throws Exception {
/** 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 @@ public Integer get() {
/** 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 @@ public Integer get() {
/** 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 @@ public Integer test(int a, int b, int c, int d, SkylarkList> args) {
/** 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 @@ public Integer test(int a, int b, int c, int d, SkylarkDict, ?> kwargs) {
/** 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 @@ public Integer test(int a, int b, int c, int d, SkylarkList> args, SkylarkDict
@SkylarkModule(
name = "MockClassWithContainerReturnValues",
doc = "MockClassWithContainerReturnValues")
- private static class MockClassWithContainerReturnValues {
+ private static class MockClassWithContainerReturnValues implements SkylarkValue {
@SkylarkCallable(name = "depset", doc = "depset")
public SkylarkNestedSet /**/ getNestedSet() {
@@ -245,9 +246,8 @@ public SkylarkList getSkylarkList() {
}
/** 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 @@ public Integer two() {
}
/** 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 @@ public SubclassOfMockClassCommonNameOne getOneSubclass() {
}
/** 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 @@ public Integer two() {
}
/** 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 ee74719c7e275f..400594a0d0cb3b 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 @@ public DiffResetOptions getHost() {
}
@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 e22f62e52622d2..b92c36e8e22619 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 @@ public void testEmptySkylarkConfigurationFragmentPolicySetup_HasNonNullPolicy()
}
@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 93b4d0498bd8e9..f196288f48a63b 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 953363cc3d4d24..783b58b46b484c 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 @@ public static final class AOptions extends FragmentOptions {
/** 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 @@ public static final class BOptions extends FragmentOptions {
/** 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 @@ public static final class COptions extends FragmentOptions {
/** 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 @@ public static final class DOptions extends FragmentOptions {
/** 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 @@ public static final class EOptions extends FragmentOptions {
/** 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 1aad801e874644..898c6fe8f2759b 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 @@ public void testInvalidNoneableParameter() throws Exception {
"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 9265adc7e25496..fcfdb32b488b86 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 e72140216feaf5..028841c50232fa 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 16e4edbf04a111..2ea9c46d0116b3 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 5efd975279d48e..87784725f465ee 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 00000000000000..16c7cf39896ace
--- /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 1200f7f7473af1..b3d461805928ec 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 43db8432124c56..27d282071a79f3 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 69d4d919459ad1..c46a66e830e429 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 55c7dd65aaa55c..038c0071e6cee1 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 de7f3f13c5d41d..a3200bff7fa295 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 69fbb363cc2123..b96f94b796506f 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 class InvalidNoneableParameter {
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 a34cb5c5c64eef..57767c64e52f47 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 fcac8b03ecf1f6..458c56c88cd774 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 674df6782546c6..65fca815971e64 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 3e736f8d11bf69..98bb5299e14897 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 7c7bb1cb591fd1..b02234b180d9b6 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 a3b601d664647a..86669e69e19345 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 74ae4ea614489c..64857382fa8813 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 713f52e1f07947..1ee618ae3b0381 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 88d2c14760e544..369f98ccface85 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 769600d8b19070..4b17a3ca05cbf8 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 e096bf58100f1e..a3f76b58cdd02b 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 9eeed844080317..f0545f54c81f35 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 770d944274bd40..721d78abf49ffe 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 c852451f8026bd..0d0755c5cc492f 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 21e40216dc1fab..76ed47ef905a87 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 fd0e498e2552f6..b929c9a03996fc 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 9ec61660810ffc..eaadbccf829fa3 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 8c8c5081cee637..1472480f67513d 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 90551724656f56..a98f7dc4627f49 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 0bab6a895a5a41..4d77ae6dd1bd13 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 63e9638b193d1d..d0eded9471b77a 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 ed2d8d332f3561..e75acee1a94618 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 2c6e17fe91e635..cd0540bdeae405 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 a24a6917127655..a834dcb216c1f7 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 @@ private static SkylarkDict