Avoid cloning FragmentOptions if the instance is already normalized.
RELNOTES: None.
PiperOrigin-RevId: 244682258
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
index 83aa1fd..bc6e8f5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
@@ -963,7 +963,7 @@
@Override
public Options getNormalized() {
- Options result = (Options) super.getNormalized();
+ Options result = (Options) clone();
if (collapseDuplicateDefines) {
LinkedHashMap<String, String> flagValueByName = new LinkedHashMap<>();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java
index bbeea19..2ff277d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java
@@ -53,8 +53,10 @@
}
/**
- * Creates a new instance of this {@code FragmentOptions} with all flags adjusted to be suitable
- * for forming configurations.
+ * Returns an instance of {@code FragmentOptions} with all flags adjusted to be suitable for
+ * forming configurations.
+ *
+ * <p>If this instance is already suitable, it will be returned without creating a new instance.
*
* <p>Motivation: Sometimes a fragment's physical option values, as set by the options parser, do
* not correspond to their logical interpretation. For example, an option may need custom code to
@@ -71,7 +73,7 @@
* method. Step 2) is the responsibility of each transition implementation.
*/
public FragmentOptions getNormalized() {
- return clone();
+ return this;
}
/** Tracks limitations on referring to an option in a {@code config_setting}. */