From bb406b9b2f7b44d96cd5d0d1202503c19e0e6480 Mon Sep 17 00:00:00 2001 From: cparsons Date: Mon, 4 Dec 2017 11:39:33 -0800 Subject: Expose ObjcProtoProvider as a Skylark object. This does not provide any meaningful API to interact with ObjcProtoProvider from a skylark context -- it simply allows ObjcProtoProvider to be passed between skylark API calls as an opaque object. This helps facilitate exposure of an Apple Linking API to Skylark which will take place in future changes. RELNOTES: None. PiperOrigin-RevId: 177844029 --- .../devtools/build/lib/rules/objc/AppleStaticLibrary.java | 5 +++-- .../com/google/devtools/build/lib/rules/objc/IosTest.java | 2 +- .../build/lib/rules/objc/MultiArchBinarySupport.java | 4 ++-- .../devtools/build/lib/rules/objc/ObjcProtoAspect.java | 4 ++-- .../devtools/build/lib/rules/objc/ObjcProtoLibrary.java | 2 +- .../devtools/build/lib/rules/objc/ObjcProtoProvider.java | 13 +++++++++++-- 6 files changed, 20 insertions(+), 10 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib') diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java index 8b8a27ea8e..54b1072112 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java @@ -85,7 +85,7 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { Mode.SPLIT, CcLinkParamsInfo.PROVIDER); Iterable avoidProtoProviders = ruleContext.getPrerequisites(AppleStaticLibraryRule.AVOID_DEPS_ATTR_NAME, Mode.TARGET, - ObjcProtoProvider.class); + ObjcProtoProvider.SKYLARK_CONSTRUCTOR); NestedSet protosToAvoid = protoArtifactsToAvoid(avoidProtoProviders); Map childConfigurationsAndToolchains = @@ -103,7 +103,8 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { ObjcProvider.Builder objcProviderBuilder = new ObjcProvider.Builder(); ImmutableListMultimap objcProtoProvidersMap = - ruleContext.getPrerequisitesByConfiguration("deps", Mode.SPLIT, ObjcProtoProvider.class); + ruleContext.getPrerequisitesByConfiguration("deps", Mode.SPLIT, + ObjcProtoProvider.SKYLARK_CONSTRUCTOR); Map> outputGroupCollector = new TreeMap<>(); for (Entry childConfigAndToolchain : diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java index 9b5d87a897..436a2aa3d0 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java @@ -89,7 +89,7 @@ public final class IosTest implements RuleConfiguredTargetFactory { + "(https://github.com/bazelbuild/rules_apple) to build Apple targets."); Iterable objcProtoProviders = - ruleContext.getPrerequisites("deps", Mode.TARGET, ObjcProtoProvider.class); + ruleContext.getPrerequisites("deps", Mode.TARGET, ObjcProtoProvider.SKYLARK_CONSTRUCTOR); ProtobufSupport protoSupport = new ProtobufSupport( diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java index 5f2785114d..d2b5be83bd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java @@ -222,7 +222,7 @@ public class MultiArchBinarySupport { throws RuleErrorException, InterruptedException { Iterable dylibObjcProviders = getDylibObjcProviders(dylibProviders); Iterable dylibProtoProviders = - getTypedProviders(dylibProviders, ObjcProtoProvider.class); + getTypedProviders(dylibProviders, ObjcProtoProvider.SKYLARK_CONSTRUCTOR); NestedSet protosToAvoid = protoArtifactsToAvoid(dylibProtoProviders); ImmutableSet.Builder childInfoBuilder = ImmutableSet.builder(); @@ -230,7 +230,7 @@ public class MultiArchBinarySupport { Iterable infoCollections = configToDepsCollectionMap.get(childConfig); Iterable depProtoProviders = - getTypedProviders(infoCollections, ObjcProtoProvider.class); + getTypedProviders(infoCollections, ObjcProtoProvider.SKYLARK_CONSTRUCTOR); Optional protosObjcProvider; if (ObjcRuleClasses.objcConfiguration(ruleContext).enableAppleBinaryNativeProtos()) { ProtobufSupport protoSupport = diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java index 5d74c1bf94..5143484b0a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java @@ -56,7 +56,7 @@ public class ObjcProtoAspect extends NativeAspectClass implements ConfiguredAspe if (ruleContext.attributes().has("deps", BuildType.LABEL_LIST)) { Iterable depObjcProtoProviders = - ruleContext.getPrerequisites("deps", Mode.TARGET, ObjcProtoProvider.class); + ruleContext.getPrerequisites("deps", Mode.TARGET, ObjcProtoProvider.SKYLARK_CONSTRUCTOR); aspectObjcProtoProvider.addTransitive(depObjcProtoProviders); } @@ -105,7 +105,7 @@ public class ObjcProtoAspect extends NativeAspectClass implements ConfiguredAspe // Only add the provider if it has any values, otherwise skip it. if (!aspectObjcProtoProvider.isEmpty()) { - aspectBuilder.addProvider(aspectObjcProtoProvider.build()); + aspectBuilder.addNativeDeclaredProvider(aspectObjcProtoProvider.build()); } return aspectBuilder.build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java index 5a3f00553a..5fa5a1d198 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java @@ -43,7 +43,7 @@ public class ObjcProtoLibrary implements RuleConfiguredTargetFactory { ruleContext.getPrerequisites("deps", Mode.TARGET, ProtoSourcesProvider.class); Iterable objcProtoProviders = - ruleContext.getPrerequisites("deps", Mode.TARGET, ObjcProtoProvider.class); + ruleContext.getPrerequisites("deps", Mode.TARGET, ObjcProtoProvider.SKYLARK_CONSTRUCTOR); ProtobufSupport protoSupport = new ProtobufSupport( diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoProvider.java index b8dd834ff0..2401682a7f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoProvider.java @@ -16,9 +16,10 @@ package com.google.devtools.build.lib.rules.objc; import com.google.common.base.Preconditions; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.packages.NativeInfo; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.vfs.PathFragment; /** @@ -38,7 +39,14 @@ import com.google.devtools.build.lib.vfs.PathFragment; * all the time (whether protos are used or not), the dependency is specified on objc_proto_library * instead. */ -public class ObjcProtoProvider implements TransitiveInfoProvider { +public class ObjcProtoProvider extends NativeInfo { + + /** Skylark name for the ObjcProtoProvider. */ + public static final String SKYLARK_NAME = "ObjcProto"; + + /** Skylark constructor and identifier for AppleExecutableBinaryProvider. */ + public static final NativeProvider SKYLARK_CONSTRUCTOR = + new NativeProvider(ObjcProtoProvider.class, SKYLARK_NAME) {}; private final NestedSet> protoGroups; private final NestedSet protobufHeaders; @@ -50,6 +58,7 @@ public class ObjcProtoProvider implements TransitiveInfoProvider { NestedSet portableProtoFilters, NestedSet protobufHeaders, NestedSet protobufHeaderSearchPaths) { + super(SKYLARK_CONSTRUCTOR); this.protoGroups = Preconditions.checkNotNull(protoGroups); this.portableProtoFilters = Preconditions.checkNotNull(portableProtoFilters); this.protobufHeaders = Preconditions.checkNotNull(protobufHeaders); -- cgit v1.2.3