3232import com .google .devtools .common .options .OptionEffectTag ;
3333import com .google .devtools .common .options .OptionMetadataTag ;
3434import java .util .List ;
35+ import javax .annotation .Nullable ;
3536import net .starlark .java .annot .StarlarkMethod ;
3637import net .starlark .java .eval .EvalException ;
3738import 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