From c5e9a4790288a24b22bc72761994775c029a676e Mon Sep 17 00:00:00 2001 From: vladmos Date: Mon, 20 Nov 2017 10:03:20 -0800 Subject: Remove the deprecated set constructor from Skylark The `set` constructor used to be deprecated, but it was still possible to use it by providing --incompatible_disallow_set_constructor=false. It's still allowed to have `set` in parts of the code that are not executed, this will be deprecated later. RELNOTES[INC]: The deprecated `set` constructor is removed, along with the migration flag --incompatible_disallow_set_constructor. It is still temporarily allowed to refer to `set` from within unexecuted code. PiperOrigin-RevId: 176375859 --- .../build/lib/collect/nestedset/Order.java | 49 ++++------------------ .../build/lib/packages/SkylarkSemanticsCodec.java | 2 - .../lib/packages/SkylarkSemanticsOptions.java | 12 ------ .../devtools/build/lib/syntax/BazelLibrary.java | 31 +++----------- .../build/lib/syntax/SkylarkNestedSet.java | 14 ------- .../build/lib/syntax/SkylarkSemantics.java | 3 -- 6 files changed, 13 insertions(+), 98 deletions(-) (limited to 'src/main/java/com/google') diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/Order.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/Order.java index 05cc7a1b1a..581acad779 100644 --- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/Order.java +++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/Order.java @@ -20,11 +20,9 @@ import java.util.HashMap; /** * Type of a nested set (defines order). * - * *

STABLE_ORDER: an unspecified traversal order. Use when the order of elements does not matter. * In Skylark it is called "default"; its older deprecated name is "stable". * - * *

COMPILE_ORDER: left-to-right postorder. In Skylark it is called "postorder"; its older * deprecated name is "compile". * @@ -34,7 +32,6 @@ import java.util.HashMap; *

This type of set would typically be used for artifacts where elements of nested sets go before * the direct members of a set, for example in the case of Javascript dependencies. * - * *

LINK_ORDER: a variation of left-to-right preorder that enforces topological sorting. In * Skylark it is called "topological"; its older deprecated name is "link". * @@ -87,7 +84,6 @@ import java.util.HashMap; * such cases ordering is decided by the rightmost branch because of the list reversing behind the * scenes, so the ordering in the final enumeration will be "E D". * - * *

