diff options
author | Irina Iancu <elenairina@google.com> | 2016-11-07 16:05:07 +0000 |
---|---|---|
committer | Klaus Aehlig <aehlig@google.com> | 2016-11-08 09:13:43 +0000 |
commit | a02eb27e502eab9069c8b17e2bc91743f1260d49 (patch) | |
tree | 96a48fd832ca5d17a75b8d5d28a9e23ed2fb5eea /src/main | |
parent | 76a415910a51143607c3aa80d2a6dddf78576d4a (diff) |
Progress on migrating java_lite_proto_library to Skylark.
--
MOS_MIGRATED_REVID=138391269
Diffstat (limited to 'src/main')
4 files changed, 92 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index c5bc348bdc..62b0cdb913 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -777,6 +777,7 @@ java_library( "rules/java/proto/JavaProtoAspect.java", "rules/java/proto/JavaProtoLibrary.java", "rules/java/proto/JavaProtoLibraryTransitiveFilesToBuildProvider.java", + "rules/java/proto/JavaProtoSkylarkCommon.java", "rules/java/proto/JavaSourceJarsAspectProvider.java", "rules/java/proto/ProtoJavacOpts.java", "rules/java/proto/StrictDepsUtils.java", diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java index 4560718c22..87c85c8624 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java @@ -111,6 +111,7 @@ import com.google.devtools.build.lib.rules.java.JavaOptions; import com.google.devtools.build.lib.rules.java.JavaToolchainRule; import com.google.devtools.build.lib.rules.java.JvmConfigurationLoader; import com.google.devtools.build.lib.rules.java.ProguardLibraryRule; +import com.google.devtools.build.lib.rules.java.proto.JavaProtoSkylarkCommon; import com.google.devtools.build.lib.rules.objc.AppleBinaryRule; import com.google.devtools.build.lib.rules.objc.AppleDynamicLibraryRule; import com.google.devtools.build.lib.rules.objc.AppleSkylarkCommon; @@ -507,6 +508,7 @@ public class BazelRuleClassProvider { builder.addRuleDefinition(new BazelAarImportRule()); builder.addSkylarkAccessibleTopLevels("android_common", new AndroidSkylarkCommon()); + builder.addSkylarkAccessibleTopLevels("java_proto_common", JavaProtoSkylarkCommon.class); try { builder.addWorkspaceFilePrefix( diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java new file mode 100644 index 0000000000..f1cf7d3092 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java @@ -0,0 +1,80 @@ +// Copyright 2016 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.rules.java.proto; + +import static com.google.common.base.Preconditions.checkNotNull; + +import com.google.common.collect.ImmutableList; +import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.analysis.ConfiguredTarget; +import com.google.devtools.build.lib.rules.SkylarkRuleContext; +import com.google.devtools.build.lib.rules.proto.ProtoCompileActionBuilder; +import com.google.devtools.build.lib.rules.proto.ProtoLangToolchainProvider; +import com.google.devtools.build.lib.rules.proto.ProtoSupportDataProvider; +import com.google.devtools.build.lib.skylarkinterface.Param; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; + +/** + * A class that exposes Java common methods for proto compilation. + */ +@SkylarkModule(name = "java_proto_common", doc = "Helper class for Java proto compilation.") +public class JavaProtoSkylarkCommon { + @SkylarkCallable( + name = "create_java_lite_proto_compile_action", + // This function is experimental for now. + documented = false, + // There's 2 mandatory positional arguments, the Skylark context and the ConfiguredTarget. + mandatoryPositionals = 2, + parameters = { + @Param( + name = "src_jar", + positional = false, + named = true, + type = Artifact.class + ), + @Param( + name = "proto_toolchain_attr", + positional = false, + named = true, + type = String.class + ) + } + ) + public static void createProtoCompileAction( + SkylarkRuleContext skylarkRuleContext, + ConfiguredTarget target, + Artifact sourceJar, + String protoToolchainAttr) { + ProtoCompileActionBuilder.registerActions( + skylarkRuleContext.getRuleContext(), + ImmutableList.of( + new ProtoCompileActionBuilder.ToolchainInvocation( + "javalite", + getProtoToolchainProvider(skylarkRuleContext, protoToolchainAttr), + sourceJar.getExecPathString())), + checkNotNull(target.getProvider(ProtoSupportDataProvider.class).getSupportData()), + ImmutableList.of(sourceJar), + "JavaLite", + true /* allowServices */); + } + + private static ProtoLangToolchainProvider getProtoToolchainProvider( + SkylarkRuleContext skylarkRuleContext, String protoToolchainAttr) { + ConfiguredTarget javaliteToolchain = (ConfiguredTarget) checkNotNull( + skylarkRuleContext.getAttr().getValue(protoToolchainAttr)); + return checkNotNull(javaliteToolchain.getProvider(ProtoLangToolchainProvider.class)); + } +} diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java index 48be2587bc..8f0cab912d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java @@ -25,6 +25,8 @@ import com.google.devtools.build.lib.analysis.config.FragmentOptions; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.common.options.Option; import java.util.List; @@ -32,6 +34,13 @@ import java.util.List; * Configuration for Protocol Buffer Libraries. */ @Immutable +// This module needs to be exported to Skylark so it can be passed as a mandatory host/target +// configuration fragment in aspect definitions. +@SkylarkModule( + name = "proto", + category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT, + doc = "A configuration fragment representing protocol buffers." +) public class ProtoConfiguration extends Fragment { /** |