Do not expand flags in invocation policy twice.
`InvocationPolicyEnforcer` [expands all flags before setting](https://github.com/bazelbuild/bazel/blob/60fc2d18fadec5f99849b78bce761da62dd78c32/src/main/java/com/google/devtools/common/options/InvocationPolicyEnforcer.java#L124-L125) them to later call into the `OptionsParser` to set their values, which [repeats the process for the flags with expansions/implicit requirements](https://github.com/bazelbuild/bazel/blob/60fc2d18fadec5f99849b78bce761da62dd78c32/src/main/java/com/google/devtools/common/options/OptionsParserImpl.java#L549-L556). Refactor `OptionsParser` to expose a method for setting flag value without the expansion so that `InvocationPolicyEnforcer` can skip the second, unnecessary expansion.
PiperOrigin-RevId: 378775962
diff --git a/src/main/java/com/google/devtools/common/options/InvocationPolicyEnforcer.java b/src/main/java/com/google/devtools/common/options/InvocationPolicyEnforcer.java
index 5ae079b..42203a5 100644
--- a/src/main/java/com/google/devtools/common/options/InvocationPolicyEnforcer.java
+++ b/src/main/java/com/google/devtools/common/options/InvocationPolicyEnforcer.java
@@ -577,7 +577,8 @@
valueDescription.getSourceString());
}
- parser.addOptionValueAtSpecificPriority(flagPolicy.origin, optionDefinition, flagValue);
+ parser.setOptionValueAtSpecificPriorityWithoutExpansion(
+ flagPolicy.origin, optionDefinition, flagValue);
}
}
}
@@ -746,7 +747,8 @@
policyType,
policyValues);
parser.clearValue(optionDefinition);
- parser.addOptionValueAtSpecificPriority(origin, optionDefinition, newValue);
+ parser.setOptionValueAtSpecificPriorityWithoutExpansion(
+ origin, optionDefinition, newValue);
} else {
// The operation disallows the default value, but doesn't supply a new value.
throw new OptionsParsingException(
@@ -799,7 +801,7 @@
+ "specified by invocation policy. %sed values are: %s",
valueDescription.getValue(), option, newValue, policyType, policyValues);
parser.clearValue(option);
- parser.addOptionValueAtSpecificPriority(origin, option, newValue);
+ parser.setOptionValueAtSpecificPriorityWithoutExpansion(origin, option, newValue);
} else if (useDefault) {
applyUseDefaultOperation(parser, policyType + "Values", option, loglevel);
} else {