diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java index 3289a34b0c..0c80f2779a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java @@ -18,6 +18,7 @@ import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTran import static com.google.devtools.build.lib.packages.Attribute.attr; import static com.google.devtools.build.lib.packages.BuildType.LABEL; +import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredAspect; @@ -35,9 +36,12 @@ import com.google.devtools.build.lib.rules.apple.AppleConfiguration; import com.google.devtools.build.lib.rules.apple.AppleToolchain; import com.google.devtools.build.lib.rules.objc.J2ObjcSource.SourceType; import com.google.devtools.build.lib.rules.proto.ProtoCommon; +import com.google.devtools.build.lib.rules.proto.ProtoCompileActionBuilder; import com.google.devtools.build.lib.rules.proto.ProtoConfiguration; import com.google.devtools.build.lib.rules.proto.ProtoSourceFileBlacklist; import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider; +import com.google.devtools.build.lib.rules.proto.ProtoSupportDataProvider; +import com.google.devtools.build.lib.rules.proto.SupportData; import com.google.devtools.build.lib.vfs.PathFragment; /** @@ -113,6 +117,8 @@ public abstract class AbstractJ2ObjcProtoAspect extends NativeAspectClass protected abstract boolean checkShouldCreateAspect(RuleContext ruleContext); + protected abstract boolean allowServices(RuleContext ruleContext); + @Override public ConfiguredAspect create( ConfiguredTarget base, RuleContext ruleContext, AspectParameters parameters) @@ -123,7 +129,6 @@ public abstract class AbstractJ2ObjcProtoAspect extends NativeAspectClass ProtoSourcesProvider protoSourcesProvider = base.getProvider(ProtoSourcesProvider.class); ImmutableList<Artifact> protoSources = protoSourcesProvider.getDirectProtoSources(); - NestedSet<Artifact> transitiveImports = protoSourcesProvider.getTransitiveImports(); // Avoid pulling in any generated files from blacklisted protos. ProtoSourceFileBlacklist protoBlacklist = @@ -156,8 +161,7 @@ public abstract class AbstractJ2ObjcProtoAspect extends NativeAspectClass headerMappingFiles = headerMappingFiles(ruleContext, filteredProtoSources); classMappingFiles = classMappingFiles(ruleContext, filteredProtoSources); - createActions(base, ruleContext, filteredProtoSources, transitiveImports, - headerMappingFiles, classMappingFiles, j2ObjcSource); + createActions(base, ruleContext, headerMappingFiles, classMappingFiles, j2ObjcSource); common = J2ObjcAspect.common( ruleContext, j2ObjcSource.getObjcSrcs(), @@ -194,10 +198,27 @@ public abstract class AbstractJ2ObjcProtoAspect extends NativeAspectClass .build(); } - protected abstract void createActions(ConfiguredTarget base, RuleContext ruleContext, - Iterable<Artifact> protoSources, NestedSet<Artifact> transitiveProtoSources, + private void createActions(ConfiguredTarget base, RuleContext ruleContext, Iterable<Artifact> headerMappingFiles, Iterable<Artifact> classMappingFiles, - J2ObjcSource j2ObjcSource); + J2ObjcSource j2ObjcSource) { + SupportData supportData = base.getProvider(ProtoSupportDataProvider.class).getSupportData(); + ImmutableList<Artifact> outputs = ImmutableList.<Artifact>builder() + .addAll(j2ObjcSource.getObjcSrcs()) + .addAll(j2ObjcSource.getObjcHdrs()) + .addAll(headerMappingFiles) + .addAll(classMappingFiles) + .build(); + String langPluginParameter = String.format( + "%s:%s", + Joiner.on(',').join(J2OBJC_PLUGIN_PARAMS), + ruleContext.getConfiguration().getGenfilesFragment().getPathString()); + ProtoCompileActionBuilder actionBuilder = + new ProtoCompileActionBuilder(ruleContext, supportData, "J2ObjC", "j2objc", outputs) + .setLangPluginName("$j2objc_plugin") + .setLangPluginParameter(langPluginParameter) + .allowServices(allowServices(ruleContext)); + ruleContext.registerAction(actionBuilder.build()); + } private J2ObjcSource j2ObjcSource(RuleContext ruleContext, ImmutableList<Artifact> protoSources) { PathFragment objcFileRootExecPath = ruleContext.getConfiguration() |