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: - *
    method([positionals]*[other user-args](Location)(FuncallExpression)(Environment))
    + *       
    method([positionals]*[other user-args](Location)(FuncallExpression)(StarlarkThread))
      *       
    - * 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 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 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 makeDict(StarlarkThread thread) { /** MockClassA */ @SkylarkModule(name = "MockClassA", doc = "MockClassA") - public static class MockClassA { - } + public static class MockClassA implements SkylarkValue {} /** MockClassB */ public static class MockClassB extends MockClassA { @@ -127,11 +126,8 @@ public void testComparatorWithNones() throws Exception { () -> EvalUtils.SKYLARK_COMPARATOR.compare(Runtime.NONE, Runtime.NONE)); } - @SkylarkModule( - name = "ParentType", - doc = "A parent class annotated with @SkylarkModule." - ) - private static class ParentClassWithSkylarkModule {} + @SkylarkModule(name = "ParentType", doc = "A parent class annotated with @SkylarkModule.") + private static class ParentClassWithSkylarkModule implements SkylarkValue {} private static class ChildClass extends ParentClassWithSkylarkModule {} diff --git a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java index 5ca992a80eaae1..d1756bc24b23e6 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java @@ -21,6 +21,7 @@ import com.google.common.collect.Iterables; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; import com.google.devtools.build.lib.syntax.util.EvaluationTestCase; import org.junit.Before; import org.junit.Test; @@ -176,7 +177,7 @@ public void testGetAttrMissingField() throws Exception { } @SkylarkModule(name = "AStruct", documented = false, doc = "") - static final class AStruct implements ClassObject { + static final class AStruct implements ClassObject, SkylarkValue { @Override public Object getValue(String name) { switch (name) { diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java index 3287dcca2da907..829bdc1479417c 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java @@ -126,7 +126,7 @@ public String structFieldNone() { } @SkylarkModule(name = "Mock", doc = "") - static class Mock { + static class Mock implements SkylarkValue { @SkylarkCallable( name = "MockFn", selfCall = true, @@ -513,7 +513,7 @@ public String toString() { } @SkylarkModule(name = "MockInterface", doc = "") - static interface MockInterface { + static interface MockInterface extends SkylarkValue { @SkylarkCallable(name = "is_empty_interface", parameters = { @Param(name = "str", type = String.class) }, documented = false) @@ -533,7 +533,7 @@ public Boolean isEmptyInterface(String str) { } @SkylarkModule(name = "MockClassObject", documented = false, doc = "") - static final class MockClassObject implements ClassObject { + static final class MockClassObject implements ClassObject, SkylarkValue { @Override public Object getValue(String name) { switch (name) { @@ -555,7 +555,7 @@ public String getErrorMessageForUnknownField(String name) { } @SkylarkModule(name = "ParamterizedMock", doc = "") - static interface ParameterizedApi { + static interface ParameterizedApi extends SkylarkValue { @SkylarkCallable( name = "method", documented = false, diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java index f20be499f05f54..f2d358aa22217b 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java @@ -20,20 +20,19 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkInterfaceUtils; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; import java.lang.reflect.Method; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -/** - * Test Skylark interface annotations and utilities. - */ +/** Test Skylark interface annotations and utilities. */ @RunWith(JUnit4.class) public class SkylarkInterfaceUtilsTest { /** MockClassA */ @SkylarkModule(name = "MockClassA", doc = "MockClassA") - public static class MockClassA { + public static class MockClassA implements SkylarkValue { @SkylarkCallable(name = "foo", doc = "MockClassA#foo") public void foo() {} @SkylarkCallable(name = "bar", doc = "MockClassA#bar") @@ -43,7 +42,7 @@ public void baz() {} /** MockInterfaceB1 */ @SkylarkModule(name = "MockInterfaceB1", doc = "MockInterfaceB1") - public static interface MockInterfaceB1 { + public static interface MockInterfaceB1 extends SkylarkValue { @SkylarkCallable(name = "foo", doc = "MockInterfaceB1#foo") void foo(); @SkylarkCallable(name = "bar", doc = "MockInterfaceB1#bar") @@ -54,7 +53,7 @@ public static interface MockInterfaceB1 { /** MockInterfaceB2 */ @SkylarkModule(name = "MockInterfaceB2", doc = "MockInterfaceB2") - public static interface MockInterfaceB2 { + public static interface MockInterfaceB2 extends SkylarkValue { @SkylarkCallable(name = "baz", doc = "MockInterfaceB2#baz") void baz(); @SkylarkCallable(name = "qux", doc = "MockInterfaceB2#qux") @@ -100,14 +99,14 @@ public void qux() {} /** ClassAModule test class */ @SkylarkModule(name = "ClassAModule", doc = "ClassAModule") - public static class ClassAModule {} + public static class ClassAModule implements SkylarkValue {} /** ExtendsClassA test class */ public static class ExtendsClassA extends ClassAModule {} /** InterfaceBModule test interface */ @SkylarkModule(name = "InterfaceBModule", doc = "InterfaceBModule") - public static interface InterfaceBModule {} + public static interface InterfaceBModule extends SkylarkValue {} /** ExtendsInterfaceB test interface */ public static interface ExtendsInterfaceB extends InterfaceBModule {} diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkTypeTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkTypeTest.java index 7e09c963f4ecb9..a30bb363d8ee16 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkTypeTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkTypeTest.java @@ -17,6 +17,7 @@ import static com.google.common.truth.Truth.assertThat; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -25,11 +26,8 @@ @RunWith(JUnit4.class) public final class SkylarkTypeTest { - @SkylarkModule( - name = "ParentType", - doc = "A parent class annotated with @SkylarkModule." - ) - private static class ParentClassWithSkylarkModule {} + @SkylarkModule(name = "ParentType", doc = "A parent class annotated with @SkylarkModule.") + private static class ParentClassWithSkylarkModule implements SkylarkValue {} private static class ChildClass extends ParentClassWithSkylarkModule {} diff --git a/src/test/java/com/google/devtools/build/lib/syntax/StarlarkFlagGuardingTest.java b/src/test/java/com/google/devtools/build/lib/syntax/StarlarkFlagGuardingTest.java index faa733911a5645..04321adf441da0 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/StarlarkFlagGuardingTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/StarlarkFlagGuardingTest.java @@ -16,6 +16,7 @@ import com.google.devtools.build.lib.skylarkinterface.Param; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier; import com.google.devtools.build.lib.syntax.util.EvaluationTestCase; import com.google.devtools.build.lib.testutil.TestMode; @@ -38,7 +39,7 @@ public final void setup() throws Exception { /** Mock containing exposed methods for flag-guarding tests. */ @SkylarkModule(name = "Mock", doc = "") - public static class Mock { + public static class Mock implements SkylarkValue { @SkylarkCallable( name = "positionals_only_method",