Stop removing onlyLoadingPhase bindings They are now disabled based on a dynamic flag instead. It's all too easy to bypass removal with duplication, anyway, as in my_native_glob = native.glob -- MOS_MIGRATED_REVID=101714237
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkNativeModule.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkNativeModule.java index c2186b9..1f32cbd 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkNativeModule.java +++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkNativeModule.java
@@ -29,8 +29,8 @@ /** * A class for the Skylark native module. */ -@SkylarkModule(name = "native", namespace = true, onlyLoadingPhase = true, doc = - "A built-in module to support native rules and other package helper functions. " +@SkylarkModule(name = "native", namespace = true, doc = + "A built-in module to support native rules and other package helper functions. " + "All native rules appear as functions in this module. Note that the native module is only " + "available in the loading phase (i.e. for macros, not for rule implementations).<br/>" + "Extra helper functions:")
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java index 35dfa4d..635b1ed 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java
@@ -51,7 +51,6 @@ @SkylarkModule( name = "attr", namespace = true, - onlyLoadingPhase = true, doc = "Module for creating new attributes. " + "They are only for use with the <a href=\"globals.html#rule\">rule</a> function."
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetBuilder.java index 274d527..a7c9b4f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetBuilder.java
@@ -59,9 +59,6 @@ SkylarkEnvironment env = ruleContext.getRule().getRuleClassObject() .getRuleDefinitionEnvironment().cloneEnv( ruleContext.getAnalysisEnvironment().getEventHandler()); - // Collect the symbols to disable statically and pass at the next call, so we don't need to - // clone the RuleDefinitionEnvironment. - env.disableOnlyLoadingPhaseObjects(); Object target = ruleImplementation.call(ImmutableList.<Object>of(skylarkRuleContext), ImmutableMap.<String, Object>of(), null, env);
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Environment.java b/src/main/java/com/google/devtools/build/lib/syntax/Environment.java index b6acb05..3b4342a 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/Environment.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/Environment.java
@@ -90,12 +90,6 @@ protected Map<PathFragment, SkylarkEnvironment> importedExtensions; /** - * A set of disabled namespaces propagating through function calling. This is needed because - * UserDefinedFunctions lock the definition Environment which should be immutable. - */ - protected Set<Class<?>> disabledNameSpaces = new HashSet<>(); - - /** * A set of variables propagating through function calling. It's only used to call * native rules from Skylark build extensions. */ @@ -360,10 +354,6 @@ private Map<String, BaseFunction> getNamespaceFunctions(Class<?> nameSpace) { nameSpace = getCanonicalRepresentation(nameSpace); - if (disabledNameSpaces.contains(nameSpace) - || (parent != null && parent.disabledNameSpaces.contains(nameSpace))) { - return null; - } Environment topLevel = this; while (topLevel.parent != null) { topLevel = topLevel.parent;
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkEnvironment.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkEnvironment.java index c200b83..cc23817 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkEnvironment.java
@@ -22,9 +22,7 @@ import com.google.devtools.build.lib.util.Fingerprint; import java.io.Serializable; -import java.util.ArrayList; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -81,7 +79,6 @@ // This should never happen. throw new IllegalStateException(e); } - childEnv.disabledNameSpaces = callerEnv.disabledNameSpaces; return childEnv; } @@ -198,24 +195,6 @@ return variable != null ? EvalUtils.getSkylarkType(variable.getClass()) : null; } - /** - * Removes the functions and the modules (i.e. the symbol of the module from the top level - * Environment and the functions attached to it) from the Environment which should be present - * only during the loading phase. - */ - public void disableOnlyLoadingPhaseObjects() { - List<Class<?>> modulesToRemove = new ArrayList<>(); - for (Map.Entry<String, Object> entry : env.entrySet()) { - Object object = entry.getValue(); - if (object.getClass().isAnnotationPresent(SkylarkModule.class)) { - if (object.getClass().getAnnotation(SkylarkModule.class).onlyLoadingPhase()) { - modulesToRemove.add(entry.getValue().getClass()); - } - } - } - disabledNameSpaces.addAll(modulesToRemove); - } - public void handleEvent(Event event) { eventHandler.handle(event); }
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkModule.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkModule.java index a9c0f9b..477bffb 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkModule.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkModule.java
@@ -33,6 +33,4 @@ boolean documented() default true; boolean namespace() default false; - - boolean onlyLoadingPhase() default false; }