From 15c9ec4319011f42c9322cd42ceeead64af62993 Mon Sep 17 00:00:00 2001 From: cparsons Date: Thu, 1 Mar 2018 14:06:51 -0800 Subject: Migrate a few trivial uses of @SkylarkSignature to use @SkylarkCallable instead RELNOTES: None. PiperOrigin-RevId: 187531006 --- .../lib/analysis/TransitiveInfoCollection.java | 21 ++++++ .../lib/analysis/skylark/SkylarkCommandLine.java | 23 ++----- .../skylark/SkylarkRuleClassFunctions.java | 29 --------- .../build/lib/rules/objc/AppleSkylarkCommon.java | 76 ++++++++-------------- .../build/lib/rules/test/SkylarkTestingModule.java | 44 +++---------- .../devtools/build/lib/syntax/MethodLibrary.java | 18 ----- .../devtools/build/lib/syntax/SkylarkDict.java | 19 ++++++ 7 files changed, 84 insertions(+), 146 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java index 5cb79fda16..e557cc211f 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java @@ -14,12 +14,19 @@ package com.google.devtools.build.lib.analysis; +import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.packages.RequiredProviders; +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.SkylarkModuleCategory; import com.google.devtools.build.lib.syntax.SkylarkIndexable; +import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import javax.annotation.Nullable; /** @@ -62,6 +69,20 @@ import javax.annotation.Nullable; ) public interface TransitiveInfoCollection extends SkylarkIndexable, SkylarkProviderCollection { + @SkylarkCallable(name = "output_group", + documented = false, // TODO(dslomov): document. + parameters = { + @Param(name = "group_name", type = String.class, doc = "Output group name") + } + ) + default SkylarkNestedSet outputGroup(String group) { + OutputGroupInfo provider = OutputGroupInfo.get(this); + NestedSet result = provider != null + ? provider.getOutputGroup(group) + : NestedSetBuilder.emptySet(Order.STABLE_ORDER); + return SkylarkNestedSet.of(Artifact.class, result); + } + /** * Returns the transitive information provider requested, or null if the provider is not found. * The provider has to be a TransitiveInfoProvider Java class. diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkCommandLine.java index 0bbc29ae1a..6dd7b7f258 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkCommandLine.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkCommandLine.java @@ -17,12 +17,10 @@ package com.google.devtools.build.lib.analysis.skylark; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.collect.nestedset.NestedSet; 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.SkylarkModuleCategory; -import com.google.devtools.build.lib.skylarkinterface.SkylarkSignature; -import com.google.devtools.build.lib.syntax.BuiltinFunction; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; -import com.google.devtools.build.lib.syntax.SkylarkSignatureProcessor; /** A Skylark module class to create memory efficient command lines. */ @SkylarkModule( @@ -33,10 +31,8 @@ import com.google.devtools.build.lib.syntax.SkylarkSignatureProcessor; ) public class SkylarkCommandLine { - @SkylarkSignature( + @SkylarkCallable( name = "join_paths", - objectType = SkylarkCommandLine.class, - returnType = String.class, doc = "Deprecated. Creates a single command line argument joining the paths of a set " + "of files on the separator string.", @@ -50,16 +46,9 @@ public class SkylarkCommandLine { ) } ) - private static BuiltinFunction joinPaths = - new BuiltinFunction("join_paths") { - public String invoke(String separator, SkylarkNestedSet files) { - NestedSet artifacts = files.getSet(Artifact.class); - // TODO(bazel-team): lazy evaluate - return Artifact.joinExecPaths(separator, artifacts); - } - }; - - static { - SkylarkSignatureProcessor.configureSkylarkFunctions(SkylarkCommandLine.class); + public String joinPaths(String separator, SkylarkNestedSet files) { + NestedSet artifacts = files.getSet(Artifact.class); + // TODO(bazel-team): lazy evaluate + return Artifact.joinExecPaths(separator, artifacts); } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java index 5e30bb4abe..b58432c1ef 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java @@ -32,12 +32,10 @@ import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ActionsProvider; import com.google.devtools.build.lib.analysis.BaseRuleClasses; import com.google.devtools.build.lib.analysis.DefaultInfo; import com.google.devtools.build.lib.analysis.OutputGroupInfo; -import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.config.ConfigAwareRuleClassBuilder; import com.google.devtools.build.lib.analysis.config.HostTransition; import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition; @@ -46,9 +44,6 @@ import com.google.devtools.build.lib.analysis.test.TestConfiguration; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.cmdline.LabelValidator; -import com.google.devtools.build.lib.collect.nestedset.NestedSet; -import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; -import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.AttributeMap; @@ -91,7 +86,6 @@ import com.google.devtools.build.lib.syntax.Runtime; import com.google.devtools.build.lib.syntax.SkylarkCallbackFunction; import com.google.devtools.build.lib.syntax.SkylarkDict; import com.google.devtools.build.lib.syntax.SkylarkList; -import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import com.google.devtools.build.lib.syntax.SkylarkSignatureProcessor; import com.google.devtools.build.lib.syntax.SkylarkType; import com.google.devtools.build.lib.syntax.SkylarkUtils; @@ -1248,29 +1242,6 @@ public class SkylarkRuleClassFunctions { } }; - @SkylarkSignature(name = "output_group", - documented = false, // TODO(dslomov): document. - objectType = TransitiveInfoCollection.class, - returnType = SkylarkNestedSet.class, - parameters = { - @Param(name = "self", type = TransitiveInfoCollection.class, doc = - "this target" - ), - @Param(name = "group_name", type = String.class, doc = - "Output group name" - ) - } - ) - private static final BuiltinFunction output_group = new BuiltinFunction("output_group") { - public SkylarkNestedSet invoke(TransitiveInfoCollection self, String group) { - OutputGroupInfo provider = OutputGroupInfo.get(self); - NestedSet result = provider != null - ? provider.getOutputGroup(group) - : NestedSetBuilder.emptySet(Order.STABLE_ORDER); - return SkylarkNestedSet.of(Artifact.class, result); - } - }; - static { SkylarkSignatureProcessor.configureSkylarkFunctions(SkylarkRuleClassFunctions.class); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java index d72a550377..5e8881adff 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java @@ -403,13 +403,10 @@ public class AppleSkylarkCommon { } }; - @SkylarkSignature( + @SkylarkCallable( name = "new_dynamic_framework_provider", - objectType = AppleSkylarkCommon.class, - returnType = AppleDynamicFrameworkInfo.class, doc = "Creates a new AppleDynamicFramework provider instance.", parameters = { - @Param(name = "self", type = AppleSkylarkCommon.class, doc = "The apple_common instance."), @Param( name = AppleDynamicFrameworkInfo.DYLIB_BINARY_FIELD_NAME, type = Artifact.class, @@ -452,35 +449,29 @@ public class AppleSkylarkCommon { ) } ) - public static final BuiltinFunction NEW_DYNAMIC_FRAMEWORK_PROVIDER = - new BuiltinFunction("new_dynamic_framework_provider") { - @SuppressWarnings("unused") - // This method is registered statically for skylark, and never called directly. - public AppleDynamicFrameworkInfo invoke( - AppleSkylarkCommon self, - Artifact dylibBinary, - ObjcProvider depsObjcProvider, - Object dynamicFrameworkDirs, - Object dynamicFrameworkFiles) { - NestedSet frameworkDirs; - if (dynamicFrameworkDirs == Runtime.NONE) { - frameworkDirs = NestedSetBuilder.emptySet(Order.STABLE_ORDER); - } else { - Iterable pathStrings = - ((SkylarkNestedSet) dynamicFrameworkDirs).getSet(String.class); - frameworkDirs = - NestedSetBuilder.stableOrder() - .addAll(Iterables.transform(pathStrings, PathFragment::create)) - .build(); - } - NestedSet frameworkFiles = - dynamicFrameworkFiles != Runtime.NONE - ? ((SkylarkNestedSet) dynamicFrameworkFiles).getSet(Artifact.class) - : NestedSetBuilder.emptySet(Order.STABLE_ORDER); - return new AppleDynamicFrameworkInfo( - dylibBinary, depsObjcProvider, frameworkDirs, frameworkFiles); - } - }; + public AppleDynamicFrameworkInfo newDynamicFrameworkProvider( + Artifact dylibBinary, + ObjcProvider depsObjcProvider, + Object dynamicFrameworkDirs, + Object dynamicFrameworkFiles) { + NestedSet frameworkDirs; + if (dynamicFrameworkDirs == Runtime.NONE) { + frameworkDirs = NestedSetBuilder.emptySet(Order.STABLE_ORDER); + } else { + Iterable pathStrings = + ((SkylarkNestedSet) dynamicFrameworkDirs).getSet(String.class); + frameworkDirs = + NestedSetBuilder.stableOrder() + .addAll(Iterables.transform(pathStrings, PathFragment::create)) + .build(); + } + NestedSet frameworkFiles = + dynamicFrameworkFiles != Runtime.NONE + ? ((SkylarkNestedSet) dynamicFrameworkFiles).getSet(Artifact.class) + : NestedSetBuilder.emptySet(Order.STABLE_ORDER); + return new AppleDynamicFrameworkInfo( + dylibBinary, depsObjcProvider, frameworkDirs, frameworkFiles); + } @SkylarkCallable( name = "link_multi_arch_binary", @@ -503,31 +494,20 @@ public class AppleSkylarkCommon { } } - @SkylarkSignature( + @SkylarkCallable( name = "dotted_version", - objectType = AppleSkylarkCommon.class, - returnType = DottedVersion.class, doc = "Creates a new DottedVersion instance.", parameters = { - @Param(name = "self", type = AppleSkylarkCommon.class, doc = "The apple_common instance."), @Param( name = "version", type = String.class, - named = false, - positional = false, doc = "The string representation of the DottedVersion." ) } ) - public static final BuiltinFunction DOTTED_VERSION = - new BuiltinFunction("dotted_version") { - @SuppressWarnings("unused") - // This method is registered statically for skylark, and never called directly. - public DottedVersion invoke( - AppleSkylarkCommon self, String version) { - return DottedVersion.fromString(version); - } - }; + public DottedVersion dottedVersion(String version) { + return DottedVersion.fromString(version); + } @SkylarkCallable( name = "objc_proto_aspect", diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/SkylarkTestingModule.java b/src/main/java/com/google/devtools/build/lib/rules/test/SkylarkTestingModule.java index d95302634f..a2fa110a85 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/test/SkylarkTestingModule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/test/SkylarkTestingModule.java @@ -16,11 +16,9 @@ package com.google.devtools.build.lib.rules.test; import com.google.devtools.build.lib.analysis.test.ExecutionInfo; import com.google.devtools.build.lib.analysis.test.TestEnvironmentInfo; 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.SkylarkSignature; -import com.google.devtools.build.lib.syntax.BuiltinFunction; import com.google.devtools.build.lib.syntax.SkylarkDict; -import com.google.devtools.build.lib.syntax.SkylarkSignatureProcessor; /** A class that exposes testing infrastructure to skylark. */ @SkylarkModule( @@ -29,17 +27,13 @@ import com.google.devtools.build.lib.syntax.SkylarkSignatureProcessor; ) public class SkylarkTestingModule { - // TODO(bazel-team): Change this BuiltinFunction to be the actual - // ExecutionInfo.PROVIDER. - @SkylarkSignature( + // TODO(bazel-team): Change this BuiltinFunction to be the actual ExecutionInfo.PROVIDER. + @SkylarkCallable( name = "ExecutionInfo", - objectType = SkylarkTestingModule.class, - returnType = ExecutionInfo.class, doc = "Creates a new execution info provider. Use this provider to specify special" + "environments requirements needed to run tests.", parameters = { - @Param(name = "self", type = SkylarkTestingModule.class, doc = "The 'testing' instance."), @Param( name = "requirements", type = SkylarkDict.class, @@ -52,26 +46,17 @@ public class SkylarkTestingModule { ) } ) - public static final BuiltinFunction NEW_EXECUTION_INFO_PROVIDER = - new BuiltinFunction("ExecutionInfo") { - @SuppressWarnings("unused") - // This method is registered statically for skylark, and never called directly. - public ExecutionInfo invoke(SkylarkTestingModule self, SkylarkDict requirements) { - return new ExecutionInfo(requirements); - } - }; + public ExecutionInfo executionInfo(SkylarkDict requirements) { + return new ExecutionInfo(requirements); + } - // TODO(bazel-team): Change this BuiltinFunction to be the actual - // TestEnvironmentInfo.PROVIDER. - @SkylarkSignature( + // TODO(bazel-team): Change this BuiltinFunction to be the actual TestEnvironmentInfo.PROVIDER. + @SkylarkCallable( name = "TestEnvironment", - objectType = SkylarkTestingModule.class, - returnType = TestEnvironmentInfo.class, doc = "Creates a new test environment provider. Use this provider to specify extra" + "environment variables to be made available during test execution.", parameters = { - @Param(name = "self", type = SkylarkTestingModule.class, doc = "The 'testing' instance."), @Param( name = "environment", type = SkylarkDict.class, @@ -83,16 +68,7 @@ public class SkylarkTestingModule { ) } ) - public static final BuiltinFunction NEW_TEST_ENVIRONMENT_PROVIDER = - new BuiltinFunction("TestEnvironment") { - @SuppressWarnings("unused") - // This method is registered statically for skylark, and never called directly. - public TestEnvironmentInfo invoke(SkylarkTestingModule self, SkylarkDict environment) { - return new TestEnvironmentInfo(environment); - } - }; - - static { - SkylarkSignatureProcessor.configureSkylarkFunctions(SkylarkTestingModule.class); + public TestEnvironmentInfo testEnvironment(SkylarkDict environment) { + return new TestEnvironmentInfo(environment); } } 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 55781cef82..59135375e4 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 @@ -1547,24 +1547,6 @@ public class MethodLibrary { } }; - @SkylarkSignature(name = "get", objectType = SkylarkDict.class, - doc = "Returns the value for key if key is in the dictionary, " - + "else default. If default is not given, it defaults to " - + "None, so that this method never throws an error.", - parameters = { - @Param(name = "self", doc = "This dict."), - @Param(name = "key", doc = "The key to look for."), - @Param(name = "default", defaultValue = "None", - doc = "The default value to use (instead of None) if the key is not found.")}) - private static final BuiltinFunction get = new BuiltinFunction("get") { - public Object invoke(SkylarkDict self, Object key, Object defaultValue) { - if (self.containsKey(key)) { - return self.get(key); - } - return defaultValue; - } - }; - @SkylarkSignature( name = "tuple", returnType = Tuple.class, diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java index 3cd3f999bb..8c951cbb44 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java @@ -16,6 +16,8 @@ package com.google.devtools.build.lib.syntax; import com.google.common.annotations.VisibleForTesting; 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.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; @@ -70,6 +72,23 @@ public final class SkylarkDict extends MutableMap this.mutability = env == null ? Mutability.IMMUTABLE : env.mutability(); } + @SkylarkCallable(name = "get", + doc = "Returns the value for key if key is in the dictionary, " + + "else default. If default is not given, it defaults to " + + "None, so that this method never throws an error.", + parameters = { + @Param(name = "key", noneable = true, doc = "The key to look for."), + @Param(name = "default", defaultValue = "None", noneable = true, named = true, + doc = "The default value to use (instead of None) if the key is not found.")}, + allowReturnNones = true + ) + public Object get(Object key, Object defaultValue) { + if (this.containsKey(key)) { + return this.get(key); + } + return defaultValue; + } + private static final SkylarkDict EMPTY = withMutability(Mutability.IMMUTABLE); /** Returns an immutable empty dict. */ -- cgit v1.2.3