Add SkylarkSemantics#toBuilder() and #builderWithDefaults()
This avoids having to inline a bunch of default values when you only want to change one flag.
RELNOTES: None
PiperOrigin-RevId: 178148057
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
index 3407be0..709449a 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
@@ -56,10 +56,18 @@
public abstract boolean internalDoNotExportBuiltins();
public abstract boolean internalSkylarkFlagTestCanary();
+ /** Returns a {@link Builder} initialized with the values of this instance. */
+ public abstract Builder toBuilder();
+
public static Builder builder() {
return new AutoValue_SkylarkSemantics.Builder();
}
+ /** Returns a {@link Builder} initialized with default values for all options. */
+ public static Builder builderWithDefaults() {
+ return DEFAULT_SEMANTICS.toBuilder();
+ }
+
public static final SkylarkSemantics DEFAULT_SEMANTICS =
builder()
// <== Add new options here in alphabetic order ==>
diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
index d2b7ef3..714f197 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
@@ -74,7 +74,7 @@
}
}
- /*
+ /**
* Checks that a randomly generated {@link SkylarkSemantics} object can be serialized and
* deserialized to an equivalent object.
*/
@@ -97,6 +97,14 @@
assertThat(semanticsFromOptions).isEqualTo(defaultSemantics);
}
+ @Test
+ public void canGetBuilderFromInstance() {
+ SkylarkSemantics original = SkylarkSemantics.DEFAULT_SEMANTICS;
+ assertThat(original.internalSkylarkFlagTestCanary()).isFalse();
+ SkylarkSemantics modified = original.toBuilder().internalSkylarkFlagTestCanary(true).build();
+ assertThat(modified.internalSkylarkFlagTestCanary()).isTrue();
+ }
+
/**
* Constructs a {@link SkylarkSemanticsOptions} object with random fields. Must access {@code
* rand} using the same sequence of operations (for the same fields) as {@link