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 + ">";
-    }
-  };
-}