Skip to content

Commit 528d067

Browse files
comiuscopybara-github
authored andcommitted
Expose ProtoLangToolchainInfo to builtins.
This necessitated changing ProtoLangToolchainProvider from native to Starlark type. PiperOrigin-RevId: 437751442
1 parent b4587f8 commit 528d067

File tree

11 files changed

+38
-25
lines changed

11 files changed

+38
-25
lines changed

src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoLibraryRule.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,9 @@
2020
import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
2121
import static com.google.devtools.build.lib.rules.java.proto.JavaLiteProtoAspect.getProtoToolchainLabel;
2222

23-
import com.google.common.collect.ImmutableList;
2423
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
2524
import com.google.devtools.build.lib.analysis.RuleDefinition;
2625
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
27-
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
2826
import com.google.devtools.build.lib.packages.RuleClass;
2927
import com.google.devtools.build.lib.packages.StarlarkProviderIdentifier;
3028
import com.google.devtools.build.lib.rules.java.JavaConfiguration;
@@ -58,9 +56,7 @@ public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment envi
5856
.aspect(javaProtoAspect))
5957
.add(
6058
attr(JavaProtoAspectCommon.LITE_PROTO_TOOLCHAIN_ATTR, LABEL)
61-
.mandatoryBuiltinProviders(
62-
ImmutableList.<Class<? extends TransitiveInfoProvider>>of(
63-
ProtoLangToolchainProvider.class))
59+
.mandatoryProviders(ProtoLangToolchainProvider.PROVIDER.id())
6460
.value(getProtoToolchainLabel(DEFAULT_PROTO_TOOLCHAIN_LABEL)))
6561
.advertiseStarlarkProvider(StarlarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey()))
6662
.build();

src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -178,11 +178,11 @@ public AspectDefinition getDefinition(AspectParameters params) {
178178
// For android_sdk rules, where we just want to get at aidl runtime deps.
179179
.requireStarlarkProviders(forKey(AndroidSdkProvider.PROVIDER.getKey()))
180180
.requireStarlarkProviders(forKey(ProtoInfo.PROVIDER.getKey()))
181-
.requireProviderSets(
181+
.requireStarlarkProviderSets(
182182
ImmutableList.of(
183183
// For proto_lang_toolchain rules, where we just want to get at their runtime
184184
// deps.
185-
ImmutableSet.of(ProtoLangToolchainProvider.class)))
185+
ImmutableSet.of(ProtoLangToolchainProvider.PROVIDER.id())))
186186
.addToolchainTypes(
187187
ToolchainTypeRequirement.create(
188188
Label.parseAbsoluteUnchecked(toolsRepository + sdkToolchainLabel)))

