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