diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java | 132 |
1 files changed, 109 insertions, 23 deletions
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()); } } } |