src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public AspectDefinition getDefinition(AspectParameters aspectParameters) {
133133
.useToolchainTransition(true)
134134
.add(
135135
attr(PROTO_TOOLCHAIN_ATTR, LABEL)
136-
.mandatoryBuiltinProviders(ImmutableList.of(ProtoLangToolchainProvider.class))
136+
.mandatoryProviders(ProtoLangToolchainProvider.PROVIDER.id())
137137
.value(PROTO_TOOLCHAIN_LABEL))
138138
.add(
139139
attr(CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, LABEL)
@@ -470,7 +470,7 @@ private void createProtoCompileAction(Collection<Artifact> outputs)
470470
}
471471

472472
private ProtoLangToolchainProvider getProtoToolchainProvider() {
473-
return ruleContext.getPrerequisite(PROTO_TOOLCHAIN_ATTR, ProtoLangToolchainProvider.class);
473+
return ruleContext.getPrerequisite(PROTO_TOOLCHAIN_ATTR, ProtoLangToolchainProvider.PROVIDER);
474474
}
475475

476476
public void addProviders(ConfiguredAspect.Builder builder) {

src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import com.google.devtools.build.lib.analysis.PlatformConfiguration;
2828
import com.google.devtools.build.lib.analysis.RuleContext;
2929
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
30-
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
3130
import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
3231
import com.google.devtools.build.lib.cmdline.Label;
3332
import com.google.devtools.build.lib.cmdline.RepositoryName;
@@ -117,9 +116,7 @@ public AspectDefinition getDefinition(AspectParameters aspectParameters) {
117116
ImmutableList.of(StarlarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey())))
118117
.add(
119118
attr(JavaProtoAspectCommon.LITE_PROTO_TOOLCHAIN_ATTR, LABEL)
120-
.mandatoryBuiltinProviders(
121-
ImmutableList.<Class<? extends TransitiveInfoProvider>>of(
122-
ProtoLangToolchainProvider.class))
119+
.mandatoryProviders(ProtoLangToolchainProvider.PROVIDER.id())
123120
.value(getProtoToolchainLabel(defaultProtoToolchainLabel)))
124121
.add(
125122
attr(JavaRuleClasses.JAVA_TOOLCHAIN_ATTRIBUTE_NAME, LABEL)

src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspectCommon.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -159,14 +159,15 @@ public ImmutableList<TransitiveInfoCollection> getProtoRuntimeDeps() {
159159
/** Returns the toolchain that specifies how to generate code from {@code .proto} files. */
160160
public ProtoLangToolchainProvider getProtoToolchainProvider() {
161161
return checkNotNull(
162-
ruleContext.getPrerequisite(protoToolchainAttr, ProtoLangToolchainProvider.class));
162+
ruleContext.getPrerequisite(protoToolchainAttr, ProtoLangToolchainProvider.PROVIDER));
163163
}
164164

165165
/**
166166
* Returns the toolchain that specifies how to generate Java-lite code from {@code .proto} files.
167167
*/
168168
static ProtoLangToolchainProvider getLiteProtoToolchainProvider(RuleContext ruleContext) {
169-
return ruleContext.getPrerequisite(LITE_PROTO_TOOLCHAIN_ATTR, ProtoLangToolchainProvider.class);
169+
return ruleContext.getPrerequisite(
170+
LITE_PROTO_TOOLCHAIN_ATTR, ProtoLangToolchainProvider.PROVIDER);
170171
}
171172

172173
/**

src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoStarlarkCommon.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,6 @@ private static ProtoLangToolchainProvider getProtoToolchainProvider(
9696
StarlarkRuleContext starlarkRuleContext, String protoToolchainAttr) throws EvalException {
9797
ConfiguredTarget javaliteToolchain =
9898
(ConfiguredTarget) checkNotNull(starlarkRuleContext.getAttr().getValue(protoToolchainAttr));
99-
return checkNotNull(javaliteToolchain.getProvider(ProtoLangToolchainProvider.class));
99+
return checkNotNull(javaliteToolchain.get(ProtoLangToolchainProvider.PROVIDER));
100100
}
101101
}

src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,8 @@ private ConfiguredAspect proto(ConfiguredTarget base, RuleContext ruleContext)
392392
ImmutableList<Artifact> protoSources = protoInfo.getDirectProtoSources();
393393

394394
ProtoLangToolchainProvider protoToolchain =
395-
ruleContext.getPrerequisite(J2OBJC_PROTO_TOOLCHAIN_ATTR, ProtoLangToolchainProvider.class);
395+
ruleContext.getPrerequisite(
396+
J2OBJC_PROTO_TOOLCHAIN_ATTR, ProtoLangToolchainProvider.PROVIDER);
396397
// Avoid pulling in any generated files from forbidden protos.
397398
ProtoSourceFileExcludeList protoExcludeList =
398399
new ProtoSourceFileExcludeList(ruleContext, protoToolchain.forbiddenProtos());

src/main/java/com/google/devtools/build/lib/rules/proto/ProtoLangToolchain.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public ConfiguredTarget create(RuleContext ruleContext)
4949
flag = flag.replace("$(OUT)", "%s");
5050

5151
return new RuleConfiguredTargetBuilder(ruleContext)
52-
.addProvider(
52+
.addStarlarkDeclaredProvider(
5353
ProtoLangToolchainProvider.create(
5454
flag,
5555
ruleContext.attributes().get("plugin_format_flag", Type.STRING),

src/main/java/com/google/devtools/build/lib/rules/proto/ProtoLangToolchainProvider.java

+20-2
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@
1919
import com.google.devtools.build.lib.actions.Artifact;
2020
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
2121
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
22-
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
2322
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
2423
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
24+
import com.google.devtools.build.lib.packages.BuiltinProvider;
25+
import com.google.devtools.build.lib.packages.NativeInfo;
2526
import javax.annotation.Nullable;
27+
import net.starlark.java.annot.StarlarkBuiltin;
2628
import net.starlark.java.annot.StarlarkMethod;
2729
import net.starlark.java.eval.StarlarkList;
2830

@@ -33,7 +35,23 @@
3335
* rules.
3436
*/
3537
@AutoValue
36-
public abstract class ProtoLangToolchainProvider implements TransitiveInfoProvider {
38+
public abstract class ProtoLangToolchainProvider extends NativeInfo {
39+
public static final String PROVIDER_NAME = "ProtoLangToolchainInfo";
40+
public static final Provider PROVIDER = new Provider();
41+
42+
/** Provider class for {@link ProtoLangToolchainProvider} objects. */
43+
@StarlarkBuiltin(name = "Provider", documented = false, doc = "")
44+
public static class Provider extends BuiltinProvider<ProtoLangToolchainProvider> {
45+
public Provider() {
46+
super(PROVIDER_NAME, ProtoLangToolchainProvider.class);
47+
}
48+
}
49+
50+
@Override
51+
public Provider getProvider() {
52+
return PROVIDER;
53+
}
54+
3755
@StarlarkMethod(
3856
name = "out_replacement_format_flag",
3957
doc = "Format string used when passing output to the plugin used by proto compiler.",

src/main/java/com/google/devtools/build/lib/rules/proto/ProtoLangToolchainRule.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment envi
106106
.exec()
107107
.value(PROTO_COMPILER))
108108
.requiresConfigurationFragments(ProtoConfiguration.class)
109-
.advertiseProvider(ProtoLangToolchainProvider.class)
109+
.advertiseStarlarkProvider(ProtoLangToolchainProvider.PROVIDER.id())
110110
.removeAttribute("data")
111111
.removeAttribute("deps")
112112
.build();

src/test/java/com/google/devtools/build/lib/rules/proto/ProtoLangToolchainTest.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public void protoToolchain() throws Exception {
9494
update(ImmutableList.of("//foo:toolchain"), false, 1, true, new EventBus());
9595

9696
validateProtoLangToolchain(
97-
getConfiguredTarget("//foo:toolchain").getProvider(ProtoLangToolchainProvider.class));
97+
getConfiguredTarget("//foo:toolchain").get(ProtoLangToolchainProvider.PROVIDER));
9898
}
9999

100100
@Test
@@ -125,7 +125,7 @@ public void protoToolchainBlacklistProtoLibraries() throws Exception {
125125
update(ImmutableList.of("//foo:toolchain"), false, 1, true, new EventBus());
126126

127127
validateProtoLangToolchain(
128-
getConfiguredTarget("//foo:toolchain").getProvider(ProtoLangToolchainProvider.class));
128+
getConfiguredTarget("//foo:toolchain").get(ProtoLangToolchainProvider.PROVIDER));
129129
}
130130

131131
@Test
@@ -156,7 +156,7 @@ public void protoToolchainBlacklistTransitiveProtos() throws Exception {
156156
update(ImmutableList.of("//foo:toolchain"), false, 1, true, new EventBus());
157157

158158
validateProtoLangToolchain(
159-
getConfiguredTarget("//foo:toolchain").getProvider(ProtoLangToolchainProvider.class));
159+
getConfiguredTarget("//foo:toolchain").get(ProtoLangToolchainProvider.PROVIDER));
160160
}
161161

162162
@Test
@@ -172,7 +172,7 @@ public void optionalFieldsAreEmpty() throws Exception {
172172
update(ImmutableList.of("//foo:toolchain"), false, 1, true, new EventBus());
173173

174174
ProtoLangToolchainProvider toolchain =
175-
getConfiguredTarget("//foo:toolchain").getProvider(ProtoLangToolchainProvider.class);
175+
getConfiguredTarget("//foo:toolchain").get(ProtoLangToolchainProvider.PROVIDER);
176176

177177
assertThat(toolchain.pluginExecutable()).isNull();
178178
assertThat(toolchain.runtime()).isNull();

0 commit comments

Comments
 (0)