Skip to content

Commit 11cf1b7

Browse files
comiuscopybara-github
authored andcommitted
Implement incompatible_enable_proto_toolchain_resolution
The flag also make proto toolchain related flags a no-op when enabled. PiperOrigin-RevId: 566186339 Change-Id: If4ddafa4e8ba4cdf9e7b3d564c5fc72ab764c7ac
1 parent 1cf392f commit 11cf1b7

File tree

1 file changed

+52
-14
lines changed

1 file changed

+52
-14
lines changed

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

Lines changed: 52 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.google.devtools.common.options.OptionEffectTag;
3333
import com.google.devtools.common.options.OptionMetadataTag;
3434
import java.util.List;
35+
import javax.annotation.Nullable;
3536
import net.starlark.java.annot.StarlarkMethod;
3637
import net.starlark.java.eval.EvalException;
3738
import net.starlark.java.eval.StarlarkThread;
@@ -45,6 +46,16 @@ public class ProtoConfiguration extends Fragment implements ProtoConfigurationAp
4546

4647
/** Command line options. */
4748
public static class Options extends FragmentOptions {
49+
@Option(
50+
name = "incompatible_enable_proto_toolchain_resolution",
51+
defaultValue = "false",
52+
documentationCategory = OptionDocumentationCategory.TOOLCHAIN,
53+
effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS},
54+
metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE},
55+
help =
56+
"If true, proto lang rules use toolchain resolution to find the toolchain. The flags"
57+
+ " proto_compiler and proto_toolchain_for_* are a no-op.")
58+
public boolean enableProtoToolchainResolution;
4859

4960
@Option(
5061
name = "protocopt",
@@ -56,13 +67,12 @@ public static class Options extends FragmentOptions {
5667
public List<String> protocOpts;
5768

5869
@Option(
59-
name = "experimental_proto_extra_actions",
60-
defaultValue = "false",
61-
documentationCategory = OptionDocumentationCategory.OUTPUT_SELECTION,
62-
effectTags = {OptionEffectTag.AFFECTS_OUTPUTS, OptionEffectTag.LOADING_AND_ANALYSIS},
63-
metadataTags = {OptionMetadataTag.EXPERIMENTAL},
64-
help = "Run extra actions for alternative Java api versions in a proto_library."
65-
)
70+
name = "experimental_proto_extra_actions",
71+
defaultValue = "false",
72+
documentationCategory = OptionDocumentationCategory.OUTPUT_SELECTION,
73+
effectTags = {OptionEffectTag.AFFECTS_OUTPUTS, OptionEffectTag.LOADING_AND_ANALYSIS},
74+
metadataTags = {OptionMetadataTag.EXPERIMENTAL},
75+
help = "Run extra actions for alternative Java api versions in a proto_library.")
6676
public boolean experimentalProtoExtraActions;
6777

6878
@Option(
@@ -165,6 +175,7 @@ public static class Options extends FragmentOptions {
165175
@Override
166176
public FragmentOptions getExec() {
167177
Options exec = (Options) super.getExec();
178+
exec.enableProtoToolchainResolution = enableProtoToolchainResolution;
168179
exec.protoCompiler = protoCompiler;
169180
exec.protocOpts = protocOpts;
170181
exec.experimentalProtoDescriptorSetsIncludeSourceInfo =
@@ -185,10 +196,12 @@ public FragmentOptions getExec() {
185196
private final ImmutableList<String> protocOpts;
186197
private final ImmutableList<String> ccProtoLibraryHeaderSuffixes;
187198
private final ImmutableList<String> ccProtoLibrarySourceSuffixes;
199+
private final boolean enableProtoToolchainResolution;
188200
private final Options options;
189201

190202
public ProtoConfiguration(BuildOptions buildOptions) {
191203
Options options = buildOptions.get(Options.class);
204+
this.enableProtoToolchainResolution = options.enableProtoToolchainResolution;
192205
this.protocOpts = ImmutableList.copyOf(options.protocOpts);
193206
this.ccProtoLibraryHeaderSuffixes = ImmutableList.copyOf(options.ccProtoLibraryHeaderSuffixes);
194207
this.ccProtoLibrarySourceSuffixes = ImmutableList.copyOf(options.ccProtoLibrarySourceSuffixes);
@@ -219,8 +232,8 @@ public boolean experimentalProtoDescriptorSetsIncludeSourceInfo() {
219232
}
220233

221234
/**
222-
* Returns true if we will run extra actions for actions that are not run by default. If this
223-
* is enabled, e.g. all extra_actions for alternative api-versions or language-flavours of a
235+
* Returns true if we will run extra actions for actions that are not run by default. If this is
236+
* enabled, e.g. all extra_actions for alternative api-versions or language-flavours of a
224237
* proto_library target are run.
225238
*/
226239
public boolean runExperimentalProtoExtraActions() {
@@ -231,40 +244,65 @@ public boolean runExperimentalProtoExtraActions() {
231244
name = "proto_compiler",
232245
doc = "Label for the proto compiler.",
233246
defaultLabel = ProtoConstants.DEFAULT_PROTOC_LABEL)
247+
@Nullable
234248
public Label protoCompiler() {
235-
return options.protoCompiler;
249+
if (enableProtoToolchainResolution) {
250+
return null;
251+
} else {
252+
return options.protoCompiler;
253+
}
236254
}
237255

238256
@StarlarkConfigurationField(
239257
name = "proto_toolchain_for_java",
240258
doc = "Label for the java proto toolchains.",
241259
defaultLabel = ProtoConstants.DEFAULT_JAVA_PROTO_LABEL)
260+
@Nullable
242261
public Label protoToolchainForJava() {
243-
return options.protoToolchainForJava;
262+
if (enableProtoToolchainResolution) {
263+
return null;
264+
} else {
265+
return options.protoToolchainForJava;
266+
}
244267
}
245268

246269
@StarlarkConfigurationField(
247270
name = "proto_toolchain_for_j2objc",
248271
doc = "Label for the j2objc toolchains.",
249272
defaultLabel = ProtoConstants.DEFAULT_J2OBJC_PROTO_LABEL)
273+
@Nullable
250274
public Label protoToolchainForJ2objc() {
251-
return options.protoToolchainForJ2objc;
275+
if (enableProtoToolchainResolution) {
276+
return null;
277+
} else {
278+
return options.protoToolchainForJ2objc;
279+
}
252280
}
253281

254282
@StarlarkConfigurationField(
255283
name = "proto_toolchain_for_java_lite",
256284
doc = "Label for the java lite proto toolchains.",
257285
defaultLabel = ProtoConstants.DEFAULT_JAVA_LITE_PROTO_LABEL)
286+
@Nullable
258287
public Label protoToolchainForJavaLite() {
259-
return options.protoToolchainForJavaLite;
288+
if (enableProtoToolchainResolution) {
289+
return null;
290+
} else {
291+
return options.protoToolchainForJavaLite;
292+
}
260293
}
261294

262295
@StarlarkConfigurationField(
263296
name = "proto_toolchain_for_cc",
264297
doc = "Label for the cc proto toolchains.",
265298
defaultLabel = ProtoConstants.DEFAULT_CC_PROTO_LABEL)
299+
@Nullable
266300
public Label protoToolchainForCc() {
267-
return options.protoToolchainForCc;
301+
if (enableProtoToolchainResolution) {
302+
return null;
303+
} else {
304+
return options.protoToolchainForCc;
305+
}
268306
}
269307

270308
@StarlarkMethod(name = "strict_proto_deps", useStarlarkThread = true, documented = false)

0 commit comments

Comments
 (0)