diff options
author | Googler <noreply@google.com> | 2018-08-08 10:20:08 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-08-08 10:21:46 -0700 |
commit | 0f232691719ef89a0a1c7be631a84f435894a6ce (patch) | |
tree | 59148119a6d4ed3b72c9ccf79e9add7a02b7aeb0 /src/main/java/com/google/devtools/build/lib/rules | |
parent | bf1db78d75ac6d2fe40742c36f79341859274f50 (diff) |
Expose GeneratedExtensionRegistryProvider to Skylark.
RELNOTES: None
PiperOrigin-RevId: 207905848
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
5 files changed, 113 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()); } } } |