NAIVE_LINK_ORDER: a left-to-right preordering. In Skylark it is called "preorder"; its older * deprecated name is "naive_link". * @@ -102,23 +98,20 @@ import java.util.HashMap; * dependencies-after-parent ordering. Note that the latter is usually more important, so please use * LINK_ORDER whenever possible. */ -// TODO(bazel-team): Remove deprecatedSkylarkName and it's associated helpers before Bazel 1.0. +// TODO(bazel-team): Remove deprecated names from the documentation above. public enum Order { - STABLE_ORDER("default", "stable"), - COMPILE_ORDER("postorder", "compile"), - LINK_ORDER("topological", "link"), - NAIVE_LINK_ORDER("preorder", "naive_link"); + STABLE_ORDER("default"), + COMPILE_ORDER("postorder"), + LINK_ORDER("topological"), + NAIVE_LINK_ORDER("preorder"); private static final ImmutableMap VALUES; - private static final ImmutableMap DEPRECATED_VALUES; private final String skylarkName; - private final String deprecatedSkylarkName; private final NestedSet emptySet; - private Order(String skylarkName, String deprecatedSkylarkName) { + private Order(String skylarkName) { this.skylarkName = skylarkName; - this.deprecatedSkylarkName = deprecatedSkylarkName; this.emptySet = new NestedSet<>(this); } @@ -134,46 +127,21 @@ public enum Order { return skylarkName; } - public String getDeprecatedSkylarkName() { - return deprecatedSkylarkName; - } - /** * Parses the given string as a nested set order * * @param name unique name of the order - * @param forbidDeprecatedOrderNames if true, old style ordering names will be rejected * @return the appropriate order instance * @throws IllegalArgumentException if the name is not valid */ - public static Order parse(String name, boolean forbidDeprecatedOrderNames) { + public static Order parse(String name) { if (VALUES.containsKey(name)) { return VALUES.get(name); - } else if (DEPRECATED_VALUES.containsKey(name)) { - if (forbidDeprecatedOrderNames) { - throw new IllegalArgumentException(String.format( - "Order name '%s' is deprecated, use '%s' instead", - name, - DEPRECATED_VALUES.get(name).getSkylarkName() - )); - } - return DEPRECATED_VALUES.get(name); } else { throw new IllegalArgumentException("Invalid order: " + name); } } - /** - * Parses the given string as a nested set order - * - * @param name unique name of the order - * @return the appropriate order instance - * @throws IllegalArgumentException if the name is not valid - */ - public static Order parse(String name) { - return parse(name, false); - } - /** * Determines whether two orders are considered compatible. * @@ -191,14 +159,11 @@ public enum Order { Order[] tmpValues = Order.values(); HashMap entries = Maps.newHashMapWithExpectedSize(tmpValues.length); - HashMap deprecatedEntries = Maps.newHashMapWithExpectedSize(tmpValues.length); for (Order current : tmpValues) { entries.put(current.getSkylarkName(), current); - deprecatedEntries.put(current.getDeprecatedSkylarkName(), current); } VALUES = ImmutableMap.copyOf(entries); - DEPRECATED_VALUES = ImmutableMap.copyOf(deprecatedEntries); } } diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java index e36eca2770..52db1ce009 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java +++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java @@ -47,7 +47,6 @@ public final class SkylarkSemanticsCodec implements ObjectCodecdepset. " + "Deprecated in favor of depset.", @@ -198,28 +194,13 @@ public class BazelLibrary { doc = "Same as for depset." ) }, - useLocation = true, - useEnvironment = true + useLocation = true ) private static final BuiltinFunction set = new BuiltinFunction("set") { - public SkylarkNestedSet invoke(Object items, String order, Location loc, Environment env) + public SkylarkNestedSet invoke(Object items, String order, Location loc) throws EvalException { - if (env.getSemantics().incompatibleDisallowSetConstructor()) { - throw new EvalException( - loc, - "The `set` constructor for depsets is deprecated and will be removed. Please use " - + "the `depset` constructor instead. You can temporarily enable the " - + "deprecated `set` constructor by passing the flag " - + "--incompatible_disallow_set_constructor=false"); - } - try { - return new SkylarkNestedSet( - Order.parse(order, /*forbidDeprecatedOrderNames=*/false), - items, loc); - } catch (IllegalArgumentException ex) { - throw new EvalException(loc, ex); - } + throw new EvalException(loc, "The function 'set' has been removed in favor of 'depset'."); } }; diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java index a35161dfc9..a773dd52d3 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java @@ -92,20 +92,6 @@ public final class SkylarkNestedSet implements SkylarkValue, SkylarkQueryable { @Nullable private final List transitiveItems; - // Dummy class used to create a documentation for the deprecated `set` type - // TODO(bazel-team): remove before the end of 2017 - @SkylarkModule( - name = "set", - category = SkylarkModuleCategory.BUILTIN, - doc = "A deprecated alias for depset. " - + "Please use depset instead. " - + "If you need a hash set that supports O(1) membership testing " - + "consider using a dict." - ) - static final class LegacySet { - private LegacySet() {} - } - public SkylarkNestedSet(Order order, Object item, Location loc) throws EvalException { this(order, SkylarkType.TOP, item, loc, null); } 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 8d1fa59f4e..105768fd3d 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 @@ -46,7 +46,6 @@ public abstract class SkylarkSemantics { public abstract boolean incompatibleDictLiteralHasNoDuplicates(); public abstract boolean incompatibleDisallowDictPlus(); public abstract boolean incompatibleDisallowKeywordOnlyArgs(); - public abstract boolean incompatibleDisallowSetConstructor(); public abstract boolean incompatibleDisallowToplevelIfStatement(); public abstract boolean incompatibleListPlusEqualsInplace(); public abstract boolean incompatibleLoadArgumentIsLabel(); @@ -68,7 +67,6 @@ public abstract class SkylarkSemantics { .incompatibleDictLiteralHasNoDuplicates(true) .incompatibleDisallowDictPlus(false) .incompatibleDisallowKeywordOnlyArgs(true) - .incompatibleDisallowSetConstructor(true) .incompatibleDisallowToplevelIfStatement(true) .incompatibleListPlusEqualsInplace(true) .incompatibleLoadArgumentIsLabel(false) @@ -90,7 +88,6 @@ public abstract class SkylarkSemantics { public abstract Builder incompatibleDictLiteralHasNoDuplicates(boolean value); public abstract Builder incompatibleDisallowDictPlus(boolean value); public abstract Builder incompatibleDisallowKeywordOnlyArgs(boolean value); - public abstract Builder incompatibleDisallowSetConstructor(boolean value); public abstract Builder incompatibleDisallowToplevelIfStatement(boolean value); public abstract Builder incompatibleListPlusEqualsInplace(boolean value); public abstract Builder incompatibleLoadArgumentIsLabel(boolean value); -- cgit v1.2.3