bazel packages: move BazelStarlarkContext here
Previously, it was in package lib.analysis.starlark,
which package was split into two java_library build rules
with other packages sandwiched in between.
There are no valid reasons ever to do that.
Also, remove unnecessary dependency from skydoc.
PiperOrigin-RevId: 267206351
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index bb45519..53642aa 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -35,9 +35,7 @@
import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory;
import com.google.devtools.build.lib.analysis.constraints.ConstraintSemantics;
-import com.google.devtools.build.lib.analysis.skylark.BazelStarlarkContext;
import com.google.devtools.build.lib.analysis.skylark.SkylarkModules;
-import com.google.devtools.build.lib.analysis.skylark.SymbolGenerator;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
@@ -46,6 +44,7 @@
import com.google.devtools.build.lib.graph.Digraph;
import com.google.devtools.build.lib.graph.Node;
import com.google.devtools.build.lib.packages.Attribute;
+import com.google.devtools.build.lib.packages.BazelStarlarkContext;
import com.google.devtools.build.lib.packages.NativeAspectClass;
import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper;
import com.google.devtools.build.lib.packages.OutputFile;
@@ -54,6 +53,7 @@
import com.google.devtools.build.lib.packages.RuleClass.Builder.ThirdPartyLicenseExistencePolicy;
import com.google.devtools.build.lib.packages.RuleClassProvider;
import com.google.devtools.build.lib.packages.RuleErrorConsumer;
+import com.google.devtools.build.lib.packages.SymbolGenerator;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
import com.google.devtools.build.lib.skylarkbuildapi.Bootstrap;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java b/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java
index 63e30d9..a0a71b3 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java
@@ -24,13 +24,13 @@
import com.google.devtools.build.lib.analysis.platform.PlatformProviderUtils;
import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.analysis.platform.ToolchainTypeInfo;
-import com.google.devtools.build.lib.analysis.skylark.BazelStarlarkContext;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.events.Location;
+import com.google.devtools.build.lib.packages.BazelStarlarkContext;
import com.google.devtools.build.lib.rules.AliasConfiguredTarget;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
import com.google.devtools.build.lib.skyframe.ToolchainException;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index d4e3e0d..47cf7e3 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -58,7 +58,6 @@
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.constraints.ConstraintSemantics;
import com.google.devtools.build.lib.analysis.platform.PlatformInfo;
-import com.google.devtools.build.lib.analysis.skylark.SymbolGenerator;
import com.google.devtools.build.lib.analysis.stringtemplate.TemplateContext;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.RepositoryName;
@@ -90,6 +89,7 @@
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleErrorConsumer;
+import com.google.devtools.build.lib.packages.SymbolGenerator;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/BazelBuildApiGlobals.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/BazelBuildApiGlobals.java
index 7fbf62a..c2580f4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/BazelBuildApiGlobals.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/BazelBuildApiGlobals.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.analysis.skylark;
import com.google.devtools.build.lib.events.Location;
+import com.google.devtools.build.lib.packages.BazelStarlarkContext;
import com.google.devtools.build.lib.skylarkbuildapi.SkylarkBuildApiGlobals;
import com.google.devtools.build.lib.skylarkinterface.StarlarkContext;
import com.google.devtools.build.lib.syntax.EvalException;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/BazelStarlarkContext.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/BazelStarlarkContext.java
deleted file mode 100644
index 690d95c..0000000
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/BazelStarlarkContext.java
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright 2018 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.analysis.skylark;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableMap;
-import com.google.devtools.build.lib.analysis.RuleDefinitionContext;
-import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.cmdline.RepositoryName;
-import com.google.devtools.build.lib.skylarkinterface.StarlarkContext;
-import java.util.Objects;
-import javax.annotation.Nullable;
-
-/** An implementation of {@link StarlarkContext} containing Bazel-specific context. */
-public class BazelStarlarkContext
- implements StarlarkContext, RuleDefinitionContext, Label.HasRepoMapping {
- private final String toolsRepository;
- @Nullable private final ImmutableMap<String, Class<?>> fragmentNameToClass;
- private final ImmutableMap<RepositoryName, RepositoryName> repoMapping;
- private final SymbolGenerator<?> symbolGenerator;
-
- /**
- * @param toolsRepository the name of the tools repository, such as "@bazel_tools"
- * @param fragmentNameToClass a map from configuration fragment name to configuration fragment
- * class, such as "apple" to AppleConfiguration.class
- * @param repoMapping a map from RepositoryName to RepositoryName to be used for external
- * @param symbolGenerator a {@link SymbolGenerator} to be used when creating objects to be
- * compared using reference equality.
- */
- public BazelStarlarkContext(
- String toolsRepository,
- ImmutableMap<String, Class<?>> fragmentNameToClass,
- ImmutableMap<RepositoryName, RepositoryName> repoMapping,
- SymbolGenerator<?> symbolGenerator) {
- this.toolsRepository = toolsRepository;
- this.fragmentNameToClass = fragmentNameToClass;
- this.repoMapping = repoMapping;
- this.symbolGenerator = Preconditions.checkNotNull(symbolGenerator);
- }
-
- /**
- * @param toolsRepository the name of the tools repository, such as "@bazel_tools"
- * @param repoMapping a map from RepositoryName to RepositoryName to be used for external
- * @param symbolGenerator a {@link SymbolGenerator} to be used when creating objects to be
- * compared using reference equality.
- */
- public BazelStarlarkContext(
- String toolsRepository,
- ImmutableMap<RepositoryName, RepositoryName> repoMapping,
- SymbolGenerator<?> symbolGenerator) {
- this(toolsRepository, null, repoMapping, symbolGenerator);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (!(obj instanceof BazelStarlarkContext)) {
- return false;
- }
- BazelStarlarkContext that = (BazelStarlarkContext) obj;
- return Objects.equals(this.toolsRepository, that.toolsRepository)
- && Objects.equals(this.fragmentNameToClass, that.fragmentNameToClass)
- && Objects.equals(this.repoMapping, that.repoMapping);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(toolsRepository, fragmentNameToClass, repoMapping);
- }
-
- /** Returns the name of the tools repository, such as "@bazel_tools". */
- @Override
- public String getToolsRepository() {
- return toolsRepository;
- }
-
- /** Returns a map from configuration fragment name to configuration fragment class. */
- public ImmutableMap<String, Class<?>> getFragmentNameToClass() {
- return fragmentNameToClass;
- }
-
- /**
- * Returns a map of {@code RepositoryName}s where the keys are repository names that are
- * written in the BUILD files and the values are new repository names chosen by the main
- * repository.
- */
- public ImmutableMap<RepositoryName, RepositoryName> getRepoMapping() {
- return repoMapping;
- }
-
- public SymbolGenerator<?> getSymbolGenerator() {
- return symbolGenerator;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
index 473e450..e37aaf2 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
@@ -50,6 +50,7 @@
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.AttributeValueSource;
+import com.google.devtools.build.lib.packages.BazelStarlarkContext;
import com.google.devtools.build.lib.packages.BuildSetting;
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.FunctionSplitTransitionWhitelist;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java
index 576a927..415f71f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java
@@ -36,6 +36,7 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.AdvertisedProviderSet;
+import com.google.devtools.build.lib.packages.BazelStarlarkContext;
import com.google.devtools.build.lib.packages.FunctionSplitTransitionWhitelist;
import com.google.devtools.build.lib.packages.InfoInterface;
import com.google.devtools.build.lib.packages.NativeProvider;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SymbolGenerator.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SymbolGenerator.java
deleted file mode 100644
index c105762..0000000
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SymbolGenerator.java
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2019 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.analysis.skylark;
-
-import com.google.devtools.build.lib.concurrent.ThreadSafety;
-
-/**
- * Class to be used when an object wants to be compared using reference equality. Since reference
- * equality is not usable when comparing objects across multiple Starlark evaluations, we use a more
- * stable method: an object identifying the {@link #owner} of the current Starlark context, and an
- * {@link #index} indicating how many reference-equal objects have already been created (and
- * therefore asked for a unique symbol for themselves).
- *
- * <p>Objects that want to use reference equality should instead call {@link #generate} on a
- * provided {@code SymbolGenerator} instance, and compare the returned object for equality, since it
- * will be stable across identical Starlark evaluations.
- */
-public final class SymbolGenerator<T> {
- private final T owner;
- private int index = 0;
-
- public SymbolGenerator(T owner) {
- this.owner = owner;
- }
-
- @ThreadSafety.ThreadSafe
- public synchronized Symbol<T> generate() {
- return new Symbol<>(owner, index++);
- }
-
- private static final class Symbol<T> {
- private final T owner;
- private final int index;
-
- private Symbol(T owner, int index) {
- this.owner = owner;
- this.index = index;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (!(o instanceof Symbol<?>)) {
- return false;
- }
- Symbol<?> symbol = (Symbol<?>) o;
- return index == symbol.index && owner.equals(symbol.owner);
- }
-
- @Override
- public int hashCode() {
- // We don't expect multiple indices for the same owner, save the computation.
- return owner.hashCode();
- }
-
- @Override
- public String toString() {
- return "<symbol=" + owner + ", index=" + index + ">";
- }
- };
-}