aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-08-08 10:20:08 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-08 10:21:46 -0700
commit0f232691719ef89a0a1c7be631a84f435894a6ce (patch)
tree59148119a6d4ed3b72c9ccf79e9add7a02b7aeb0
parentbf1db78d75ac6d2fe40742c36f79341859274f50 (diff)
Expose GeneratedExtensionRegistryProvider to Skylark.
RELNOTES: None PiperOrigin-RevId: 207905848
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java132
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java103
6 files changed, 216 insertions, 28 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
index 9466d7060a..e18857f31e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
@@ -678,7 +678,7 @@ public class AndroidCommon {
idlHelper.addTransitiveInfoProviders(builder, classJar, manifestProtoOutput);
if (generatedExtensionRegistryProvider != null) {
- builder.add(GeneratedExtensionRegistryProvider.class, generatedExtensionRegistryProvider);
+ builder.addNativeDeclaredProvider(generatedExtensionRegistryProvider);
}
OutputJar resourceJar = null;
if (resourceApk.getResourceJavaClassJar() != null && resourceSourceJar != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
index 5700cf35d0..b484479169 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
@@ -324,8 +324,7 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
RuleConfiguredTargetBuilder builder = new RuleConfiguredTargetBuilder(ruleContext);
if (generatedExtensionRegistryProvider != null) {
- builder.addProvider(
- GeneratedExtensionRegistryProvider.class, generatedExtensionRegistryProvider);
+ builder.addNativeDeclaredProvider(generatedExtensionRegistryProvider);
}
JavaRuleOutputJarsProvider ruleOutputJarsProvider = javaRuleOutputJarsProviderBuilder.build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
index 6bba8faf1b..45edf6c647 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
@@ -306,7 +306,7 @@ public class JavaBinary implements RuleConfiguredTargetFactory {
new JavaPrimaryClassProvider(
semantics.getPrimaryClass(ruleContext, common.getSrcsArtifacts())));
if (generatedExtensionRegistryProvider != null) {
- builder.add(GeneratedExtensionRegistryProvider.class, generatedExtensionRegistryProvider);
+ builder.addNativeDeclaredProvider(generatedExtensionRegistryProvider);
}
Artifact deployJar =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java
index 317b169c97..2d3e7deacd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java
@@ -177,7 +177,7 @@ public class JavaLibrary implements RuleConfiguredTargetFactory {
semantics.addProviders(ruleContext, common, genSourceJar, builder);
if (generatedExtensionRegistryProvider != null) {
- builder.add(GeneratedExtensionRegistryProvider.class, generatedExtensionRegistryProvider);
+ builder.addNativeDeclaredProvider(generatedExtensionRegistryProvider);
}
JavaCompilationArgsProvider compilationArgsProvider = javaCompilationArgs;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java
index 4aae6dbce7..0c03339c36 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java
@@ -14,15 +14,17 @@
package com.google.devtools.build.lib.rules.java.proto;
-import com.google.auto.value.AutoValue;
import com.google.common.base.Verify;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
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.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Strategy;
+import com.google.devtools.build.lib.packages.BuiltinProvider;
+import com.google.devtools.build.lib.packages.NativeInfo;
+import com.google.devtools.build.lib.skylarkbuildapi.java.GeneratedExtensionRegistryProviderApi;
+import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
/**
* A {@link TransitiveInfoProvider} for {@link Artifact}s created and used to generate the proto
@@ -30,54 +32,138 @@ import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.
* from a target, that the top most target produces a registry that is a superset of any child
* registries.
*/
-@AutoCodec(strategy = Strategy.AUTO_VALUE_BUILDER)
-@AutoValue
@Immutable
-public abstract class GeneratedExtensionRegistryProvider implements TransitiveInfoProvider {
+public final class GeneratedExtensionRegistryProvider extends NativeInfo
+ implements GeneratedExtensionRegistryProviderApi<Artifact> {
+
+ public static final String PROVIDER_NAME = "GeneratedExtensionRegistryProvider";
+ public static final Provider PROVIDER = new Provider();
+
+ private final Label generatingRuleLabel;
+ private final boolean isLite;
+ private final Artifact classJar;
+ private final Artifact srcJar;
+ private final NestedSet<Artifact> inputs;
/** @return the rule label for which this registry was built. */
- public abstract Label getGeneratingRuleLabel();
+ @Override
+ public Label getGeneratingRuleLabel() {
+ return generatingRuleLabel;
+ }
/** @return if this registry was generated for lite or full runtime. */
- public abstract boolean isLite();
+ @Override
+ public boolean isLite() {
+ return isLite;
+ }
/** @return the class jar generated by the registry. */
- public abstract Artifact getClassJar();
+ @Override
+ public Artifact getClassJar() {
+ return classJar;
+ }
/** @return the source jar generated by the registry. */
- public abstract Artifact getSrcJar();
+ @Override
+ public Artifact getSrcJar() {
+ return srcJar;
+ }
/** @return the proto jars used to generate the registry. */
- public abstract NestedSet<Artifact> getInputs();
+ @Override
+ public NestedSet<Artifact> getInputs() {
+ return inputs;
+ }
public static Builder builder() {
- return new AutoValue_GeneratedExtensionRegistryProvider.Builder();
+ return new GeneratedExtensionRegistryProvider.Builder();
+ }
+
+ GeneratedExtensionRegistryProvider(
+ Label generatingRuleLabel,
+ boolean isLite,
+ Artifact classJar,
+ Artifact srcJar,
+ NestedSet<Artifact> inputs) {
+ super(PROVIDER);
+ this.generatingRuleLabel = generatingRuleLabel;
+ this.isLite = isLite;
+ this.classJar = classJar;
+ this.srcJar = srcJar;
+ this.inputs = inputs;
}
/** A builder for {@link GeneratedExtensionRegistryProvider}. */
- @AutoValue.Builder
- public abstract static class Builder {
+ public static class Builder {
+ private Label generatingRuleLabel = null;
+ private boolean isLite = false;
+ private Artifact classJar = null;
+ private Artifact srcJar = null;
+ private NestedSet<Artifact> inputs = null;
/** Sets the rule label for which this registry was built. */
- public abstract Builder setGeneratingRuleLabel(Label label);
+ public Builder setGeneratingRuleLabel(Label label) {
+ this.generatingRuleLabel = label;
+ return this;
+ }
/** Indicates this registry was built for lite runtime if <tt>true</tt>, full otherwise. */
- public abstract Builder setLite(boolean lite);
+ public Builder setLite(boolean lite) {
+ this.isLite = lite;
+ return this;
+ }
/** Sets the class jar containing the generated extension registry. */
- public abstract Builder setClassJar(Artifact classJar);
+ public Builder setClassJar(Artifact classJar) {
+ this.classJar = classJar;
+ return this;
+ }
/** Sets the source jar containing the generated extension registry. */
- public abstract Builder setSrcJar(Artifact srcJar);
+ public Builder setSrcJar(Artifact srcJar) {
+ this.srcJar = srcJar;
+ return this;
+ }
/** Sets the transitive set of protos used to produce the generated extension registry. */
- public abstract Builder setInputs(NestedSet<Artifact> inputs);
+ public Builder setInputs(NestedSet<Artifact> inputs) {
+ this.inputs = inputs;
+ return this;
+ }
- abstract GeneratedExtensionRegistryProvider autoBuild();
public GeneratedExtensionRegistryProvider build() {
- GeneratedExtensionRegistryProvider result = autoBuild();
- Verify.verify(!result.getInputs().isEmpty());
- return autoBuild();
+ Verify.verify(!inputs.isEmpty());
+ return new GeneratedExtensionRegistryProvider(
+ generatingRuleLabel, isLite, classJar, srcJar, inputs);
+ }
+ }
+
+ /** Provider class for {@link GeneratedExtensionRegistryProvider} objects. */
+ public static class Provider extends BuiltinProvider<GeneratedExtensionRegistryProvider>
+ implements GeneratedExtensionRegistryProviderApi.Provider<Artifact> {
+ private Provider() {
+ super(PROVIDER_NAME, GeneratedExtensionRegistryProvider.class);
+ }
+
+ public String getName() {
+ return PROVIDER_NAME;
+ }
+
+ @Override
+ public GeneratedExtensionRegistryProvider create(
+ Label generatingRuleLabel,
+ boolean isLite,
+ Artifact classJar,
+ Artifact srcJar,
+ SkylarkNestedSet inputs) {
+ return new GeneratedExtensionRegistryProvider(
+ generatingRuleLabel,
+ isLite,
+ classJar,
+ srcJar,
+ NestedSetBuilder.<Artifact>stableOrder()
+ .addTransitive(inputs.getSet(Artifact.class))
+ .build());
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java
new file mode 100644
index 0000000000..0f32860fac
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java
@@ -0,0 +1,103 @@
+// Copyright 2018 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.skylarkbuildapi.java;
+
+import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
+import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
+import com.google.devtools.build.lib.skylarkbuildapi.StructApi;
+import com.google.devtools.build.lib.skylarkinterface.Param;
+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.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+
+/** Provides information about generated proto extensions. */
+@SkylarkModule(
+ name = "GeneratedExtensionRegistryProvider",
+ doc = "Information about generated proto extensions.",
+ category = SkylarkModuleCategory.PROVIDER)
+public interface GeneratedExtensionRegistryProviderApi<FileT extends FileApi> extends StructApi {
+
+ public static final String NAME = "GeneratedExtensionRegistryProvider";
+
+ @SkylarkCallable(name = "rule_label", structField = true, doc = "", documented = false)
+ Label getGeneratingRuleLabel();
+
+ @SkylarkCallable(name = "lite", structField = true, doc = "", documented = false)
+ boolean isLite();
+
+ @SkylarkCallable(name = "class_jar", structField = true, doc = "", documented = false)
+ FileT getClassJar();
+
+ @SkylarkCallable(name = "src_jar", structField = true, doc = "", documented = false)
+ FileT getSrcJar();
+
+ @SkylarkCallable(name = "inputs", structField = true, doc = "", documented = false)
+ NestedSet<FileT> getInputs();
+
+ /** The provider implementing this can construct the GeneratedExtensionRegistryProvider. */
+ @SkylarkModule(name = "Provider", doc = "", documented = false)
+ public interface Provider<FileT extends FileApi> extends ProviderApi {
+
+ @SkylarkCallable(
+ name = NAME,
+ doc = "The <code>GeneratedExtensionRegistryProvider</code> constructor.",
+ parameters = {
+ @Param(
+ name = "generatingRuleLabel",
+ doc = "Rule label for which this registry was built",
+ positional = true,
+ named = false,
+ type = Label.class),
+ @Param(
+ name = "isLite",
+ doc = "If this registry was generated for lite or full runtime",
+ positional = true,
+ named = false,
+ type = Boolean.class),
+ @Param(
+ name = "classJar",
+ doc = "Class jar generated by the registry",
+ positional = true,
+ named = false,
+ type = FileApi.class),
+ @Param(
+ name = "srcJar",
+ doc = "Source jar generated by the registry",
+ positional = true,
+ named = false,
+ type = FileApi.class),
+ @Param(
+ name = "inputs",
+ doc = "Proto jars used to generate the registry",
+ positional = true,
+ named = false,
+ type = SkylarkNestedSet.class,
+ generic1 = FileApi.class),
+ },
+ selfCall = true)
+ @SkylarkConstructor(objectType = GeneratedExtensionRegistryProviderApi.class)
+ GeneratedExtensionRegistryProviderApi<FileT> create(
+ Label generatingRuleLabel,
+ boolean isLite,
+ FileT classJar,
+ FileT srcJar,
+ SkylarkNestedSet inputs)
+ throws EvalException;
+ }
+}