bazel: rename imports of lib.syntax to java.starlark.net
This change was produced mechanically by running the
script added in CL 322652849.
PiperOrigin-RevId: 331611185
diff --git a/src/main/java/com/google/devtools/build/docgen/ApiExporter.java b/src/main/java/com/google/devtools/build/docgen/ApiExporter.java
index 258f301..0a792b4 100644
--- a/src/main/java/com/google/devtools/build/docgen/ApiExporter.java
+++ b/src/main/java/com/google/devtools/build/docgen/ApiExporter.java
@@ -24,11 +24,6 @@
import com.google.devtools.build.docgen.starlark.StarlarkConstructorMethodDoc;
import com.google.devtools.build.docgen.starlark.StarlarkMethodDoc;
import com.google.devtools.build.docgen.starlark.StarlarkParamDoc;
-import com.google.devtools.build.lib.syntax.BuiltinCallable;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.common.options.OptionsParser;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
@@ -43,6 +38,11 @@
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkInterfaceUtils;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.BuiltinCallable;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkSemantics;
/** The main class for the Starlark documentation generator. */
public class ApiExporter {
diff --git a/src/main/java/com/google/devtools/build/docgen/BUILD b/src/main/java/com/google/devtools/build/docgen/BUILD
index 819a692..7ec1735d 100644
--- a/src/main/java/com/google/devtools/build/docgen/BUILD
+++ b/src/main/java/com/google/devtools/build/docgen/BUILD
@@ -11,7 +11,6 @@
srcs = glob(["**/*.java"]),
resources = [":template_files"],
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
@@ -46,6 +45,8 @@
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test",
"//src/main/java/com/google/devtools/common/options",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:builtin_java_proto",
"//third_party:apache_velocity",
"//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationCollector.java b/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationCollector.java
index e81710b..8d71958 100644
--- a/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationCollector.java
+++ b/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationCollector.java
@@ -19,9 +19,6 @@
import com.google.devtools.build.docgen.starlark.StarlarkBuiltinDoc;
import com.google.devtools.build.docgen.starlark.StarlarkConstructorMethodDoc;
import com.google.devtools.build.docgen.starlark.StarlarkJavaMethodDoc;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import com.google.devtools.build.lib.util.Classpath;
import com.google.devtools.build.lib.util.Classpath.ClassPathException;
import java.lang.reflect.Method;
@@ -33,6 +30,9 @@
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkGlobalLibrary;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkValue;
/** A helper class that collects Starlark module documentation. */
final class StarlarkDocumentationCollector {
@@ -70,11 +70,11 @@
* a map from the name of each Starlark module to its documentation.
*/
static ImmutableMap<String, StarlarkBuiltinDoc> collectModules(Iterable<Class<?>> classes) {
- // Force class loading of com.google.devtools.build.lib.syntax.Starlark before we do any of our
- // own processing. Otherwise, we're in trouble since com.google.devtools.build.lib.syntax.Dict
+ // Force class loading of net.starlark.java.eval.Starlark before we do any of our
+ // own processing. Otherwise, we're in trouble since net.starlark.java.eval.Dict
// happens to be the first class on our classpath that we proccess via #collectModuleMethods,
// but that entails a logical cycle in
- // com.google.devtools.build.lib.syntax.CallUtils#getCacheValue.
+ // net.starlark.java.eval.CallUtils#getCacheValue.
// TODO(b/161479826): Address this in a less hacky manner.
@SuppressWarnings("unused")
Object forceClassLoading = Starlark.UNIVERSE;
diff --git a/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java b/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
index ad89034..101c040 100644
--- a/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
+++ b/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
@@ -31,7 +31,6 @@
import com.google.devtools.build.lib.starlarkbuildapi.stubs.ProviderStub;
import com.google.devtools.build.lib.starlarkbuildapi.stubs.StarlarkAspectStub;
import com.google.devtools.build.lib.starlarkbuildapi.test.TestingBootstrap;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.util.Classpath.ClassPathException;
import com.google.devtools.build.skydoc.fakebuildapi.FakeActionsInfoProvider;
import com.google.devtools.build.skydoc.fakebuildapi.FakeBuildApiGlobals;
@@ -96,6 +95,7 @@
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
+import net.starlark.java.eval.Starlark;
/**
* A helper class that collects Starlark Api symbols including top level modules, native rules and
diff --git a/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkConstructorMethodDoc.java b/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkConstructorMethodDoc.java
index 710fa46..8b87abd 100644
--- a/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkConstructorMethodDoc.java
+++ b/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkConstructorMethodDoc.java
@@ -14,11 +14,11 @@
package com.google.devtools.build.docgen.starlark;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.Starlark;
import java.lang.reflect.Method;
import java.util.List;
import net.starlark.java.annot.StarlarkDeprecated;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Starlark;
/**
* A class representing a Java method callable from Starlark which constructs a type of Starlark
diff --git a/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkDoc.java b/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkDoc.java
index 78c1693..c7df5d4 100644
--- a/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkDoc.java
+++ b/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkDoc.java
@@ -15,11 +15,6 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.Tuple;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Map;
@@ -27,6 +22,11 @@
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkInterfaceUtils;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.Tuple;
/** Abstract class for containing documentation for a Starlark syntactic entity. */
abstract class StarlarkDoc {
diff --git a/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkJavaMethodDoc.java b/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkJavaMethodDoc.java
index 3653b04..8582e70 100644
--- a/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkJavaMethodDoc.java
+++ b/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkJavaMethodDoc.java
@@ -15,7 +15,6 @@
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.Starlark;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
@@ -23,6 +22,7 @@
import net.starlark.java.annot.StarlarkDeprecated;
import net.starlark.java.annot.StarlarkInterfaceUtils;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Starlark;
/** A class representing a Java method callable from Starlark with annotation. */
public final class StarlarkJavaMethodDoc extends StarlarkMethodDoc {
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index 5d60ab5..31fac29 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -141,11 +141,11 @@
visibility = ["//visibility:public"],
exports = [
"//src/main/java/com/google/devtools/build/lib/events",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
],
)
@@ -154,8 +154,8 @@
srcs = [],
visibility = ["//visibility:public"],
exports = [
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
],
)
@@ -379,8 +379,6 @@
"//src/main/java/com/google/devtools/build/lib/skyframe:skyframe_cluster",
"//src/main/java/com/google/devtools/build/lib/skyframe:target_pattern_phase_value",
"//src/main/java/com/google/devtools/build/lib/skyframe:top_down_action_cache",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
"//src/main/java/com/google/devtools/build/lib/unix",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/util:TestType",
@@ -406,6 +404,8 @@
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//src/main/java/com/google/devtools/common/options",
"//src/main/java/com/google/devtools/common/options:invocation_policy",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:action_cache_java_proto",
"//src/main/protobuf:analysis_java_proto",
"//src/main/protobuf:command_line_java_proto",
diff --git a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
index f03fd1b..3ceccee 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
@@ -34,10 +34,6 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.ActionApi;
import com.google.devtools.build.lib.starlarkbuildapi.CommandLineArgsApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
import com.google.devtools.build.lib.vfs.BulkDeleter;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.Root;
@@ -47,6 +43,10 @@
import java.util.Map;
import javax.annotation.Nullable;
import javax.annotation.concurrent.GuardedBy;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
/**
* Abstract implementation of Action which implements basic functionality: the inputs, outputs, and
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java
index 73e9d68..8fb293e 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java
@@ -22,9 +22,9 @@
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
-import com.google.devtools.build.lib.syntax.Location;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.util.ExitCode;
+import net.starlark.java.syntax.Location;
/**
* This exception gets thrown if {@link Action#execute(ActionExecutionContext)} is unsuccessful.
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java b/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java
index bf4d4bd..1c1a159 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java
@@ -24,8 +24,8 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.AspectDescriptor;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
-import com.google.devtools.build.lib.syntax.Location;
import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
/**
* Contains metadata used for reporting the progress and status of an action.
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
index 1f480f7..70deb02 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
@@ -40,9 +40,6 @@
import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.FileTypeSet;
import com.google.devtools.build.lib.vfs.Path;
@@ -59,6 +56,9 @@
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
/**
* An Artifact represents a file used by the build system, whether it's a source file or a derived
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java b/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java
index e8ef677..7eb5893 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java
@@ -21,12 +21,12 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.FileRootApi;
-import com.google.devtools.build.lib.syntax.Printer;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.Root;
import java.io.Serializable;
import java.util.Objects;
+import net.starlark.java.eval.Printer;
/**
* A root for an artifact. The roots are the directories containing artifacts, and they are mapped
diff --git a/src/main/java/com/google/devtools/build/lib/actions/BUILD b/src/main/java/com/google/devtools/build/lib/actions/BUILD
index 2887382..6ec3d88 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/actions/BUILD
@@ -64,7 +64,6 @@
":fileset_output_symlink",
":localhost_capacity",
":middleman_type",
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/analysis/platform",
"//src/main/java/com/google/devtools/build/lib/bugreport",
"//src/main/java/com/google/devtools/build/lib/buildeventstream",
@@ -106,6 +105,8 @@
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:action_cache_java_proto",
"//src/main/protobuf:extra_actions_base_java_proto",
"//src/main/protobuf:failure_details_java_proto",
@@ -175,12 +176,12 @@
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/util:filetype",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:guava",
"//third_party:jsr305",
"//third_party/protobuf:protobuf_java",
diff --git a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
index 7cb17de..b837eb6 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
@@ -24,7 +24,6 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Instantiator;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.Location;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.Root;
@@ -32,6 +31,7 @@
import java.io.IOException;
import java.util.Objects;
import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
/**
* Parameters of a filesystem traversal requested by a Fileset rule.
diff --git a/src/main/java/com/google/devtools/build/lib/actions/MissingInputFileException.java b/src/main/java/com/google/devtools/build/lib/actions/MissingInputFileException.java
index 78ed120..a06c22c 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/MissingInputFileException.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/MissingInputFileException.java
@@ -15,8 +15,8 @@
package com.google.devtools.build.lib.actions;
import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
-import com.google.devtools.build.lib.syntax.Location;
import com.google.devtools.build.lib.util.DetailedExitCode;
+import net.starlark.java.syntax.Location;
/**
* This exception is thrown during a build when an input file is missing, but the file is not the
diff --git a/src/main/java/com/google/devtools/build/lib/actions/RunfilesSupplier.java b/src/main/java/com/google/devtools/build/lib/actions/RunfilesSupplier.java
index 2e854fa..2835236 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/RunfilesSupplier.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/RunfilesSupplier.java
@@ -18,10 +18,10 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.io.IOException;
import java.util.Map;
+import net.starlark.java.eval.StarlarkValue;
/** Convenience wrapper around runfiles allowing lazy expansion. */
// TODO(bazel-team): Ideally we could refer to Runfiles objects directly here, but current package
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ActionsProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ActionsProvider.java
index 068f160..242d354 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ActionsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ActionsProvider.java
@@ -20,10 +20,10 @@
import com.google.devtools.build.lib.packages.StarlarkInfo;
import com.google.devtools.build.lib.packages.StructImpl;
import com.google.devtools.build.lib.starlarkbuildapi.ActionsInfoProviderApi;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
import java.util.HashMap;
import java.util.Map;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.syntax.Location;
/**
* This provides a view over the actions that were created during the analysis of a rule
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java
index 69cf115..28051d4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java
@@ -26,10 +26,10 @@
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoKey;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.Root;
import com.google.devtools.build.skyframe.SkyFunction;
+import net.starlark.java.eval.StarlarkSemantics;
/**
* The set of services that are provided to {@link ConfiguredTarget} objects during initialization.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AspectValue.java b/src/main/java/com/google/devtools/build/lib/analysis/AspectValue.java
index 9da5f0a..58a84d0 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AspectValue.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AspectValue.java
@@ -20,8 +20,8 @@
import com.google.devtools.build.lib.packages.Aspect;
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.skyframe.AspectValueKey.AspectKey;
-import com.google.devtools.build.lib.syntax.Location;
import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
/** An aspect in the context of the Skyframe graph. */
public final class AspectValue extends BasicActionLookupValue implements ConfiguredObjectValue {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/BUILD
index bae61ac..92564fd 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BUILD
@@ -422,8 +422,6 @@
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/util:detailed_exit_code",
"//src/main/java/com/google/devtools/build/lib/util:filetype",
@@ -437,6 +435,8 @@
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//src/main/java/com/google/devtools/common/options",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:extra_actions_base_java_proto",
"//src/main/protobuf:failure_details_java_proto",
"//src/main/protobuf:test_status_java_proto",
@@ -455,8 +455,8 @@
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
"//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
],
)
@@ -694,7 +694,7 @@
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/skyframe:build_configuration_value",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:guava",
"//third_party:jsr305",
],
@@ -779,7 +779,7 @@
deps = [
":aspect_collection",
"//src/main/java/com/google/devtools/build/lib/packages",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+ "//src/main/java/net/starlark/java/syntax",
],
)
@@ -790,7 +790,7 @@
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:auto_value",
],
)
@@ -982,7 +982,7 @@
"//src/main/java/com/google/devtools/build/lib/skyframe:toolchain_exception",
"//src/main/java/com/google/devtools/build/lib/skyframe:unloaded_toolchain_context",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:auto_value",
"//third_party:guava",
"//third_party:jsr305",
@@ -1044,8 +1044,8 @@
"//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
],
)
@@ -1091,7 +1091,7 @@
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+ "//src/main/java/net/starlark/java/eval",
],
)
@@ -1336,8 +1336,8 @@
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/util",
+ "//src/main/java/net/starlark/java/eval",
"//src/main/protobuf:failure_details_java_proto",
"//third_party:guava",
"//third_party:jsr305",
@@ -1435,9 +1435,9 @@
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/util:string",
+ "//src/main/java/net/starlark/java/eval",
"//src/main/protobuf:failure_details_java_proto",
"//third_party:guava",
"//third_party:jsr305",
@@ -1643,7 +1643,7 @@
":config/build_options",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/events",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:jsr305",
],
)
@@ -1740,8 +1740,8 @@
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
],
)
@@ -2015,8 +2015,8 @@
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
@@ -2029,7 +2029,7 @@
":starlark/starlark_late_bound_default",
"//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+ "//src/main/java/net/starlark/java/eval",
],
)
@@ -2044,10 +2044,10 @@
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/packages",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
],
)
@@ -2068,7 +2068,7 @@
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+ "//src/main/java/net/starlark/java/eval",
],
)
@@ -2085,10 +2085,10 @@
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
@@ -2100,7 +2100,7 @@
deps = [
":analysis_cluster",
"//src/main/java/com/google/devtools/build/lib/packages",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+ "//src/main/java/net/starlark/java/eval",
],
)
@@ -2113,8 +2113,8 @@
"//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:guava",
"//third_party:jsr305",
],
@@ -2127,7 +2127,7 @@
":config/execution_transition_factory",
"//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+ "//src/main/java/net/starlark/java/eval",
],
)
@@ -2139,7 +2139,7 @@
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+ "//src/main/java/net/starlark/java/eval",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java
index 9927546..1ba4623 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java
@@ -35,7 +35,6 @@
import com.google.devtools.build.lib.skyframe.BuildInfoCollectionValue;
import com.google.devtools.build.lib.skyframe.PrecomputedValue;
import com.google.devtools.build.lib.skyframe.WorkspaceStatusValue;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.Root;
@@ -52,6 +51,7 @@
import java.util.Set;
import java.util.TreeMap;
import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkSemantics;
/**
* The implementation of AnalysisEnvironment used for analysis. It tracks metadata for each
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java b/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java
index 49e5df9..cc1088f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java
@@ -26,8 +26,6 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -36,6 +34,8 @@
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
/**
* Provides shared functionality for parameterized command-line launching.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java
index 465d8e0..3b19eb8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java
@@ -23,11 +23,11 @@
import com.google.devtools.build.lib.analysis.stringtemplate.ExpansionException;
import com.google.devtools.build.lib.analysis.stringtemplate.TemplateContext;
import com.google.devtools.build.lib.packages.Package;
-import com.google.devtools.build.lib.syntax.Dict;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import net.starlark.java.eval.Dict;
/**
* Implements make variable expansion for make variables that depend on the configuration and the
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
index 39dae34..8850f0c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
@@ -32,13 +32,13 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.Provider;
-import com.google.devtools.build.lib.syntax.EvalException;
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.TreeMap;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
/**
* Extra information about a configured target computed on request of a dependent.
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 d24204f..923fe95 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
@@ -53,7 +53,6 @@
import com.google.devtools.build.lib.packages.RuleClass.Builder.ThirdPartyLicenseExistencePolicy;
import com.google.devtools.build.lib.packages.SymbolGenerator;
import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionDefinition;
import com.google.devtools.common.options.OptionsProvider;
@@ -71,6 +70,7 @@
import javax.annotation.Nullable;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkInterfaceUtils;
+import net.starlark.java.eval.StarlarkThread;
/**
* Knows about every rule Blaze supports and the associated configuration options.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java
index 80c913c..4d66778 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java
@@ -18,8 +18,8 @@
import com.google.devtools.build.lib.actions.Artifact.SourceArtifact;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
-import com.google.devtools.build.lib.syntax.ClassObject;
import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
/**
* A {@link ConfiguredTarget} is conceptually a {@link TransitiveInfoCollection} coupled with the
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java
index 76b3e25..a09a4e6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java
@@ -19,11 +19,11 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.DefaultInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/** DefaultInfo is provided by all targets implicitly and contains all standard fields. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
index edab353..7547dc4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
@@ -56,8 +56,6 @@
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.skyframe.ToolchainContextKey;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.util.OrderedSetMultimap;
import java.util.ArrayList;
import java.util.Collection;
@@ -65,6 +63,8 @@
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/**
* Resolver for dependencies between configured targets.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/EventHandlingErrorReporter.java b/src/main/java/com/google/devtools/build/lib/analysis/EventHandlingErrorReporter.java
index f138abc..ebe3cc2 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/EventHandlingErrorReporter.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/EventHandlingErrorReporter.java
@@ -17,7 +17,7 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.packages.Attribute;
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.syntax.Location;
/**
* Base class for implementations of {@link
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ExecGroupCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/ExecGroupCollection.java
index f257cdd..6059857 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ExecGroupCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ExecGroupCollection.java
@@ -19,14 +19,14 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ExecGroupCollectionApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Identifier;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkIndexable;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import java.util.List;
import java.util.stream.Collectors;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkIndexable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.Identifier;
/**
* A {@link StarlarkIndexable} collection of resolved toolchain contexts that can be exposed to
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/InconsistentAspectOrderException.java b/src/main/java/com/google/devtools/build/lib/analysis/InconsistentAspectOrderException.java
index 87b6503..f211a08 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/InconsistentAspectOrderException.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/InconsistentAspectOrderException.java
@@ -15,7 +15,7 @@
import com.google.devtools.build.lib.analysis.AspectCollection.AspectCycleOnPathException;
import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.syntax.Location;
/**
* Signals an inconsistency on an aspect path: an aspect occurs twice on the path and the second
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/LabelAndLocation.java b/src/main/java/com/google/devtools/build/lib/analysis/LabelAndLocation.java
index d01d377..d2602d2 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/LabelAndLocation.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/LabelAndLocation.java
@@ -18,7 +18,7 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.syntax.Location;
/**
* Container for some attributes of a {@link Target} that is significantly less heavyweight than an
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java
index cb80201..07d593f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java
@@ -30,19 +30,19 @@
import com.google.devtools.build.lib.packages.StructImpl;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.OutputGroupInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkIndexable;
-import com.google.devtools.build.lib.syntax.StarlarkIterable;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkIndexable;
+import net.starlark.java.eval.StarlarkIterable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.Location;
/**
* {@code ConfiguredTarget}s implementing this interface can provide artifacts that <b>can</b> be
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 ee6ce9f..439e07b 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
@@ -31,11 +31,11 @@
import com.google.devtools.build.lib.skyframe.ToolchainException;
import com.google.devtools.build.lib.skyframe.UnloadedToolchainContext;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ToolchainContextApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
/**
* Represents the data needed for a specific target's use of toolchains and platforms, including
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
index 266a702..07487fd 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
@@ -53,8 +53,6 @@
import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.packages.Type.LabelClass;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
@@ -62,6 +60,8 @@
import java.util.Map;
import java.util.TreeMap;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.syntax.Location;
/**
* Builder class for analyzed rule instances.
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 d08e51c..f24f435 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
@@ -91,9 +91,6 @@
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
import com.google.devtools.build.lib.skyframe.SaneAnalysisException;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.util.FileTypeSet;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.util.OrderedSetMultimap;
@@ -110,6 +107,9 @@
import java.util.Set;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.Location;
/**
* The totality of data available during the analysis of a rule.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
index 481f6c1..d9c79ee 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
@@ -36,8 +36,6 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.RunfilesApi;
import com.google.devtools.build.lib.starlarkbuildapi.SymlinkEntryApi;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.Collections;
@@ -47,6 +45,8 @@
import java.util.Objects;
import java.util.Set;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.syntax.Location;
/**
* An object that encapsulates runfiles. Conceptually, the runfiles are a map of paths to files,
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/StarlarkProviderValidationUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/StarlarkProviderValidationUtil.java
index e18cd98..90f3c52 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/StarlarkProviderValidationUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/StarlarkProviderValidationUtil.java
@@ -17,8 +17,8 @@
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/** Utility class to validate results of executing Starlark rules and aspects. */
public class StarlarkProviderValidationUtil {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TemplateVariableInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/TemplateVariableInfo.java
index 27b3c16..d542743 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TemplateVariableInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TemplateVariableInfo.java
@@ -20,11 +20,11 @@
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.TemplateVariableInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import java.util.Map;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/** Provides access to make variables from the current fragments. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java
index 0ed5b6b..93d6be8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java
@@ -17,7 +17,7 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.RequiredProviders;
import com.google.devtools.build.lib.starlarkbuildapi.core.TransitiveInfoCollectionApi;
-import com.google.devtools.build.lib.syntax.StarlarkIndexable;
+import net.starlark.java.eval.StarlarkIndexable;
/**
* Multiple {@link TransitiveInfoProvider}s bundled together.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java
index 883c081..8e41b91 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java
@@ -40,13 +40,13 @@
import com.google.devtools.build.lib.server.FailureDetails.Spawn.Code;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.util.Fingerprint;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/** Action to write a parameter file for a {@link CommandLine}. */
@Immutable // if commandLine is immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
index b20f8e4..7972e8b 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
@@ -72,9 +72,6 @@
import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
import com.google.devtools.build.lib.server.FailureDetails.Spawn.Code;
import com.google.devtools.build.lib.starlarkbuildapi.CommandLineArgsApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.LazyString;
@@ -92,6 +89,9 @@
import java.util.function.Consumer;
import javax.annotation.CheckReturnValue;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
/** An Action representing an arbitrary subprocess to be forked and exec'd. */
public class SpawnAction extends AbstractAction implements CommandAction {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionAction.java
index 9340b77..4f63cd3 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionAction.java
@@ -38,11 +38,11 @@
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.Dict;
import com.google.devtools.build.lib.util.Fingerprint;
import java.io.IOException;
import java.util.List;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
/** Action to expand a template and write the expanded content to a file. */
@AutoCodec
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/Fragment.java b/src/main/java/com/google/devtools/build/lib/analysis/config/Fragment.java
index 61597cc..1ce43ce 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/Fragment.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/Fragment.java
@@ -15,9 +15,9 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.EventHandler;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import java.util.List;
import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkValue;
/**
* An interface for language-specific configurations.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java
index 1988d78..051a7e6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java
@@ -19,8 +19,8 @@
import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.starlarkbuildapi.FragmentCollectionApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
/** Represents a collection of configuration fragments in Starlark. */
// Documentation can be found at ctx.fragments
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java
index 3e02e59..1cf7e72 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java
@@ -23,19 +23,19 @@
import com.google.devtools.build.lib.packages.BazelStarlarkContext;
import com.google.devtools.build.lib.packages.StructImpl;
import com.google.devtools.build.lib.starlarkbuildapi.config.ConfigurationTransitionApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/**
* Implementation of {@link ConfigurationTransitionApi}.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
index 219ee6d..b9f32fc 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
@@ -35,13 +35,13 @@
import com.google.devtools.build.lib.packages.Provider;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
/**
* An abstract implementation of ConfiguredTarget in which all properties are assigned trivial
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java
index 65b0f11..d980d27 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java
@@ -29,8 +29,8 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Instantiator;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.Printer;
import java.util.Objects;
+import net.starlark.java.eval.Printer;
/**
* A ConfiguredTarget for an InputFile.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java
index 3dd1003..720f720 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java
@@ -32,10 +32,10 @@
import com.google.devtools.build.lib.packages.Provider;
import com.google.devtools.build.lib.packages.Provider.Key;
import com.google.devtools.build.lib.starlarkbuildapi.ActionApi;
-import com.google.devtools.build.lib.syntax.Printer;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
+import net.starlark.java.eval.Printer;
/**
* A single dependency with its configured target and aspects merged together.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java
index 8ba3006..2e57bc5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java
@@ -34,7 +34,7 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Instantiator;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/** A ConfiguredTarget for an OutputFile. */
@AutoCodec
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
index ba717ea..89d0aaa 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
@@ -46,10 +46,10 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Instantiator;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.ActionApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
import java.util.function.Consumer;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
/**
* A {@link com.google.devtools.build.lib.analysis.ConfiguredTarget} that is produced by a rule.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD
index 6578c33..be0d6a5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD
@@ -21,7 +21,6 @@
exclude = UTIL_SRCS + ["PlatformUtils.java"],
),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/analysis:config/config_matching_provider",
"//src/main/java/com/google/devtools/build/lib/analysis:transitive_info_provider",
"//src/main/java/com/google/devtools/build/lib/cmdline",
@@ -31,6 +30,8 @@
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/util:string",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:auto_value",
"//third_party:guava",
"//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintCollection.java
index 7cc1443..bcfde54 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintCollection.java
@@ -32,18 +32,18 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintCollectionApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.util.Fingerprint;
import java.util.Collection;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkSemantics;
/** A collection of constraint values. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java
index fffe7e9..01489a3 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java
@@ -22,10 +22,10 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintSettingInfoApi;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
import com.google.devtools.build.lib.util.Fingerprint;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.syntax.Location;
/** Provider for a platform constraint setting that is available to be fulfilled. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
index 27c8de3..328fea7 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
@@ -25,10 +25,10 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
import com.google.devtools.build.lib.util.Fingerprint;
import java.util.Objects;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.syntax.Location;
/** Provider for a platform constraint value that fulfills a {@link ConstraintSettingInfo}. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
index 81172eb..9fbd1fd 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
@@ -24,19 +24,19 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.platform.PlatformInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.StringUtilities;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/** Provider for a platform, which is a group of constraints and values. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
index 8d37cd8..c4593eb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
@@ -24,12 +24,12 @@
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ToolchainInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import java.util.Map;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/**
* A provider that supplies information about a specific language toolchain, including what platform
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainTypeInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainTypeInfo.java
index 5b1cea2..7422803 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainTypeInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainTypeInfo.java
@@ -21,9 +21,9 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ToolchainTypeInfoApi;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
import java.util.Objects;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.syntax.Location;
/** A provider that supplies information about a specific toolchain type. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java
index 982f9a0..3db934f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java
@@ -28,22 +28,22 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.starlarkbuildapi.CommandLineArgsApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
/**
* Implementation of the {@code Args} Starlark type, which, in a builder-like pattern, encapsulates
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/BazelBuildApiGlobals.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/BazelBuildApiGlobals.java
index 50bcee9..5e635c8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/BazelBuildApiGlobals.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/BazelBuildApiGlobals.java
@@ -16,9 +16,9 @@
import com.google.devtools.build.lib.packages.BazelStarlarkContext;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkBuildApiGlobals;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
/**
* Bazel implementation of {@link StarlarkBuildApiGlobals}: a collection of global Starlark build
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java
index 4611892..36a1fad 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java
@@ -28,12 +28,6 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.packages.StructImpl;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.common.options.OptionDefinition;
import com.google.devtools.common.options.OptionsParser;
@@ -47,6 +41,12 @@
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.syntax.Location;
/**
* Utility class for common work done across {@link StarlarkAttributeTransitionProvider} and {@link
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java
index 5c86270..257f373 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java
@@ -51,13 +51,6 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkActionFactoryApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.protobuf.GeneratedMessage;
import java.nio.charset.StandardCharsets;
@@ -66,6 +59,13 @@
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
/** Provides a Starlark interface for all action creation needs. */
public class StarlarkActionFactory implements StarlarkActionFactoryApi {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttrModule.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttrModule.java
index eea769d..e1d0909 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttrModule.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttrModule.java
@@ -43,19 +43,19 @@
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAttrModuleApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.FileTypeSet;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkThread;
/**
* A helper class to provide Attr module in Starlark.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributeTransitionProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributeTransitionProvider.java
index f8d7eae..0f28df6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributeTransitionProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributeTransitionProvider.java
@@ -34,11 +34,11 @@
import com.google.devtools.build.lib.packages.StructImpl;
import com.google.devtools.build.lib.packages.StructProvider;
import com.google.devtools.build.lib.starlarkbuildapi.SplitTransitionProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
import java.util.LinkedHashMap;
import java.util.Map;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
/**
* This class implements {@link TransitionFactory} to provide a starlark-defined transition that
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributesCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributesCollection.java
index d0ba263..ca59e2e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributesCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributesCollection.java
@@ -26,14 +26,14 @@
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.packages.Type.LabelClass;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAttributesCollectionApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
/** Information about attributes of a rule an aspect is applied to. */
class StarlarkAttributesCollection implements StarlarkAttributesCollectionApi {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCommandLine.java
index ec5b4f1..a4562b8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCommandLine.java
@@ -18,7 +18,7 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkCommandLineApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** A Starlark module class to create memory efficient command lines. */
public class StarlarkCommandLine implements StarlarkCommandLineApi {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkConfig.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkConfig.java
index c57210f..d637899 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkConfig.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkConfig.java
@@ -22,8 +22,8 @@
import com.google.devtools.build.lib.analysis.config.ExecutionTransitionFactory;
import com.google.devtools.build.lib.packages.BuildSetting;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
/** Starlark namespace for creating build settings. */
// TODO(juliexxia): Consider adding more types of build settings, specifically other label types.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java
index dc54573..93c48bb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java
@@ -38,16 +38,6 @@
import com.google.devtools.build.lib.starlarkbuildapi.DirectoryExpander;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.FileRootApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.io.IOException;
@@ -59,6 +49,16 @@
import java.util.UUID;
import java.util.function.Consumer;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/** Supports ctx.actions.args() from Starlark. */
@AutoCodec
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkErrorReporter.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkErrorReporter.java
index 96b5fca..e8da1ff 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkErrorReporter.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkErrorReporter.java
@@ -15,8 +15,8 @@
import com.google.devtools.build.lib.analysis.RuleErrorConsumer;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/**
* {@link RuleErrorConsumer} for Native implementations of Starlark APIs.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkLateBoundDefault.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkLateBoundDefault.java
index 78cabf1..db0d290 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkLateBoundDefault.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkLateBoundDefault.java
@@ -27,7 +27,6 @@
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.LateBoundDefaultApi;
-import com.google.devtools.build.lib.syntax.Printer;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;
@@ -35,6 +34,7 @@
import javax.annotation.concurrent.Immutable;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkInterfaceUtils;
+import net.starlark.java.eval.Printer;
/**
* An implementation of {@link LateBoundDefault} which obtains a late-bound attribute value (of type
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleClassFunctions.java
index 9f982e9..d13363e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleClassFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleClassFunctions.java
@@ -81,25 +81,25 @@
import com.google.devtools.build.lib.packages.Type.ConversionException;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleFunctionsApi;
-import com.google.devtools.build.lib.syntax.Debug;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Identifier;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Tuple;
import com.google.devtools.build.lib.util.FileTypeSet;
import com.google.devtools.build.lib.util.Pair;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Debug;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
+import net.starlark.java.syntax.Identifier;
+import net.starlark.java.syntax.Location;
/** A helper class to provide an easier API for Starlark rule definitions. */
public class StarlarkRuleClassFunctions implements StarlarkRuleFunctionsApi<Artifact> {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleConfiguredTargetUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleConfiguredTargetUtil.java
index dc35bfa..e90a9db 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleConfiguredTargetUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleConfiguredTargetUtil.java
@@ -51,22 +51,22 @@
import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
/**
* A helper class to build Rule Configured Targets via runtime loaded rule implementations defined
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
index b2f7764..e82aa25 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
@@ -77,17 +77,6 @@
import com.google.devtools.build.lib.shell.ShellUtils;
import com.google.devtools.build.lib.shell.ShellUtils.TokenizationException;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
-import com.google.devtools.build.lib.syntax.Tuple;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
import java.util.Collection;
@@ -98,6 +87,17 @@
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.eval.Tuple;
/**
* A Starlark API for the ruleContext.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleTransitionProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleTransitionProvider.java
index d63f656..0cccb89 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleTransitionProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleTransitionProvider.java
@@ -31,11 +31,11 @@
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.StructImpl;
import com.google.devtools.build.lib.packages.StructProvider;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/**
* This class implements {@link TransitionFactory} to provide a starlark-defined transition that
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailure.java b/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailure.java
index 50a126d..9855949 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailure.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailure.java
@@ -17,7 +17,7 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.test.AnalysisFailureApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/**
* Encapsulates information about an analysis-phase error which would have occurred during a build.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/CoverageCommon.java b/src/main/java/com/google/devtools/build/lib/analysis/test/CoverageCommon.java
index 9964a40..57df1c7 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/CoverageCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/CoverageCommon.java
@@ -25,16 +25,16 @@
import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.starlarkbuildapi.test.CoverageCommonApi;
import com.google.devtools.build.lib.starlarkbuildapi.test.InstrumentedFilesInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.FileTypeSet;
import com.google.devtools.build.lib.util.Pair;
import java.util.Arrays;
import java.util.List;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
/** Helper functions for Starlark to access coverage-related infrastructure. */
public class CoverageCommon implements CoverageCommonApi<ConstraintValueInfo, StarlarkRuleContext> {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/commands/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/commands/BUILD
index c479d9d..e7d0c41 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/commands/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/commands/BUILD
@@ -22,7 +22,6 @@
"//src/main/java/com/google/devtools/build/lib:loading-phase-threads-option",
"//src/main/java/com/google/devtools/build/lib:runtime",
"//src/main/java/com/google/devtools/build/lib:runtime/blaze_command_result",
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/analysis:no_build_event",
"//src/main/java/com/google/devtools/build/lib/analysis:no_build_request_finished_event",
"//src/main/java/com/google/devtools/build/lib/bazel/repository",
@@ -48,6 +47,8 @@
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:failure_details_java_proto",
"//third_party:guava",
],
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/commands/SyncCommand.java b/src/main/java/com/google/devtools/build/lib/bazel/commands/SyncCommand.java
index a15f019..5bf13fc 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/commands/SyncCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/commands/SyncCommand.java
@@ -45,7 +45,6 @@
import com.google.devtools.build.lib.skyframe.PackageLookupValue;
import com.google.devtools.build.lib.skyframe.PrecomputedValue;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.util.AbruptExitException;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.util.ExitCode;
@@ -60,6 +59,7 @@
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
+import net.starlark.java.eval.Starlark;
/** Syncs all repositories specified in the workspace file */
@Command(
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/debug/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/debug/BUILD
index 8f4b66c..022e0d2 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/debug/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/debug/BUILD
@@ -43,7 +43,7 @@
deps = [
":workspace_log_java_proto",
"//src/main/java/com/google/devtools/build/lib/events",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+ "//src/main/java/net/starlark/java/syntax",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/debug/WorkspaceRuleEvent.java b/src/main/java/com/google/devtools/build/lib/bazel/debug/WorkspaceRuleEvent.java
index 4ebe08d..1973da3 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/debug/WorkspaceRuleEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/debug/WorkspaceRuleEvent.java
@@ -21,10 +21,10 @@
import com.google.devtools.build.lib.bazel.debug.proto.WorkspaceLogProtos.TemplateEvent;
import com.google.devtools.build.lib.bazel.debug.proto.WorkspaceLogProtos.WhichEvent;
import com.google.devtools.build.lib.events.ExtendedEventHandler.ProgressLike;
-import com.google.devtools.build.lib.syntax.Location;
import java.net.URL;
import java.util.List;
import java.util.Map;
+import net.starlark.java.syntax.Location;
/** An event to record events happening during workspace rule resolution */
public final class WorkspaceRuleEvent implements ProgressLike {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/repository/BUILD
index c05b568..46ee385 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/BUILD
@@ -23,7 +23,6 @@
deps = [
"//src/java_tools/singlejar/java/com/google/devtools/build/zip",
"//src/main/java/com/google/devtools/build/lib:runtime",
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
"//src/main/java/com/google/devtools/build/lib/analysis:blaze_directories",
"//src/main/java/com/google/devtools/build/lib/analysis:rule_definition_environment",
@@ -44,6 +43,8 @@
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:apache_commons_compress",
"//third_party:auto_value",
"//third_party:flogger",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java
index f0f71e3..81061c8 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java
@@ -16,13 +16,13 @@
import com.google.common.base.Optional;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction.RepositoryFunctionException;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunctionException.Transience;
import com.google.devtools.build.skyframe.SkyValue;
import java.io.IOException;
import java.util.Set;
+import net.starlark.java.eval.Starlark;
/**
* The contents of decompressed archive.
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedEvent.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedEvent.java
index 5cbfa80..f86b4b0 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedEvent.java
@@ -28,14 +28,14 @@
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.StructImpl;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.Path;
import java.io.IOException;
import java.util.List;
import java.util.Map;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
/**
* Event indicating that a repository rule was executed, together with the return value of the rule.
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedModule.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedModule.java
index 74f4150..ac797b4 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedModule.java
@@ -24,7 +24,6 @@
import com.google.devtools.build.lib.runtime.BlazeModule;
import com.google.devtools.build.lib.runtime.Command;
import com.google.devtools.build.lib.runtime.CommandEnvironment;
-import com.google.devtools.build.lib.syntax.Printer;
import com.google.devtools.common.options.OptionsBase;
import java.io.File;
import java.io.IOException;
@@ -32,6 +31,7 @@
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
import java.util.Map;
+import net.starlark.java.eval.Printer;
/** Module providing the collection of the resolved values for the repository rules executed. */
public final class RepositoryResolvedModule extends BlazeModule {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD
index 2833627..2af591b 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD
@@ -37,7 +37,6 @@
"//src/main/java/com/google/devtools/build/lib/skyframe:ignored_package_prefixes_value",
"//src/main/java/com/google/devtools/build/lib/skyframe:precomputed_value",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/util:string",
"//src/main/java/com/google/devtools/build/lib/util/io",
@@ -46,6 +45,7 @@
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:guava",
"//third_party:java-diff-utils",
"//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkExecutionResult.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkExecutionResult.java
index eee5ed1..a8275f5 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkExecutionResult.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkExecutionResult.java
@@ -25,7 +25,6 @@
import com.google.devtools.build.lib.shell.CommandResult;
import com.google.devtools.build.lib.shell.TerminationStatus;
import com.google.devtools.build.lib.starlarkbuildapi.repository.StarlarkExecutionResultApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.util.io.DelegatingOutErr;
import com.google.devtools.build.lib.util.io.OutErr;
import com.google.devtools.build.lib.util.io.RecordingOutErr;
@@ -35,6 +34,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import net.starlark.java.eval.EvalException;
/**
* A structure callable from Starlark that stores the result of repository_ctx.execute() method. It
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkPath.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkPath.java
index e97702a..92aaca6 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkPath.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkPath.java
@@ -17,9 +17,9 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.starlarkbuildapi.repository.RepositoryPathApi;
-import com.google.devtools.build.lib.syntax.Printer;
import com.google.devtools.build.lib.vfs.Path;
import java.io.IOException;
+import net.starlark.java.eval.Printer;
/**
* A Path object to be used into Starlark remote repository.
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContext.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContext.java
index 7593e87..e1dc5fb 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContext.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContext.java
@@ -54,13 +54,6 @@
import com.google.devtools.build.lib.runtime.RepositoryRemoteExecutor;
import com.google.devtools.build.lib.runtime.RepositoryRemoteExecutor.ExecutionResult;
import com.google.devtools.build.lib.starlarkbuildapi.repository.StarlarkRepositoryContextApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.util.OsUtils;
import com.google.devtools.build.lib.util.StringUtilities;
import com.google.devtools.build.lib.util.io.OutErr;
@@ -89,6 +82,13 @@
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
/** Starlark API for the repository_rule's context. */
public class StarlarkRepositoryContext
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryFunction.java
index c52eaca..5652d97 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryFunction.java
@@ -39,12 +39,6 @@
import com.google.devtools.build.lib.runtime.RepositoryRemoteExecutor;
import com.google.devtools.build.lib.skyframe.IgnoredPackagePrefixesValue;
import com.google.devtools.build.lib.skyframe.PrecomputedValue;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunction.Environment;
@@ -54,6 +48,12 @@
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
/** A repository function to delegate work done by Starlark remote repositories. */
public class StarlarkRepositoryFunction extends RepositoryFunction {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryModule.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryModule.java
index be3ac04..a45f85f 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryModule.java
@@ -39,16 +39,16 @@
import com.google.devtools.build.lib.packages.WorkspaceFactoryHelper;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.starlarkbuildapi.repository.RepositoryModuleApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Tuple;
import java.util.Map;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
/**
* The Starlark module containing the definition of {@code repository_rule} function to define a
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java
index afd0ea6..d1c3061 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java
@@ -38,7 +38,6 @@
import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue;
import com.google.devtools.build.lib.rules.repository.WorkspaceAttributeMapper;
import com.google.devtools.build.lib.skyframe.DirectoryListingValue;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.util.ResourceFileLoader;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
@@ -58,6 +57,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import net.starlark.java.eval.EvalException;
/** Implementation of the {@code android_ndk_repository} rule. */
public class AndroidNdkRepositoryFunction extends AndroidRepositoryFunction {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
index 7f15f08..192c185 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
@@ -32,7 +32,6 @@
import com.google.devtools.build.lib.rules.repository.WorkspaceAttributeMapper;
import com.google.devtools.build.lib.skyframe.DirectoryListingValue;
import com.google.devtools.build.lib.skyframe.Dirents;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.util.ResourceFileLoader;
import com.google.devtools.build.lib.vfs.Dirent;
import com.google.devtools.build.lib.vfs.FileSystem;
@@ -49,6 +48,7 @@
import java.io.InputStream;
import java.util.Map;
import java.util.Properties;
+import net.starlark.java.eval.EvalException;
/** Implementation of the {@code android_sdk_repository} rule. */
public class AndroidSdkRepositoryFunction extends AndroidRepositoryFunction {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BUILD
index 3793f15..85db1da 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BUILD
@@ -22,7 +22,6 @@
],
),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
"//src/main/java/com/google/devtools/build/lib/actions:file_metadata",
"//src/main/java/com/google/devtools/build/lib/analysis:actions/custom_command_line",
@@ -57,6 +56,8 @@
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:crosstool_config_java_proto",
"//third_party:android_common_25_0_0_lite",
"//third_party:auto_value",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BUILD
index 43e7727..5b2cc59 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BUILD
@@ -21,7 +21,6 @@
resources = glob(["*.WORKSPACE"]),
deps = [
":bazel_cpp_semantics",
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
"//src/main/java/com/google/devtools/build/lib/analysis:config/host_transition",
@@ -32,6 +31,8 @@
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp",
"//src/main/java/com/google/devtools/build/lib/util:filetype",
"//src/main/java/com/google/devtools/build/lib/util:os",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
index 893af10..7068ddf 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
@@ -32,11 +32,11 @@
import com.google.devtools.build.lib.rules.cpp.FeatureConfigurationForStarlark;
import com.google.devtools.build.lib.rules.cpp.LibraryToLink;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.BazelCcModuleApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Tuple;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
/**
* A module that contains Starlark utilities for C++ support.
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/BUILD
index cd37e3d..d5567ca 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/BUILD
@@ -36,13 +36,13 @@
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
"//src/main/java/com/google/devtools/build/lib/skyframe:skyframe_cluster",
"//src/main/java/com/google/devtools/build/lib/skyframe:track_source_directories_flag",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/util:filetype",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+ "//src/main/java/net/starlark/java/eval",
"//src/main/protobuf:failure_details_java_proto",
"//third_party:guava",
"//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphRule.java
index 95907e5..177282e 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphRule.java
@@ -26,9 +26,9 @@
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.util.FileTypeSet;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
/**
* The rule that parses the Ninja graph and symlinks inputs into output_root.
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java b/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
index c869c1f..7bda966 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
@@ -29,9 +29,6 @@
import com.google.devtools.build.lib.server.FailureDetails;
import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
import com.google.devtools.build.lib.server.FailureDetails.SymlinkForest.Code;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.util.AbruptExitException;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.util.ExitCode;
@@ -43,6 +40,9 @@
import java.util.Collections;
import java.util.Map;
import java.util.Set;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/** Creates a symlink forest based on a package path map. */
public class SymlinkForest {
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/BUILD b/src/main/java/com/google/devtools/build/lib/cmdline/BUILD
index 8cf9fd0..f1c790c 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/BUILD
@@ -27,7 +27,6 @@
deps = [
":LabelValidator",
":cmdline-primitives",
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/packages/semantics",
@@ -38,6 +37,8 @@
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:failure_details_java_proto",
"//third_party:error_prone_annotations",
"//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/Label.java b/src/main/java/com/google/devtools/build/lib/cmdline/Label.java
index 12b33d8..8febf16 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/Label.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/Label.java
@@ -25,10 +25,6 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import com.google.devtools.build.lib.util.StringUtilities;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -42,6 +38,10 @@
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
/**
* A class to identify a BUILD target. All targets belong to exactly one package. The name of a
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD b/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD
index 3132422..1bef09e 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD
@@ -30,9 +30,9 @@
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization:constants",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/util:exit_code",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:auto_value",
"//third_party:error_prone_annotations",
"//third_party:flogger",
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/Depset.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/Depset.java
index 4db871c..0254fb7 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/Depset.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/Depset.java
@@ -18,16 +18,6 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.Debug;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import javax.annotation.Nullable;
@@ -35,6 +25,16 @@
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkInterfaceUtils;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Debug;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
/**
* A Depset is a Starlark value that wraps a {@link NestedSet}.
diff --git a/src/main/java/com/google/devtools/build/lib/events/BUILD b/src/main/java/com/google/devtools/build/lib/events/BUILD
index 6cf889f..aad49b2 100644
--- a/src/main/java/com/google/devtools/build/lib/events/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/events/BUILD
@@ -12,10 +12,10 @@
name = "events",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
"//src/main/java/com/google/devtools/build/lib/util/io",
"//src/main/java/com/google/devtools/build/lib/util/io:out-err",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/java/com/google/devtools/build/lib/events/Event.java b/src/main/java/com/google/devtools/build/lib/events/Event.java
index 9d764ed..f699405 100644
--- a/src/main/java/com/google/devtools/build/lib/events/Event.java
+++ b/src/main/java/com/google/devtools/build/lib/events/Event.java
@@ -19,9 +19,6 @@
import static java.util.Comparator.comparing;
import com.google.common.collect.ImmutableClassToInstanceMap;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.SyntaxError;
import com.google.devtools.build.lib.util.io.FileOutErr;
import java.io.IOException;
import java.io.Serializable;
@@ -32,6 +29,9 @@
import java.util.stream.Stream;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
+import net.starlark.java.syntax.SyntaxError;
/**
* A situation encountered by the build system that's worth reporting.
diff --git a/src/main/java/com/google/devtools/build/lib/events/ExceptionListener.java b/src/main/java/com/google/devtools/build/lib/events/ExceptionListener.java
index 62432a1..fb29f20 100644
--- a/src/main/java/com/google/devtools/build/lib/events/ExceptionListener.java
+++ b/src/main/java/com/google/devtools/build/lib/events/ExceptionListener.java
@@ -13,7 +13,7 @@
// limitations under the License.
package com.google.devtools.build.lib.events;
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.syntax.Location;
/**
* The ExceptionListener is the primary means of reporting exceptions. It is a subset of the
diff --git a/src/main/java/com/google/devtools/build/lib/events/Reporter.java b/src/main/java/com/google/devtools/build/lib/events/Reporter.java
index ec20b38..dcfe8be 100644
--- a/src/main/java/com/google/devtools/build/lib/events/Reporter.java
+++ b/src/main/java/com/google/devtools/build/lib/events/Reporter.java
@@ -16,11 +16,11 @@
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.eventbus.EventBus;
-import com.google.devtools.build.lib.syntax.Location;
import com.google.devtools.build.lib.util.io.OutErr;
import java.io.PrintStream;
import java.util.HashSet;
import java.util.concurrent.ConcurrentLinkedQueue;
+import net.starlark.java.syntax.Location;
/**
* The reporter is the primary means of reporting events such as errors, warnings, progress
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
index 9c405bf..1458585 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
@@ -40,10 +40,6 @@
import com.google.devtools.build.lib.packages.Type.LabelClass;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.FileTypeSet;
import com.google.devtools.build.lib.util.StringUtil;
@@ -60,6 +56,10 @@
import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkValue;
/**
* Metadata of a rule attribute. Contains the attribute name and type, and an default value to be
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AttributeValueSource.java b/src/main/java/com/google/devtools/build/lib/packages/AttributeValueSource.java
index 7effc45..7e013b7 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AttributeValueSource.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AttributeValueSource.java
@@ -13,8 +13,8 @@
// limitations under the License.
package com.google.devtools.build.lib.packages;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/**
* An enum that represents different types of rule attributes, based on where their values come
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BUILD b/src/main/java/com/google/devtools/build/lib/packages/BUILD
index 74d8a82..3aa84a2 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/packages/BUILD
@@ -41,8 +41,6 @@
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/util:detailed_exit_code",
"//src/main/java/com/google/devtools/build/lib/util:exit_code",
@@ -53,7 +51,9 @@
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//src/main/java/com/google/devtools/common/options",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
"//src/main/java/net/starlark/java/spelling",
+ "//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:build_java_proto",
"//src/main/protobuf:failure_details_java_proto",
"//third_party:auto_value",
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BazelModuleContext.java b/src/main/java/com/google/devtools/build/lib/packages/BazelModuleContext.java
index 5f1e36f..f3f81d2 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BazelModuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/BazelModuleContext.java
@@ -17,15 +17,15 @@
import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.Module;
+import net.starlark.java.eval.Module;
/**
* BazelModuleContext records Bazel-specific information associated with a .bzl {@link
- * com.google.devtools.build.lib.syntax.Module}.
+ * net.starlark.java.eval.Module}.
*/
@AutoValue
public abstract class BazelModuleContext {
- /** Label associated with the Starlark {@link com.google.devtools.build.lib.syntax.Module}. */
+ /** Label associated with the Starlark {@link net.starlark.java.eval.Module}. */
public abstract Label label();
/** Returns the name of the module's .bzl file, as provided to the parser. */
@@ -38,19 +38,19 @@
public abstract ImmutableMap<String, Module> loads();
/**
- * Transitive digest of the .bzl file of the {@link com.google.devtools.build.lib.syntax.Module}
- * itself and all files it transitively loads.
+ * Transitive digest of the .bzl file of the {@link net.starlark.java.eval.Module} itself and all
+ * files it transitively loads.
*/
@SuppressWarnings({"AutoValueImmutableFields", "mutable"})
@AutoValue.CopyAnnotations
public abstract byte[] bzlTransitiveDigest();
/**
- * Returns a label for a {@link com.google.devtools.build.lib.syntax.Module}.
+ * Returns a label for a {@link net.starlark.java.eval.Module}.
*
* <p>This is a user-facing value and we rely on this string to be a valid label for the {@link
- * com.google.devtools.build.lib.syntax.Module} (and that only). Please see the documentation of
- * {@link com.google.devtools.build.lib.syntax.Module#setClientData(Object)} for more details.
+ * net.starlark.java.eval.Module} (and that only). Please see the documentation of {@link
+ * net.starlark.java.eval.Module#setClientData(Object)} for more details.
*/
@Override
public final String toString() {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BazelStarlarkContext.java b/src/main/java/com/google/devtools/build/lib/packages/BazelStarlarkContext.java
index 24a7b3b..813837f 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BazelStarlarkContext.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/BazelStarlarkContext.java
@@ -19,10 +19,10 @@
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.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
/** Contextual information associated with each Starlark thread created by Bazel. */
// TODO(adonovan): rename BazelThreadContext, for symmetry with BazelModuleContext.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BuildSetting.java b/src/main/java/com/google/devtools/build/lib/packages/BuildSetting.java
index d8cddf0..ac5f493 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BuildSetting.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/BuildSetting.java
@@ -15,7 +15,7 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi.BuildSettingApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/**
* Metadata of a build setting rule's properties. This describes the build setting's type (for
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BuildType.java b/src/main/java/com/google/devtools/build/lib/packages/BuildType.java
index 8b495f4..bdf25b7 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BuildType.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/BuildType.java
@@ -29,10 +29,6 @@
import com.google.devtools.build.lib.packages.Type.LabelClass;
import com.google.devtools.build.lib.packages.Type.ListType;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
@@ -40,6 +36,10 @@
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkValue;
/**
* Collection of data types that are specific to building things, i.e. not inherent to Starlark.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BuiltinProvider.java b/src/main/java/com/google/devtools/build/lib/packages/BuiltinProvider.java
index 496701b..0ff81ee 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BuiltinProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/BuiltinProvider.java
@@ -15,11 +15,11 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.NativeProvider.NativeKey;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.syntax.Location;
/**
* Base class for declared providers {@see Provider} defined in native code.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/CallStack.java b/src/main/java/com/google/devtools/build/lib/packages/CallStack.java
index 65a1880..a08b017 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/CallStack.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/CallStack.java
@@ -15,14 +15,14 @@
package com.google.devtools.build.lib.packages;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/**
* A CallStack is an opaque immutable stack of Starlark call frames, outermost call first. Its
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ConfiguredAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/ConfiguredAttributeMapper.java
index a4de20e..f56753e 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ConfiguredAttributeMapper.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/ConfiguredAttributeMapper.java
@@ -23,7 +23,6 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.BuildType.Selector;
import com.google.devtools.build.lib.packages.BuildType.SelectorList;
-import com.google.devtools.build.lib.syntax.EvalException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
@@ -32,6 +31,7 @@
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
/**
* {@link AttributeMap} implementation that binds a rule's attribute as follows:
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ConstantRuleVisibility.java b/src/main/java/com/google/devtools/build/lib/packages/ConstantRuleVisibility.java
index 935d48d..5c041c3 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ConstantRuleVisibility.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/ConstantRuleVisibility.java
@@ -20,11 +20,11 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/**
* A rule visibility that simply says yes or no. It corresponds to public,
diff --git a/src/main/java/com/google/devtools/build/lib/packages/DefaultPackageArguments.java b/src/main/java/com/google/devtools/build/lib/packages/DefaultPackageArguments.java
index ffca6d7..4ec2aef 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/DefaultPackageArguments.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/DefaultPackageArguments.java
@@ -17,10 +17,10 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.License.DistributionType;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
import java.util.List;
import java.util.Set;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.syntax.Location;
/** Encapsulates the core, default set of {@link PackageArgument}s. */
final class DefaultPackageArguments {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/EnvironmentGroup.java b/src/main/java/com/google/devtools/build/lib/packages/EnvironmentGroup.java
index 587d626..1f1c850 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/EnvironmentGroup.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/EnvironmentGroup.java
@@ -26,13 +26,13 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code;
-import com.google.devtools.build.lib.syntax.Location;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import net.starlark.java.syntax.Location;
/**
* Model for the "environment_group' rule: the piece of Bazel's rule constraint system that binds
diff --git a/src/main/java/com/google/devtools/build/lib/packages/FilesetEntry.java b/src/main/java/com/google/devtools/build/lib/packages/FilesetEntry.java
index 87e7228..cc625fa 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/FilesetEntry.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/FilesetEntry.java
@@ -23,8 +23,6 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.starlarkbuildapi.FilesetEntryApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.Collection;
import java.util.Collections;
@@ -33,6 +31,8 @@
import java.util.Locale;
import java.util.Set;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkValue;
/**
* FilesetEntry is a value object used to represent a "FilesetEntry" inside a "Fileset" BUILD rule.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java b/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java
index ace5f64..5fa594a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java
@@ -29,10 +29,6 @@
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.util.StringUtil;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -44,6 +40,10 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/**
* A function interface allowing rules to specify their set of implicit outputs in a more dynamic
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Info.java b/src/main/java/com/google/devtools/build/lib/packages/Info.java
index 99c273d..2d013b2 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Info.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Info.java
@@ -13,9 +13,9 @@
// limitations under the License.
package com.google.devtools.build.lib.packages;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
/**
* An Info is a unit of information produced by analysis of one configured target and consumed by
diff --git a/src/main/java/com/google/devtools/build/lib/packages/InputFile.java b/src/main/java/com/google/devtools/build/lib/packages/InputFile.java
index 64f1577..40de222 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/InputFile.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/InputFile.java
@@ -18,9 +18,9 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
-import com.google.devtools.build.lib.syntax.Location;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
+import net.starlark.java.syntax.Location;
/**
* A file that is an input to the build system.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/InternalModule.java b/src/main/java/com/google/devtools/build/lib/packages/InternalModule.java
index 817f5bb..10bed35 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/InternalModule.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/InternalModule.java
@@ -14,10 +14,10 @@
package com.google.devtools.build.lib.packages;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkValue;
// TODO(#11437): Factor an API out into skylarkbuildapi, for stardoc's benefit. Otherwise, stardoc
// can't run on @builtins bzls.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/License.java b/src/main/java/com/google/devtools/build/lib/packages/License.java
index bf70b93..8bbfa39 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/License.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/License.java
@@ -24,13 +24,13 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.LicenseApi;
-import com.google.devtools.build.lib.syntax.Printer;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
+import net.starlark.java.eval.Printer;
/** Support for license and distribution checking. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java b/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java
index 9592565..1c1eda1 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java
@@ -15,10 +15,10 @@
import com.google.common.collect.ImmutableCollection;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.Location;
/**
* Abstract base class for implementations of {@link StructImpl} that expose
diff --git a/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java b/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java
index 9dac3cf..ed8ebfe 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java
@@ -16,10 +16,10 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import com.google.devtools.build.lib.util.Pair;
import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
/**
* Base class for declared providers {@see Provider} defined in native code.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/OutputFile.java b/src/main/java/com/google/devtools/build/lib/packages/OutputFile.java
index 490db8a..3b6c138 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/OutputFile.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/OutputFile.java
@@ -15,7 +15,7 @@
package com.google.devtools.build.lib.packages;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.syntax.Location;
/**
* A generated file that is the output of a rule.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index 20c8635..68dd22a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -49,10 +49,6 @@
import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
import com.google.devtools.build.lib.skyframe.serialization.SerializationContext;
import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -73,7 +69,11 @@
import java.util.Set;
import java.util.TreeMap;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
import net.starlark.java.spelling.SpellChecker;
+import net.starlark.java.syntax.Location;
/**
* A package, which is a container of {@link Rule}s, each of which contains a dictionary of named
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageArgument.java b/src/main/java/com/google/devtools/build/lib/packages/PackageArgument.java
index 20f9646..a7aca37 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageArgument.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageArgument.java
@@ -14,8 +14,8 @@
package com.google.devtools.build.lib.packages;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.syntax.Location;
/** Defines an argument to the {@code package()} function. */
public abstract class PackageArgument<T> {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
index 02825ae..137e1b5 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -43,35 +43,6 @@
import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
import com.google.devtools.build.lib.server.FailureDetails.PackageLoading;
import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code;
-import com.google.devtools.build.lib.syntax.Argument;
-import com.google.devtools.build.lib.syntax.CallExpression;
-import com.google.devtools.build.lib.syntax.DefStatement;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Expression;
-import com.google.devtools.build.lib.syntax.FileOptions;
-import com.google.devtools.build.lib.syntax.ForStatement;
-import com.google.devtools.build.lib.syntax.Identifier;
-import com.google.devtools.build.lib.syntax.IfStatement;
-import com.google.devtools.build.lib.syntax.IntegerLiteral;
-import com.google.devtools.build.lib.syntax.ListExpression;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.NodeVisitor;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Program;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StringLiteral;
-import com.google.devtools.build.lib.syntax.SyntaxError;
-import com.google.devtools.build.lib.syntax.Tuple;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.util.ExitCode;
import com.google.devtools.build.lib.vfs.FileSystem;
@@ -90,6 +61,35 @@
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
+import net.starlark.java.syntax.Argument;
+import net.starlark.java.syntax.CallExpression;
+import net.starlark.java.syntax.DefStatement;
+import net.starlark.java.syntax.Expression;
+import net.starlark.java.syntax.FileOptions;
+import net.starlark.java.syntax.ForStatement;
+import net.starlark.java.syntax.Identifier;
+import net.starlark.java.syntax.IfStatement;
+import net.starlark.java.syntax.IntegerLiteral;
+import net.starlark.java.syntax.ListExpression;
+import net.starlark.java.syntax.Location;
+import net.starlark.java.syntax.NodeVisitor;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.Program;
+import net.starlark.java.syntax.StarlarkFile;
+import net.starlark.java.syntax.StringLiteral;
+import net.starlark.java.syntax.SyntaxError;
/**
* The package factory is responsible for constructing Package instances from a BUILD file's
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageGroup.java b/src/main/java/com/google/devtools/build/lib/packages/PackageGroup.java
index ca1aa12..2b12e33 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageGroup.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageGroup.java
@@ -22,11 +22,11 @@
import com.google.devtools.build.lib.packages.License.DistributionType;
import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code;
-import com.google.devtools.build.lib.syntax.Location;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
+import net.starlark.java.syntax.Location;
/**
* This class represents a package group BUILD target. It has a name, a list of {@link
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageLoadingListener.java b/src/main/java/com/google/devtools/build/lib/packages/PackageLoadingListener.java
index ce3398d..163743b 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageLoadingListener.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageLoadingListener.java
@@ -14,8 +14,8 @@
package com.google.devtools.build.lib.packages;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import java.util.List;
+import net.starlark.java.eval.StarlarkSemantics;
/** Listener for package-loading events. */
public interface PackageLoadingListener {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageUtils.java b/src/main/java/com/google/devtools/build/lib/packages/PackageUtils.java
index 5d8e06d..58af703 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageUtils.java
@@ -15,8 +15,8 @@
package com.google.devtools.build.lib.packages;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.EvalException;
import java.util.List;
+import net.starlark.java.eval.EvalException;
/** Miscellaneous utils internal to Packages. */
final class PackageUtils {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Provider.java b/src/main/java/com/google/devtools/build/lib/packages/Provider.java
index 5c2fb2d..3e623e2 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Provider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Provider.java
@@ -15,7 +15,7 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.syntax.Location;
/**
* Declared Provider (a constructor for {@link Info}).
@@ -48,7 +48,7 @@
/**
* Returns an error message format string for instances to use for their {@link
- * com.google.devtools.build.lib.syntax.ClassObject#getErrorMessageForUnknownField(String)}.
+ * net.starlark.java.eval.ClassObject#getErrorMessageForUnknownField(String)}.
*
* <p>The format string must contain one {@code '%s'} placeholder for the field name.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Rule.java b/src/main/java/com/google/devtools/build/lib/packages/Rule.java
index 81d8899..e5095e8 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Rule.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Rule.java
@@ -32,14 +32,14 @@
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.packages.License.DistributionType;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
import com.google.devtools.build.lib.util.BinaryPredicate;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.syntax.Location;
/**
* An instance of a build rule in the build language. A rule has a name, a package to which it
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index cf713a3..e14887d 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -56,11 +56,6 @@
import com.google.devtools.build.lib.packages.Type.ConversionException;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.util.FileTypeSet;
import com.google.devtools.build.lib.util.StringUtil;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -80,6 +75,11 @@
import java.util.regex.Pattern;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/**
* Instances of RuleClass encapsulate the set of attributes of a given "class" of rule, such as
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
index 7676916..a35a351 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
@@ -19,8 +19,8 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.packages.RuleClass.Builder.ThirdPartyLicenseExistencePolicy;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import java.util.Map;
+import net.starlark.java.eval.StarlarkThread;
/**
* The collection of the supported build rules. Provides an StarlarkThread for Starlark rule
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java b/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
index e54cc34..b1a402c 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
@@ -24,13 +24,13 @@
import com.google.devtools.build.lib.packages.Package.NameConflictException;
import com.google.devtools.build.lib.packages.PackageFactory.PackageContext;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkThread.CallStackEntry;
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkThread.CallStackEntry;
+import net.starlark.java.syntax.Location;
/**
* Given a {@link RuleClass} and a set of attribute values, returns a {@link Rule} instance. Also
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SelectorList.java b/src/main/java/com/google/devtools/build/lib/packages/SelectorList.java
index 548149c..7a66a7c 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SelectorList.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SelectorList.java
@@ -18,17 +18,17 @@
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.HasBinary;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
-import com.google.devtools.build.lib.syntax.TokenKind;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import net.starlark.java.annot.StarlarkBuiltin;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.HasBinary;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.TokenKind;
/**
* An attribute value consisting of a concatenation of native types and selects, e.g:
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SelectorValue.java b/src/main/java/com/google/devtools/build/lib/packages/SelectorValue.java
index 1a484e7..414905f 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SelectorValue.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SelectorValue.java
@@ -17,14 +17,14 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.HasBinary;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
-import com.google.devtools.build.lib.syntax.TokenKind;
import java.util.Map;
import net.starlark.java.annot.StarlarkBuiltin;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.HasBinary;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.TokenKind;
/**
* The value returned by a call to {@code select({...})}, for example:
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkAspect.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkAspect.java
index df46dfe..7c65d9b 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkAspect.java
@@ -16,7 +16,7 @@
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAspectApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** Represents an aspect which can be attached to a Starlark-defined rule attribute. */
public interface StarlarkAspect extends StarlarkAspectApi {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkCallbackHelper.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkCallbackHelper.java
index ec84dac..1f3ef02 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkCallbackHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkCallbackHelper.java
@@ -18,13 +18,13 @@
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
/**
* A helper class for calling Starlark functions from Java, where the argument values are supplied
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkDefinedAspect.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkDefinedAspect.java
index ffb9794..6c2efab 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkDefinedAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkDefinedAspect.java
@@ -22,13 +22,13 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
/** A Starlark value that is a result of an 'aspect(..)' function call. */
@AutoCodec
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkExportable.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkExportable.java
index 58805bc..0898726 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkExportable.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkExportable.java
@@ -15,8 +15,8 @@
package com.google.devtools.build.lib.packages;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
/**
* {@link StarlarkValue}s that need special handling when they are exported from an extension file.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkInfo.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkInfo.java
index 3f23e2d..d829fe9 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkInfo.java
@@ -19,17 +19,17 @@
import com.google.common.collect.ImmutableCollection;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.collect.nestedset.Depset;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.HasBinary;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.TokenKind;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.HasBinary;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.syntax.Location;
+import net.starlark.java.syntax.TokenKind;
/** An Info (provider instance) for providers defined in Starlark. */
public final class StarlarkInfo extends StructImpl implements HasBinary, ClassObject {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkLibrary.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkLibrary.java
index 3fe9883..3a16365 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkLibrary.java
@@ -24,18 +24,18 @@
import com.google.devtools.build.lib.packages.Type.ConversionException;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import java.util.List;
import java.util.Set;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkGlobalLibrary;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/**
* A library of pre-declared Bazel Starlark functions.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeAspect.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeAspect.java
index 114382c..6d0fe86 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeAspect.java
@@ -15,7 +15,7 @@
package com.google.devtools.build.lib.packages;
import com.google.common.collect.ImmutableSet;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/** A natively-defined aspect that is may be referenced by Starlark attribute definitions. */
public abstract class StarlarkNativeAspect extends NativeAspectClass implements StarlarkAspect {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeModule.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeModule.java
index 34caa41..2d44acf 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeModule.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeModule.java
@@ -32,17 +32,6 @@
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkNativeModuleApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
-import com.google.devtools.build.lib.syntax.Tuple;
import com.google.devtools.build.lib.util.DetailedExitCode;
import java.io.IOException;
import java.util.ArrayList;
@@ -52,6 +41,17 @@
import java.util.Map;
import java.util.TreeMap;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.eval.Tuple;
+import net.starlark.java.syntax.Location;
/** The Starlark native module. */
// TODO(cparsons): Move the definition of native.package() to this class.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkProvider.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkProvider.java
index 87d10c8..baadd2a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkProvider.java
@@ -18,15 +18,15 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import java.util.Collection;
import java.util.Objects;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/**
* A provider defined in Starlark rather than in native code.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java b/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java
index 4238bec..ec675f8 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java
@@ -17,19 +17,19 @@
import com.google.common.base.Objects;
import com.google.common.collect.Ordering;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.protobuf.TextFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.syntax.Location;
/**
* An abstract base class for Starlark values that have fields, have to_json and to_proto methods,
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StructProvider.java b/src/main/java/com/google/devtools/build/lib/packages/StructProvider.java
index c196b16..2a1fd88 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StructProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StructProvider.java
@@ -15,12 +15,12 @@
package com.google.devtools.build.lib.packages;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import java.util.Map;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/**
* The provider for the built-in type {@code struct}.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Target.java b/src/main/java/com/google/devtools/build/lib/packages/Target.java
index 3d1b8e7..9dc1fc9 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Target.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Target.java
@@ -16,9 +16,9 @@
import com.google.devtools.build.lib.packages.License.DistributionType;
import com.google.devtools.build.lib.starlarkbuildapi.TargetApi;
-import com.google.devtools.build.lib.syntax.Location;
import java.util.Set;
import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
/**
* A node in the build dependency graph, identified by a Label.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java b/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java
index b45939f..b2ddd09 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java
@@ -24,9 +24,6 @@
import com.google.common.collect.Maps;
import com.google.devtools.build.lib.actions.ExecutionRequirements;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
import com.google.devtools.build.lib.util.Pair;
import java.util.ArrayList;
import java.util.Collection;
@@ -34,6 +31,9 @@
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.syntax.Location;
/**
* Utility functions over Targets that don't really belong in the base {@link
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Type.java b/src/main/java/com/google/devtools/build/lib/packages/Type.java
index 46474c3..0a734ad 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Type.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Type.java
@@ -23,10 +23,6 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.util.LoggingUtil;
import com.google.devtools.build.lib.util.StringCanonicalizer;
import java.util.ArrayList;
@@ -38,6 +34,10 @@
import java.util.Set;
import java.util.logging.Level;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
/**
* Root of Type symbol hierarchy for values in the build language.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
index fcb462f..4890bd2 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
@@ -25,19 +25,6 @@
import com.google.devtools.build.lib.packages.Package.NameConflictException;
import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension;
import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Program;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.SyntaxError;
-import com.google.devtools.build.lib.syntax.Tuple;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
@@ -45,6 +32,19 @@
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
+import net.starlark.java.syntax.Program;
+import net.starlark.java.syntax.StarlarkFile;
+import net.starlark.java.syntax.SyntaxError;
/** Parser for WORKSPACE files. Fills in an ExternalPackage.Builder */
// TODO(adonovan): make a simpler API around a single static function of this form:
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactoryHelper.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactoryHelper.java
index 1ffd028..a0eaad8 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactoryHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactoryHelper.java
@@ -25,12 +25,12 @@
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.events.StoredEventHandler;
import com.google.devtools.build.lib.packages.RuleFactory.BuildLangTypedAttributeValuesMap;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import java.util.Map;
import java.util.stream.Collectors;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
/** A helper for the {@link WorkspaceFactory} to create repository rules */
public class WorkspaceFactoryHelper {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
index c9b6af9..ebfaa96 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
@@ -22,7 +22,6 @@
import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.Module;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.RootedPath;
import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -30,6 +29,7 @@
import com.google.devtools.build.skyframe.SkyValue;
import java.util.Map;
import java.util.Objects;
+import net.starlark.java.eval.Module;
/**
* A SkyValue that contains the result of the parsing of one part of the WORKSPACE file. The parsing
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java
index b024078..9321fde 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java
@@ -14,7 +14,7 @@
package com.google.devtools.build.lib.packages;
-import static com.google.devtools.build.lib.syntax.Starlark.NONE;
+import static net.starlark.java.eval.Starlark.NONE;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
@@ -30,13 +30,6 @@
import com.google.devtools.build.lib.packages.Package.NameConflictException;
import com.google.devtools.build.lib.packages.RuleFactory.InvalidRuleException;
import com.google.devtools.build.lib.starlarkbuildapi.WorkspaceGlobalsApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.List;
import java.util.Map;
@@ -45,6 +38,13 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
/** A collection of global Starlark build API functions that apply to WORKSPACE files. */
public class WorkspaceGlobals implements WorkspaceGlobalsApi {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/metrics/BUILD b/src/main/java/com/google/devtools/build/lib/packages/metrics/BUILD
index 35df550..07f7069 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/metrics/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/packages/metrics/BUILD
@@ -22,9 +22,9 @@
"//src/main/java/com/google/devtools/build/lib/cmdline:cmdline-primitives",
"//src/main/java/com/google/devtools/build/lib/collect:extrema",
"//src/main/java/com/google/devtools/build/lib/packages",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:auto_value",
"//third_party:flogger",
"//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListener.java b/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListener.java
index 904c780..a43937f 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListener.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListener.java
@@ -15,9 +15,9 @@
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.PackageLoadingListener;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.protobuf.util.Durations;
import javax.annotation.concurrent.GuardedBy;
+import net.starlark.java.eval.StarlarkSemantics;
/** Tracks per-invocation extreme package loading events. */
public class PackageMetricsPackageLoadingListener implements PackageLoadingListener {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/semantics/BUILD b/src/main/java/com/google/devtools/build/lib/packages/semantics/BUILD
index 16a8d6c..00345cc 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/semantics/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/packages/semantics/BUILD
@@ -20,8 +20,8 @@
srcs = ["BuildLanguageOptions.java"],
deps = [
"//src/main/java/com/google/devtools/build/lib/concurrent",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:guava",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java
index 023430e..287aa38 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java
@@ -18,7 +18,6 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Interner;
import com.google.devtools.build.lib.concurrent.BlazeInterners;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.common.options.Converters.CommaSeparatedOptionListConverter;
import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionDocumentationCategory;
@@ -27,6 +26,7 @@
import com.google.devtools.common.options.OptionsBase;
import java.io.Serializable;
import java.util.List;
+import net.starlark.java.eval.StarlarkSemantics;
/**
* Options that affect the semantics of Bazel's build language.
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTracker.java b/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTracker.java
index bb099a4..b80228a 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTracker.java
+++ b/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTracker.java
@@ -23,10 +23,6 @@
import com.google.devtools.build.lib.packages.AspectClass;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleFunction;
-import com.google.devtools.build.lib.syntax.Debug;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.monitoring.runtime.instrumentation.Sampler;
import com.google.perftools.profiles.ProfileProto.Function;
import com.google.perftools.profiles.ProfileProto.Line;
@@ -41,6 +37,10 @@
import java.util.Random;
import java.util.zip.GZIPOutputStream;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Debug;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/** Tracks allocations for memory reporting. */
@ConditionallyThreadCompatible
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerModule.java b/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerModule.java
index e0d1fd7..d0870d6 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerModule.java
+++ b/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerModule.java
@@ -21,10 +21,10 @@
import com.google.devtools.build.lib.runtime.BlazeModule;
import com.google.devtools.build.lib.runtime.BlazeRuntime;
import com.google.devtools.build.lib.runtime.WorkspaceBuilder;
-import com.google.devtools.build.lib.syntax.Debug;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.common.options.OptionsParsingResult;
import java.util.UUID;
+import net.starlark.java.eval.Debug;
/**
* A {@link BlazeModule} that can be used to record interesting information about all allocations
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/memory/BUILD b/src/main/java/com/google/devtools/build/lib/profiler/memory/BUILD
index 3daefef..62a315e 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/memory/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/profiler/memory/BUILD
@@ -18,13 +18,14 @@
":allocationtracker",
":current_rule_tracker",
"//src/main/java/com/google/devtools/build/lib:runtime",
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/analysis:blaze_directories",
"//src/main/java/com/google/devtools/build/lib/analysis:blaze_version_info",
"//src/main/java/com/google/devtools/build/lib/analysis:server_directories",
"//src/main/java/com/google/devtools/build/lib/clock",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party/allocation_instrumenter",
],
)
@@ -45,9 +46,10 @@
],
deps = [
":current_rule_tracker",
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/packages",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
"//third_party/allocation_instrumenter",
diff --git a/src/main/java/com/google/devtools/build/lib/query2/BUILD b/src/main/java/com/google/devtools/build/lib/query2/BUILD
index b184ff2..752e46a 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/query2/BUILD
@@ -23,7 +23,6 @@
],
),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
"//src/main/java/com/google/devtools/build/lib/actions:file_metadata",
@@ -100,6 +99,8 @@
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:analysis_java_proto",
"//src/main/protobuf:build_java_proto",
"//src/main/protobuf:failure_details_java_proto",
diff --git a/src/main/java/com/google/devtools/build/lib/query2/compat/BUILD b/src/main/java/com/google/devtools/build/lib/query2/compat/BUILD
index 5be5b08..d4db794 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/compat/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/query2/compat/BUILD
@@ -16,7 +16,7 @@
deps = [
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/packages",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/query2/compat/FakeLoadTarget.java b/src/main/java/com/google/devtools/build/lib/query2/compat/FakeLoadTarget.java
index 24c7abb..571edd7 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/compat/FakeLoadTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/compat/FakeLoadTarget.java
@@ -22,9 +22,9 @@
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.RuleVisibility;
import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.syntax.Location;
import java.util.Objects;
import java.util.Set;
+import net.starlark.java.syntax.Location;
/**
* A fake Target - Use only so that "blaze query" can report Load files as Targets.
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/StarlarkOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/StarlarkOutputFormatterCallback.java
index 1481235..1c8fff9 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/StarlarkOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/StarlarkOutputFormatterCallback.java
@@ -21,18 +21,18 @@
import com.google.devtools.build.lib.query2.engine.QueryException;
import com.google.devtools.build.lib.server.FailureDetails.ConfigurableQuery.Code;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Expression;
-import com.google.devtools.build.lib.syntax.FileOptions;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.SyntaxError;
import java.io.OutputStream;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Expression;
+import net.starlark.java.syntax.FileOptions;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.SyntaxError;
/**
* Starlark output formatter for cquery results. Each configured target will result in an evaluation
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
index 1ce6898..4fea7461 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
@@ -45,7 +45,6 @@
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccessor;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.util.OrderedSetMultimap;
import java.io.OutputStream;
import java.util.Collection;
@@ -55,6 +54,7 @@
import java.util.function.Function;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
/**
* Output formatter that prints {@link ConfigurationTransition} information for rule configured
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/BUILD b/src/main/java/com/google/devtools/build/lib/query2/query/output/BUILD
index e0d8678..6e03651 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/output/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/BUILD
@@ -12,7 +12,6 @@
name = "output",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/collect",
"//src/main/java/com/google/devtools/build/lib/collect/compacthashset",
@@ -28,6 +27,8 @@
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:build_java_proto",
"//src/main/protobuf:failure_details_java_proto",
"//third_party:flogger",
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/BuildOutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/query/output/BuildOutputFormatter.java
index 1ace23e..85c9f37 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/output/BuildOutputFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/BuildOutputFormatter.java
@@ -29,8 +29,6 @@
import com.google.devtools.build.lib.query2.engine.QueryEnvironment;
import com.google.devtools.build.lib.query2.engine.SynchronizedDelegatingOutputFormatterCallback;
import com.google.devtools.build.lib.query2.engine.ThreadSafeOutputFormatterCallback;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
@@ -38,6 +36,8 @@
import java.util.List;
import java.util.Set;
import java.util.function.BiPredicate;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkThread;
/**
* An output formatter that prints the generating rules using the syntax of the BUILD files. If
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/FormatUtils.java b/src/main/java/com/google/devtools/build/lib/query2/query/output/FormatUtils.java
index e4b9697..7a12a7f 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/output/FormatUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/FormatUtils.java
@@ -19,11 +19,11 @@
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.query2.common.CommonQueryOptions;
-import com.google.devtools.build.lib.syntax.Location;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.Root;
import java.util.Comparator;
import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
/**
* Given a set of query options, returns a BinaryPredicate suitable for passing to {@link
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/LocationOutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/query/output/LocationOutputFormatter.java
index 1ade9dc..c0d964e 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/output/LocationOutputFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/LocationOutputFormatter.java
@@ -25,9 +25,9 @@
import com.google.devtools.build.lib.query2.engine.SynchronizedDelegatingOutputFormatterCallback;
import com.google.devtools.build.lib.query2.engine.ThreadSafeOutputFormatterCallback;
import com.google.devtools.build.lib.server.FailureDetails.Query;
-import com.google.devtools.build.lib.syntax.Location;
import java.io.IOException;
import java.io.OutputStream;
+import net.starlark.java.syntax.Location;
/**
* An output formatter that prints the labels of the targets, preceded by
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/ProtoOutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/query/output/ProtoOutputFormatter.java
index 9ac436d..5e389fd 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/output/ProtoOutputFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/ProtoOutputFormatter.java
@@ -62,7 +62,6 @@
import com.google.devtools.build.lib.query2.proto.proto2api.Build.SourceFile;
import com.google.devtools.build.lib.query2.query.aspectresolvers.AspectResolver;
import com.google.devtools.build.lib.query2.query.output.QueryOptions.OrderOutput;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.protobuf.CodedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
@@ -74,6 +73,7 @@
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkThread;
/**
* An output formatter that outputs a protocol buffer representation
diff --git a/src/main/java/com/google/devtools/build/lib/repository/BUILD b/src/main/java/com/google/devtools/build/lib/repository/BUILD
index 7219732..93a5cd7 100644
--- a/src/main/java/com/google/devtools/build/lib/repository/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/repository/BUILD
@@ -13,8 +13,8 @@
srcs = ["ExternalPackageException.java"],
deps = [
"//src/main/java/com/google/devtools/build/lib/packages",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/skyframe",
+ "//src/main/java/net/starlark/java/eval",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageException.java b/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageException.java
index 956a6b8..9ada52b 100644
--- a/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageException.java
+++ b/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageException.java
@@ -15,9 +15,9 @@
package com.google.devtools.build.lib.repository;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.skyframe.SkyFunctionException;
import java.io.IOException;
+import net.starlark.java.eval.EvalException;
/** Exception thrown when something goes wrong accessing a rule. */
public class ExternalPackageException extends SkyFunctionException {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
index 20aab02..cbd6ffc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
@@ -30,11 +30,11 @@
import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkSemantics;
/**
* This configured target pretends to be whatever type of target "actual" is, returning its label,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/BUILD b/src/main/java/com/google/devtools/build/lib/rules/BUILD
index 63c25c4..82deea9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/BUILD
@@ -129,9 +129,9 @@
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/vfs",
+ "//src/main/java/net/starlark/java/eval",
"//src/main/protobuf:test_status_java_proto",
"//third_party:guava",
],
@@ -163,8 +163,8 @@
"//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/skyframe:build_configuration_value",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/util:filetype",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:guava",
"//third_party:jsr305",
],
@@ -336,11 +336,11 @@
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/skyframe:directory_listing_value",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:guava",
],
)
@@ -368,11 +368,11 @@
"//src/main/java/com/google/devtools/build/lib/cmdline:LabelValidator",
"//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/skyframe:package_lookup_value",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:guava",
],
)
@@ -430,14 +430,14 @@
"//src/main/java/com/google/devtools/build/lib/skyframe:precomputed_value",
"//src/main/java/com/google/devtools/build/lib/skyframe:sky_functions",
"//src/main/java/com/google/devtools/build/lib/skyframe:sky_value_dirtiness_checker",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/util/io",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
@@ -487,7 +487,7 @@
srcs = ["repository/WorkspaceAttributeMapper.java"],
deps = [
"//src/main/java/com/google/devtools/build/lib/packages",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidApplicationResourceInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidApplicationResourceInfo.java
index ecb7c0d..697b34c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidApplicationResourceInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidApplicationResourceInfo.java
@@ -20,7 +20,7 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidApplicationResourceInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** A provider for Android resource APKs (".ap_") and related info. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
index fbcf8b5..84c3b06 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
@@ -25,9 +25,9 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidAssetsInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import java.util.Optional;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
/** Provides information about transitive Android assets. */
public final class AndroidAssetsInfo extends NativeInfo
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryDataInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryDataInfo.java
index e0f55c6..c961f84 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryDataInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryDataInfo.java
@@ -17,7 +17,7 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidBinaryDataInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/**
* Provides information on Android resource, asset, and manifest information specific to binaries.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java
index a66f6c0..543a88e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java
@@ -20,7 +20,7 @@
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.rules.cpp.CcInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidCcLinkParamsProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** A target that provides C++ libraries to be linked into Android targets. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java
index 0309843..7432277 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java
@@ -17,7 +17,7 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidDeviceBrokerInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** Supplies the device broker type string, passed to the Android test runtime. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidFeatureFlagSetProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidFeatureFlagSetProvider.java
index ac09a67..30f1aa8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidFeatureFlagSetProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidFeatureFlagSetProvider.java
@@ -31,9 +31,9 @@
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.rules.config.ConfigFeatureFlag;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidFeatureFlagSetProviderApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
import java.util.Map;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
/**
* Provider for checking the set of feature flags used by an android_binary.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
index 5b27fab..215663b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
@@ -28,14 +28,14 @@
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidIdeInfoProviderApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
/** An Android target provider to provide Android-specific info to IDEs. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlProvider.java
index 4da98c0..852a87d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlProvider.java
@@ -21,7 +21,7 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidIdlProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/**
* Configured targets implementing this provider can contribute Android IDL information to the
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java
index d424202..062e8a3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java
@@ -17,7 +17,7 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidInstrumentationInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/**
* A provider for targets that create Android instrumentations. Consumed by Android testing rules.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
index 51e093e..92accf0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
@@ -25,10 +25,10 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidLibraryAarInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
import java.util.Objects;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
/**
* A target that can provide the aar artifact of Android libraries and all the manifests that are
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java
index 275f587..8b5acd5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java
@@ -22,7 +22,7 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidLibraryResourceClassJarProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/**
* A provider which contains the resource class jars from android_library rules. See {@link
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java
index f2ecffa..42b0ccd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java
@@ -20,7 +20,7 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidNativeLibsInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/**
* Provider of transitively available ZIPs of native libs that should be directly copied into the
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPreDexJarProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPreDexJarProvider.java
index ccbd2da..5b4a2bb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPreDexJarProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPreDexJarProvider.java
@@ -19,7 +19,7 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidPreDexJarProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** A provider of the final Jar to be dexed for targets that build APKs. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java
index cb07cd5..816c076 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java
@@ -20,8 +20,8 @@
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.rules.java.ProguardLibrary;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidProguardInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
/**
* A target that can provide local proguard specifications, returned by the {@link
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
index 78d842a..1312244 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
@@ -24,7 +24,7 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidResourcesInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** A provider that supplies ResourceContainers from its transitive closure. */
@Immutable
@@ -255,7 +255,7 @@
private static <T> NestedSet<T> nestedSet(Object from, Class<T> with, String fieldName)
throws EvalException {
Preconditions.checkArgument(
- from instanceof Depset || from == com.google.devtools.build.lib.syntax.Starlark.UNBOUND);
+ from instanceof Depset || from == net.starlark.java.eval.Starlark.UNBOUND);
if (from instanceof Depset) {
return nestedSet((Depset) from, with, fieldName);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index ce674ef..a0f3190 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -66,10 +66,10 @@
import com.google.devtools.build.lib.rules.java.JavaSemantics;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidSplitTransititionApi;
-import com.google.devtools.build.lib.syntax.Printer;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.FileTypeSet;
import java.util.List;
+import net.starlark.java.eval.Printer;
/** Rule definitions for Android rules. */
public final class AndroidRuleClasses {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
index 514d36e..6982175 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
@@ -25,8 +25,8 @@
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.rules.java.BootClassPathInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidSdkProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
/** Description of the tools Blaze needs from an Android SDK. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkData.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkData.java
index b89b878..77ced86 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkData.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkData.java
@@ -40,19 +40,19 @@
import com.google.devtools.build.lib.rules.java.ProguardSpecProvider;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidBinaryDataSettingsApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidDataProcessingApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkThread;
/** Starlark-visible methods for working with Android data (manifests, resources, and assets). */
public abstract class AndroidStarlarkData
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApkInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApkInfo.java
index d45ddf9..b5312eb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ApkInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApkInfo.java
@@ -19,10 +19,10 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.ApkInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
import java.util.List;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
/** A provider for targets that produce an apk file. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/BUILD b/src/main/java/com/google/devtools/build/lib/rules/android/BUILD
index 3ea1e8d..559a5de 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/BUILD
@@ -81,13 +81,13 @@
"//src/main/java/com/google/devtools/build/lib/skyframe:configured_target_and_data",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/util:filetype",
"//src/main/java/com/google/devtools/build/lib/util:os",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
"//src/main/protobuf:android_deploy_info_java_proto",
"//third_party:android_common_25_0_0_lite",
"//third_party:auto_value",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ProguardMappingProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/ProguardMappingProvider.java
index 5d428e8..8c5822d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ProguardMappingProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ProguardMappingProvider.java
@@ -18,7 +18,7 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.ProguardMappingProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** A target that can provide a proguard obfuscation mapping to Android binaries or tests. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java
index d0e23f4..fa46add 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java
@@ -18,11 +18,11 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.starlarkbuildapi.android.ValidatedAndroidDataApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
/** Wraps validated and packaged Android resource information */
public class ValidatedAndroidResources extends MergedAndroidResources
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java b/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java
index 91cfe8b..01a60f0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java
@@ -23,9 +23,9 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.DataBindingV2ProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
/**
* A provider that exposes this enables <a
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/databinding/UsesDataBindingProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/databinding/UsesDataBindingProvider.java
index 9fb3b88..49f9910 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/databinding/UsesDataBindingProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/databinding/UsesDataBindingProvider.java
@@ -18,9 +18,9 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.android.UsesDataBindingProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
import java.util.Collection;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
/**
* A provider that exposes this enables <a
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
index f0aa5fe..a84b1c1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
@@ -27,7 +27,6 @@
import com.google.devtools.build.lib.skyframe.serialization.SerializationContext;
import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
import com.google.devtools.build.lib.starlarkbuildapi.apple.AppleBitcodeModeApi;
-import com.google.devtools.build.lib.syntax.Printer;
import com.google.devtools.common.options.Converters.CommaSeparatedOptionListConverter;
import com.google.devtools.common.options.EnumConverter;
import com.google.devtools.common.options.Option;
@@ -39,6 +38,7 @@
import java.io.IOException;
import java.util.List;
import java.util.Map;
+import net.starlark.java.eval.Printer;
/** Command-line options for building for Apple platforms. */
public class AppleCommandLineOptions extends FragmentOptions {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java b/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java
index 3fbe29f..7759984 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java
@@ -23,11 +23,11 @@
import com.google.devtools.build.lib.packages.StructImpl;
import com.google.devtools.build.lib.starlarkbuildapi.apple.ApplePlatformApi;
import com.google.devtools.build.lib.starlarkbuildapi.apple.ApplePlatformTypeApi;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
import java.util.HashMap;
import java.util.Locale;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.syntax.Location;
/** An enum that can be used to distinguish between various apple platforms. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/BUILD b/src/main/java/com/google/devtools/build/lib/rules/apple/BUILD
index f1ace74..a8bcaca 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/BUILD
@@ -17,7 +17,6 @@
name = "apple",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:execution_requirements",
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
@@ -42,6 +41,8 @@
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:xcode_java_proto",
"//third_party:flogger",
"//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java b/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java
index 90538cd..821fcbe 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java
@@ -24,12 +24,12 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.apple.DottedVersionApi;
-import com.google.devtools.build.lib.syntax.Printer;
import java.util.ArrayList;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Printer;
/**
* Represents Xcode versions and allows parsing them.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigInfo.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigInfo.java
index c8ac555..b440c9f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigInfo.java
@@ -22,10 +22,10 @@
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType;
import com.google.devtools.build.lib.starlarkbuildapi.apple.XcodeConfigInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
/**
* The set of Apple versions computed from command line options and the {@code xcode_config} rule.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/BUILD b/src/main/java/com/google/devtools/build/lib/rules/config/BUILD
index 40eac38..c03df96 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/BUILD
@@ -14,7 +14,6 @@
name = "config",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifact_owner",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
@@ -56,6 +55,8 @@
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/common/options",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:auto_value",
"//third_party:guava",
"//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java
index c8e1497..2f3b850 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java
@@ -38,9 +38,9 @@
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.Attribute.ComputedDefault;
import com.google.devtools.build.lib.packages.AttributeMap;
-import com.google.devtools.build.lib.syntax.Starlark;
import java.util.List;
import java.util.Optional;
+import net.starlark.java.eval.Starlark;
/**
* The implementation of the config_feature_flag rule for defining custom flags for Android rules.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java
index f088dfe..e820c51 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java
@@ -24,11 +24,11 @@
import com.google.devtools.build.lib.packages.RequiredProviders;
import com.google.devtools.build.lib.packages.StarlarkProviderIdentifier;
import com.google.devtools.build.lib.starlarkbuildapi.config.ConfigFeatureFlagProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkValue;
/** Provider for exporting value and valid value predicate of feature flags to consuming targets. */
// TODO(adonovan): rename this to *Info and its constructor to *Provider.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigGlobalLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigGlobalLibrary.java
index 91533d2..457ce14 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigGlobalLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigGlobalLibrary.java
@@ -23,16 +23,16 @@
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.starlarkbuildapi.config.ConfigGlobalLibraryApi;
import com.google.devtools.build.lib.starlarkbuildapi.config.ConfigurationTransitionApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
/**
* Implementation of {@link ConfigGlobalLibraryApi}.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/ArtifactCategory.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/ArtifactCategory.java
index 847ee47..46249c0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/ArtifactCategory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/ArtifactCategory.java
@@ -15,9 +15,9 @@
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
import java.util.Arrays;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.syntax.Location;
/**
* A category of artifacts that are candidate input/output to an action, for which the toolchain can
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD
index 49c2f3f..50cc994 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD
@@ -32,7 +32,6 @@
deps = [
":cpp_interface",
":denied_implicit_outputs_marker_provider",
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
@@ -118,6 +117,8 @@
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//src/main/java/com/google/devtools/common/options",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:crosstool_config_java_proto",
"//src/main/protobuf:extra_actions_base_java_proto",
"//src/main/protobuf:failure_details_java_proto",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
index f16ea74..178ae1d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
@@ -72,10 +72,6 @@
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.Tuple;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -89,6 +85,10 @@
import java.util.Set;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.Tuple;
/**
* A ConfiguredTarget for <code>cc_binary</code> rules.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index 3b2c472..d0198f9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -58,8 +58,6 @@
import com.google.devtools.build.lib.shell.ShellUtils;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -72,6 +70,8 @@
import java.util.regex.PatternSyntaxException;
import java.util.stream.Stream;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/**
* Common parts of the implementation of cc rules.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
index c2cf2b3..a8fe47f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
@@ -39,7 +39,6 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcCompilationContextApi;
-import com.google.devtools.build.lib.syntax.StarlarkList;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunction.Environment;
@@ -55,6 +54,7 @@
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkList;
/**
* Immutable store of information needed for C++ compilation that is aggregated across dependencies.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java
index e7a2e75..16eb175 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java
@@ -21,11 +21,11 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcCompilationOutputsApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
import java.util.LinkedHashSet;
import java.util.Set;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
/** A structured representation of the compilation outputs of a C++ rule. */
public class CcCompilationOutputs implements CcCompilationOutputsApi<Artifact> {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java
index 7442b0f..c802de3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java
@@ -22,10 +22,10 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
import java.util.Collection;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/** Provider for C++ compilation and linking information. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
index a5af8be..f0ac8dd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
@@ -52,7 +52,6 @@
import com.google.devtools.build.lib.rules.cpp.CcCompilationHelper.CompilationInfo;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.util.FileTypeSet;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
@@ -62,6 +61,7 @@
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
/**
* A ConfiguredTarget for <code>cc_library</code> rules.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java
index e76510c..2a8c200 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java
@@ -31,16 +31,16 @@
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcLinkingContextApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.LinkerInputApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.util.Fingerprint;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkSemantics;
/** Structure of CcLinkingContext. */
public class CcLinkingContext implements CcLinkingContextApi<Artifact> {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
index dd3acea..a41b395 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
@@ -41,12 +41,12 @@
import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
import com.google.devtools.build.lib.rules.cpp.Link.Picness;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.LinkingInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
/**
* A class to create C/C++ link actions in a way that is consistent with cc_library. Rules that
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
index 487f1c0..a80ff57 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
@@ -61,15 +61,6 @@
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcModuleApi;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Tuple;
import com.google.devtools.build.lib.util.FileTypeSet;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.util.StringUtil;
@@ -81,6 +72,15 @@
import java.util.Locale;
import java.util.Set;
import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
/** A module that contains Starlark utilities for C++ support. */
public abstract class CcModule
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
index 855c65c..110fb5b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
@@ -26,9 +26,9 @@
import com.google.devtools.build.lib.analysis.TemplateVariableInfo;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.Location;
import java.io.Serializable;
import java.util.HashMap;
+import net.starlark.java.syntax.Location;
/**
* Implementation for the cc_toolchain rule.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java
index 32fc6d3..c5521d8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java
@@ -40,7 +40,7 @@
import com.google.devtools.build.lib.packages.NativeProvider;
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.rules.cpp.CcToolchain.AdditionalBuildVariablesComputer;
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.syntax.Location;
/**
* Provider encapsulating all the information from the cc_toolchain rule that affects creation of
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java
index 7e8a4c1..d5bed42 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java
@@ -34,11 +34,11 @@
import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.Expandable;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcToolchainConfigInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig;
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain;
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath;
+import net.starlark.java.eval.EvalException;
/** Information describing C++ toolchain derived from CROSSTOOL file. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
index 63189d6..dfad3d6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
@@ -37,8 +37,6 @@
import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.StringValueParser;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.util.StringUtil;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -53,6 +51,8 @@
import java.util.Set;
import java.util.concurrent.ExecutionException;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/**
* Provides access to features supported by a specific toolchain.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
index b332a30..62a23f8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
@@ -36,11 +36,11 @@
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcToolchainProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.vfs.PathFragment;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.syntax.Location;
/** Information about a C++ compiler used by the <code>cc_*</code> rules. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
index 3d4f253..61ab9d6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
@@ -38,8 +38,6 @@
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.rules.cpp.CcToolchain.AdditionalBuildVariablesComputer;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.EnumSet;
@@ -47,6 +45,8 @@
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/** Helper responsible for creating CcToolchainProvider */
public class CcToolchainProviderHelper {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainVariables.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainVariables.java
index ae7e477..7617111 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainVariables.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainVariables.java
@@ -32,8 +32,6 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcToolchainVariablesApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.LinkedHashMap;
@@ -43,6 +41,8 @@
import java.util.Set;
import java.util.Stack;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/**
* Configured build variables usable by the toolchain configuration.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariables.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariables.java
index 4666a91..601541a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariables.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariables.java
@@ -26,10 +26,10 @@
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.VariablesExtension;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.List;
import java.util.Map;
+import net.starlark.java.eval.EvalException;
/** Enum covering all build variables we create for all various {@link CppCompileAction}. */
public enum CompileBuildVariables {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
index 33a3cea..b7237ba 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
@@ -76,9 +76,6 @@
import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
import com.google.devtools.build.lib.skyframe.ActionExecutionValue;
import com.google.devtools.build.lib.starlarkbuildapi.CommandLineArgsApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
import com.google.devtools.build.lib.util.DependencySet;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.util.Fingerprint;
@@ -108,6 +105,9 @@
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
/** Action that represents some kind of C++ compilation step. */
@ThreadCompatible
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java
index 9076f39..37f55a5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java
@@ -34,12 +34,12 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.rules.cpp.CcCompilationHelper.SourceCategory;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
/** An {@link ActionTemplate} that expands into {@link CppCompileAction}s at execution time. */
public final class CppCompileActionTemplate extends ActionKeyCacher
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index 2cff1bc..0f29222 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -67,8 +67,6 @@
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.shell.ShellUtils;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.util.FileTypeSet;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.Pair;
@@ -78,6 +76,8 @@
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkSemantics;
/**
* Helper class for functionality shared by cpp related rules.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
index 0359646..9f72386 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
@@ -59,9 +59,6 @@
import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.CommandLineArgsApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.ShellEscaper;
@@ -70,6 +67,9 @@
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
/** Action that represents a linking step. */
@ThreadCompatible
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
index 3a20665..30e4b1f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
@@ -48,7 +48,6 @@
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.rules.cpp.Link.LinkerOrArchiver;
import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
@@ -61,6 +60,7 @@
import java.util.Set;
import java.util.regex.Matcher;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
/** Builder class to construct {@link CppLinkAction}s. */
public class CppLinkActionBuilder {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FeatureConfigurationForStarlark.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FeatureConfigurationForStarlark.java
index a41b6df..14d0367 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FeatureConfigurationForStarlark.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FeatureConfigurationForStarlark.java
@@ -19,7 +19,7 @@
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.FeatureConfigurationApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/**
* Wrapper for {@link FeatureConfiguration}, {@link CppConfiguration}, and {@link BuildOptions}.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java
index e2b4f92..c6a296d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java
@@ -37,10 +37,10 @@
import com.google.devtools.build.lib.starlarkbuildapi.go.GoContextInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.go.GoPackageInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Tuple;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Tuple;
/**
* Fake stub implementations for C++-related Starlark API which are unsupported without use of
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java
index 986c462..d92f7c6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java
@@ -24,11 +24,11 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.LibraryToLinkApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
import java.util.List;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
/**
* Encapsulates information for linking a library.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java
index 68a67c4..88d45fe 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java
@@ -21,8 +21,8 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.SequenceBuilder;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.vfs.PathFragment;
+import net.starlark.java.eval.EvalException;
/** Enum covering all build variables we create for all various {@link CppLinkAction}. */
public enum LinkBuildVariables {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
index 8fa8c30..1669890 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
@@ -50,7 +50,6 @@
":RpcSupport",
":java-compilation",
":java-implicit-attributes",
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
"//src/main/java/com/google/devtools/build/lib/analysis:actions/custom_command_line",
@@ -96,6 +95,8 @@
"//src/main/java/com/google/devtools/build/lib/util:os",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
@@ -167,7 +168,6 @@
"proto/GeneratedExtensionRegistryProvider.java",
],
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
"//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
@@ -225,6 +225,8 @@
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/common/options",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:deps_java_proto",
"//src/main/protobuf:extra_actions_base_java_proto",
"//src/main/protobuf:failure_details_java_proto",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/BootClassPathInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/BootClassPathInfo.java
index 81f0629..c1249cc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/BootClassPathInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/BootClassPathInfo.java
@@ -24,16 +24,16 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import javax.annotation.Nullable;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
/** Information about the system APIs for a Java compilation. */
@AutoCodec
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
index 7544ca0..c95201a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
@@ -52,7 +52,6 @@
import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider.ClasspathType;
import com.google.devtools.build.lib.rules.java.JavaConfiguration.OneVersionEnforcementLevel;
import com.google.devtools.build.lib.rules.java.proto.GeneratedExtensionRegistryProvider;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -60,6 +59,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import net.starlark.java.eval.EvalException;
/** An implementation of java_binary. */
public class JavaBinary implements RuleConfiguredTargetFactory {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
index ae6887c..3bf4412 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
@@ -20,7 +20,7 @@
import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.rules.cpp.CcInfo;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaCcLinkParamsProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** A target that provides C++ libraries to be linked into Java targets. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
index a5a4df8..a1bbb00 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
@@ -69,9 +69,6 @@
import com.google.devtools.build.lib.server.FailureDetails.JavaCompile.Code;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.CommandLineArgsApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.LazyString;
@@ -85,6 +82,9 @@
import java.util.Map;
import java.util.UUID;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
/** Action that represents a Java compilation. */
@ThreadCompatible
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java
index 6b32881..b6dac49 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java
@@ -22,10 +22,10 @@
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.shell.ShellUtils;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
import java.util.List;
+import net.starlark.java.eval.StarlarkSemantics;
/** Utility methods for use by Java-related parts of Bazel. */
// TODO(bazel-team): Merge with JavaUtil.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
index 59123e8..9d21f31 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
@@ -37,19 +37,19 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Stream;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
/** A Starlark declared provider that encapsulates all providers that are needed by Java rules. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java
index 1af7f95..f837710 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java
@@ -39,16 +39,16 @@
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider.ClasspathType;
import com.google.devtools.build.lib.shell.ShellUtils;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/** Implements logic for creating JavaInfo from different set of input parameters. */
final class JavaInfoBuildHelper {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryInfo.java
index 5b2c52b..61fa7c0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryInfo.java
@@ -24,7 +24,7 @@
import com.google.devtools.build.lib.rules.cpp.LibraryToLink;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaNativeLibraryInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/**
* A target that provides native libraries in the transitive closure of its deps that are needed for
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java
index a5cf8a8..87679ed 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java
@@ -26,11 +26,11 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaRuleOutputJarsProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.OutputJarApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
import java.util.Collection;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
/** Provides information about jar files produced by a Java rule. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java
index 0af7741..22552e6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java
@@ -30,9 +30,9 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaRuntimeInfoApi;
-import com.google.devtools.build.lib.syntax.Location;
import com.google.devtools.build.lib.vfs.PathFragment;
import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
/** Information about the Java runtime used by the <code>java_*</code> rules. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java
index ea80528..6434491 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java
@@ -26,10 +26,10 @@
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaCommonApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaToolchainStarlarkApiProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
/** A module that contains Starlark utilities for Java support. */
public class JavaStarlarkCommon
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
index c9be452..a7e75ad 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
@@ -34,11 +34,11 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaToolchainStarlarkApiProviderApi;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
import java.util.Iterator;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.syntax.Location;
/** Information about the JDK used by the <code>java_*</code> rules. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java
index 6576bc9..df4ca74 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java
@@ -24,16 +24,16 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import java.util.List;
import javax.annotation.Nullable;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
/** Marks configured targets that are able to supply message bundles to their dependents. */
@AutoCodec
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java
index b356e73..2950dcd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java
@@ -21,7 +21,7 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.java.ProguardSpecProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** A target that can provide proguard specifications to Android binaries. */
@Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java
index 74f923b..b1de0eb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java
@@ -24,7 +24,7 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.java.GeneratedExtensionRegistryProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/**
* A {@link com.google.devtools.build.lib.analysis.TransitiveInfoProvider} for {@link Artifact}s
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoStarlarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoStarlarkCommon.java
index e3764e9..2b556b7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoStarlarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoStarlarkCommon.java
@@ -30,7 +30,7 @@
import com.google.devtools.build.lib.rules.proto.ProtoInfo;
import com.google.devtools.build.lib.rules.proto.ProtoLangToolchainProvider;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaProtoCommonApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** A class that exposes Java common methods for proto compilation. */
public class JavaProtoStarlarkCommon
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStarlarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStarlarkCommon.java
index b6fee9f..3530893 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStarlarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStarlarkCommon.java
@@ -43,16 +43,16 @@
import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key;
import com.google.devtools.build.lib.starlarkbuildapi.SplitTransitionProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.apple.AppleCommonApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
/** A class that exposes apple rule implementation internals to Starlark. */
public class AppleStarlarkCommon
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryInfo.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryInfo.java
index 19b9023..3e69875 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryInfo.java
@@ -18,7 +18,7 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.starlarkbuildapi.apple.AppleStaticLibraryInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/**
* Provider containing information regarding multi-architecture Apple static libraries, as is
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD b/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD
index d12c157..7313f0f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD
@@ -14,7 +14,6 @@
name = "objc",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
"//src/main/java/com/google/devtools/build/lib/analysis:actions/custom_command_line",
@@ -69,6 +68,8 @@
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:auto_value",
"//third_party:guava",
"//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java
index 8f78c22..0a9ecd7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java
@@ -45,11 +45,11 @@
import com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.PlatformRule;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.SplitTransitionProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkValue;
/**
* {@link TransitionFactory} implementation for multi-architecture apple rules which can accept
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
index f377b1d..beb1c64 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
@@ -56,12 +56,12 @@
import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
import com.google.devtools.build.lib.rules.cpp.LibraryToLink;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import net.starlark.java.eval.StarlarkSemantics;
/**
* Contains information common to multiple objc_* rules, and provides a unified API for extracting
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
index 8172c21..3268de5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
@@ -41,17 +41,17 @@
import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
import com.google.devtools.build.lib.rules.cpp.LibraryToLink;
import com.google.devtools.build.lib.starlarkbuildapi.apple.ObjcProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkSemantics;
/**
* A provider that provides all compiling and linking information in the transitive closure of its
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderStarlarkConverters.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderStarlarkConverters.java
index 04560e8..986d8d3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderStarlarkConverters.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderStarlarkConverters.java
@@ -22,9 +22,9 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.vfs.PathFragment;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/** A utility class for converting ObjcProvider values between java and Starlark representation. */
public class ObjcProviderStarlarkConverters {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/BUILD b/src/main/java/com/google/devtools/build/lib/rules/proto/BUILD
index 3d1fcac..db13c34 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/proto/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/proto/BUILD
@@ -49,13 +49,13 @@
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/util:filetype",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:auto_value",
"//third_party:guava",
"//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCommon.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCommon.java
index d47ac2e..9c3691b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCommon.java
@@ -32,12 +32,12 @@
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.Location;
/**
* Utility functions for proto_library and proto aspect implementations.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoInfo.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoInfo.java
index 112e98c..243df22 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoInfo.java
@@ -24,9 +24,9 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.starlarkbuildapi.ProtoInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.proto.ProtoBootstrap;
-import com.google.devtools.build.lib.syntax.Location;
import com.google.devtools.build.lib.util.Pair;
import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
/**
* Configured target classes that implement this class can contribute .proto files to the
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/BUILD b/src/main/java/com/google/devtools/build/lib/rules/python/BUILD
index f61630d..63b821d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/BUILD
@@ -45,14 +45,14 @@
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
"//src/main/java/com/google/devtools/build/lib/util:filetype",
"//src/main/java/com/google/devtools/build/lib/util:os",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/common/options",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:extra_actions_base_java_proto",
"//third_party:error_prone_annotations",
"//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java
index 4f779cf..c9da2de 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java
@@ -13,7 +13,7 @@
// limitations under the License.
package com.google.devtools.build.lib.rules.python;
-import static com.google.devtools.build.lib.syntax.Starlark.NONE;
+import static net.starlark.java.eval.Starlark.NONE;
import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
@@ -50,8 +50,6 @@
import com.google.devtools.build.lib.rules.cpp.CcInfo;
import com.google.devtools.build.lib.rules.cpp.CppFileTypes;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -62,6 +60,8 @@
import java.util.Map;
import java.util.UUID;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/** A helper class for analyzing a Python configured target. */
public final class PyCommon {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java
index d56959c..e1824ab 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java
@@ -24,12 +24,12 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.starlarkbuildapi.python.PyInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import java.util.Objects;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/** Instance of the provider type for the Python rules. */
public final class PyInfo implements Info, PyInfoApi<Artifact> {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyProviderUtils.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyProviderUtils.java
index 4947a2e..7325ed2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyProviderUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyProviderUtils.java
@@ -23,9 +23,9 @@
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.packages.StructImpl;
import com.google.devtools.build.lib.rules.cpp.CppFileTypes;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.util.FileType;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/**
* Static helper class for creating and accessing Python provider information.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java
index bb8f264..1e816e3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java
@@ -14,7 +14,7 @@
package com.google.devtools.build.lib.rules.python;
-import static com.google.devtools.build.lib.syntax.Starlark.NONE;
+import static net.starlark.java.eval.Starlark.NONE;
import com.google.common.base.Preconditions;
import com.google.devtools.build.lib.actions.Artifact;
@@ -25,13 +25,13 @@
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.starlarkbuildapi.python.PyRuntimeInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.Objects;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/**
* Instance of the provider type that describes Python runtimes.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitions.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitions.java
index 622d3e0..eb7ac6d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitions.java
@@ -21,8 +21,8 @@
import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory;
import com.google.devtools.build.lib.packages.AttributeTransitionData;
import com.google.devtools.build.lib.starlarkbuildapi.python.PyStarlarkTransitionsApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkValue;
/**
* Exposes a native transition to Starlark for changing the Python version.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyStructUtils.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyStructUtils.java
index c2dc8ee..48d972f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyStructUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyStructUtils.java
@@ -23,8 +23,8 @@
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.packages.StructImpl;
import com.google.devtools.build.lib.packages.StructProvider;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/** Static helper class for creating and accessing instances of the legacy "py" struct provider. */
// TODO(b/153363654): Remove this file.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java
index 5d6899f..61661f2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java
@@ -18,11 +18,11 @@
import com.google.common.base.Verify;
import com.google.devtools.build.lib.analysis.config.Fragment;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.common.options.TriState;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/**
* The configuration fragment containing information about the various pieces of infrastructure
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java
index e4714b8..cbc5779 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java
@@ -20,7 +20,6 @@
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.events.ExtendedEventHandler.ResolvedEvent;
import com.google.devtools.build.lib.packages.Rule;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.RootedPath;
@@ -30,6 +29,7 @@
import java.io.IOException;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Starlark;
/**
* Access a repository on the local filesystem.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/NewLocalRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/NewLocalRepositoryFunction.java
index 8b326f4..6d1403b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/NewLocalRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/NewLocalRepositoryFunction.java
@@ -23,7 +23,6 @@
import com.google.devtools.build.lib.events.ExtendedEventHandler.ResolvedEvent;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.skyframe.DirectoryListingValue;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -36,6 +35,7 @@
import com.google.devtools.build.skyframe.SkyValue;
import java.io.IOException;
import java.util.Map;
+import net.starlark.java.eval.Starlark;
/**
* Create a repository from a directory on the local filesystem.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/NewRepositoryFileHandler.java b/src/main/java/com/google/devtools/build/lib/rules/repository/NewRepositoryFileHandler.java
index 1576e23..c63f322 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/NewRepositoryFileHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/NewRepositoryFileHandler.java
@@ -23,7 +23,6 @@
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction.RepositoryFunctionException;
import com.google.devtools.build.lib.skyframe.PackageLookupValue;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.Root;
@@ -33,6 +32,7 @@
import com.google.devtools.build.skyframe.SkyKey;
import java.io.IOException;
import java.util.Map;
+import net.starlark.java.eval.EvalException;
/**
* Encapsulates the 2-step behavior of creating workspace and build files for the new_*_repository
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
index beb0553..55e658e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
@@ -39,8 +39,6 @@
import com.google.devtools.build.lib.skyframe.PackageLookupFunction;
import com.google.devtools.build.lib.skyframe.PackageLookupValue;
import com.google.devtools.build.lib.skyframe.PrecomputedValue;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -57,6 +55,8 @@
import java.util.Map;
import java.util.Objects;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/**
* Implementation of fetching various external repository types.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileFunction.java
index c71948f..553eb41 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileFunction.java
@@ -23,16 +23,6 @@
import com.google.devtools.build.lib.packages.NoSuchThingException;
import com.google.devtools.build.lib.rules.repository.ResolvedFileValue.ResolvedFileKey;
import com.google.devtools.build.lib.skyframe.PrecomputedValue;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.Program;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.SyntaxError;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyFunctionException;
@@ -42,6 +32,16 @@
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.Program;
+import net.starlark.java.syntax.StarlarkFile;
+import net.starlark.java.syntax.SyntaxError;
/** Function computing the Starlark value of 'resolved' in a file. */
public class ResolvedFileFunction implements SkyFunction {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/WorkspaceAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/rules/repository/WorkspaceAttributeMapper.java
index c63cc84..95ddff2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/WorkspaceAttributeMapper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/WorkspaceAttributeMapper.java
@@ -21,9 +21,9 @@
import com.google.devtools.build.lib.packages.BuildType.SelectorList;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Type;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
/**
* An attribute mapper for workspace rules. Similar to NonconfigurableAttributeWrapper, but throws
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/StarlarkTestingModule.java b/src/main/java/com/google/devtools/build/lib/rules/test/StarlarkTestingModule.java
index 28ff317..08f938c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/StarlarkTestingModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/StarlarkTestingModule.java
@@ -16,8 +16,8 @@
import com.google.devtools.build.lib.analysis.test.ExecutionInfo;
import com.google.devtools.build.lib.analysis.test.TestEnvironmentInfo;
import com.google.devtools.build.lib.starlarkbuildapi.test.TestingModuleApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
/** A class that exposes testing infrastructure to Starlark. */
public class StarlarkTestingModule implements TestingModuleApi {
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
index c43f2b7..45612d8 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
@@ -48,7 +48,6 @@
import com.google.devtools.build.lib.server.FailureDetails;
import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
import com.google.devtools.build.lib.server.FailureDetails.Interrupted.Code;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.util.AbruptExitException;
import com.google.devtools.build.lib.util.AnsiStrippingOutputStream;
import com.google.devtools.build.lib.util.DebugLoggerConfigurator;
@@ -73,6 +72,7 @@
import java.util.List;
import java.util.Optional;
import java.util.logging.Level;
+import net.starlark.java.eval.Starlark;
/**
* Dispatches to the Blaze commands; that is, given a command line, this abstraction looks up the
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index 539e0a2..15c8148 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -81,7 +81,6 @@
import com.google.devtools.build.lib.shell.JavaSubprocessFactory;
import com.google.devtools.build.lib.shell.SubprocessBuilder;
import com.google.devtools.build.lib.shell.SubprocessFactory;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.util.AbruptExitException;
import com.google.devtools.build.lib.util.CrashFailureDetails;
import com.google.devtools.build.lib.util.CustomExitCodePublisher;
@@ -139,6 +138,7 @@
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
/**
* The BlazeRuntime class encapsulates the immutable configuration of the current instance. These
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/LocationPrinter.java b/src/main/java/com/google/devtools/build/lib/runtime/LocationPrinter.java
index d6e2bfe..94acb32 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/LocationPrinter.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/LocationPrinter.java
@@ -16,11 +16,11 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
-import com.google.devtools.build.lib.syntax.Location;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.Root;
import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
class LocationPrinter {
private final boolean attemptToPrintRelativePaths;
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/UiEventHandler.java b/src/main/java/com/google/devtools/build/lib/runtime/UiEventHandler.java
index ee0ca7c..5f3f4b0 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/UiEventHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/UiEventHandler.java
@@ -45,7 +45,6 @@
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.skyframe.ConfigurationPhaseStartedEvent;
import com.google.devtools.build.lib.skyframe.LoadingPhaseStartedEvent;
-import com.google.devtools.build.lib.syntax.Location;
import com.google.devtools.build.lib.util.io.AnsiTerminal;
import com.google.devtools.build.lib.util.io.AnsiTerminal.Color;
import com.google.devtools.build.lib.util.io.AnsiTerminalWriter;
@@ -69,6 +68,7 @@
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Supplier;
import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
/** An experimental new output stream. */
public class UiEventHandler implements EventHandler {
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/info/BUILD b/src/main/java/com/google/devtools/build/lib/runtime/commands/info/BUILD
index dbc6246..f88e38f 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/info/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/info/BUILD
@@ -20,13 +20,13 @@
"//src/main/java/com/google/devtools/build/lib/packages/semantics",
"//src/main/java/com/google/devtools/build/lib/pkgcache",
"//src/main/java/com/google/devtools/build/lib/skyframe:skyframe_cluster",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/util:abrupt_exit_exception",
"//src/main/java/com/google/devtools/build/lib/util:debug-logger-configurator",
"//src/main/java/com/google/devtools/build/lib/util:process",
"//src/main/java/com/google/devtools/build/lib/util:string",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
"//src/main/protobuf:build_java_proto",
"//third_party:flogger",
"//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/info/StarlarkSemanticsInfoItem.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/info/StarlarkSemanticsInfoItem.java
index 6a7aea7..7fb3456 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/info/StarlarkSemanticsInfoItem.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/info/StarlarkSemanticsInfoItem.java
@@ -20,8 +20,8 @@
import com.google.devtools.build.lib.runtime.CommandEnvironment;
import com.google.devtools.build.lib.runtime.InfoItem;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.common.options.OptionsParsingResult;
+import net.starlark.java.eval.StarlarkSemantics;
/**
* Info item for the effective current set of Starlark semantics option values.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunction.java
index b378532..8882681 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunction.java
@@ -20,12 +20,6 @@
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.packages.PackageFactory;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.FileOptions;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.Resolver;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.RootedPath;
@@ -37,6 +31,12 @@
import java.io.IOException;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.FileOptions;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.Resolver;
+import net.starlark.java.syntax.StarlarkFile;
/**
* A Skyframe function that reads, parses, and resolves the .bzl file denoted by a Label.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupValue.java
index 440a198..842b953 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupValue.java
@@ -20,7 +20,6 @@
import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
import com.google.devtools.build.lib.vfs.Root;
import com.google.devtools.build.skyframe.NotComparableSkyValue;
import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -28,6 +27,7 @@
import com.google.errorprone.annotations.FormatMethod;
import java.util.Objects;
import javax.annotation.Nullable;
+import net.starlark.java.syntax.StarlarkFile;
// TODO(adonovan): Ensure the result is always resolved and update the docstring.
/**
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
index 3f6f62a..c053b8c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
@@ -78,7 +78,6 @@
import com.google.devtools.build.lib.skyframe.ArtifactFunction.MissingFileArtifactValue;
import com.google.devtools.build.lib.skyframe.ArtifactNestedSetFunction.ArtifactNestedSetEvalException;
import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ActionPostprocessing;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.util.io.FileOutErr;
@@ -107,6 +106,7 @@
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.IntFunction;
import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkSemantics;
/**
* A {@link SkyFunction} that creates {@link ActionExecutionValue}s. There are four points where
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
index 47da2a4..0e8ad98 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -293,8 +293,6 @@
"//src/main/java/com/google/devtools/build/lib/rules/cpp:cpp_interface",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/skyframe/trimming:trimmed_configuration_cache",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/util:TestType",
"//src/main/java/com/google/devtools/build/lib/util:abrupt_exit_exception",
@@ -309,6 +307,8 @@
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:analysis_java_proto",
"//src/main/protobuf:analysis_v2_java_proto",
"//src/main/protobuf:failure_details_java_proto",
@@ -883,10 +883,10 @@
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:error_prone_annotations",
"//third_party:guava",
"//third_party:jsr305",
@@ -1743,11 +1743,11 @@
"//src/main/java/com/google/devtools/build/lib/packages/semantics",
"//src/main/java/com/google/devtools/build/lib/pkgcache",
"//src/main/java/com/google/devtools/build/lib/repository:external_package_helper",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:guava",
"//third_party:jsr305",
],
@@ -1876,9 +1876,9 @@
"//src/main/java/com/google/devtools/build/lib/pkgcache",
"//src/main/java/com/google/devtools/build/lib/remote/options",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:guava",
"//third_party:jsr305",
],
@@ -2347,9 +2347,9 @@
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
- "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+ "//src/main/java/net/starlark/java/eval",
"//third_party:guava",
],
)
@@ -2730,9 +2730,9 @@
":sky_functions",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
- "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java
index abe9f8a..d6e3320 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java
@@ -43,16 +43,6 @@
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.skyframe.ASTFileLookupFunction.ASTLookupFailedException;
import com.google.devtools.build.lib.skyframe.StarlarkBuiltinsFunction.BuiltinsFailedException;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.LoadStatement;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Program;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Statement;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -70,6 +60,16 @@
import java.util.Map;
import java.util.function.Consumer;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.LoadStatement;
+import net.starlark.java.syntax.Program;
+import net.starlark.java.syntax.StarlarkFile;
+import net.starlark.java.syntax.Statement;
/**
* A Skyframe function to look up and load a single .bzl module.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java
index 37b30c8..b8732a2 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java
@@ -20,13 +20,13 @@
import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.Module;
import com.google.devtools.build.lib.vfs.Root;
import com.google.devtools.build.lib.vfs.RootedPath;
import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import java.util.Objects;
+import net.starlark.java.eval.Module;
/**
* A value that represents the .bzl module loaded by a Starlark {@code load()} statement.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index e337aa5..4b93f82 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -80,7 +80,6 @@
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor.BuildViewProvider;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.util.OrderedSetMultimap;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyFunctionException;
@@ -100,6 +99,7 @@
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
/**
* SkyFunction for {@link ConfiguredTargetValue}s.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
index f92fb2d..12829ef 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
@@ -61,13 +61,6 @@
import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code;
import com.google.devtools.build.lib.skyframe.BzlLoadFunction.BzlLoadFailedException;
import com.google.devtools.build.lib.skyframe.GlobValue.InvalidGlobPatternException;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.FileOptions;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.util.ExitCode;
import com.google.devtools.build.lib.util.Pair;
@@ -98,6 +91,13 @@
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.FileOptions;
+import net.starlark.java.syntax.Location;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.StarlarkFile;
/** A SkyFunction for {@link PackageValue}s. */
public class PackageFunction implements SkyFunction {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
index 183ea8a..020aae3 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
@@ -30,8 +30,6 @@
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.repository.ExternalPackageHelper;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.Root;
import com.google.devtools.build.lib.vfs.RootedPath;
@@ -43,6 +41,8 @@
import java.io.IOException;
import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkSemantics;
/**
* SkyFunction for {@link PackageLookupValue}s.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PlatformMappingFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PlatformMappingFunction.java
index 2799fcc..58e3d42 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PlatformMappingFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PlatformMappingFunction.java
@@ -29,7 +29,6 @@
import com.google.devtools.build.lib.server.FailureDetails.BuildConfiguration;
import com.google.devtools.build.lib.server.FailureDetails.BuildConfiguration.Code;
import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
-import com.google.devtools.build.lib.syntax.Location;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.Root;
@@ -44,6 +43,7 @@
import java.util.Map;
import java.util.Optional;
import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
/**
* Function that reads the contents of a mapping file specified in {@code --platform_mappings} and
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java
index dc1419b..b03a8f7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java
@@ -23,7 +23,6 @@
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.remote.options.RemoteOutputsMode;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.skyframe.AbstractSkyKey;
import com.google.devtools.build.skyframe.Injectable;
import com.google.devtools.build.skyframe.SkyFunction;
@@ -32,6 +31,7 @@
import java.util.Map;
import java.util.UUID;
import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkSemantics;
/**
* A value that represents something computed outside of the skyframe framework. These values are
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index ec30b71..61038e1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -159,8 +159,6 @@
import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ActionCompletedReceiver;
import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ProgressSupplier;
import com.google.devtools.build.lib.skyframe.trimming.TrimmedConfigurationCache;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.util.AbruptExitException;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.util.ExitCode;
@@ -226,6 +224,8 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.StarlarkFile;
/**
* A helper object to support Skyframe-driven execution.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkAspectFactory.java b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkAspectFactory.java
index ce86d3b..2568eff 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkAspectFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkAspectFactory.java
@@ -30,13 +30,13 @@
import com.google.devtools.build.lib.packages.StarlarkDefinedAspect;
import com.google.devtools.build.lib.packages.StructImpl;
import com.google.devtools.build.lib.packages.StructProvider;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import java.util.Map;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
/** A factory for aspects that are defined in Starlark. */
public class StarlarkAspectFactory implements ConfiguredAspectFactory {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuiltinsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuiltinsFunction.java
index af12f35..4031514 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuiltinsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuiltinsFunction.java
@@ -20,10 +20,6 @@
import com.google.devtools.build.lib.packages.PackageFactory;
import com.google.devtools.build.lib.packages.PackageFactory.InjectionException;
import com.google.devtools.build.lib.skyframe.BzlLoadFunction.BzlLoadFailedException;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.skyframe.RecordingSkyFunctionEnvironment;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyFunctionException;
@@ -31,6 +27,10 @@
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Starlark;
// TODO(#11437): Teach ASTFileLookup about builtins keys, then have them modify their env the same
// way as BzlLoadFunction. This will allow us to define the _internal symbol for @builtins.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java
index fc045e4..4981746 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java
@@ -28,13 +28,6 @@
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction;
import com.google.devtools.build.lib.rules.repository.ResolvedFileValue;
-import com.google.devtools.build.lib.syntax.FileOptions;
-import com.google.devtools.build.lib.syntax.LoadStatement;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.Statement;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.RootedPath;
@@ -48,6 +41,13 @@
import java.util.Map;
import java.util.Optional;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.FileOptions;
+import net.starlark.java.syntax.LoadStatement;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.StarlarkFile;
+import net.starlark.java.syntax.Statement;
/** A SkyFunction to parse WORKSPACE files into a StarlarkFile. */
public class WorkspaceASTFunction implements SkyFunction {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTValue.java
index 6397c79..2b99196 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTValue.java
@@ -18,12 +18,12 @@
import com.google.common.collect.Interner;
import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
import com.google.devtools.build.lib.vfs.RootedPath;
import com.google.devtools.build.skyframe.AbstractSkyKey;
import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyValue;
import java.util.List;
+import net.starlark.java.syntax.StarlarkFile;
/**
* A SkyValue that stores the parsed WORKSPACE file as a list of AST. Each AST contains the part
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
index 5622827..3922667 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
@@ -28,10 +28,6 @@
import com.google.devtools.build.lib.packages.WorkspaceFactory;
import com.google.devtools.build.lib.packages.WorkspaceFileValue;
import com.google.devtools.build.lib.packages.WorkspaceFileValue.WorkspaceFileKey;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.vfs.RootedPath;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyFunctionException;
@@ -39,6 +35,10 @@
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import java.io.IOException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.StarlarkFile;
/** A SkyFunction to parse the WORKSPACE file at a given path. */
public class WorkspaceFileFunction implements SkyFunction {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
index ac00dc7..55ccad7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
@@ -79,8 +79,6 @@
import com.google.devtools.build.lib.skyframe.WorkspaceASTFunction;
import com.google.devtools.build.lib.skyframe.WorkspaceFileFunction;
import com.google.devtools.build.lib.skyframe.WorkspaceNameFunction;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -115,6 +113,8 @@
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.StarlarkFile;
/**
* Abstract base class of a {@link PackageLoader} implementation that has no incrementality or
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD
index a868913..a8b6824 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD
@@ -28,7 +28,6 @@
srcs = ["AbstractPackageLoader.java"],
deps = [
":PackageLoader",
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/actions:file_metadata",
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
"//src/main/java/com/google/devtools/build/lib/analysis:blaze_directories",
@@ -60,6 +59,8 @@
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD
index 94a1ad5..d856710 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD
@@ -22,11 +22,12 @@
"//src/test/java/com/google/devtools/build/lib/vfs/util", # For FileSystem modules
],
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:flogger",
"//third_party:guava",
"//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/TestUtils.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/TestUtils.java
index 54221dc..7403beb 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/TestUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/TestUtils.java
@@ -24,14 +24,14 @@
import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs;
import com.google.devtools.build.lib.skyframe.serialization.SerializationContext;
import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
import com.google.protobuf.ByteString;
import com.google.protobuf.CodedInputStream;
import com.google.protobuf.CodedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
/** Helpers for serialization tests. */
public class TestUtils {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ActionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ActionApi.java
index 8b40d54..2c04544 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ActionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ActionApi.java
@@ -16,15 +16,15 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import java.io.IOException;
import javax.annotation.Nullable;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for actions in Starlark. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BUILD
index 4087238..fcf8414 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BUILD
@@ -41,7 +41,8 @@
deps = [
"//third_party:guava",
"//src/main/java/net/starlark/java/annot",
- "//src/main/java/com/google/devtools/build/lib:syntax",
+ "//src/main/java/net/starlark/java/syntax",
+ "//src/main/java/net/starlark/java/eval",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/packages/semantics",
# TODO(cparsons): Remove dependency on Label implementation.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BuildConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BuildConfigurationApi.java
index 7923d1f..0b58466 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BuildConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BuildConfigurationApi.java
@@ -15,10 +15,10 @@
package com.google.devtools.build.lib.starlarkbuildapi;
import com.google.common.collect.ImmutableMap;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for a configuration object which holds information about the build environment. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/CommandLineArgsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/CommandLineArgsApi.java
index 263f2e6..f6fb50b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/CommandLineArgsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/CommandLineArgsApi.java
@@ -15,16 +15,16 @@
package com.google.devtools.build.lib.starlarkbuildapi;
import com.google.devtools.build.lib.collect.nestedset.Depset;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.ParamType;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
/** Command line args module. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DefaultInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DefaultInfoApi.java
index 2e3e808..b02030a 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DefaultInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DefaultInfoApi.java
@@ -17,13 +17,13 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
/** A provider that gives general information about a target's direct and transitive files. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DirectoryExpander.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DirectoryExpander.java
index b78398e..3bcdfbe 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DirectoryExpander.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DirectoryExpander.java
@@ -15,11 +15,11 @@
package com.google.devtools.build.lib.starlarkbuildapi;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** A class that can be used to expand directories at execution time. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ExecGroupApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ExecGroupApi.java
index 36dd936..0366c93 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ExecGroupApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ExecGroupApi.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.lib.starlarkbuildapi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/** A unit of toolchain resolution. Every rule has one or more of these. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileApi.java
index 92866b6..5e494f5 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileApi.java
@@ -15,11 +15,11 @@
package com.google.devtools.build.lib.starlarkbuildapi;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
/** The interface for files in Starlark. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileProviderApi.java
index 9e47955..781f90e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileProviderApi.java
@@ -15,10 +15,10 @@
package com.google.devtools.build.lib.starlarkbuildapi;
import com.google.devtools.build.lib.collect.nestedset.Depset;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** A representation of the concept "this builds these files". */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileRootApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileRootApi.java
index a85ff78..f836d7f 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileRootApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileRootApi.java
@@ -14,10 +14,10 @@
package com.google.devtools.build.lib.starlarkbuildapi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/**
* A root for a file. The roots are the directories containing files, and they are mapped together
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesToRunProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesToRunProviderApi.java
index 956450b..559c64e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesToRunProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesToRunProviderApi.java
@@ -14,11 +14,11 @@
package com.google.devtools.build.lib.starlarkbuildapi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import javax.annotation.Nullable;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** Returns information about executables produced by a target and the files needed to run it. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesetEntryApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesetEntryApi.java
index 72e9dc7..207d564 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesetEntryApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesetEntryApi.java
@@ -14,8 +14,8 @@
package com.google.devtools.build.lib.starlarkbuildapi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
+import net.starlark.java.eval.StarlarkValue;
/** A value object used to represent an entry inside a "Fileset" BUILD rule. */
@StarlarkBuiltin(name = "FilesetEntry", doc = "", documented = false)
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FragmentCollectionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FragmentCollectionApi.java
index c3bbcb8..72c2968 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FragmentCollectionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FragmentCollectionApi.java
@@ -14,10 +14,10 @@
package com.google.devtools.build.lib.starlarkbuildapi;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.StarlarkValue;
/** Represents a collection of configuration fragments in Starlark. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LateBoundDefaultApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LateBoundDefaultApi.java
index 9d49286..38d42f7 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LateBoundDefaultApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LateBoundDefaultApi.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.lib.starlarkbuildapi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/** The interface for late bound defaults in Starlark. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LicenseApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LicenseApi.java
index fea2954..287fbe3 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LicenseApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LicenseApi.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.lib.starlarkbuildapi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/** The interface for a license in Starlark. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/OutputGroupInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/OutputGroupInfoApi.java
index 91ebf79..3cc0f04 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/OutputGroupInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/OutputGroupInfoApi.java
@@ -16,13 +16,13 @@
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
/** Interface for an info object that indicates what output groups a rule has. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ProtoConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ProtoConfigurationApi.java
index 6549277..b88cd92 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ProtoConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ProtoConfigurationApi.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.lib.starlarkbuildapi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/** A configuration fragment representing protocol buffers. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/RunfilesApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/RunfilesApi.java
index 15479cf9..fa35845 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/RunfilesApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/RunfilesApi.java
@@ -15,11 +15,11 @@
package com.google.devtools.build.lib.starlarkbuildapi;
import com.google.devtools.build.lib.collect.nestedset.Depset;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** An interface for a set of runfiles. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SplitTransitionProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SplitTransitionProviderApi.java
index ba722a0..50a7bea 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SplitTransitionProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SplitTransitionProviderApi.java
@@ -14,7 +14,7 @@
package com.google.devtools.build.lib.starlarkbuildapi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for a type representing a split configuration transition. */
public interface SplitTransitionProviderApi extends StarlarkValue {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkActionFactoryApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkActionFactoryApi.java
index bc27d9d..2694b95 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkActionFactoryApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkActionFactoryApi.java
@@ -16,16 +16,16 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.ParamType;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
/** Module providing functions to create actions. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAspectApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAspectApi.java
index e1b9848..8d5667b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAspectApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAspectApi.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.lib.starlarkbuildapi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/** The interface for Starlark-defined aspects in the Build API. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttrModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttrModuleApi.java
index 2f95d56..e28837e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttrModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttrModuleApi.java
@@ -16,17 +16,17 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.ParamType;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
/**
* The "attr" module of the Build API.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttributesCollectionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttributesCollectionApi.java
index 456eaad..b7f61d5 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttributesCollectionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttributesCollectionApi.java
@@ -15,11 +15,11 @@
package com.google.devtools.build.lib.starlarkbuildapi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for a type containing information about the attributes of a rule. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkBuildApiGlobals.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkBuildApiGlobals.java
index 5dc6b93..66fb472 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkBuildApiGlobals.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkBuildApiGlobals.java
@@ -14,11 +14,11 @@
package com.google.devtools.build.lib.starlarkbuildapi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkGlobalLibrary;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
/** A collection of global Starlark build API functions that belong in the global namespace. */
@StarlarkGlobalLibrary
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkCommandLineApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkCommandLineApi.java
index c9d2daf..9e14edd 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkCommandLineApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkCommandLineApi.java
@@ -15,13 +15,13 @@
package com.google.devtools.build.lib.starlarkbuildapi;
import com.google.devtools.build.lib.collect.nestedset.Depset;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDeprecated;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for a module associated with creating efficient command lines. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkConfigApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkConfigApi.java
index 2dd9820..67b901e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkConfigApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkConfigApi.java
@@ -15,11 +15,11 @@
package com.google.devtools.build.lib.starlarkbuildapi;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/**
* The "config" module of the Build API.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkNativeModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkNativeModuleApi.java
index 0c62ff4..e7995b8 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkNativeModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkNativeModuleApi.java
@@ -14,16 +14,16 @@
package com.google.devtools.build.lib.starlarkbuildapi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for a module with native rule and package helper functions. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleContextApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleContextApi.java
index aabec03..7963a17 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleContextApi.java
@@ -24,19 +24,19 @@
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ExecGroupCollectionApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ToolchainContextApi;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
-import com.google.devtools.build.lib.syntax.Tuple;
import javax.annotation.Nullable;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.ParamType;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.eval.Tuple;
/** Interface for a context object given to rule implementation functions. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleFunctionsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleFunctionsApi.java
index 9f5de36..98c919c 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleFunctionsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleFunctionsApi.java
@@ -18,18 +18,18 @@
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi.BuildSettingApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.ParamType;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkGlobalLibrary;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkThread;
/**
* Interface for a global Starlark library containing rule-related helper and registration
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SymlinkEntryApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SymlinkEntryApi.java
index 22f8ec0..07f770e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SymlinkEntryApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SymlinkEntryApi.java
@@ -14,10 +14,10 @@
package com.google.devtools.build.lib.starlarkbuildapi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for a single runfiles symlink represented by a link name and target. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TargetApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TargetApi.java
index a9fa8fa..ab6e2a2 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TargetApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TargetApi.java
@@ -15,9 +15,9 @@
package com.google.devtools.build.lib.starlarkbuildapi;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** A node in the build dependency graph, identified by a Label. */
@StarlarkBuiltin(name = "target", doc = "", documented = false)
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TemplateVariableInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TemplateVariableInfoApi.java
index 8be5fbf..6af8770 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TemplateVariableInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TemplateVariableInfoApi.java
@@ -17,13 +17,13 @@
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
/** Provides access to make variables from the current fragments. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TopLevelBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TopLevelBootstrap.java
index 142344a..42070ee 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TopLevelBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TopLevelBootstrap.java
@@ -19,7 +19,7 @@
import com.google.devtools.build.lib.starlarkbuildapi.OutputGroupInfoApi.OutputGroupInfoApiProvider;
import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.Starlark;
/**
* A {@link Bootstrap} for top-level libraries of the build API.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/WorkspaceGlobalsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/WorkspaceGlobalsApi.java
index 63fcb4c..8168c4c 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/WorkspaceGlobalsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/WorkspaceGlobalsApi.java
@@ -16,14 +16,14 @@
package com.google.devtools.build.lib.starlarkbuildapi;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkGlobalLibrary;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
/** A collection of global Starlark build API functions that apply to WORKSPACE files. */
@StarlarkGlobalLibrary
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidApplicationResourceInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidApplicationResourceInfoApi.java
index d033994..336e23b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidApplicationResourceInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidApplicationResourceInfoApi.java
@@ -16,11 +16,11 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/** Supplies a resource apk file (".ap_") and related info. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidAssetsInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidAssetsInfoApi.java
index bb38010..6a7b4ab 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidAssetsInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidAssetsInfoApi.java
@@ -19,13 +19,13 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import javax.annotation.Nullable;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/** Provides information about transitive Android assets. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataInfoApi.java
index 76b3866..8b7d480 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataInfoApi.java
@@ -16,12 +16,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/**
* Provides information on Android resource, asset, and manifest information specific to binaries.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataSettingsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataSettingsApi.java
index da2f124..a9f38f3 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataSettingsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataSettingsApi.java
@@ -13,8 +13,8 @@
// limitations under the License.
package com.google.devtools.build.lib.starlarkbuildapi.android;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
+import net.starlark.java.eval.StarlarkValue;
/** Wraps common settings for working with android binary assets, resources, and manifests. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBootstrap.java
index e0f3298..5090891 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBootstrap.java
@@ -23,8 +23,8 @@
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidResourcesInfoApi.AndroidResourcesInfoApiProvider;
import com.google.devtools.build.lib.starlarkbuildapi.android.ApkInfoApi.ApkInfoApiProvider;
import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
-import com.google.devtools.build.lib.syntax.FlagGuardedValue;
import java.util.Map;
+import net.starlark.java.eval.FlagGuardedValue;
/** {@link Bootstrap} for Starlark objects related to Android rules. */
public class AndroidBootstrap implements Bootstrap {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidCcLinkParamsProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidCcLinkParamsProviderApi.java
index b0ffb8e..aa0436e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidCcLinkParamsProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidCcLinkParamsProviderApi.java
@@ -18,12 +18,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/** A target that provides C++ libraries to be linked into Android targets. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java
index a30048d..06bf18c 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java
@@ -14,10 +14,10 @@
package com.google.devtools.build.lib.starlarkbuildapi.android;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** Configuration fragment for Android rules. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataContextApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataContextApi.java
index 665fb2e..26535be 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataContextApi.java
@@ -13,8 +13,8 @@
// limitations under the License.
package com.google.devtools.build.lib.starlarkbuildapi.android;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
+import net.starlark.java.eval.StarlarkValue;
/**
* Wraps common tools and settings used for working with Android assets, resources, and manifests.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataProcessingApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataProcessingApi.java
index faabbeb..4e0e963 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataProcessingApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataProcessingApi.java
@@ -19,14 +19,14 @@
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.TransitiveInfoCollectionApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
/** Starlark-visible methods for working with Android data (manifests, resources, and assets). */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDeviceBrokerInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDeviceBrokerInfoApi.java
index 27b7c8d..2f1c464 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDeviceBrokerInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDeviceBrokerInfoApi.java
@@ -15,11 +15,11 @@
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/** Supplies the device broker type string, passed to the Android test runtime. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDex2OatInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDex2OatInfoApi.java
index 595caf4..05d370f 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDex2OatInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDex2OatInfoApi.java
@@ -17,11 +17,11 @@
import com.google.devtools.build.lib.starlarkbuildapi.FilesToRunProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.NoneType;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.ParamType;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.NoneType;
/**
* Supplies the pregenerate_oat_files_for_tests attribute of type boolean provided by android_device
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidFeatureFlagSetProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidFeatureFlagSetProviderApi.java
index d3a2481..8eef428 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidFeatureFlagSetProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidFeatureFlagSetProviderApi.java
@@ -17,13 +17,13 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
/** */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdeInfoProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdeInfoProviderApi.java
index 9bf5d30..e667b64 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdeInfoProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdeInfoProviderApi.java
@@ -20,14 +20,14 @@
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.OutputJarApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
import javax.annotation.Nullable;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
/**
* Configured targets implementing this provider can contribute Android-specific info to IDE to the
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdlProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdlProviderApi.java
index e2134a5..b2ad3ad 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdlProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdlProviderApi.java
@@ -17,12 +17,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/**
* Configured targets implementing this provider can contribute Android IDL information to the
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidInstrumentationInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidInstrumentationInfoApi.java
index 9c76e3f..46aebd8 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidInstrumentationInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidInstrumentationInfoApi.java
@@ -15,12 +15,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/**
* A provider for targets that create Android instrumentations. Consumed by Android testing rules.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryAarInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryAarInfoApi.java
index 930478f..ab43927 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryAarInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryAarInfoApi.java
@@ -17,13 +17,13 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
/** A target that can provide the aar artifact of Android libraries */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryResourceClassJarProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryResourceClassJarProviderApi.java
index 0b03f66..32ea703 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryResourceClassJarProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryResourceClassJarProviderApi.java
@@ -17,12 +17,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/** Provides resource class jars from android_library rules. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestApi.java
index 9a648b0..d55d25d 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestApi.java
@@ -13,9 +13,9 @@
// limitations under the License.
package com.google.devtools.build.lib.starlarkbuildapi.android;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/** Wraps an Android Manifest and provides utilities for working with it */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestInfoApi.java
index 8139408..14dc173 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestInfoApi.java
@@ -16,11 +16,11 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/** A provider of information about this target's manifest. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidNativeLibsInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidNativeLibsInfoApi.java
index 9f51ea0..27f0738 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidNativeLibsInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidNativeLibsInfoApi.java
@@ -17,11 +17,11 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/**
* Provider of transitively available ZIPs of native libs that should be directly copied into the
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidPreDexJarProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidPreDexJarProviderApi.java
index a9f9990..49adc3c 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidPreDexJarProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidPreDexJarProviderApi.java
@@ -17,12 +17,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/** A provider of the final Jar to be dexed for targets that build APKs. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidProguardInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidProguardInfoApi.java
index 960c260..c377a2e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidProguardInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidProguardInfoApi.java
@@ -17,12 +17,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
/** A target that can provide local proguard specifications. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidResourcesInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidResourcesInfoApi.java
index c89b847..737ce1b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidResourcesInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidResourcesInfoApi.java
@@ -18,12 +18,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/** A provider that supplies resource information from its transitive closure. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSdkProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSdkProviderApi.java
index 8207fce..b4fc5a2 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSdkProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSdkProviderApi.java
@@ -18,13 +18,13 @@
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.TransitiveInfoCollectionApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import javax.annotation.Nullable;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
/**
* Configured targets implementing this provider can contribute Android Sdk information to the
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSplitTransititionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSplitTransititionApi.java
index 2801b3d..69d496b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSplitTransititionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSplitTransititionApi.java
@@ -13,8 +13,8 @@
// limitations under the License.
package com.google.devtools.build.lib.starlarkbuildapi.android;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
+import net.starlark.java.eval.StarlarkValue;
/** Android configuration for properly handling native dependencies */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkApiProviderApi.java
index 8bf2c66..227ddf3 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkApiProviderApi.java
@@ -18,11 +18,11 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.OutputJarApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import javax.annotation.Nullable;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/**
* A class that exposes the Android providers to Starlark. It is intended to provide a simple and
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkCommonApi.java
index 161aaf8..e6fa3de 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkCommonApi.java
@@ -16,10 +16,10 @@
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaInfoApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** Common utilities for Starlark rules related to Android. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ApkInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ApkInfoApi.java
index 8aa51bb..9b73771 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ApkInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ApkInfoApi.java
@@ -17,12 +17,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
/** A provider for targets that produce an apk file. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/BUILD
index 14778ea..a46c0e6 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/BUILD
@@ -20,7 +20,6 @@
name = "android",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/packages/semantics",
@@ -29,6 +28,8 @@
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/DataBindingV2ProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/DataBindingV2ProviderApi.java
index ac05188..482d39e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/DataBindingV2ProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/DataBindingV2ProviderApi.java
@@ -18,14 +18,14 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import javax.annotation.Nullable;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
/**
* An interface for a provider that exposes the use of <a
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ParsedAndroidAssetsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ParsedAndroidAssetsApi.java
index 5c649f3..3a6c682 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ParsedAndroidAssetsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ParsedAndroidAssetsApi.java
@@ -13,9 +13,9 @@
// limitations under the License.
package com.google.devtools.build.lib.starlarkbuildapi.android;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/** Parsed Android assets which can be merged together with assets from dependencies. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ProguardMappingProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ProguardMappingProviderApi.java
index 15ba487..1eb2224 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ProguardMappingProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ProguardMappingProviderApi.java
@@ -16,12 +16,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/** A target that can provide a proguard obfuscation mapping to Android binaries or tests. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/UsesDataBindingProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/UsesDataBindingProviderApi.java
index 74bc9d4..8acf0f9 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/UsesDataBindingProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/UsesDataBindingProviderApi.java
@@ -17,12 +17,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
/**
* An interface for a provider that exposes the use of <a
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ValidatedAndroidDataApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ValidatedAndroidDataApi.java
index 2edfce5..3911e4b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ValidatedAndroidDataApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ValidatedAndroidDataApi.java
@@ -15,12 +15,12 @@
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import javax.annotation.Nullable;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
/** Validated Android data which can be merged together with assets from dependencies. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleBitcodeModeApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleBitcodeModeApi.java
index 52bcc47..97c7409 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleBitcodeModeApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleBitcodeModeApi.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.lib.starlarkbuildapi.apple;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/**
* Interface for an enum describing the bitcode mode to use when compiling Objective-C and Swift
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleCommonApi.java
index d485801..df5417d 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleCommonApi.java
@@ -24,14 +24,14 @@
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for a module with useful functions for creating apple-related rule implementations. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleConfigurationApi.java
index c07bc1f..fbaf900 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleConfigurationApi.java
@@ -14,12 +14,12 @@
package com.google.devtools.build.lib.starlarkbuildapi.apple;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDeprecated;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** An interface for a configuration type containing info for Apple platforms and tools. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformApi.java
index 19792e4..5b5f5f0 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformApi.java
@@ -14,10 +14,10 @@
package com.google.devtools.build.lib.starlarkbuildapi.apple;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** An interface for an object representing an Apple platform. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformTypeApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformTypeApi.java
index f7ef612..6ce8302 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformTypeApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformTypeApi.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.lib.starlarkbuildapi.apple;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for a descriptor for an Apple platform type, such as such as iOS or macOS. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleStaticLibraryInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleStaticLibraryInfoApi.java
index 843b4e3..e096c3f 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleStaticLibraryInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleStaticLibraryInfoApi.java
@@ -17,12 +17,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/**
* Interface for an info type containing information regarding multi-architecture Apple static
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleToolchainApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleToolchainApi.java
index be70c7b..c60aba5 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleToolchainApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleToolchainApi.java
@@ -14,10 +14,10 @@
package com.google.devtools.build.lib.starlarkbuildapi.apple;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for a utility module involving the Apple toolchain. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/BUILD
index 327f8b0..1f6687c 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/BUILD
@@ -27,7 +27,8 @@
"//src/main/java/net/starlark/java/annot",
# TODO(b/80307387): Remove dependency on Depset.
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
- "//src/main/java/com/google/devtools/build/lib:syntax",
+ "//src/main/java/net/starlark/java/syntax",
+ "//src/main/java/net/starlark/java/eval",
"//src/main/java/com/google/devtools/build/lib/packages/semantics",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
"//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/DottedVersionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/DottedVersionApi.java
index 1ce8cbe..124f05b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/DottedVersionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/DottedVersionApi.java
@@ -14,11 +14,11 @@
package com.google.devtools.build.lib.starlarkbuildapi.apple;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/**
* Interface for a value representing a version with multiple components, separated by periods, such
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/J2ObjcConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/J2ObjcConfigurationApi.java
index 60cbc24..0a1865c 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/J2ObjcConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/J2ObjcConfigurationApi.java
@@ -15,10 +15,10 @@
package com.google.devtools.build.lib.starlarkbuildapi.apple;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** A configuration fragment for j2objc. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcConfigurationApi.java
index ad6b1c7..a4929e2 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcConfigurationApi.java
@@ -15,12 +15,12 @@
package com.google.devtools.build.lib.starlarkbuildapi.apple;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import javax.annotation.Nullable;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** A configuration fragment for Objective C. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcProviderApi.java
index bc81269..f6740bf 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcProviderApi.java
@@ -18,11 +18,11 @@
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcCompilationContextApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
/**
* An interface for an info type that provides all compiling and linking information in the
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/SwiftConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/SwiftConfigurationApi.java
index 51825ef..b4d5c75 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/SwiftConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/SwiftConfigurationApi.java
@@ -15,10 +15,10 @@
package com.google.devtools.build.lib.starlarkbuildapi.apple;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** A configuration fragment for Swift tools. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/XcodeConfigInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/XcodeConfigInfoApi.java
index 6aed023..5c1c330 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/XcodeConfigInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/XcodeConfigInfoApi.java
@@ -16,13 +16,13 @@
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
/**
* An interface for an info type containing the set of Apple versions computed from command line
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/BUILD
index dc234fc..7f63b48 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/BUILD
@@ -20,10 +20,11 @@
name = "config",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigBootstrap.java
index fcc804a..e60c408 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigBootstrap.java
@@ -17,7 +17,7 @@
import com.google.common.collect.ImmutableMap.Builder;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.Starlark;
/**
* A {@link Bootstrap} for config-related libraries of the build API.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigGlobalLibraryApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigGlobalLibraryApi.java
index 0fa54fb..93fcc37 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigGlobalLibraryApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigGlobalLibraryApi.java
@@ -14,15 +14,15 @@
package com.google.devtools.build.lib.starlarkbuildapi.config;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkGlobalLibrary;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
/** A collection of top-level Starlark functions pertaining to configuration. */
@StarlarkGlobalLibrary
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigStarlarkCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigStarlarkCommonApi.java
index 1817613..b0ad1e5 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigStarlarkCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigStarlarkCommonApi.java
@@ -15,9 +15,9 @@
package com.google.devtools.build.lib.starlarkbuildapi.config;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** Helper utility containing functions regarding configurations.ss */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigurationTransitionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigurationTransitionApi.java
index ab20127..36b38de 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigurationTransitionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigurationTransitionApi.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.lib.starlarkbuildapi.config;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/** Represents a configuration transition across a dependency edge. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/BUILD
index 574e52c..1ed8449 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/BUILD
@@ -24,8 +24,9 @@
name = "core",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/ProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/ProviderApi.java
index b79e638..9e5bec0 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/ProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/ProviderApi.java
@@ -13,9 +13,9 @@
// limitations under the License.
package com.google.devtools.build.lib.starlarkbuildapi.core;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for provider objects (constructors for {@link StructApi} objects). */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/StructApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/StructApi.java
index 943a766..40ba2bc 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/StructApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/StructApi.java
@@ -14,15 +14,15 @@
package com.google.devtools.build.lib.starlarkbuildapi.core;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for the "struct" object in the build API. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/TransitiveInfoCollectionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/TransitiveInfoCollectionApi.java
index 2445636..c4b8400 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/TransitiveInfoCollectionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/TransitiveInfoCollectionApi.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.lib.starlarkbuildapi.core;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for a build target. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BUILD
index 883566e..129d072 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BUILD
@@ -20,7 +20,6 @@
name = "cpp",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/packages/semantics",
@@ -29,6 +28,8 @@
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
index f18321f..bf16581 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
@@ -19,15 +19,15 @@
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkActionFactoryApi;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Tuple;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.ParamType;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
/** Utilites related to C++ support. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcBootstrap.java
index df8b252..81a332b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcBootstrap.java
@@ -21,7 +21,7 @@
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.FlagGuardedValue;
+import net.starlark.java.eval.FlagGuardedValue;
/** {@link Bootstrap} for Starlark objects related to cpp rules. */
public class CcBootstrap implements Bootstrap {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationContextApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationContextApi.java
index 8f38781..0fee722 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationContextApi.java
@@ -16,11 +16,11 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkValue;
/**
* Interface for a store of information needed for C++ compilation aggregated across dependencies.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationOutputsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationOutputsApi.java
index 3ccb3e3..6fd33da 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationOutputsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationOutputsApi.java
@@ -15,12 +15,12 @@
package com.google.devtools.build.lib.starlarkbuildapi.cpp;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for a structured representation of the compilation outputs of a C++ rule. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcInfoApi.java
index 8e6f7cc..5638629 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcInfoApi.java
@@ -17,14 +17,14 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.ParamType;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
/** Wrapper for every C++ compilation and linking provider. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingContextApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingContextApi.java
index cd01171..ea1db27 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingContextApi.java
@@ -17,12 +17,12 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkValue;
/** Wrapper for every C++ linking provider. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingOutputsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingOutputsApi.java
index fae10d8..05b03e0 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingOutputsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingOutputsApi.java
@@ -15,10 +15,10 @@
package com.google.devtools.build.lib.starlarkbuildapi.cpp;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for a structured representation of the linking outputs of a C++ rule. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java
index ddf10db..9cd50a8 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java
@@ -22,17 +22,17 @@
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
-import com.google.devtools.build.lib.syntax.Tuple;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.ParamType;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.eval.Tuple;
/** Utilites related to C++ support. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcStarlarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcStarlarkApiProviderApi.java
index 9bacc71..2e842f6 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcStarlarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcStarlarkApiProviderApi.java
@@ -17,10 +17,10 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** Object with information about C++ rules. Every C++-related target should provide this. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java
index ab2333f..4684e35 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java
@@ -17,12 +17,12 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ToolchainInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import javax.annotation.Nullable;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/** Information about the C++ toolchain. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainVariablesApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainVariablesApi.java
index ff7c786..05ccff8 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainVariablesApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainVariablesApi.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.lib.starlarkbuildapi.cpp;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/** Type encapsulating build variables. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CompilationInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CompilationInfoApi.java
index 5f6fc2a..4c82da0 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CompilationInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CompilationInfoApi.java
@@ -15,10 +15,10 @@
package com.google.devtools.build.lib.starlarkbuildapi.cpp;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** Interface for a helper class containing CC compilation providers. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CppConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CppConfigurationApi.java
index f2b8a1d..3e179a6 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CppConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CppConfigurationApi.java
@@ -16,11 +16,11 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
/** The C++ configuration fragment. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/FeatureConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/FeatureConfigurationApi.java
index b165dd9..25a3bab 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/FeatureConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/FeatureConfigurationApi.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.lib.starlarkbuildapi.cpp;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/** Class used to construct command lines from CROSSTOOL features. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoCcLinkParamsInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoCcLinkParamsInfoApi.java
index f703f67..2917dd3 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoCcLinkParamsInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoCcLinkParamsInfoApi.java
@@ -17,12 +17,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/** A target that provides C++ libraries to be linked into Go targets. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoWrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoWrapCcHelperApi.java
index aa86c22..1845b9b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoWrapCcHelperApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoWrapCcHelperApi.java
@@ -23,15 +23,15 @@
import com.google.devtools.build.lib.starlarkbuildapi.go.GoContextInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.go.GoPackageInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Tuple;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.ParamType;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Tuple;
/**
* Helper class for the C++ functionality needed from Starlark specifically to implement go_wrap_cc.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LibraryToLinkApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LibraryToLinkApi.java
index 956a0da..5ae3b39 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LibraryToLinkApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LibraryToLinkApi.java
@@ -15,11 +15,11 @@
package com.google.devtools.build.lib.starlarkbuildapi.cpp;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
/**
* A library the user can link to. This is different from a simple linker input in that it also has
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkerInputApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkerInputApi.java
index cdb95bf..d294d18 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkerInputApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkerInputApi.java
@@ -16,13 +16,13 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkValue;
/** Either libraries, flags or other files that may be passed to the linker as inputs. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkingInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkingInfoApi.java
index 322dd17..2909167 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkingInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkingInfoApi.java
@@ -14,10 +14,10 @@
package com.google.devtools.build.lib.starlarkbuildapi.cpp;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** Helper object containing CC linking info objects. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/PyWrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/PyWrapCcHelperApi.java
index 63330ed..a5425c1 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/PyWrapCcHelperApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/PyWrapCcHelperApi.java
@@ -19,12 +19,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.RunfilesApi;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
/**
* Helper class for the C++ aspects of {py,java,go}_wrap_cc. Provides methods to create the swig and
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/WrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/WrapCcHelperApi.java
index c416dca..fe854e8 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/WrapCcHelperApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/WrapCcHelperApi.java
@@ -19,14 +19,14 @@
import com.google.devtools.build.lib.starlarkbuildapi.FilesToRunProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.ParamType;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
/**
* Helper class for the C++ aspects of {py,java,go}_wrap_cc. Provides methods to create the swig and
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/BUILD
index f377a19..8d12eec 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/BUILD
@@ -20,8 +20,9 @@
name = "go",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/GoConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/GoConfigurationApi.java
index 26a08cf..65ad88e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/GoConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/GoConfigurationApi.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.lib.starlarkbuildapi.go;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/** A configuration fragment for Go. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/BUILD
index 93c72f4..f6228fc 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/BUILD
@@ -20,7 +20,6 @@
name = "java",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/packages/semantics",
@@ -29,6 +28,8 @@
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java
index 9c9c99d..64afe59 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java
@@ -18,12 +18,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/** Provides information about generated proto extensions. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaAnnotationProcessingApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaAnnotationProcessingApi.java
index e32733c..249f714 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaAnnotationProcessingApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaAnnotationProcessingApi.java
@@ -17,11 +17,11 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import javax.annotation.Nullable;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/**
* Interface for an info object containing information about jars that are a result of annotation
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaBootstrap.java
index d6a05aa..41c518c4 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaBootstrap.java
@@ -18,7 +18,7 @@
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaInfoApi.JavaInfoProviderApi;
-import com.google.devtools.build.lib.syntax.FlagGuardedValue;
+import net.starlark.java.eval.FlagGuardedValue;
/** {@link Bootstrap} for Starlark objects related to the java language. */
public class JavaBootstrap implements Bootstrap {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCcLinkParamsProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCcLinkParamsProviderApi.java
index 873d28c..7b27939 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCcLinkParamsProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCcLinkParamsProviderApi.java
@@ -18,13 +18,13 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
/** A target that provides C++ libraries to be linked into Java targets. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCommonApi.java
index bb939a9..c139273 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCommonApi.java
@@ -23,14 +23,14 @@
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.ParamType;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
/** Utilities for Java compilation support in Starlark. */
@StarlarkBuiltin(name = "java_common", doc = "Utilities for Java compilation support in Starlark.")
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCompilationInfoProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCompilationInfoProviderApi.java
index 218bc8f..82b44a7 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCompilationInfoProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCompilationInfoProviderApi.java
@@ -17,10 +17,10 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** Info object for compilation information for java rules. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaConfigurationApi.java
index 1804349..2aa6546 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaConfigurationApi.java
@@ -16,10 +16,10 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** A java compiler configuration. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaInfoApi.java
index ce7a4cd..3dcf336 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaInfoApi.java
@@ -18,14 +18,14 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
/** Info object encapsulating all information by java rules. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaNativeLibraryInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaNativeLibraryInfoApi.java
index 486ec58..279a8e5 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaNativeLibraryInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaNativeLibraryInfoApi.java
@@ -20,12 +20,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.LibraryToLinkApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/** A target that provides C++ {@link LibraryToLinkApi}s to be linked into Java targets. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaProtoCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaProtoCommonApi.java
index 8b7f08a..0ac1f5f 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaProtoCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaProtoCommonApi.java
@@ -18,11 +18,11 @@
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.TransitiveInfoCollectionApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
/** Helper class for Java proto compilation. */
@StarlarkBuiltin(name = "java_proto_common", doc = "Helper class for Java proto compilation.")
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuleOutputJarsProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuleOutputJarsProviderApi.java
index 55ca2e3..ac7c18a 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuleOutputJarsProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuleOutputJarsProviderApi.java
@@ -16,10 +16,10 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** Info object about outputs of a Java rule. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuntimeClasspathProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuntimeClasspathProviderApi.java
index 90d65fa6..20c1dcc 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuntimeClasspathProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuntimeClasspathProviderApi.java
@@ -15,9 +15,9 @@
package com.google.devtools.build.lib.starlarkbuildapi.java;
import com.google.devtools.build.lib.collect.nestedset.Depset;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** Provider for the runtime classpath contributions of a Java binary. */
@StarlarkBuiltin(name = "JavaRuntimeClasspathProvider", doc = "", documented = false)
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaStarlarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaStarlarkApiProviderApi.java
index e1eeff3..21811da 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaStarlarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaStarlarkApiProviderApi.java
@@ -15,10 +15,10 @@
package com.google.devtools.build.lib.starlarkbuildapi.java;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDeprecated;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
/**
* Provides access to information about Java rules. Every Java-related target provides this struct,
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaToolchainStarlarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaToolchainStarlarkApiProviderApi.java
index 161785c..dbba910 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaToolchainStarlarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaToolchainStarlarkApiProviderApi.java
@@ -17,10 +17,10 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ToolchainInfoApi;
-import com.google.devtools.build.lib.syntax.Sequence;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
/**
* Provides access to information about the Java toolchain rule. Accessible as a 'java_toolchain'
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/OutputJarApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/OutputJarApi.java
index 3fc4d8e..6550dd7 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/OutputJarApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/OutputJarApi.java
@@ -15,11 +15,11 @@
package com.google.devtools.build.lib.starlarkbuildapi.java;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
/** A tuple of a java classes jar and its associated source and interface archives. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/ProguardSpecProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/ProguardSpecProviderApi.java
index 9d59d0e..3d49b1c 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/ProguardSpecProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/ProguardSpecProviderApi.java
@@ -17,12 +17,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
/** Provides information about proguard specs for Android binaries. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/BUILD
index 1294777..0f382f6 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/BUILD
@@ -20,11 +20,12 @@
name = "javascript",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/packages/semantics",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/JsModuleInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/JsModuleInfoApi.java
index 9a6ccdd..6425b66 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/JsModuleInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/JsModuleInfoApi.java
@@ -19,14 +19,14 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
/** Info object propagating information about protocol buffer sources. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/BUILD
index 74b3778..2c02ccd 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/BUILD
@@ -20,11 +20,12 @@
name = "platform",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/packages/semantics",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ConstraintCollectionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ConstraintCollectionApi.java
index 91c4cba..cf140bf 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ConstraintCollectionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ConstraintCollectionApi.java
@@ -15,14 +15,14 @@
package com.google.devtools.build.lib.starlarkbuildapi.platform;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkIndexable;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import javax.annotation.Nullable;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkIndexable;
+import net.starlark.java.eval.StarlarkValue;
/** Info object representing data about a specific platform. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ExecGroupCollectionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ExecGroupCollectionApi.java
index c5b3045..ffda138 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ExecGroupCollectionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ExecGroupCollectionApi.java
@@ -13,12 +13,12 @@
// limitations under the License.
package com.google.devtools.build.lib.starlarkbuildapi.platform;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkIndexable;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkIndexable;
+import net.starlark.java.eval.StarlarkValue;
/** Stores {@link com.google.devtools.build.lib.packages.ExecGroup}s available to a given rule. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformCommonApi.java
index 9101ef0..95f8b29 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformCommonApi.java
@@ -15,9 +15,9 @@
package com.google.devtools.build.lib.starlarkbuildapi.platform;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** Module containing functions to interact with the platform APIs. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformConfigurationApi.java
index 33694d7..264aaec 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformConfigurationApi.java
@@ -16,10 +16,10 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** The platform configuration. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformInfoApi.java
index 2338069..8292d5f 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformInfoApi.java
@@ -18,16 +18,16 @@
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import java.util.Map;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
/** Info object representing data about a specific platform. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainContextApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainContextApi.java
index e7096ac..990863e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainContextApi.java
@@ -14,10 +14,10 @@
package com.google.devtools.build.lib.starlarkbuildapi.platform;
-import com.google.devtools.build.lib.syntax.StarlarkIndexable;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkIndexable;
+import net.starlark.java.eval.StarlarkValue;
/** Stores toolchains available to a given rule. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainInfoApi.java
index f10d686..bfd6a6a 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainInfoApi.java
@@ -16,13 +16,13 @@
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
/** Info object representing data about a specific toolchain. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/BUILD
index b8eb8f6..0452a4d 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/BUILD
@@ -20,12 +20,13 @@
name = "proto",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/packages/semantics",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoBootstrap.java
index 2160d87..f58bfb8 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoBootstrap.java
@@ -20,7 +20,7 @@
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAspectApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.FlagGuardedValue;
+import net.starlark.java.eval.FlagGuardedValue;
/** A {@link Bootstrap} for Starlark objects related to protocol buffers. */
public class ProtoBootstrap implements Bootstrap {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoCommonApi.java
index ca2453a..020d7a9 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoCommonApi.java
@@ -14,8 +14,8 @@
package com.google.devtools.build.lib.starlarkbuildapi.proto;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
+import net.starlark.java.eval.StarlarkValue;
/**
* Interface for protocol buffers support in Bazel.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoRegistryProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoRegistryProviderApi.java
index f180b9e..d2ce84d 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoRegistryProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoRegistryProviderApi.java
@@ -17,10 +17,10 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Sequence;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
/** Provides information about flavors for all built protos. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/BUILD
index 1acb981..8694043 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/BUILD
@@ -20,12 +20,13 @@
name = "python",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/packages/semantics",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
"//src/main/java/net/starlark/java/annot",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyBootstrap.java
index 484569d..d38e325 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyBootstrap.java
@@ -19,7 +19,7 @@
import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
import com.google.devtools.build.lib.starlarkbuildapi.python.PyInfoApi.PyInfoProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.python.PyRuntimeInfoApi.PyRuntimeInfoProviderApi;
-import com.google.devtools.build.lib.syntax.FlagGuardedValue;
+import net.starlark.java.eval.FlagGuardedValue;
/** {@link Bootstrap} for Starlark objects related to the Python rules. */
public class PyBootstrap implements Bootstrap {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyInfoApi.java
index 766275d..a6e6dca 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyInfoApi.java
@@ -17,14 +17,14 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
/** Provider instance for the Python rules. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyRuntimeInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyRuntimeInfoApi.java
index d83b2f8..52983c7 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyRuntimeInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyRuntimeInfoApi.java
@@ -17,15 +17,15 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import javax.annotation.Nullable;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
/** Provider instance for {@code py_runtime}. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyStarlarkTransitionsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyStarlarkTransitionsApi.java
index 360cda1..3619b89 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyStarlarkTransitionsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyStarlarkTransitionsApi.java
@@ -15,9 +15,9 @@
package com.google.devtools.build.lib.starlarkbuildapi.python;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/**
* DO NOT USE. Skarlark module exposing Python transitions for Python 2 to 3 migration purposes
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/BUILD
index fb0fcf5..ed3ab56 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/BUILD
@@ -23,7 +23,8 @@
"//third_party:guava",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
"//src/main/java/net/starlark/java/annot",
- "//src/main/java/com/google/devtools/build/lib:syntax",
+ "//src/main/java/net/starlark/java/syntax",
+ "//src/main/java/net/starlark/java/eval",
"//src/main/java/com/google/devtools/build/lib/packages/semantics",
# TODO(cparsons): Remove dependency on Label implementation.
"//src/main/java/com/google/devtools/build/lib/cmdline",
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryBootstrap.java
index fc7d246..17fd2aa 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryBootstrap.java
@@ -16,7 +16,7 @@
import com.google.common.collect.ImmutableMap.Builder;
import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.Starlark;
/**
* A {@link Bootstrap} for repository-related libraries of the build API.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryModuleApi.java
index 0d38eec..572f316 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryModuleApi.java
@@ -15,14 +15,14 @@
package com.google.devtools.build.lib.starlarkbuildapi.repository;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkGlobalLibrary;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
/**
* The Starlark module containing the definition of {@code repository_rule} function to define a
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryPathApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryPathApi.java
index c518472..e03367a 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryPathApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryPathApi.java
@@ -15,12 +15,12 @@
package com.google.devtools.build.lib.starlarkbuildapi.repository;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import java.io.IOException;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** A structure representing a file to be used inside a repository. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkExecutionResultApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkExecutionResultApi.java
index cf65241..f0a37da 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkExecutionResultApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkExecutionResultApi.java
@@ -14,10 +14,10 @@
package com.google.devtools.build.lib.starlarkbuildapi.repository;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/**
* A structure callable from Starlark that stores the result of repository_ctx.execute() method. It
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkOSApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkOSApi.java
index 66efb09..feac8ef 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkOSApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkOSApi.java
@@ -15,10 +15,10 @@
package com.google.devtools.build.lib.starlarkbuildapi.repository;
import com.google.common.collect.ImmutableMap;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/** A Starlark structure to deliver information about the system we are running on. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkRepositoryContextApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkRepositoryContextApi.java
index 7f414ec..d278f0f 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkRepositoryContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkRepositoryContextApi.java
@@ -16,16 +16,16 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.ParamType;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkDocumentationCategory;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
/** Starlark API for the repository_rule's context. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/BUILD
index a9929b1..4633859 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/BUILD
@@ -19,8 +19,9 @@
name = "stubs",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/ProviderStub.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/ProviderStub.java
index c5e9865..6459d18a 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/ProviderStub.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/ProviderStub.java
@@ -15,7 +15,7 @@
package com.google.devtools.build.lib.starlarkbuildapi.stubs;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/**
* Stub implementation of {@link ProviderApi}. Should only be used for experimental, unimplemented
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/StarlarkAspectStub.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/StarlarkAspectStub.java
index 5b709e0..7c85107 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/StarlarkAspectStub.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/StarlarkAspectStub.java
@@ -15,7 +15,7 @@
package com.google.devtools.build.lib.starlarkbuildapi.stubs;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAspectApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/**
* Stub implementation of {@link StarlarkAspectApi}. Should only be used for experimental,
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureApi.java
index 4382730..5024f53 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureApi.java
@@ -15,9 +15,9 @@
package com.google.devtools.build.lib.starlarkbuildapi.test;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/**
* Encapsulates information about an analysis-phase error which would have occurred during a build.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureInfoApi.java
index cff9393..a467557 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureInfoApi.java
@@ -16,9 +16,9 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/**
* Encapsulates information about an analysis-phase error which would have occurred during a build.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisTestResultInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisTestResultInfoApi.java
index 3582708..631daa0 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisTestResultInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisTestResultInfoApi.java
@@ -15,11 +15,11 @@
package com.google.devtools.build.lib.starlarkbuildapi.test;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkConstructor;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
/**
* Encapsulates information about an analysis-phase error which would have occurred during a build.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/BUILD
index ce9dc9f..1ec4920 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/BUILD
@@ -27,7 +27,8 @@
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
"//src/main/java/net/starlark/java/annot",
- "//src/main/java/com/google/devtools/build/lib:syntax",
+ "//src/main/java/net/starlark/java/syntax",
+ "//src/main/java/net/starlark/java/eval",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/CoverageCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/CoverageCommonApi.java
index b7f48bf..bb04ace 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/CoverageCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/CoverageCommonApi.java
@@ -16,12 +16,12 @@
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
/** Helper functions for Starlark to access coverage-related infrastructure */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/TestingModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/TestingModuleApi.java
index 81ecbbf..c63d515 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/TestingModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/TestingModuleApi.java
@@ -14,12 +14,12 @@
package com.google.devtools.build.lib.starlarkbuildapi.test;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
/** Helper module for accessing test infrastructure. */
@StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/BUILD
index edab2b8..6e4bcbe 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/BUILD
@@ -14,10 +14,11 @@
deps = [
":options",
"//src/main/java/com/google/devtools/build/lib:runtime",
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/starlarkdebug/server",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/StarlarkDebuggerModule.java b/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/StarlarkDebuggerModule.java
index 25339e7..7ed17db 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/StarlarkDebuggerModule.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/StarlarkDebuggerModule.java
@@ -21,9 +21,9 @@
import com.google.devtools.build.lib.runtime.Command;
import com.google.devtools.build.lib.runtime.CommandEnvironment;
import com.google.devtools.build.lib.starlarkdebug.server.StarlarkDebugServer;
-import com.google.devtools.build.lib.syntax.Debug;
import com.google.devtools.common.options.OptionsBase;
import java.io.IOException;
+import net.starlark.java.eval.Debug;
/** Blaze module for setting up Starlark debugging. */
public final class StarlarkDebuggerModule extends BlazeModule {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/BUILD
index d0127f9..cb1c23a 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/BUILD
@@ -12,10 +12,11 @@
name = "server",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/starlarkdebug/proto:starlark_debugging_java_proto",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebugEventHelper.java b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebugEventHelper.java
index 9a2cc9e..c2da173 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebugEventHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebugEventHelper.java
@@ -32,13 +32,13 @@
import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos.ThreadContinuedEvent;
import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos.ThreadPausedEvent;
import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos.Value;
-import com.google.devtools.build.lib.syntax.Debug;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Debug;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.syntax.Location;
/**
* Helper class for constructing event or response protos to be sent from the debug server to a
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebuggerSerialization.java b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebuggerSerialization.java
index d11630b..c0f17d3 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebuggerSerialization.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebuggerSerialization.java
@@ -18,15 +18,15 @@
import com.google.common.collect.Ordering;
import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos;
import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos.Value;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Debug;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import java.lang.reflect.Array;
import java.util.Map;
import java.util.Set;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Debug;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkValue;
/** Helper class for creating {@link StarlarkDebuggingProtos.Value} from Starlark objects. */
final class DebuggerSerialization {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/StarlarkDebugServer.java b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/StarlarkDebugServer.java
index 8b19aa3..9283485 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/StarlarkDebugServer.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/StarlarkDebugServer.java
@@ -19,13 +19,13 @@
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos;
-import com.google.devtools.build.lib.syntax.Debug;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import java.io.IOException;
import java.net.ServerSocket;
import java.util.List;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Debug;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/** Manages the network socket and debugging state for threads running Starlark code. */
public final class StarlarkDebugServer implements Debug.Debugger {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/ThreadHandler.java b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/ThreadHandler.java
index fa86a7a..a47bdc3 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/ThreadHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/ThreadHandler.java
@@ -23,15 +23,6 @@
import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos.Error;
import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos.PauseReason;
import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos.Value;
-import com.google.devtools.build.lib.syntax.Debug;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.FileOptions;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.SyntaxError;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@@ -40,6 +31,15 @@
import java.util.concurrent.Semaphore;
import javax.annotation.Nullable;
import javax.annotation.concurrent.GuardedBy;
+import net.starlark.java.eval.Debug;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.FileOptions;
+import net.starlark.java.syntax.Location;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.SyntaxError;
/** Handles all thread-related state and debugging tasks. */
final class ThreadHandler {
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Argument.java b/src/main/java/com/google/devtools/build/lib/syntax/Argument.java
deleted file mode 100644
index b80a2fe..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Argument.java
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Preconditions;
-import javax.annotation.Nullable;
-
-/**
- * Syntax node for an argument to a function.
- *
- * <p>Arguments may be of four forms, as in {@code f(expr, id=expr, *expr, **expr)}. These are
- * represented by the subclasses Positional, Keyword, Star, and StarStar.
- */
-public abstract class Argument extends Node {
-
- protected final Expression value;
-
- Argument(FileLocations locs, Expression value) {
- super(locs);
- this.value = Preconditions.checkNotNull(value);
- }
-
- public final Expression getValue() {
- return value;
- }
-
- @Override
- public int getEndOffset() {
- return value.getEndOffset();
- }
-
- /** Return the name of this argument's parameter, or null if it is not a Keyword argument. */
- @Nullable
- public String getName() {
- return null;
- }
-
- /** Syntax node for a positional argument, {@code f(expr)}. */
- public static final class Positional extends Argument {
- Positional(FileLocations locs, Expression value) {
- super(locs, value);
- }
-
- @Override
- public int getStartOffset() {
- return value.getStartOffset();
- }
- }
-
- /** Syntax node for a keyword argument, {@code f(id=expr)}. */
- public static final class Keyword extends Argument {
-
- // Unlike in Python, keyword arguments in Bazel BUILD files
- // are about 10x more numerous than positional arguments.
-
- final Identifier id;
-
- Keyword(FileLocations locs, Identifier id, Expression value) {
- super(locs, value);
- this.id = id;
- }
-
- public Identifier getIdentifier() {
- return id;
- }
-
- @Override
- public String getName() {
- return id.getName();
- }
-
- @Override
- public int getStartOffset() {
- return id.getStartOffset();
- }
- }
-
- /** Syntax node for an argument of the form {@code f(*expr)}. */
- public static final class Star extends Argument {
- private final int starOffset;
-
- Star(FileLocations locs, int starOffset, Expression value) {
- super(locs, value);
- this.starOffset = starOffset;
- }
-
- @Override
- public int getStartOffset() {
- return starOffset;
- }
- }
-
- /** Syntax node for an argument of the form {@code f(**expr)}. */
- public static final class StarStar extends Argument {
- private final int starStarOffset;
-
- StarStar(FileLocations locs, int starStarOffset, Expression value) {
- super(locs, value);
- this.starStarOffset = starStarOffset;
- }
-
- @Override
- public int getStartOffset() {
- return starStarOffset;
- }
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/AssignmentStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/AssignmentStatement.java
deleted file mode 100644
index edefa52..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/AssignmentStatement.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import javax.annotation.Nullable;
-
-/**
- * Syntax node for an assignment statement ({@code lhs = rhs}) or augmented assignment statement
- * ({@code lhs op= rhs}).
- */
-public final class AssignmentStatement extends Statement {
-
- private final Expression lhs; // = IDENTIFIER | DOT | INDEX | LIST_EXPR
- @Nullable private final TokenKind op; // TODO(adonovan): make this mandatory even when '='.
- private final int opOffset;
- private final Expression rhs;
-
- /**
- * Constructs an assignment statement. For an ordinary assignment ({@code op == null}), the LHS
- * expression must be of the form {@code id}, {@code x.y}, {@code x[i]}, {@code [e, ...]}, or
- * {@code (e, ...)}, where x, i, and e are arbitrary expressions. For an augmented assignment, the
- * list and tuple forms are disallowed.
- */
- AssignmentStatement(
- FileLocations locs, Expression lhs, @Nullable TokenKind op, int opOffset, Expression rhs) {
- super(locs);
- this.lhs = lhs;
- this.op = op;
- this.opOffset = opOffset;
- this.rhs = rhs;
- }
-
- /** Returns the LHS of the assignment. */
- public Expression getLHS() {
- return lhs;
- }
-
- /** Returns the operator of an augmented assignment, or null for an ordinary assignment. */
- @Nullable
- public TokenKind getOperator() {
- return op;
- }
-
- /** Returns the location of the assignment operator. */
- public Location getOperatorLocation() {
- return locs.getLocation(opOffset);
- }
-
- @Override
- public int getStartOffset() {
- return lhs.getStartOffset();
- }
-
- @Override
- public int getEndOffset() {
- return rhs.getEndOffset();
- }
-
- /** Reports whether this is an augmented assignment ({@code getOperator() != null}). */
- public boolean isAugmented() {
- return op != null;
- }
-
- /** Returns the RHS of the assignment. */
- public Expression getRHS() {
- return rhs;
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.ASSIGNMENT;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BUILD b/src/main/java/com/google/devtools/build/lib/syntax/BUILD
index d6ff212..e77778c 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/syntax/BUILD
@@ -1,178 +1,7 @@
-# Description: Bazel's Starlark interpreter
-#
-# This BUILD file defines two java_library rules that
-# define a single Java package in two parts,
-# the Starlark parser and evaluator.
-# Eventually the Java package will be split in two,
-# but splitting only the build rules helps enforce
-# that only evaluator -> frontend dependencies are permitted,
-# without the churn to clients of renaming classes one at a time
-# as they move between two different Java packages.
-#
-# Until the split, clients should depend only on
-# //third_party/bazel/src/main/java/com/google/devtools/build/lib:syntax,
-# which is a facade for the complete package.
-
-load("@rules_java//java:defs.bzl", "java_library")
-
-package(default_visibility = ["//src:__subpackages__"])
-
-licenses(["notice"]) # Apache 2.0
+licenses(["notice"])
filegroup(
name = "srcs",
- srcs = glob(["**"]),
+ srcs = ["BUILD"],
visibility = ["//src/main/java/com/google/devtools/build/lib:__pkg__"],
)
-
-# The Starlark frontend (syntax, scanner, parser, resolver)
-java_library(
- name = "frontend",
- srcs = [
- "Argument.java",
- "AssignmentStatement.java",
- "BinaryOperatorExpression.java",
- "CallExpression.java",
- "Comment.java",
- "Comprehension.java",
- "ConditionalExpression.java",
- "DefStatement.java",
- "DictExpression.java",
- "DotExpression.java",
- "Expression.java",
- "ExpressionStatement.java",
- "FileLocations.java",
- "FileOptions.java",
- "FlowStatement.java",
- "ForStatement.java",
- "Identifier.java",
- "IfStatement.java",
- "IndexExpression.java",
- "IntegerLiteral.java",
- "Lexer.java",
- "ListExpression.java",
- "LoadStatement.java",
- "Location.java",
- "Node.java",
- "NodePrinter.java",
- "NodeVisitor.java",
- "Parameter.java",
- "Parser.java",
- "ParserInput.java",
- "Program.java",
- "Resolver.java",
- "ReturnStatement.java",
- "SliceExpression.java",
- "StarlarkFile.java",
- "Statement.java",
- "StringLiteral.java",
- "SyntaxError.java",
- "TokenKind.java",
- "UnaryOperatorExpression.java",
- ],
- deps = [
- # Do not add Bazel or Google dependencies here!
- "//src/main/java/net/starlark/java/spelling",
- "//third_party:auto_value",
- "//third_party:guava",
- "//third_party:jsr305",
- ],
-)
-
-# The Starlark evaluator
-java_library(
- name = "evaluator",
- srcs = [
- "BuiltinCallable.java",
- "CallUtils.java",
- "ClassObject.java",
- "CpuProfiler.java",
- "Debug.java",
- "Dict.java",
- "Eval.java",
- "EvalException.java",
- "EvalUtils.java",
- "FlagGuardedValue.java",
- "FormatParser.java",
- "HasBinary.java",
- "JNI.java",
- "MethodDescriptor.java",
- "MethodLibrary.java",
- "Module.java",
- "Mutability.java",
- "NoneType.java",
- "ParamDescriptor.java",
- "Printer.java",
- "RangeList.java",
- "Sequence.java",
- "Starlark.java",
- "StarlarkCallable.java",
- "StarlarkFunction.java",
- "StarlarkIndexable.java",
- "StarlarkIterable.java",
- "StarlarkList.java",
- "StarlarkSemantics.java",
- "StarlarkThread.java",
- "StarlarkValue.java",
- "StringModule.java",
- "Tuple.java",
- ],
- deps = [
- ":frontend",
- # Do not add Bazel or Google dependencies here!
- "//src/main/java/net/starlark/java/annot",
- "//src/main/java/net/starlark/java/spelling",
- "//third_party:auto_value",
- "//third_party:guava",
- "//third_party:jsr305",
- "//third_party/protobuf:protobuf_java",
- ],
-)
-
-# Dynamic library for Starlark CPU profiler.
-# The application or test must arrange for the library to be added
-# to the java.library.path directory (e.g. by 'java -Djava.library.path=<dir>').
-# What a mess.
-filegroup(
- name = "cpu_profiler",
- srcs = select({
- "//src/conditions:darwin": [":libcpu_profiler.dylib"],
- "//src/conditions:windows": [":cpu_profiler.dll"],
- "//conditions:default": [":libcpu_profiler.so"], # POSIX
- }),
-)
-
-genrule(
- name = "cpu_profiler_darwin",
- srcs = ["libcpu_profiler.so"],
- outs = ["libcpu_profiler.dylib"],
- cmd = "cp $< $@",
- visibility = ["//visibility:private"],
-)
-
-genrule(
- name = "cpu_profiler_windows",
- srcs = ["libcpu_profiler.so"],
- outs = ["cpu_profiler.dll"],
- cmd = "cp $< $@",
- visibility = ["//visibility:private"],
-)
-
-# The C++ portion of the Starlark CPU profiler.
-cc_binary(
- name = "libcpu_profiler.so",
- srcs = select({
- "//src/conditions:darwin": ["cpu_profiler_posix.cc"],
- # There is no config_setting for Linux.
- # See https://github.com/bazelbuild/bazel/issues/11107
- "//src/conditions:linux_aarch64": ["cpu_profiler_posix.cc"],
- "//src/conditions:linux_arm": ["cpu_profiler_posix.cc"],
- "//src/conditions:linux_ppc": ["cpu_profiler_posix.cc"],
- "//src/conditions:linux_s390x": ["cpu_profiler_posix.cc"],
- "//src/conditions:linux_x86_64": ["cpu_profiler_posix.cc"],
- "//conditions:default": ["cpu_profiler_unimpl.cc"],
- }),
- linkshared = 1,
- visibility = ["//visibility:private"],
- deps = ["@bazel_tools//tools/jdk:jni"],
-)
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java
deleted file mode 100644
index 066e908..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import java.util.EnumSet;
-
-/** A BinaryExpression represents a binary operator expression 'x op y'. */
-public final class BinaryOperatorExpression extends Expression {
-
- private final Expression x;
- private final TokenKind op; // one of 'operators'
- private final int opOffset;
- private final Expression y;
-
- /** operators is the set of valid binary operators. */
- public static final EnumSet<TokenKind> operators =
- EnumSet.of(
- TokenKind.AND,
- TokenKind.EQUALS_EQUALS,
- TokenKind.GREATER,
- TokenKind.GREATER_EQUALS,
- TokenKind.IN,
- TokenKind.LESS,
- TokenKind.LESS_EQUALS,
- TokenKind.MINUS,
- TokenKind.NOT_EQUALS,
- TokenKind.NOT_IN,
- TokenKind.OR,
- TokenKind.PERCENT,
- TokenKind.SLASH,
- TokenKind.SLASH_SLASH,
- TokenKind.PLUS,
- TokenKind.PIPE,
- TokenKind.STAR);
-
- BinaryOperatorExpression(
- FileLocations locs, Expression x, TokenKind op, int opOffset, Expression y) {
- super(locs);
- this.x = x;
- this.op = op;
- this.opOffset = opOffset;
- this.y = y;
- }
-
- /** Returns the left operand. */
- public Expression getX() {
- return x;
- }
-
- /** Returns the operator. */
- public TokenKind getOperator() {
- return op;
- }
-
- public Location getOperatorLocation() {
- return locs.getLocation(opOffset);
- }
-
- /** Returns the right operand. */
- public Expression getY() {
- return y;
- }
-
- @Override
- public int getStartOffset() {
- return x.getStartOffset();
- }
-
- @Override
- public int getEndOffset() {
- return y.getEndOffset();
- }
-
- @Override
- public String toString() {
- // This omits the parentheses for brevity, but is not correct in general due to operator
- // precedence rules.
- return x + " " + op + " " + y;
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.BINARY_OPERATOR;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BuiltinCallable.java b/src/main/java/com/google/devtools/build/lib/syntax/BuiltinCallable.java
deleted file mode 100644
index b5c7581..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/BuiltinCallable.java
+++ /dev/null
@@ -1,372 +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.syntax;
-
-import com.google.common.base.Joiner;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.List;
-import javax.annotation.Nullable;
-import net.starlark.java.annot.StarlarkMethod;
-import net.starlark.java.spelling.SpellChecker;
-
-/**
- * A BuiltinCallable is a callable Starlark value that reflectively invokes a
- * StarlarkMethod-annotated method of a Java object.
- */
-// TODO(adonovan): make this private. Most users would be content with StarlarkCallable; the rest
-// need only a means of querying the function's parameters.
-public final class BuiltinCallable implements StarlarkCallable {
-
- private final Object obj;
- private final String methodName;
- @Nullable private final MethodDescriptor desc;
-
- /**
- * Constructs a BuiltinCallable for a StarlarkCallable-annotated method of the given name (as seen
- * by Starlark, not Java).
- */
- // TODO(adonovan): eliminate calls to this constructor from tests; use getattr instead.
- BuiltinCallable(Object obj, String methodName) {
- this(obj, methodName, /*desc=*/ null);
- }
-
- /**
- * Constructs a BuiltinCallable for a StarlarkCallable-annotated method of the given name (as seen
- * by Starlark, not Java).
- *
- * <p>This constructor should be used only for ephemeral BuiltinCallable values created
- * transiently during a call such as {@code x.f()}, when the caller has already looked up the
- * MethodDescriptor using the same semantics as the thread that will be used in the call. Use the
- * other (slower) constructor if there is any possibility that the semantics of the {@code x.f}
- * operation differ from those of the thread used in the call.
- */
- BuiltinCallable(Object obj, String methodName, MethodDescriptor desc) {
- this.obj = obj;
- this.methodName = methodName;
- this.desc = desc;
- }
-
- @Override
- public Object fastcall(StarlarkThread thread, Object[] positional, Object[] named)
- throws EvalException, InterruptedException {
- MethodDescriptor desc =
- this.desc != null ? this.desc : getMethodDescriptor(thread.getSemantics());
- Preconditions.checkArgument(
- !desc.isStructField(),
- "struct field methods should be handled by DotExpression separately");
- Object[] vector = getArgumentVector(thread, desc, positional, named);
- return desc.call(
- obj instanceof String ? StringModule.INSTANCE : obj, vector, thread.mutability());
- }
-
- private MethodDescriptor getMethodDescriptor(StarlarkSemantics semantics) {
- return CallUtils.getAnnotatedMethod(semantics, obj.getClass(), methodName);
- }
-
- /**
- * Returns the StarlarkMethod annotation of this Starlark-callable Java method.
- *
- * @deprecated This method is intended only for docgen, and uses the default semantics.
- */
- @Deprecated
- public StarlarkMethod getAnnotation() {
- return getMethodDescriptor(StarlarkSemantics.DEFAULT).getAnnotation();
- }
-
- @Override
- public String getName() {
- return methodName;
- }
-
- @Override
- public void repr(Printer printer) {
- printer.append("<built-in function " + methodName + ">");
- }
-
- @Override
- public String toString() {
- return methodName;
- }
-
- /**
- * Converts the arguments of a Starlark call into the argument vector for a reflective call to a
- * StarlarkMethod-annotated Java method.
- *
- * @param thread the Starlark thread for the call
- * @param loc the location of the call expression, or BUILTIN for calls from Java
- * @param desc descriptor for the StarlarkCallable-annotated method
- * @param positional a list of positional arguments
- * @param named a list of named arguments, as alternating Strings/Objects. May contain dups.
- * @return the array of arguments which may be passed to {@link MethodDescriptor#call}
- * @throws EvalException if the given set of arguments are invalid for the given method. For
- * example, if any arguments are of unexpected type, or not all mandatory parameters are
- * specified by the user
- */
- private Object[] getArgumentVector(
- StarlarkThread thread,
- MethodDescriptor desc, // intentionally shadows this.desc
- Object[] positional,
- Object[] named)
- throws EvalException {
-
- // Overview of steps:
- // - allocate vector of actual arguments of correct size.
- // - process positional arguments, accumulating surplus ones into *args.
- // - process named arguments, accumulating surplus ones into **kwargs.
- // - set default values for missing optionals, and report missing mandatory parameters.
- // - set special parameters.
- // The static checks ensure that positional parameters appear before named,
- // and mandatory positionals appear before optional.
- // No additional memory allocation occurs in the common (success) case.
- // Flag-disabled parameters are skipped during argument matching, as if they do not exist. They
- // are instead assigned their flag-disabled values.
-
- ParamDescriptor[] parameters = desc.getParameters();
-
- // Allocate argument vector.
- int n = parameters.length;
- if (desc.acceptsExtraArgs()) {
- n++;
- }
- if (desc.acceptsExtraKwargs()) {
- n++;
- }
- if (desc.isUseStarlarkThread()) {
- n++;
- }
- Object[] vector = new Object[n];
-
- // positional arguments
- int paramIndex = 0;
- int argIndex = 0;
- if (obj instanceof String) {
- // String methods get the string as an extra argument
- // because their true receiver is StringModule.INSTANCE.
- vector[paramIndex++] = obj;
- }
- for (; argIndex < positional.length && paramIndex < parameters.length; paramIndex++) {
- ParamDescriptor param = parameters[paramIndex];
- if (!param.isPositional()) {
- break;
- }
-
- // disabled?
- if (param.disabledByFlag() != null) {
- // Skip disabled parameter as if not present at all.
- // The default value will be filled in below.
- continue;
- }
-
- Object value = positional[argIndex++];
- checkParamValue(param, value);
- vector[paramIndex] = value;
- }
-
- // *args
- Tuple<Object> varargs = null;
- if (desc.acceptsExtraArgs()) {
- varargs = Tuple.wrap(Arrays.copyOfRange(positional, argIndex, positional.length));
- } else if (argIndex < positional.length) {
- if (argIndex == 0) {
- throw Starlark.errorf("%s() got unexpected positional argument", methodName);
- } else {
- throw Starlark.errorf(
- "%s() accepts no more than %d positional argument%s but got %d",
- methodName, argIndex, plural(argIndex), positional.length);
- }
- }
-
- // named arguments
- LinkedHashMap<String, Object> kwargs = desc.acceptsExtraKwargs() ? new LinkedHashMap<>() : null;
- for (int i = 0; i < named.length; i += 2) {
- String name = (String) named[i]; // safe
- Object value = named[i + 1];
-
- // look up parameter
- int index = desc.getParameterIndex(name);
- // unknown parameter?
- if (index < 0) {
- // spill to **kwargs
- if (kwargs == null) {
- List<String> allNames =
- Arrays.stream(parameters)
- .map(ParamDescriptor::getName)
- .collect(ImmutableList.toImmutableList());
- throw Starlark.errorf(
- "%s() got unexpected keyword argument '%s'%s",
- methodName, name, SpellChecker.didYouMean(name, allNames));
- }
-
- // duplicate named argument?
- if (kwargs.put(name, value) != null) {
- throw Starlark.errorf(
- "%s() got multiple values for keyword argument '%s'", methodName, name);
- }
- continue;
- }
- ParamDescriptor param = parameters[index];
-
- // positional-only param?
- if (!param.isNamed()) {
- // spill to **kwargs
- if (kwargs == null) {
- throw Starlark.errorf(
- "%s() got named argument for positional-only parameter '%s'", methodName, name);
- }
-
- // duplicate named argument?
- if (kwargs.put(name, value) != null) {
- throw Starlark.errorf(
- "%s() got multiple values for keyword argument '%s'", methodName, name);
- }
- continue;
- }
-
- // disabled?
- String flag = param.disabledByFlag();
- if (flag != null) {
- // spill to **kwargs
- if (kwargs == null) {
- throw Starlark.errorf(
- "in call to %s(), parameter '%s' is %s",
- methodName, param.getName(), disabled(flag, thread.getSemantics()));
- }
-
- // duplicate named argument?
- if (kwargs.put(name, value) != null) {
- throw Starlark.errorf(
- "%s() got multiple values for keyword argument '%s'", methodName, name);
- }
- continue;
- }
-
- checkParamValue(param, value);
-
- // duplicate?
- if (vector[index] != null) {
- throw Starlark.errorf("%s() got multiple values for argument '%s'", methodName, name);
- }
-
- vector[index] = value;
- }
-
- // Set default values for missing parameters,
- // and report any that are still missing.
- List<String> missingPositional = null;
- List<String> missingNamed = null;
- for (int i = 0; i < parameters.length; i++) {
- if (vector[i] == null) {
- ParamDescriptor param = parameters[i];
- vector[i] = param.getDefaultValue();
- if (vector[i] == null) {
- if (param.isPositional()) {
- if (missingPositional == null) {
- missingPositional = new ArrayList<>();
- }
- missingPositional.add(param.getName());
- } else {
- if (missingNamed == null) {
- missingNamed = new ArrayList<>();
- }
- missingNamed.add(param.getName());
- }
- }
- }
- }
- if (missingPositional != null) {
- throw Starlark.errorf(
- "%s() missing %d required positional argument%s: %s",
- methodName,
- missingPositional.size(),
- plural(missingPositional.size()),
- Joiner.on(", ").join(missingPositional));
- }
- if (missingNamed != null) {
- throw Starlark.errorf(
- "%s() missing %d required named argument%s: %s",
- methodName,
- missingNamed.size(),
- plural(missingNamed.size()),
- Joiner.on(", ").join(missingNamed));
- }
-
- // special parameters
- int i = parameters.length;
- if (desc.acceptsExtraArgs()) {
- vector[i++] = varargs;
- }
- if (desc.acceptsExtraKwargs()) {
- vector[i++] = Dict.wrap(thread.mutability(), kwargs);
- }
- if (desc.isUseStarlarkThread()) {
- vector[i++] = thread;
- }
-
- return vector;
- }
-
- private static String plural(int n) {
- return n == 1 ? "" : "s";
- }
-
- private void checkParamValue(ParamDescriptor param, Object value) throws EvalException {
- // Value must belong to one of the specified classes.
- boolean ok = false;
- for (Class<?> cls : param.getAllowedClasses()) {
- if (cls.isInstance(value)) {
- ok = true;
- break;
- }
- }
- if (!ok) {
- throw Starlark.errorf(
- "in call to %s(), parameter '%s' got value of type '%s', want '%s'",
- methodName, param.getName(), Starlark.type(value), param.getTypeErrorMessage());
- }
-
- // None is valid if and only if the parameter is marked noneable,
- // in which case the above check passes as the list of classes will include NoneType.
- // The reason for this check is to ensure that merely having type=Object.class
- // does not allow None as an argument value; I'm not sure why, that but that's the
- // historical behavior.
- //
- // We do this check second because the first check prints a better error
- // that enumerates the allowed types.
- if (value == Starlark.NONE && !param.isNoneable()) {
- throw Starlark.errorf(
- "in call to %s(), parameter '%s' cannot be None", methodName, param.getName());
- }
- }
-
- // Returns a phrase meaning "disabled" appropriate to the specified flag.
- private static String disabled(String flag, StarlarkSemantics semantics) {
- // If the flag is True, it must be a deprecation flag. Otherwise it's an experimental flag.
- // TODO(adonovan): is that assumption sound?
- if (semantics.getBool(flag)) {
- return String.format(
- "deprecated and will be removed soon. It may be temporarily re-enabled by setting"
- + " --%s=false",
- flag.substring(1)); // remove [+-] prefix
- } else {
- return String.format(
- "experimental and thus unavailable with the current flags. It may be enabled by setting"
- + " --%s",
- flag.substring(1)); // remove [+-] prefix
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/CallExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/CallExpression.java
deleted file mode 100644
index 128bd5f..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/CallExpression.java
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-
-/** Syntax node for a function call expression. */
-public final class CallExpression extends Expression {
-
- private final Expression function;
- private final Location lparenLocation;
- private final ImmutableList<Argument> arguments;
- private final int rparenOffset;
-
- private final int numPositionalArgs;
-
- CallExpression(
- FileLocations locs,
- Expression function,
- Location lparenLocation,
- ImmutableList<Argument> arguments,
- int rparenOffset) {
- super(locs);
- this.function = Preconditions.checkNotNull(function);
- this.lparenLocation = lparenLocation;
- this.arguments = arguments;
- this.rparenOffset = rparenOffset;
-
- int n = 0;
- for (Argument arg : arguments) {
- if (arg instanceof Argument.Positional) {
- n++;
- }
- }
- this.numPositionalArgs = n;
- }
-
- /** Returns the function that is called. */
- public Expression getFunction() {
- return this.function;
- }
-
- /** Returns the number of arguments of type {@code Argument.Positional}. */
- public int getNumPositionalArguments() {
- return numPositionalArgs;
- }
-
- /** Returns the function arguments. */
- public ImmutableList<Argument> getArguments() {
- return arguments;
- }
-
- @Override
- public int getStartOffset() {
- return function.getStartOffset();
- }
-
- @Override
- public int getEndOffset() {
- return rparenOffset + 1;
- }
-
- public Location getLparenLocation() {
- // Unlike all other getXXXLocation methods, this one returns a reference to
- // a previously materialized Location. getLparenLocation is unique among
- // locations because the tree-walking evaluator needs it frequently even
- // in the absence of errors. When we switch to a compiled representation
- // we can dispense with this optimization.
- return lparenLocation;
- }
-
- @Override
- public String toString() {
- StringBuilder buf = new StringBuilder();
- buf.append(function);
- buf.append('(');
- ListExpression.appendNodes(buf, arguments);
- buf.append(')');
- return buf.toString();
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.CALL;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/CallUtils.java b/src/main/java/com/google/devtools/build/lib/syntax/CallUtils.java
deleted file mode 100644
index 4398edf..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/CallUtils.java
+++ /dev/null
@@ -1,212 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import javax.annotation.Nullable;
-import net.starlark.java.annot.StarlarkInterfaceUtils;
-import net.starlark.java.annot.StarlarkMethod;
-
-/** Helper functions for StarlarkMethod-annotated fields and methods. */
-final class CallUtils {
-
- private CallUtils() {} // uninstantiable
-
- private static CacheValue getCacheValue(Class<?> cls, StarlarkSemantics semantics) {
- if (cls == String.class) {
- cls = StringModule.class;
- }
- Key key = new Key(cls, semantics);
-
- // Speculatively call `get` because `computeIfAbsent` is more expensive
- // even when the map already contains a value (common case).
- CacheValue cacheValue = cache.get(key);
- if (cacheValue == null) {
- cacheValue = cache.computeIfAbsent(key, CallUtils::buildCacheValue);
- }
- return cacheValue;
- }
-
- // Key is a simple Pair<Class, StarlarkSemantics>.
- private static final class Key {
- final Class<?> cls;
- final StarlarkSemantics semantics;
-
- Key(Class<?> cls, StarlarkSemantics semantics) {
- this.cls = cls;
- this.semantics = semantics;
- }
-
- @Override
- public boolean equals(Object that) {
- return this == that
- || (that instanceof Key
- && this.cls.equals(((Key) that).cls)
- && this.semantics.equals(((Key) that).semantics));
- }
-
- @Override
- public int hashCode() {
- return 31 * cls.hashCode() + semantics.hashCode();
- }
- }
-
- // Information derived from a StarlarkMethod-annotated class and a StarlarkSemantics.
- // methods is a superset of fields.
- private static class CacheValue {
- @Nullable MethodDescriptor selfCall;
- ImmutableMap<String, MethodDescriptor> fields; // sorted by Java method name
- ImmutableMap<String, MethodDescriptor> methods; // sorted by Java method name
- }
-
- // A cache of information derived from a StarlarkMethod-annotated class and a StarlarkSemantics.
- private static final ConcurrentHashMap<Key, CacheValue> cache = new ConcurrentHashMap<>();
-
- private static CacheValue buildCacheValue(Key key) {
- MethodDescriptor selfCall = null;
- ImmutableMap.Builder<String, MethodDescriptor> methods = ImmutableMap.builder();
- Map<String, MethodDescriptor> fields = new HashMap<>();
-
- // Sort methods by Java name, for determinism.
- Method[] classMethods = key.cls.getMethods();
- Arrays.sort(classMethods, Comparator.comparing(Method::getName));
- for (Method method : classMethods) {
- // Synthetic methods lead to false multiple matches
- if (method.isSynthetic()) {
- continue;
- }
-
- // annotated?
- StarlarkMethod callable = StarlarkInterfaceUtils.getStarlarkMethod(method);
- if (callable == null) {
- continue;
- }
-
- // enabled by semantics?
- if (!key.semantics.isFeatureEnabledBasedOnTogglingFlags(
- callable.enableOnlyWithFlag(), callable.disableWithFlag())) {
- continue;
- }
-
- MethodDescriptor descriptor = MethodDescriptor.of(method, callable, key.semantics);
-
- // self-call method?
- if (callable.selfCall()) {
- if (selfCall != null) {
- throw new IllegalArgumentException(
- String.format("Class %s has two selfCall methods defined", key.cls.getName()));
- }
- selfCall = descriptor;
- continue;
- }
-
- // regular method
- methods.put(callable.name(), descriptor);
-
- // field method?
- if (descriptor.isStructField() && fields.put(callable.name(), descriptor) != null) {
- // TODO(b/72113542): Validate with annotation processor instead of at runtime.
- throw new IllegalArgumentException(
- String.format(
- "Class %s declares two structField methods named %s",
- key.cls.getName(), callable.name()));
- }
- }
-
- CacheValue value = new CacheValue();
- value.selfCall = selfCall;
- value.methods = methods.build();
- value.fields = ImmutableMap.copyOf(fields);
- return value;
- }
-
- /**
- * Returns a map of methods and corresponding StarlarkMethod annotations of the methods of the
- * objClass class reachable from Starlark. Elements are sorted by Java method name (which is not
- * necessarily the same as Starlark attribute name).
- */
- static ImmutableMap<Method, StarlarkMethod> getAnnotatedMethods(Class<?> objClass) {
- ImmutableMap.Builder<Method, StarlarkMethod> result = ImmutableMap.builder();
- for (MethodDescriptor desc :
- getCacheValue(objClass, StarlarkSemantics.DEFAULT).methods.values()) {
- result.put(desc.getMethod(), desc.getAnnotation());
- }
- return result.build();
- }
-
- /**
- * Returns the value of the Starlark field of {@code x}, implemented by a Java method with a
- * {@code StarlarkMethod(structField=true)} annotation.
- */
- static Object getAnnotatedField(StarlarkSemantics semantics, Object x, String fieldName)
- throws EvalException, InterruptedException {
- MethodDescriptor desc = getCacheValue(x.getClass(), semantics).fields.get(fieldName);
- if (desc == null) {
- throw Starlark.errorf("value of type %s has no .%s field", Starlark.type(x), fieldName);
- }
- return desc.callField(x, semantics, /*mu=*/ null);
- }
-
- /** Returns the names of the Starlark fields of {@code x} under the specified semantics. */
- static ImmutableSet<String> getAnnotatedFieldNames(StarlarkSemantics semantics, Object x) {
- return getCacheValue(x.getClass(), semantics).fields.keySet();
- }
-
- /** Returns the StarlarkMethod-annotated method of objClass with the given name. */
- static MethodDescriptor getAnnotatedMethod(
- StarlarkSemantics semantics, Class<?> objClass, String methodName) {
- return getCacheValue(objClass, semantics).methods.get(methodName);
- }
-
- /**
- * Returns a set of the Starlark name of all Starlark callable methods for object of type {@code
- * objClass}.
- */
- static ImmutableSet<String> getAnnotatedMethodNames(
- StarlarkSemantics semantics, Class<?> objClass) {
- return getCacheValue(objClass, semantics).methods.keySet();
- }
-
- /**
- * Returns a {@link MethodDescriptor} object representing a function which calls the selfCall java
- * method of the given object (the {@link StarlarkMethod} method with {@link
- * StarlarkMethod#selfCall()} set to true). Returns null if no such method exists.
- */
- @Nullable
- static MethodDescriptor getSelfCallMethodDescriptor(
- StarlarkSemantics semantics, Class<?> objClass) {
- return getCacheValue(objClass, semantics).selfCall;
- }
-
- /**
- * Returns a {@code selfCall=true} method for the given class under the given Starlark semantics,
- * or null if no such method exists.
- */
- @Nullable
- static Method getSelfCallMethod(StarlarkSemantics semantics, Class<?> objClass) {
- MethodDescriptor descriptor = getCacheValue(objClass, semantics).selfCall;
- if (descriptor == null) {
- return null;
- }
- return descriptor.getMethod();
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ClassObject.java b/src/main/java/com/google/devtools/build/lib/syntax/ClassObject.java
deleted file mode 100644
index 8db641f..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ClassObject.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.collect.ImmutableCollection;
-import javax.annotation.Nullable;
-
-/** An interface for Starlark values (such as structs) that have fields. */
-// TODO(adonovan): rename "HasFields".
-public interface ClassObject extends StarlarkValue {
-
- /**
- * Returns the value of the field with the given name, or null if the field does not exist. The
- * interpreter (Starlark code) calls the getValue below, which has access to StarlarkSemantics.
- *
- * <p>The set of names for which {@code getValue} returns non-null should match {@code
- * getFieldNames} if possible.
- *
- * @throws EvalException if a user-visible error occurs (other than non-existent field).
- */
- // TODO(adonovan): rename "getField".
- @Nullable
- Object getValue(String name) throws EvalException;
-
- /**
- * Returns the value of the field with the given name, or null if the field does not exist. The
- * interpreter (Starlark code) calls this getValue, but client code cannot be relied upon to do
- * so, so any checks done on the semantics are incompletely enforced.
- *
- * @param semantics the Starlark semantics, which determine the available fields
- * @param name the name of the field to retrieve
- * @throws EvalException if the field exists but could not be retrieved
- */
- @Nullable
- default Object getValue(StarlarkSemantics semantics, String name) throws EvalException {
- return this.getValue(name);
- }
-
- /**
- * Returns the names of this value's fields, in some undefined but stable order.
- *
- * <p>A call to {@code getValue} for each of these names should return non-null, though this is
- * not enforced.
- *
- * <p>The Starlark expression {@code dir(x)} reports the union of {@code getFieldNames()} and any
- * StarlarkMethod-annotated fields and methods of this value.
- */
- ImmutableCollection<String> getFieldNames();
-
- /**
- * Returns the error message to print for an attempt to access an undefined field.
- *
- * <p>May return null to use a default error message.
- */
- @Nullable
- String getErrorMessageForUnknownField(String field);
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Comment.java b/src/main/java/com/google/devtools/build/lib/syntax/Comment.java
deleted file mode 100644
index 2af98f9..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Comment.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2014 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.syntax;
-
-
-/** Syntax node for comments. */
-public final class Comment extends Node {
-
- private final int offset;
- private final String text;
-
- Comment(FileLocations locs, int offset, String text) {
- super(locs);
- this.offset = offset;
- this.text = text;
- }
-
- /** Returns the text of the comment, including the leading '#' but not the trailing newline. */
- public String getText() {
- return text;
- }
-
- @Override
- public int getStartOffset() {
- return offset;
- }
-
- @Override
- public int getEndOffset() {
- return offset + text.length();
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public String toString() {
- return text;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Comprehension.java b/src/main/java/com/google/devtools/build/lib/syntax/Comprehension.java
deleted file mode 100644
index 3444930..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Comprehension.java
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.collect.ImmutableList;
-
-/**
- * Syntax node for list and dict comprehensions.
- *
- * <p>A comprehension contains one or more clauses, e.g. [a+d for a in b if c for d in e] contains
- * three clauses: "for a in b", "if c", "for d in e". For and If clauses can happen in any order,
- * except that the first one has to be a For.
- *
- * <p>The code above can be expanded as:
- *
- * <pre>
- * for a in b:
- * if c:
- * for d in e:
- * result.append(a+d)
- * </pre>
- *
- * result is initialized to [] (list) or {} (dict) and is the return value of the whole expression.
- */
-public final class Comprehension extends Expression {
-
- /** For or If */
- public abstract static class Clause extends Node {
- Clause(FileLocations locs) {
- super(locs);
- }
- }
-
- /** A for clause in a comprehension, e.g. "for a in b" in the example above. */
- public static final class For extends Clause {
- private final int forOffset;
- private final Expression vars;
- private final Expression iterable;
-
- For(FileLocations locs, int forOffset, Expression vars, Expression iterable) {
- super(locs);
- this.forOffset = forOffset;
- this.vars = vars;
- this.iterable = iterable;
- }
-
- public Expression getVars() {
- return vars;
- }
-
- public Expression getIterable() {
- return iterable;
- }
-
- @Override
- public int getStartOffset() {
- return forOffset;
- }
-
- @Override
- public int getEndOffset() {
- return iterable.getEndOffset();
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
- }
-
- /** A if clause in a comprehension, e.g. "if c" in the example above. */
- public static final class If extends Clause {
- private final int ifOffset;
- private final Expression condition;
-
- If(FileLocations locs, int ifOffset, Expression condition) {
- super(locs);
- this.ifOffset = ifOffset;
- this.condition = condition;
- }
-
- public Expression getCondition() {
- return condition;
- }
-
- @Override
- public int getStartOffset() {
- return ifOffset;
- }
-
- @Override
- public int getEndOffset() {
- return condition.getEndOffset();
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
- }
-
- private final boolean isDict; // {k: v for vars in iterable}
- private final int lbracketOffset;
- private final Node body; // Expression or DictExpression.Entry
- private final ImmutableList<Clause> clauses;
- private final int rbracketOffset;
-
- Comprehension(
- FileLocations locs,
- boolean isDict,
- int lbracketOffset,
- Node body,
- ImmutableList<Clause> clauses,
- int rbracketOffset) {
- super(locs);
- this.isDict = isDict;
- this.lbracketOffset = lbracketOffset;
- this.body = body;
- this.clauses = clauses;
- this.rbracketOffset = rbracketOffset;
- }
-
- public boolean isDict() {
- return isDict;
- }
-
- /**
- * Returns the loop body: an expression for a list comprehension, or a DictExpression.Entry for a
- * dict comprehension.
- */
- public Node getBody() {
- return body;
- }
-
- public ImmutableList<Clause> getClauses() {
- return clauses;
- }
-
- @Override
- public int getStartOffset() {
- return lbracketOffset;
- }
-
- @Override
- public int getEndOffset() {
- return rbracketOffset + 1;
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.COMPREHENSION;
- }
-
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ConditionalExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/ConditionalExpression.java
deleted file mode 100644
index 973eedc..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ConditionalExpression.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2014 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.syntax;
-
-/** Syntax node for an expression of the form {@code t if cond else f}. */
-public final class ConditionalExpression extends Expression {
-
- private final Expression t;
- private final Expression cond;
- private final Expression f;
-
- public Expression getThenCase() {
- return t;
- }
-
- public Expression getCondition() {
- return cond;
- }
-
- public Expression getElseCase() {
- return f;
- }
-
- /** Constructor for a conditional expression */
- ConditionalExpression(FileLocations locs, Expression t, Expression cond, Expression f) {
- super(locs);
- this.t = t;
- this.cond = cond;
- this.f = f;
- }
-
- @Override
- public int getStartOffset() {
- return t.getStartOffset();
- }
-
- @Override
- public int getEndOffset() {
- return f.getEndOffset();
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.CONDITIONAL;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/CpuProfiler.java b/src/main/java/com/google/devtools/build/lib/syntax/CpuProfiler.java
deleted file mode 100644
index be836a4..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/CpuProfiler.java
+++ /dev/null
@@ -1,450 +0,0 @@
-// Copyright 2020 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.syntax;
-
-import com.google.common.collect.ImmutableList;
-import com.google.protobuf.CodedOutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.time.Duration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.zip.GZIPOutputStream;
-import javax.annotation.Nullable;
-
-// Overview
-//
-// A CPU profiler measures CPU cycles consumed by each thread.
-// It does not account for time a thread is blocked in I/O
-// (e.g. within a call to glob), or runnable but not actually
-// running, as happens when there are more runnable threads than cores.
-//
-// CPU profiling requires operating system support.
-// On POSIX systems, the setitimer system call causes
-// the kernel to signal an application periodically.
-// With the ITIMER_PROF option, setitimer delivers a
-// SIGPROF signal to a running thread each time its CPU usage
-// exceeds the specific quantum. A profiler builds a histogram
-// of these these signals, grouped by the current program
-// counter location, or more usefully by the complete stack of
-// program counter locations.
-//
-// This profiler calls a C++ function to install a SIGPROF handler.
-// Like all handlers for asynchronous signals (that is, signals not
-// caused by the execution of program instructions), it is extremely
-// constrained in what it may do. It cannot acquire locks, allocate
-// memory, or interact with the JVM in any way. Our signal handler
-// simply sends a message into a global pipe; the message records
-// the operating system's identifier (tid) for the signalled thread.
-//
-// Reading from the other end of the pipe is a Java thread, the router.
-// Its job is to map each OS tid to a StarlarkThread, if the
-// thread is currently executing Starlark code, and increment
-// a volatile counter in that StarlarkThread. If the thread is
-// not executing Starlark code, the router discards the event.
-// When a Starlark thread enters or leaves a function during profiling,
-// it updates the StarlarkThread-to-OS-thread mapping consulted by the
-// router.
-//
-// If the router does not drain the pipe in a timely manner (on the
-// order of 10s; see signal handler), the signal handler prints a
-// warning and discards the event.
-//
-// The router may induce a delay between the kernel signal and the
-// thread's stack sampling, during which Starlark execution may have
-// moved on to another function. Assuming uniform delay, this is
-// equivalent to shifting the phase but not the frequency of CPU ticks.
-// Nonetheless it may bias the profile because, for example,
-// it would cause a Starlark 'sleep' function to accrue a nonzero
-// number of CPU ticks that properly belong to the preceding computation.
-//
-// When a Starlark thread leaves any function, it reads and clears
-// its counter of CPU ticks. If the counter was nonzero, the thread
-// writes a copy of its stack to the profiler log in pprof form,
-// which is a gzip-compressed stream of protocol messages.
-//
-// The profiler is inherently global to the process,
-// and records the effects of all Starlark threads.
-// It may be started and stopped concurrent with Starlark execution,
-// allowing profiling of a portion of a long-running computation.
-
-/** A CPU profiler for Starlark (POSIX only for now). */
-final class CpuProfiler {
-
- static {
- JNI.load();
- }
-
- private final PprofWriter pprof;
-
- private CpuProfiler(OutputStream out, Duration period) {
- this.pprof = new PprofWriter(out, period);
- }
-
- // The active profiler, if any.
- @Nullable private static volatile CpuProfiler instance;
-
- /** Returns the active profiler, or null if inactive. */
- @Nullable
- static CpuProfiler get() {
- return instance;
- }
-
- // Maps OS thread ID to StarlarkThread.
- // The StarlarkThread is needed only for its cpuTicks field.
- private static final Map<Integer, StarlarkThread> threads = new ConcurrentHashMap<>();
-
- /**
- * Associates the specified StarlarkThread with the current OS thread. Returns the StarlarkThread
- * previously associated with it, if any.
- */
- @Nullable
- static StarlarkThread setStarlarkThread(StarlarkThread thread) {
- if (thread == null) {
- return threads.remove(gettid());
- } else {
- return threads.put(gettid(), thread);
- }
- }
-
- /** Start the profiler. */
- static void start(OutputStream out, Duration period) {
- if (!supported()) {
- throw new UnsupportedOperationException("this platform does not support Starlark profiling");
- }
- if (instance != null) {
- throw new IllegalStateException("profiler started twice without intervening stop");
- }
-
- startRouter();
- if (!startTimer(period.toNanos() / 1000L)) {
- throw new IllegalStateException("profile signal handler already in use");
- }
-
- instance = new CpuProfiler(out, period);
- }
-
- /** Stop the profiler and wait for the log to be written. */
- static void stop() throws IOException {
- if (instance == null) {
- throw new IllegalStateException("stop without start");
- }
-
- CpuProfiler profiler = instance;
- instance = null;
-
- stopTimer();
-
- // Finish writing the file and fail if there were any I/O errors.
- profiler.pprof.writeEnd();
- }
-
- /** Records a profile event. */
- void addEvent(int ticks, ImmutableList<Debug.Frame> stack) {
- pprof.writeEvent(ticks, stack);
- }
-
- // ---- signal router ----
-
- private static FileInputStream pipe;
-
- // Starts the routing thread if not already started (idempotent).
- // On return, it is safe to install the signal handler.
- private static synchronized void startRouter() {
- if (pipe == null) {
- pipe = new FileInputStream(createPipe());
- Thread router = new Thread(CpuProfiler::router, "SIGPROF router");
- router.setDaemon(true);
- router.start();
- }
- }
-
- // The Router thread routes SIGPROF events (from the pipe)
- // to the relevant StarlarkThread. Once started, it runs forever.
- //
- // TODO(adonovan): opt: a more efficient implementation of routing would be
- // to use, instead of a pipe from the signal handler to the routing thread,
- // a mapping, maintained in C++, from OS thread ID to cpuTicks pointer.
- // The {add,remove}Thread operations would update this mapping,
- // and the signal handler would read it. The mapping would have to
- // be a lock-free hash table so that it can be safely read in an
- // async signal handler. The pointer would point to the sole element
- // of direct memory buffer belonging to the StarlarkThread, allocated
- // by JNI NewDirectByteBuffer.
- // In this way, the signal handler could update the StarlarkThread directly,
- // saving 100 write+read calls per second per core.
- //
- private static void router() {
- byte[] buf = new byte[4];
- while (true) {
- try {
- int n = pipe.read(buf);
- if (n < 0) {
- throw new IllegalStateException("pipe closed");
- }
- if (n != 4) {
- throw new IllegalStateException("short read");
- }
- } catch (IOException ex) {
- throw new IllegalStateException("unexpected I/O error", ex);
- }
-
- int tid = int32be(buf);
-
- // Record a CPU tick against tid.
- //
- // It's not safe to grab the thread's stack here because the thread
- // may be changing it, so we increment the thread's counter.
- // When the thread later observes the counter is non-zero,
- // it gives us the stack by calling addEvent.
- StarlarkThread thread = threads.get(tid);
- if (thread != null) {
- thread.cpuTicks.getAndIncrement();
- }
- }
- }
-
- // Decodes a signed 32-bit big-endian integer from b[0:4].
- private static int int32be(byte[] b) {
- return b[0] << 24 | (b[1] & 0xff) << 16 | (b[2] & 0xff) << 8 | (b[3] & 0xff);
- }
-
- // --- native code (see cpu_profiler) ---
-
- // Reports whether the profiler is supported on this platform.
- private static native boolean supported();
-
- // Returns the read end of a pipe from which profile events may be read.
- // Each event is an operating system thread ID encoded as uint32be.
- private static native FileDescriptor createPipe();
-
- // Starts the operating system's interval timer.
- // The period must be a positive number of microseconds.
- // Returns false if SIGPROF is already in use.
- private static native boolean startTimer(long periodMicros);
-
- // Stops the operating system's interval timer.
- private static native void stopTimer();
-
- // Returns the operating system's identifier for the calling thread.
- private static native int gettid();
-
- // Encoder for pprof format profiles.
- // See https://github.com/google/pprof/tree/master/proto
- // We encode the protocol messages by hand to avoid
- // adding a dependency on the protocol compiler.
- private static final class PprofWriter {
-
- private final Duration period;
- private final long startNano;
- private GZIPOutputStream gz;
- private CodedOutputStream enc;
- private IOException error; // the first write error, if any; reported during stop()
-
- PprofWriter(OutputStream out, Duration period) {
- this.period = period;
- this.startNano = System.nanoTime();
-
- try {
- this.gz = new GZIPOutputStream(out);
- this.enc = CodedOutputStream.newInstance(gz);
- getStringID(""); // entry 0 is always ""
-
- // dimension and unit
- ByteArrayOutputStream unit = new ByteArrayOutputStream();
- CodedOutputStream unitEnc = CodedOutputStream.newInstance(unit);
- unitEnc.writeInt64(VALUETYPE_TYPE, getStringID("CPU"));
- unitEnc.writeInt64(VALUETYPE_UNIT, getStringID("microseconds"));
- unitEnc.flush();
-
- // informational fields of Profile
- enc.writeByteArray(PROFILE_SAMPLE_TYPE, unit.toByteArray());
- // magnitude of sampling period:
- enc.writeInt64(PROFILE_PERIOD, period.toNanos() / 1000L);
- // dimension and unit of period:
- enc.writeByteArray(PROFILE_PERIOD_TYPE, unit.toByteArray());
- // start (real) time of profile:
- enc.writeInt64(PROFILE_TIME_NANOS, System.currentTimeMillis() * 1000000L);
- } catch (IOException ex) {
- this.error = ex;
- }
- }
-
- synchronized void writeEvent(int ticks, ImmutableList<Debug.Frame> stack) {
- if (this.error == null) {
- try {
- ByteArrayOutputStream sample = new ByteArrayOutputStream();
- CodedOutputStream sampleEnc = CodedOutputStream.newInstance(sample);
- sampleEnc.writeInt64(SAMPLE_VALUE, ticks * period.toNanos() / 1000L);
- for (Debug.Frame fr : stack.reverse()) {
- sampleEnc.writeUInt64(SAMPLE_LOCATION_ID, getLocationID(fr));
- }
- sampleEnc.flush();
- enc.writeByteArray(PROFILE_SAMPLE, sample.toByteArray());
- } catch (IOException ex) {
- this.error = ex;
- }
- }
- }
-
- synchronized void writeEnd() throws IOException {
- long endNano = System.nanoTime();
- try {
- enc.writeInt64(PROFILE_DURATION_NANOS, endNano - startNano);
- enc.flush();
- if (this.error != null) {
- throw this.error; // retained from an earlier error
- }
- } finally {
- gz.close();
- }
- }
-
- // Field numbers from pprof protocol.
- // See https://github.com/google/pprof/blob/master/proto/profile.proto
- private static final int PROFILE_SAMPLE_TYPE = 1; // repeated ValueType
- private static final int PROFILE_SAMPLE = 2; // repeated Sample
- private static final int PROFILE_MAPPING = 3; // repeated Mapping
- private static final int PROFILE_LOCATION = 4; // repeated Location
- private static final int PROFILE_FUNCTION = 5; // repeated Function
- private static final int PROFILE_STRING_TABLE = 6; // repeated string
- private static final int PROFILE_TIME_NANOS = 9; // int64
- private static final int PROFILE_DURATION_NANOS = 10; // int64
- private static final int PROFILE_PERIOD_TYPE = 11; // ValueType
- private static final int PROFILE_PERIOD = 12; // int64
- private static final int VALUETYPE_TYPE = 1; // int64
- private static final int VALUETYPE_UNIT = 2; // int64
- private static final int SAMPLE_LOCATION_ID = 1; // repeated uint64
- private static final int SAMPLE_VALUE = 2; // repeated int64
- private static final int SAMPLE_LABEL = 3; // repeated Label
- private static final int LABEL_KEY = 1; // int64
- private static final int LABEL_STR = 2; // int64
- private static final int LABEL_NUM = 3; // int64
- private static final int LABEL_NUM_UNIT = 4; // int64
- private static final int LOCATION_ID = 1; // uint64
- private static final int LOCATION_MAPPING_ID = 2; // uint64
- private static final int LOCATION_ADDRESS = 3; // uint64
- private static final int LOCATION_LINE = 4; // repeated Line
- private static final int LINE_FUNCTION_ID = 1; // uint64
- private static final int LINE_LINE = 2; // int64
- private static final int FUNCTION_ID = 1; // uint64
- private static final int FUNCTION_NAME = 2; // int64
- private static final int FUNCTION_SYSTEM_NAME = 3; // int64
- private static final int FUNCTION_FILENAME = 4; // int64
- private static final int FUNCTION_START_LINE = 5; // int64
-
- // Every string, function, and PC location is emitted once
- // and thereafter referred to by its identifier, a Long.
- private final Map<String, Long> stringIDs = new HashMap<>();
- private final Map<Long, Long> functionIDs = new HashMap<>(); // key is "address" of function
- private final Map<Long, Long> locationIDs = new HashMap<>(); // key is "address" of PC location
-
- // Returns the ID of the specified string,
- // emitting a pprof string record the first time it is encountered.
- private long getStringID(String s) throws IOException {
- Long i = stringIDs.putIfAbsent(s, Long.valueOf(stringIDs.size()));
- if (i == null) {
- enc.writeString(PROFILE_STRING_TABLE, s);
- return stringIDs.size() - 1L;
- }
- return i;
- }
-
- // Returns the ID of a StarlarkCallable for use in Line.FunctionId,
- // emitting a pprof Function record the first time fn is encountered.
- // The ID is the same as the function's logical address,
- // which is supplied by the caller to avoid the need to recompute it.
- private long getFunctionID(StarlarkCallable fn, long addr) throws IOException {
- Long id = functionIDs.get(addr);
- if (id == null) {
- id = addr;
-
- Location loc = fn.getLocation();
- String filename = loc.file(); // TODO(adonovan): make WORKSPACE-relative
- String name = fn.getName();
- if (name.equals("<toplevel>")) {
- name = filename;
- }
-
- long nameID = getStringID(name);
-
- ByteArrayOutputStream fun = new ByteArrayOutputStream();
- CodedOutputStream funEnc = CodedOutputStream.newInstance(fun);
- funEnc.writeUInt64(FUNCTION_ID, id);
- funEnc.writeInt64(FUNCTION_NAME, nameID);
- funEnc.writeInt64(FUNCTION_SYSTEM_NAME, nameID);
- funEnc.writeInt64(FUNCTION_FILENAME, getStringID(filename));
- funEnc.writeInt64(FUNCTION_START_LINE, (long) loc.line());
- funEnc.flush();
- enc.writeByteArray(PROFILE_FUNCTION, fun.toByteArray());
-
- functionIDs.put(addr, id);
- }
- return id;
- }
-
- // Returns the ID of the location denoted by fr,
- // emitting a pprof Location record the first time it is encountered.
- // For Starlark frames, this is the Frame pc.
- private long getLocationID(Debug.Frame fr) throws IOException {
- StarlarkCallable fn = fr.getFunction();
- // fnAddr identifies a function as a whole.
- int fnAddr = System.identityHashCode(fn); // very imperfect
-
- // pcAddr identifies the current program point.
- //
- // For now, this is the same as fnAddr, because
- // we don't track the syntax node currently being
- // evaluated. Statement-level profile information
- // in the leaf function (displayed by 'pprof list <fn>')
- // is thus unreliable for now.
- long pcAddr = fnAddr;
- if (fn instanceof StarlarkFunction) {
- // TODO(adonovan): when we use a byte code representation
- // of function bodies, mix the program counter fr.pc into fnAddr.
- // TODO(adonovan): even cleaner: treat each function's byte
- // code segment as its own Profile.Mapping, indexed by pc.
- //
- // pcAddr = (pcAddr << 16) ^ fr.pc;
- }
-
- Long id = locationIDs.get(pcAddr);
- if (id == null) {
- id = pcAddr;
-
- ByteArrayOutputStream line = new ByteArrayOutputStream();
- CodedOutputStream lineenc = CodedOutputStream.newInstance(line);
- lineenc.writeUInt64(LINE_FUNCTION_ID, getFunctionID(fn, fnAddr));
- lineenc.writeInt64(LINE_LINE, (long) fr.getLocation().line());
- lineenc.flush();
-
- ByteArrayOutputStream loc = new ByteArrayOutputStream();
- CodedOutputStream locenc = CodedOutputStream.newInstance(loc);
- locenc.writeUInt64(LOCATION_ID, id);
- locenc.writeUInt64(LOCATION_ADDRESS, pcAddr);
- locenc.writeByteArray(LOCATION_LINE, line.toByteArray());
- locenc.flush();
- enc.writeByteArray(PROFILE_LOCATION, loc.toByteArray());
-
- locationIDs.put(pcAddr, id);
- }
- return id;
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Debug.java b/src/main/java/com/google/devtools/build/lib/syntax/Debug.java
deleted file mode 100644
index c0c734c..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Debug.java
+++ /dev/null
@@ -1,175 +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.syntax;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.function.Predicate;
-import javax.annotation.Nullable;
-
-/** Debugger API. */
-// TODO(adonovan): move Debugger to Debug.Debugger.
-public final class Debug {
-
- /**
- * A simple interface for the Starlark interpreter to notify a debugger of events during
- * execution.
- */
- public interface Debugger {
- /** Notify the debugger that execution is at the point immediately before {@code loc}. */
- void before(StarlarkThread thread, Location loc);
-
- /** Notify the debugger that it will no longer receive events from the interpreter. */
- void close();
- }
-
- /** A Starlark value that can expose additional information to a debugger. */
- public interface ValueWithDebugAttributes extends StarlarkValue {
- /**
- * Returns a list of DebugAttribute of this value. For example, it can be the internal fields of
- * a value that are not accessible from Starlark, or the values inside a collection.
- */
- ImmutableList<DebugAttribute> getDebugAttributes();
- }
-
- /** A name/value pair used in the return value of getDebugAttributes. */
- public static final class DebugAttribute {
- public final String name;
- public final Object value; // a legal Starlark value
-
- public DebugAttribute(String name, Object value) {
- this.name = name;
- this.value = value;
- }
- }
-
- /** See stepControl */
- public interface ReadyToPause extends Predicate<StarlarkThread> {}
-
- /**
- * Describes the stepping behavior that should occur when execution of a thread is continued.
- * (Debugger API)
- */
- public enum Stepping {
- /** Continue execution without stepping. */
- NONE,
- /**
- * If the thread is paused on a statement that contains a function call, step into that
- * function. Otherwise, this is the same as OVER.
- */
- INTO,
- /**
- * Step over the current statement and any functions that it may call, stopping at the next
- * statement in the same frame. If no more statements are available in the current frame, same
- * as OUT.
- */
- OVER,
- /**
- * Continue execution until the current frame has been exited and then pause. If we are
- * currently in the outer-most frame, same as NONE.
- */
- OUT,
- }
-
- private Debug() {} // uninstantiable
-
- static final AtomicReference<Debugger> debugger = new AtomicReference<>();
-
- /**
- * Installs a global hook that causes subsequently executed Starlark threads to notify the
- * debugger of important events. Closes any previously set debugger. Call {@code
- * setDebugger(null)} to disable debugging.
- */
- public static void setDebugger(Debugger dbg) {
- Debugger prev = debugger.getAndSet(dbg);
- if (prev != null) {
- prev.close();
- }
- }
-
- /**
- * Returns a copy of the current stack of call frames, outermost call first.
- *
- * <p>This function is intended for use only when execution of {@code thread} is stopped, for
- * example at a breakpoint. The resulting DebugFrames should not be retained after execution of
- * the thread has resumed. Most clients should instead use {@link StarlarkThread#getCallStack}.
- */
- public static ImmutableList<Frame> getCallStack(StarlarkThread thread) {
- return thread.getDebugCallStack();
- }
-
- /**
- * Given a requested stepping behavior, returns a predicate over the context that tells the
- * debugger when to pause. (Debugger API)
- *
- * <p>The predicate will return true if we are at the next statement where execution should pause,
- * and it will return false if we are not yet at that statement. No guarantee is made about the
- * predicate's return value after we have reached the desired statement.
- *
- * <p>A null return value indicates that no further pausing should occur.
- */
- @Nullable
- public static Debug.ReadyToPause stepControl(StarlarkThread th, Debug.Stepping stepping) {
- final int depth = th.getCallStackSize();
- switch (stepping) {
- case NONE:
- return null;
- case INTO:
- // pause at the very next statement
- return thread -> true;
- case OVER:
- return thread -> thread.getCallStackSize() <= depth;
- case OUT:
- // if we're at the outermost frame, same as NONE
- return depth == 0 ? null : thread -> thread.getCallStackSize() < depth;
- }
- throw new IllegalArgumentException("Unsupported stepping type: " + stepping);
- }
-
- /** Debugger interface to the interpreter's internal call frame representation. */
- public interface Frame {
-
- /** Returns function called in this frame. */
- StarlarkCallable getFunction();
-
- /** Returns the location of the current program counter. */
- Location getLocation();
-
- /** Returns the local environment of this frame. */
- ImmutableMap<String, Object> getLocals();
- }
-
- /**
- * Interface by which debugging tools are notified of a thread entering or leaving its top-level
- * frame.
- */
- public interface ThreadHook {
- void onPushFirst(StarlarkThread thread);
-
- void onPopLast(StarlarkThread thread);
- }
-
- static ThreadHook threadHook = null;
-
- /**
- * Installs a global hook that is notified each time a thread pushes or pops its top-level frame.
- * This interface is provided to support special tools; ordinary clients should have no need for
- * it.
- */
- public static void setThreadHook(ThreadHook hook) {
- threadHook = hook;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/DefStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/DefStatement.java
deleted file mode 100644
index 137bfc7..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/DefStatement.java
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import javax.annotation.Nullable;
-
-/** Syntax node for a 'def' statement, which defines a function. */
-public final class DefStatement extends Statement {
-
- private final int defOffset;
- private final Identifier identifier;
- private final ImmutableList<Statement> body; // non-empty if well formed
- private final ImmutableList<Parameter> parameters;
-
- // set by resolver
- @Nullable private Resolver.Function resolved;
-
- DefStatement(
- FileLocations locs,
- int defOffset,
- Identifier identifier,
- ImmutableList<Parameter> parameters,
- ImmutableList<Statement> body) {
- super(locs);
- this.defOffset = defOffset;
- this.identifier = identifier;
- this.parameters = Preconditions.checkNotNull(parameters);
- this.body = Preconditions.checkNotNull(body);
- }
-
- @Override
- public String toString() {
- // "def f(...): \n"
- StringBuilder buf = new StringBuilder();
- new NodePrinter(buf).printDefSignature(this);
- buf.append(" ...\n");
- return buf.toString();
- }
-
- public Identifier getIdentifier() {
- return identifier;
- }
-
- public ImmutableList<Statement> getBody() {
- return body;
- }
-
- public ImmutableList<Parameter> getParameters() {
- return parameters;
- }
-
- void setResolvedFunction(Resolver.Function resolved) {
- this.resolved = resolved;
- }
-
- /** Returns information about the resolved function. Set by the resolver. */
- @Nullable
- public Resolver.Function getResolvedFunction() {
- return resolved;
- }
-
- @Override
- public int getStartOffset() {
- return defOffset;
- }
-
- @Override
- public int getEndOffset() {
- return body.isEmpty()
- ? identifier.getEndOffset() // wrong, but tree is ill formed
- : body.get(body.size() - 1).getEndOffset();
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.DEF;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Dict.java b/src/main/java/com/google/devtools/build/lib/syntax/Dict.java
deleted file mode 100644
index 4e696db..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Dict.java
+++ /dev/null
@@ -1,656 +0,0 @@
-// Copyright 2016 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.syntax;
-
-import static java.lang.Math.max;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.annotation.Nullable;
-import net.starlark.java.annot.Param;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkDocumentationCategory;
-import net.starlark.java.annot.StarlarkMethod;
-
-/**
- * A Dict is a Starlark dictionary (dict), a mapping from keys to values.
- *
- * <p>Dicts are iterable in both Java and Starlark; the iterator yields successive keys.
- *
- * <p>Although this implements the {@link Map} interface, it is not mutable via that interface's
- * methods. Instead, use the mutators that take in a {@link Mutability} object.
- */
-@StarlarkBuiltin(
- name = "dict",
- category = StarlarkDocumentationCategory.BUILTIN,
- doc =
- "dict is a built-in type representing an associative mapping or <i>dictionary</i>. A"
- + " dictionary supports indexing using <code>d[k]</code> and key membership testing"
- + " using <code>k in d</code>; both operations take constant time. Unfrozen"
- + " dictionaries are mutable, and may be updated by assigning to <code>d[k]</code> or"
- + " by calling certain methods. Dictionaries are iterable; iteration yields the"
- + " sequence of keys in insertion order. Iteration order is unaffected by updating the"
- + " value associated with an existing key, but is affected by removing then"
- + " reinserting a key.\n"
- + "<pre>d = {0: 0, 2: 2, 1: 1}\n"
- + "[k for k in d] # [0, 2, 1]\n"
- + "d.pop(2)\n"
- + "d[0], d[2] = \"a\", \"b\"\n"
- + "0 in d, \"a\" in d # (True, False)\n"
- + "[(k, v) for k, v in d.items()] # [(0, \"a\"), (1, 1), (2, \"b\")]\n"
- + "</pre>\n"
- + "<p>There are three ways to construct a dictionary:\n"
- + "<ol>\n"
- + "<li>A dictionary expression <code>{k: v, ...}</code> yields a new dictionary with"
- + " the specified key/value entries, inserted in the order they appear in the"
- + " expression. Evaluation fails if any two key expressions yield the same"
- + " value.\n"
- + "<li>A dictionary comprehension <code>{k: v for vars in seq}</code> yields a new"
- + " dictionary into which each key/value pair is inserted in loop iteration order."
- + " Duplicates are permitted: the first insertion of a given key determines its"
- + " position in the sequence, and the last determines its associated value.\n"
- + "<pre class=\"language-python\">\n"
- + "{k: v for k, v in ((\"a\", 0), (\"b\", 1), (\"a\", 2))} # {\"a\": 2, \"b\": 1}\n"
- + "{i: 2*i for i in range(3)} # {0: 0, 1: 2, 2: 4}\n"
- + "</pre>\n"
- + "<li>A call to the built-in <a href=\"globals.html#dict\">dict</a> function returns"
- + " a dictionary containing the specified entries, which are inserted in argument"
- + " order, positional arguments before named. As with comprehensions, duplicate keys"
- + " are permitted.\n"
- + "</ol>")
-// TODO(b/64208606): eliminate these type parameters as they are wildly unsound.
-// Starlark code may update a Dict in ways incompatible with its Java
-// parameterized type. There is no realistic static or dynamic way to prevent
-// this, as Java parameterized types are not accessible at runtime.
-// Every cast to a parameterized type is a lie.
-// Unchecked warnings should be treated as errors.
-// Ditto Sequence.
-public final class Dict<K, V>
- implements Map<K, V>,
- StarlarkValue,
- Mutability.Freezable,
- StarlarkIndexable,
- StarlarkIterable<K> {
-
- private final LinkedHashMap<K, V> contents;
- private int iteratorCount; // number of active iterators (unused once frozen)
-
- /** Final except for {@link #unsafeShallowFreeze}; must not be modified any other way. */
- private Mutability mutability;
-
- private Dict(@Nullable Mutability mutability, LinkedHashMap<K, V> contents) {
- this.mutability = mutability == null ? Mutability.IMMUTABLE : mutability;
- this.contents = contents;
- }
-
- private Dict(@Nullable Mutability mutability) {
- this(mutability, new LinkedHashMap<>());
- }
-
- private Dict(@Nullable Mutability mutability, int initialCapacity) {
- this(mutability, new LinkedHashMap<>(initialCapacity));
- }
-
- /**
- * Takes ownership of the supplied LinkedHashMap and returns a new Dict that wraps it. The caller
- * must not subsequently modify the map, but the Dict may do so.
- */
- static <K, V> Dict<K, V> wrap(@Nullable Mutability mutability, LinkedHashMap<K, V> contents) {
- return new Dict<>(mutability, contents);
- }
-
- @Override
- public boolean truth() {
- return !isEmpty();
- }
-
- @Override
- public boolean isImmutable() {
- return mutability().isFrozen();
- }
-
- @Override
- public boolean updateIteratorCount(int delta) {
- if (mutability().isFrozen()) {
- return false;
- }
- if (delta > 0) {
- iteratorCount++;
- } else if (delta < 0) {
- iteratorCount--;
- }
- return iteratorCount > 0;
- }
-
- @Override
- public boolean isHashable() {
- return false; // even a frozen dict is unhashable
- }
-
- @Override
- public int hashCode() {
- return contents.hashCode(); // not called by Dict.put (because !isHashable)
- }
-
- @Override
- public boolean equals(Object o) {
- return contents.equals(o); // not called by Dict.put (because !isHashable)
- }
-
- @Override
- public Iterator<K> iterator() {
- return contents.keySet().iterator();
- }
-
- @StarlarkMethod(
- name = "get",
- doc =
- "Returns the value for <code>key</code> if <code>key</code> is in the dictionary, "
- + "else <code>default</code>. If <code>default</code> is not given, it defaults to "
- + "<code>None</code>, so that this method never throws an error.",
- parameters = {
- @Param(name = "key", noneable = true, doc = "The key to look for."),
- @Param(
- name = "default",
- defaultValue = "None",
- noneable = true,
- named = true,
- doc = "The default value to use (instead of None) if the key is not found.")
- },
- allowReturnNones = true,
- useStarlarkThread = true)
- // TODO(adonovan): This method is named get2 as a temporary workaround for a bug in
- // StarlarkInterfaceUtils.getStarlarkMethod. The two 'get' methods cause it to get
- // confused as to which one has the annotation. Fix it and remove "2" suffix.
- public Object get2(Object key, Object defaultValue, StarlarkThread thread) throws EvalException {
- Object v = this.get(key);
- if (v != null) {
- return v;
- }
-
- // This statement is executed for its effect, which is to throw "unhashable"
- // if key is unhashable, instead of returning defaultValue.
- // I think this is a bug: the correct behavior is simply 'return defaultValue'.
- // See https://github.com/bazelbuild/starlark/issues/65.
- containsKey(thread.getSemantics(), key);
-
- return defaultValue;
- }
-
- @StarlarkMethod(
- name = "pop",
- doc =
- "Removes a <code>key</code> from the dict, and returns the associated value. "
- + "If no entry with that key was found, remove nothing and return the specified "
- + "<code>default</code> value; if no default value was specified, fail instead.",
- parameters = {
- @Param(name = "key", type = Object.class, doc = "The key.", noneable = true),
- @Param(
- name = "default",
- type = Object.class,
- defaultValue = "unbound",
- named = true,
- noneable = true,
- doc = "a default value if the key is absent."),
- },
- useStarlarkThread = true)
- public Object pop(Object key, Object defaultValue, StarlarkThread thread) throws EvalException {
- Object value = get(key);
- if (value != null) {
- remove(key, (Location) null);
- return value;
- }
- if (defaultValue != Starlark.UNBOUND) {
- return defaultValue;
- }
- // TODO(adonovan): improve error; this ain't Python.
- throw Starlark.errorf("KeyError: %s", Starlark.repr(key));
- }
-
- @StarlarkMethod(
- name = "popitem",
- doc =
- "Remove and return an arbitrary <code>(key, value)</code> pair from the dictionary. "
- + "<code>popitem()</code> is useful to destructively iterate over a dictionary, "
- + "as often used in set algorithms. "
- + "If the dictionary is empty, calling <code>popitem()</code> fails. "
- + "It is deterministic which pair is returned.",
- useStarlarkThread = true)
- public Tuple<Object> popitem(StarlarkThread thread) throws EvalException {
- if (isEmpty()) {
- throw Starlark.errorf("popitem(): dictionary is empty");
- }
- Object key = keySet().iterator().next();
- Object value = get(key);
- remove(key, (Location) null);
- return Tuple.pair(key, value);
- }
-
- @StarlarkMethod(
- name = "setdefault",
- doc =
- "If <code>key</code> is in the dictionary, return its value. "
- + "If not, insert key with a value of <code>default</code> "
- + "and return <code>default</code>. "
- + "<code>default</code> defaults to <code>None</code>.",
- parameters = {
- @Param(name = "key", type = Object.class, doc = "The key."),
- @Param(
- name = "default",
- type = Object.class,
- defaultValue = "None",
- named = true,
- noneable = true,
- doc = "a default value if the key is absent."),
- })
- @SuppressWarnings("unchecked") // Cast of value to V
- public Object setdefault(K key, Object defaultValue) throws EvalException {
- // TODO(adonovan): opt: use putIfAbsent to avoid hashing twice.
- Object value = get(key);
- if (value != null) {
- return value;
- }
- put(key, (V) defaultValue, (Location) null);
- return defaultValue;
- }
-
- @StarlarkMethod(
- name = "update",
- doc =
- "Update the dictionary with an optional positional argument <code>[pairs]</code> "
- + " and an optional set of keyword arguments <code>[, name=value[, ...]</code>\n"
- + "If the positional argument <code>pairs</code> is present, it must be "
- + "<code>None</code>, another <code>dict</code>, or some other iterable. "
- + "If it is another <code>dict</code>, then its key/value pairs are inserted. "
- + "If it is an iterable, it must provide a sequence of pairs (or other iterables "
- + "of length 2), each of which is treated as a key/value pair to be inserted.\n"
- + "For each <code>name=value</code> argument present, the name is converted to a "
- + "string and used as the key for an insertion into D, with its corresponding "
- + "value being <code>value</code>.",
- parameters = {
- @Param(
- name = "args",
- type = Object.class,
- defaultValue = "[]",
- doc =
- "Either a dictionary or a list of entries. Entries must be tuples or lists with "
- + "exactly two elements: key, value."),
- },
- extraKeywords = @Param(name = "kwargs", doc = "Dictionary of additional entries."),
- useStarlarkThread = true)
- @SuppressWarnings("unchecked")
- public NoneType update(Object args, Dict<String, Object> kwargs, StarlarkThread thread)
- throws EvalException {
- // TODO(adonovan): opt: don't materialize dict; call put directly.
-
- // All these types and casts are lies.
- Dict<K, V> dict =
- args instanceof Dict
- ? (Dict<K, V>) args
- : getDictFromArgs("update", args, thread.mutability());
- dict = Dict.plus(dict, (Dict<K, V>) kwargs, thread.mutability());
- putAll(dict, (Location) null);
- return Starlark.NONE;
- }
-
- @StarlarkMethod(
- name = "values",
- doc =
- "Returns the list of values:"
- + "<pre class=\"language-python\">"
- + "{2: \"a\", 4: \"b\", 1: \"c\"}.values() == [\"a\", \"b\", \"c\"]</pre>\n",
- useStarlarkThread = true)
- public StarlarkList<?> values0(StarlarkThread thread) throws EvalException {
- return StarlarkList.copyOf(thread.mutability(), values());
- }
-
- @StarlarkMethod(
- name = "items",
- doc =
- "Returns the list of key-value tuples:"
- + "<pre class=\"language-python\">"
- + "{2: \"a\", 4: \"b\", 1: \"c\"}.items() == [(2, \"a\"), (4, \"b\"), (1, \"c\")]"
- + "</pre>\n",
- useStarlarkThread = true)
- public StarlarkList<?> items(StarlarkThread thread) throws EvalException {
- Object[] array = new Object[size()];
- int i = 0;
- for (Map.Entry<?, ?> e : entrySet()) {
- array[i++] = Tuple.pair(e.getKey(), e.getValue());
- }
- return StarlarkList.wrap(thread.mutability(), array);
- }
-
- @StarlarkMethod(
- name = "keys",
- doc =
- "Returns the list of keys:"
- + "<pre class=\"language-python\">{2: \"a\", 4: \"b\", 1: \"c\"}.keys() == [2, 4, 1]"
- + "</pre>\n",
- useStarlarkThread = true)
- public StarlarkList<?> keys(StarlarkThread thread) throws EvalException {
- Object[] array = new Object[size()];
- int i = 0;
- for (Map.Entry<?, ?> e : entrySet()) {
- array[i++] = e.getKey();
- }
- return StarlarkList.wrap(thread.mutability(), array);
- }
-
- private static final Dict<?, ?> EMPTY = of(Mutability.IMMUTABLE);
-
- /** Returns an immutable empty dict. */
- // Safe because the empty singleton is immutable.
- @SuppressWarnings("unchecked")
- public static <K, V> Dict<K, V> empty() {
- return (Dict<K, V>) EMPTY;
- }
-
- /** Returns a new empty dict with the specified mutability. */
- public static <K, V> Dict<K, V> of(@Nullable Mutability mu) {
- return new Dict<>(mu);
- }
-
- /** Returns a new dict with the specified mutability and a single entry. */
- public static <K, V> Dict<K, V> of(@Nullable Mutability mu, K k, V v) {
- return new Dict<K, V>(mu).putUnsafe(k, v);
- }
-
- /** Returns a new dict with the specified mutability and two entries. */
- public static <K, V> Dict<K, V> of(@Nullable Mutability mu, K k1, V v1, K k2, V v2) {
- return new Dict<K, V>(mu).putUnsafe(k1, v1).putUnsafe(k2, v2);
- }
-
- /** Returns a new dict with the specified mutability containing the entries of {@code m}. */
- @SuppressWarnings("unchecked")
- public static <K, V> Dict<K, V> copyOf(@Nullable Mutability mu, Map<? extends K, ? extends V> m) {
- // TODO(laurentlb): Move this method out of this file and rename it. It should go with
- // Starlark.fromJava; its main purpose is to convert a Java value to Starlark.
- Dict<K, V> dict = new Dict<>(mu);
- for (Map.Entry<?, ?> e : m.entrySet()) {
- dict.contents.put((K) e.getKey(), (V) Starlark.fromJava(e.getValue(), mu));
- }
- return dict;
- }
-
- /** Puts the given entry into the dict, without calling {@link #checkMutable}. */
- private Dict<K, V> putUnsafe(K k, V v) {
- contents.put(k, v);
- return this;
- }
-
- @Override
- public Mutability mutability() {
- return mutability;
- }
-
- @Override
- public void unsafeShallowFreeze() {
- Mutability.Freezable.checkUnsafeShallowFreezePrecondition(this);
- this.mutability = Mutability.IMMUTABLE;
- }
-
- /**
- * Puts an entry into a dict, after validating that mutation is allowed.
- *
- * @param key the key of the added entry
- * @param value the value of the added entry
- * @param unused a nonce value to select this overload, not Map.put
- * @throws EvalException if the key is invalid or the dict is frozen
- */
- public void put(K key, V value, Location unused) throws EvalException {
- Starlark.checkMutable(this);
- EvalUtils.checkHashable(key);
- contents.put(key, value);
- }
-
- /**
- * Puts all the entries from a given map into the dict, after validating that mutation is allowed.
- *
- * @param map the map whose entries are added
- * @param unused a nonce value to select this overload, not Map.put
- * @throws EvalException if some key is invalid or the dict is frozen
- */
- public <KK extends K, VV extends V> void putAll(Map<KK, VV> map, Location unused)
- throws EvalException {
- Starlark.checkMutable(this);
- for (Map.Entry<KK, VV> e : map.entrySet()) {
- KK k = e.getKey();
- EvalUtils.checkHashable(k);
- contents.put(k, e.getValue());
- }
- }
-
- /**
- * Deletes the entry associated with the given key.
- *
- * @param key the key to delete
- * @param unused a nonce value to select this overload, not Map.put
- * @return the value associated to the key, or {@code null} if not present
- * @throws EvalException if the dict is frozen
- */
- V remove(Object key, Location unused) throws EvalException {
- Starlark.checkMutable(this);
- return contents.remove(key);
- }
-
- @StarlarkMethod(name = "clear", doc = "Remove all items from the dictionary.")
- public NoneType clearDict() throws EvalException {
- clear(null);
- return Starlark.NONE;
- }
-
- /**
- * Clears the dict.
- *
- * @param unused a nonce value to select this overload, not Map.put
- * @throws EvalException if the dict is frozen
- */
- private void clear(Location unused) throws EvalException {
- Starlark.checkMutable(this);
- contents.clear();
- }
-
- @Override
- public void repr(Printer printer) {
- printer.printList(entrySet(), "{", ", ", "}");
- }
-
- @Override
- public String toString() {
- return Starlark.repr(this);
- }
-
- /**
- * Casts a non-null Starlark value {@code x} to a {@code Dict<K, V>} after checking that all keys
- * and values are instances of {@code keyType} and {@code valueType}, respectively. On error, it
- * throws an EvalException whose message includes {@code what}, ideally a string literal, as a
- * description of the role of {@code x}. If x is null, it returns an immutable empty dict.
- */
- public static <K, V> Dict<K, V> cast(Object x, Class<K> keyType, Class<V> valueType, String what)
- throws EvalException {
- Preconditions.checkNotNull(x);
- if (!(x instanceof Dict)) {
- throw Starlark.errorf("got %s for '%s', want dict", Starlark.type(x), what);
- }
-
- for (Map.Entry<?, ?> e : ((Map<?, ?>) x).entrySet()) {
- if (!keyType.isAssignableFrom(e.getKey().getClass())
- || !valueType.isAssignableFrom(e.getValue().getClass())) {
- // TODO(adonovan): change message to "found <K2, V2> entry",
- // without suggesting that the entire dict is <K2, V2>.
- throw Starlark.errorf(
- "got dict<%s, %s> for '%s', want dict<%s, %s>",
- Starlark.type(e.getKey()),
- Starlark.type(e.getValue()),
- what,
- Starlark.classType(keyType),
- Starlark.classType(valueType));
- }
- }
-
- @SuppressWarnings("unchecked") // safe
- Dict<K, V> res = (Dict<K, V>) x;
- return res;
- }
-
- /** Like {@link #cast}, but if x is None, returns an empty Dict. */
- public static <K, V> Dict<K, V> noneableCast(
- Object x, Class<K> keyType, Class<V> valueType, String what) throws EvalException {
- return x == Starlark.NONE ? empty() : cast(x, keyType, valueType, what);
- }
-
- @Override
- public Object getIndex(StarlarkSemantics semantics, Object key) throws EvalException {
- Object v = get(key);
- if (v == null) {
- throw Starlark.errorf("key %s not found in dictionary", Starlark.repr(key));
- }
- return v;
- }
-
- @Override
- public boolean containsKey(StarlarkSemantics semantics, Object key) throws EvalException {
- EvalUtils.checkHashable(key);
- return this.containsKey(key);
- }
-
- static <K, V> Dict<K, V> plus(
- Dict<? extends K, ? extends V> left,
- Dict<? extends K, ? extends V> right,
- @Nullable Mutability mu) {
- Dict<K, V> result = new Dict<>(mu, max(left.size(), right.size()));
- // Update underlying map contents directly, input dicts already contain valid objects
- result.contents.putAll(left.contents);
- result.contents.putAll(right.contents);
- return result;
- }
-
- @SuppressWarnings("unchecked")
- static <K, V> Dict<K, V> getDictFromArgs(String funcname, Object args, @Nullable Mutability mu)
- throws EvalException {
- Iterable<?> seq;
- try {
- seq = Starlark.toIterable(args);
- } catch (EvalException ex) {
- throw Starlark.errorf("in %s, got %s, want iterable", funcname, Starlark.type(args));
- }
- Dict<K, V> result = Dict.of(mu);
- int pos = 0;
- for (Object item : seq) {
- Iterable<?> seq2;
- try {
- seq2 = Starlark.toIterable(item);
- } catch (EvalException ex) {
- throw Starlark.errorf(
- "in %s, dictionary update sequence element #%d is not iterable (%s)",
- funcname, pos, Starlark.type(item));
- }
- // TODO(adonovan): opt: avoid unnecessary allocations and copies.
- // Why is there no operator to compute len(x), following the spec, without iterating??
- List<Object> pair = Lists.newArrayList(seq2);
- if (pair.size() != 2) {
- throw Starlark.errorf(
- "in %s, item #%d has length %d, but exactly two elements are required",
- funcname, pos, pair.size());
- }
- // These casts are lies
- result.put((K) pair.get(0), (V) pair.get(1), null);
- pos++;
- }
- return result;
- }
-
- // java.util.Map accessors
-
- @Override
- public boolean containsKey(Object key) {
- return contents.containsKey(key);
- }
-
- @Override
- public boolean containsValue(Object value) {
- return contents.containsValue(value);
- }
-
- @Override
- public Set<Map.Entry<K, V>> entrySet() {
- return Collections.unmodifiableMap(contents).entrySet();
- }
-
- @Override
- public V get(Object key) {
- return contents.get(key);
- }
-
- @Override
- public boolean isEmpty() {
- return contents.isEmpty();
- }
-
- @Override
- public Set<K> keySet() {
- return Collections.unmodifiableMap(contents).keySet();
- }
-
- @Override
- public int size() {
- return contents.size();
- }
-
- @Override
- public Collection<V> values() {
- return Collections.unmodifiableMap(contents).values();
- }
-
- // disallowed java.util.Map update operations
-
- // TODO(adonovan): make mutability exception a subclass of (unchecked)
- // UnsupportedOperationException, allowing the primary Dict operations
- // to satisfy the Map operations below in the usual way (like ImmutableMap does).
- // Add "ForStarlark" suffix to disambiguate StarlarkMethod-annotated methods.
- // Same for StarlarkList.
-
- @Deprecated
- @Override
- public void clear() {
- throw new UnsupportedOperationException();
- }
-
- @Deprecated
- @Override
- public V put(K key, V value) {
- throw new UnsupportedOperationException();
- }
-
- @Deprecated
- @Override
- public void putAll(Map<? extends K, ? extends V> map) {
- throw new UnsupportedOperationException();
- }
-
- @Deprecated
- @Override
- public V remove(Object key) {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/DictExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/DictExpression.java
deleted file mode 100644
index fdb5346..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/DictExpression.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.collect.ImmutableList;
-import java.util.List;
-
-/** Syntax node for dict expressions. */
-public final class DictExpression extends Expression {
-
- /** A key/value pair in a dict expression or comprehension. */
- public static final class Entry extends Node {
-
- private final Expression key;
- private final int colonOffset;
- private final Expression value;
-
- Entry(FileLocations locs, Expression key, int colonOffset, Expression value) {
- super(locs);
- this.key = key;
- this.colonOffset = colonOffset;
- this.value = value;
- }
-
- public Expression getKey() {
- return key;
- }
-
- public Expression getValue() {
- return value;
- }
-
- @Override
- public int getStartOffset() {
- return key.getStartOffset();
- }
-
- @Override
- public int getEndOffset() {
- return value.getEndOffset();
- }
-
- public Location getColonLocation() {
- return locs.getLocation(colonOffset);
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
- }
-
- private final int lbraceOffset;
- private final ImmutableList<Entry> entries;
- private final int rbraceOffset;
-
- DictExpression(FileLocations locs, int lbraceOffset, List<Entry> entries, int rbraceOffset) {
- super(locs);
- this.lbraceOffset = lbraceOffset;
- this.entries = ImmutableList.copyOf(entries);
- this.rbraceOffset = rbraceOffset;
- }
-
- @Override
- public int getStartOffset() {
- return lbraceOffset;
- }
-
- @Override
- public int getEndOffset() {
- return rbraceOffset + 1;
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.DICT_EXPR;
- }
-
- public ImmutableList<Entry> getEntries() {
- return entries;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java
deleted file mode 100644
index 9e7a541..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2014 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.syntax;
-
-
-/** Syntax node for a dot expression. e.g. obj.field, but not obj.method() */
-public final class DotExpression extends Expression {
-
- private final Expression object;
- private final int dotOffset;
- private final Identifier field;
-
- DotExpression(FileLocations locs, Expression object, int dotOffset, Identifier field) {
- super(locs);
- this.object = object;
- this.dotOffset = dotOffset;
- this.field = field;
- }
-
- public Expression getObject() {
- return object;
- }
-
- public Identifier getField() {
- return field;
- }
-
- @Override
- public int getStartOffset() {
- return object.getStartOffset();
- }
-
- @Override
- public int getEndOffset() {
- return field.getEndOffset();
- }
-
- public Location getDotLocation() {
- return locs.getLocation(dotOffset);
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.DOT;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Eval.java b/src/main/java/com/google/devtools/build/lib/syntax/Eval.java
deleted file mode 100644
index d9fd8c0..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Eval.java
+++ /dev/null
@@ -1,791 +0,0 @@
-// Copyright 2017 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.syntax;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import net.starlark.java.spelling.SpellChecker;
-
-/** A syntax-tree-walking evaluator for StarlarkFunction bodies. */
-final class Eval {
-
- private Eval() {} // uninstantiable
-
- // ---- entry point ----
-
- // Called from StarlarkFunction.fastcall.
- static Object execFunctionBody(StarlarkThread.Frame fr, List<Statement> statements)
- throws EvalException, InterruptedException {
- fr.thread.checkInterrupt();
- execStatements(fr, statements, /*indented=*/ false);
- return fr.result;
- }
-
- private static StarlarkFunction fn(StarlarkThread.Frame fr) {
- return (StarlarkFunction) fr.fn;
- }
-
- private static TokenKind execStatements(
- StarlarkThread.Frame fr, List<Statement> statements, boolean indented)
- throws EvalException, InterruptedException {
- boolean isToplevelFunction = fn(fr).isToplevel();
-
- // Hot code path, good chance of short lists which don't justify the iterator overhead.
- for (int i = 0; i < statements.size(); i++) {
- Statement stmt = statements.get(i);
- TokenKind flow = exec(fr, stmt);
- if (flow != TokenKind.PASS) {
- return flow;
- }
-
- // Hack for BzlLoadFunction's "export" semantics.
- // We enable it only for statements outside any function (isToplevelFunction)
- // and outside any if- or for- statements (!indented).
- if (isToplevelFunction && !indented && fr.thread.postAssignHook != null) {
- if (stmt instanceof AssignmentStatement) {
- AssignmentStatement assign = (AssignmentStatement) stmt;
- for (Identifier id : Identifier.boundIdentifiers(assign.getLHS())) {
- String name = id.getName();
- Object value = fn(fr).getModule().getGlobal(name);
- fr.thread.postAssignHook.assign(name, value);
- }
- }
- }
- }
- return TokenKind.PASS;
- }
-
- private static void execAssignment(StarlarkThread.Frame fr, AssignmentStatement node)
- throws EvalException, InterruptedException {
- try {
- if (node.isAugmented()) {
- execAugmentedAssignment(fr, node);
- } else {
- Object rvalue = eval(fr, node.getRHS());
- assign(fr, node.getLHS(), rvalue);
- }
- } catch (EvalException ex) {
- fr.setErrorLocation(node.getOperatorLocation());
- throw ex;
- }
- }
-
- private static TokenKind execFor(StarlarkThread.Frame fr, ForStatement node)
- throws EvalException, InterruptedException {
- Object o = eval(fr, node.getCollection());
- Iterable<?> seq = Starlark.toIterable(o);
- EvalUtils.addIterator(o);
- try {
- for (Object it : seq) {
- assign(fr, node.getVars(), it);
-
- switch (execStatements(fr, node.getBody(), /*indented=*/ true)) {
- case PASS:
- case CONTINUE:
- // Stay in loop.
- fr.thread.checkInterrupt();
- continue;
- case BREAK:
- // Finish loop, execute next statement after loop.
- return TokenKind.PASS;
- case RETURN:
- // Finish loop, return from function.
- return TokenKind.RETURN;
- default:
- throw new IllegalStateException("unreachable");
- }
- }
- } catch (EvalException ex) {
- fr.setErrorLocation(node.getStartLocation());
- throw ex;
- } finally {
- EvalUtils.removeIterator(o);
- }
- return TokenKind.PASS;
- }
-
- private static void execDef(StarlarkThread.Frame fr, DefStatement node)
- throws EvalException, InterruptedException {
- Resolver.Function rfn = node.getResolvedFunction();
-
- // Evaluate default value expressions of optional parameters.
- // We use MANDATORY to indicate a required parameter
- // (not null, because defaults must be a legal tuple value, as
- // it will be constructed by the code emitted by the compiler).
- // As an optimization, we omit the prefix of MANDATORY parameters.
- Object[] defaults = null;
- int nparams =
- rfn.getParameters().size() - (rfn.hasKwargs() ? 1 : 0) - (rfn.hasVarargs() ? 1 : 0);
- for (int i = 0; i < nparams; i++) {
- Expression expr = rfn.getParameters().get(i).getDefaultValue();
- if (expr == null && defaults == null) {
- continue; // skip prefix of required parameters
- }
- if (defaults == null) {
- defaults = new Object[nparams - i];
- }
- defaults[i - (nparams - defaults.length)] =
- expr == null ? StarlarkFunction.MANDATORY : eval(fr, expr);
- }
- if (defaults == null) {
- defaults = EMPTY;
- }
-
- assignIdentifier(
- fr,
- node.getIdentifier(),
- new StarlarkFunction(rfn, Tuple.wrap(defaults), fn(fr).getModule()));
- }
-
- private static TokenKind execIf(StarlarkThread.Frame fr, IfStatement node)
- throws EvalException, InterruptedException {
- boolean cond = Starlark.truth(eval(fr, node.getCondition()));
- if (cond) {
- return execStatements(fr, node.getThenBlock(), /*indented=*/ true);
- } else if (node.getElseBlock() != null) {
- return execStatements(fr, node.getElseBlock(), /*indented=*/ true);
- }
- return TokenKind.PASS;
- }
-
- private static void execLoad(StarlarkThread.Frame fr, LoadStatement node) throws EvalException {
- // Has the application defined a behavior for load statements in this thread?
- StarlarkThread.Loader loader = fr.thread.getLoader();
- if (loader == null) {
- fr.setErrorLocation(node.getStartLocation());
- throw Starlark.errorf("load statements may not be executed in this thread");
- }
-
- // Load module.
- String moduleName = node.getImport().getValue();
- Module module = loader.load(moduleName);
- if (module == null) {
- fr.setErrorLocation(node.getStartLocation());
- throw Starlark.errorf(
- "file '%s' was not correctly loaded. Make sure the 'load' statement appears in the"
- + " global scope in your file",
- moduleName);
- }
- Map<String, Object> globals = module.getExportedGlobals();
-
- for (LoadStatement.Binding binding : node.getBindings()) {
- // Extract symbol.
- Identifier orig = binding.getOriginalName();
- Object value = globals.get(orig.getName());
- if (value == null) {
- fr.setErrorLocation(orig.getStartLocation());
- throw Starlark.errorf(
- "file '%s' does not contain symbol '%s'%s",
- moduleName, orig.getName(), SpellChecker.didYouMean(orig.getName(), globals.keySet()));
- }
-
- // Define module-local variable.
- // TODO(adonovan): eventually the default behavior should be that
- // loads bind file-locally. Either way, the resolver should designate
- // the proper scope of binding.getLocalName() and this should become
- // simply assign(binding.getLocalName(), value).
- // Currently, we update the module but not module.exportedGlobals;
- // changing it to fr.locals.put breaks a test. TODO(adonovan): find out why.
- fn(fr).getModule().setGlobal(binding.getLocalName().getName(), value);
- }
- }
-
- private static TokenKind execReturn(StarlarkThread.Frame fr, ReturnStatement node)
- throws EvalException, InterruptedException {
- Expression result = node.getResult();
- if (result != null) {
- fr.result = eval(fr, result);
- }
- return TokenKind.RETURN;
- }
-
- private static TokenKind exec(StarlarkThread.Frame fr, Statement st)
- throws EvalException, InterruptedException {
- if (fr.dbg != null) {
- Location loc = st.getStartLocation(); // not very precise
- fr.setLocation(loc);
- fr.dbg.before(fr.thread, loc); // location is now redundant since it's in the thread
- }
-
- if (++fr.thread.steps >= fr.thread.stepLimit) {
- throw new EvalException("Starlark computation cancelled: too many steps");
- }
-
- switch (st.kind()) {
- case ASSIGNMENT:
- execAssignment(fr, (AssignmentStatement) st);
- return TokenKind.PASS;
- case EXPRESSION:
- eval(fr, ((ExpressionStatement) st).getExpression());
- return TokenKind.PASS;
- case FLOW:
- return ((FlowStatement) st).getKind();
- case FOR:
- return execFor(fr, (ForStatement) st);
- case DEF:
- execDef(fr, (DefStatement) st);
- return TokenKind.PASS;
- case IF:
- return execIf(fr, (IfStatement) st);
- case LOAD:
- execLoad(fr, (LoadStatement) st);
- return TokenKind.PASS;
- case RETURN:
- return execReturn(fr, (ReturnStatement) st);
- }
- throw new IllegalArgumentException("unexpected statement: " + st.kind());
- }
-
- /**
- * Updates the environment bindings, and possibly mutates objects, so as to assign the given value
- * to the given expression. Might not set the frame location on error.
- */
- private static void assign(StarlarkThread.Frame fr, Expression lhs, Object value)
- throws EvalException, InterruptedException {
- if (lhs instanceof Identifier) {
- // x = ...
- assignIdentifier(fr, (Identifier) lhs, value);
-
- } else if (lhs instanceof IndexExpression) {
- // x[i] = ...
- Object object = eval(fr, ((IndexExpression) lhs).getObject());
- Object key = eval(fr, ((IndexExpression) lhs).getKey());
- EvalUtils.setIndex(object, key, value);
-
- } else if (lhs instanceof ListExpression) {
- // a, b, c = ...
- ListExpression list = (ListExpression) lhs;
- assignSequence(fr, list.getElements(), value);
-
- } else {
- // Not possible for resolved ASTs.
- throw Starlark.errorf("cannot assign to '%s'", lhs);
- }
- }
-
- private static void assignIdentifier(StarlarkThread.Frame fr, Identifier id, Object value)
- throws EvalException {
- Resolver.Binding bind = id.getBinding();
- // Legacy hack for incomplete identifier resolution.
- // In a <toplevel> function, assignments to unresolved identifiers
- // update the module, except for load statements and comprehensions,
- // which should both be file-local.
- // Load statements don't yet use assignIdentifier,
- // so we need consider only comprehensions.
- // In effect, we do the missing resolution using fr.compcount.
- Resolver.Scope scope;
- if (bind == null) {
- scope =
- fn(fr).isToplevel() && fr.compcount == 0
- ? Resolver.Scope.GLOBAL //
- : Resolver.Scope.LOCAL;
- } else {
- scope = bind.getScope();
- }
-
- String name = id.getName();
- switch (scope) {
- case LOCAL:
- fr.locals.put(name, value);
- break;
- case GLOBAL:
- // Updates a module binding and sets its 'exported' flag.
- // (Only load bindings are not exported.
- // But exportedGlobals does at run time what should be done in the resolver.)
- Module module = fn(fr).getModule();
- module.setGlobal(name, value);
- module.exportedGlobals.add(name);
- break;
- default:
- throw new IllegalStateException(scope.toString());
- }
- }
-
- /**
- * Recursively assigns an iterable value to a non-empty sequence of assignable expressions. Might
- * not set frame location on error.
- */
- private static void assignSequence(StarlarkThread.Frame fr, List<Expression> lhs, Object x)
- throws EvalException, InterruptedException {
- // TODO(adonovan): lock/unlock rhs during iteration so that
- // assignments fail when the left side aliases the right,
- // which is a tricky case in Python assignment semantics.
- int nrhs = Starlark.len(x);
- if (nrhs < 0) {
- throw Starlark.errorf("got '%s' in sequence assignment", Starlark.type(x));
- }
- Iterable<?> rhs = Starlark.toIterable(x); // fails if x is a string
- int nlhs = lhs.size();
- if (nlhs != nrhs) {
- throw Starlark.errorf(
- "too %s values to unpack (got %d, want %d)", nrhs < nlhs ? "few" : "many", nrhs, nlhs);
- }
- int i = 0;
- for (Object item : rhs) {
- assign(fr, lhs.get(i), item);
- i++;
- }
- }
-
- // Might not set frame location on error.
- private static void execAugmentedAssignment(StarlarkThread.Frame fr, AssignmentStatement stmt)
- throws EvalException, InterruptedException {
- Expression lhs = stmt.getLHS();
- TokenKind op = stmt.getOperator();
- Expression rhs = stmt.getRHS();
-
- if (lhs instanceof Identifier) {
- Object x = eval(fr, lhs);
- Object y = eval(fr, rhs);
- Object z = inplaceBinaryOp(fr, op, x, y);
- assignIdentifier(fr, (Identifier) lhs, z);
-
- } else if (lhs instanceof IndexExpression) {
- // object[index] op= y
- // The object and key should be evaluated only once, so we don't use lhs.eval().
- IndexExpression index = (IndexExpression) lhs;
- Object object = eval(fr, index.getObject());
- Object key = eval(fr, index.getKey());
- Object x = EvalUtils.index(fr.thread.mutability(), fr.thread.getSemantics(), object, key);
- // Evaluate rhs after lhs.
- Object y = eval(fr, rhs);
- Object z = inplaceBinaryOp(fr, op, x, y);
- try {
- EvalUtils.setIndex(object, key, z);
- } catch (EvalException ex) {
- fr.setErrorLocation(stmt.getOperatorLocation());
- throw ex;
- }
-
- } else {
- // Not possible for resolved ASTs.
- fr.setErrorLocation(stmt.getOperatorLocation());
- throw Starlark.errorf("cannot perform augmented assignment on '%s'", lhs);
- }
- }
-
- private static Object inplaceBinaryOp(StarlarkThread.Frame fr, TokenKind op, Object x, Object y)
- throws EvalException {
- // list += iterable behaves like list.extend(iterable)
- // TODO(b/141263526): following Python, allow list+=iterable (but not list+iterable).
- if (op == TokenKind.PLUS && x instanceof StarlarkList && y instanceof StarlarkList) {
- StarlarkList<?> list = (StarlarkList) x;
- list.extend(y);
- return list;
- }
- return EvalUtils.binaryOp(op, x, y, fr.thread.getSemantics(), fr.thread.mutability());
- }
-
- // ---- expressions ----
-
- private static Object eval(StarlarkThread.Frame fr, Expression expr)
- throws EvalException, InterruptedException {
- if (++fr.thread.steps >= fr.thread.stepLimit) {
- throw new EvalException("Starlark computation cancelled: too many steps");
- }
-
- // The switch cases have been split into separate functions
- // to reduce the stack usage during recursion, which is
- // especially important in practice for deeply nested a+...+z
- // expressions; see b/153764542.
- switch (expr.kind()) {
- case BINARY_OPERATOR:
- return evalBinaryOperator(fr, (BinaryOperatorExpression) expr);
- case COMPREHENSION:
- return evalComprehension(fr, (Comprehension) expr);
- case CONDITIONAL:
- return evalConditional(fr, (ConditionalExpression) expr);
- case DICT_EXPR:
- return evalDict(fr, (DictExpression) expr);
- case DOT:
- return evalDot(fr, (DotExpression) expr);
- case CALL:
- return evalCall(fr, (CallExpression) expr);
- case IDENTIFIER:
- return evalIdentifier(fr, (Identifier) expr);
- case INDEX:
- return evalIndex(fr, (IndexExpression) expr);
- case INTEGER_LITERAL:
- return ((IntegerLiteral) expr).getValue();
- case LIST_EXPR:
- return evalList(fr, (ListExpression) expr);
- case SLICE:
- return evalSlice(fr, (SliceExpression) expr);
- case STRING_LITERAL:
- return ((StringLiteral) expr).getValue();
- case UNARY_OPERATOR:
- return evalUnaryOperator(fr, (UnaryOperatorExpression) expr);
- }
- throw new IllegalArgumentException("unexpected expression: " + expr.kind());
- }
-
- private static Object evalBinaryOperator(StarlarkThread.Frame fr, BinaryOperatorExpression binop)
- throws EvalException, InterruptedException {
- Object x = eval(fr, binop.getX());
- // AND and OR require short-circuit evaluation.
- switch (binop.getOperator()) {
- case AND:
- return Starlark.truth(x) ? eval(fr, binop.getY()) : x;
- case OR:
- return Starlark.truth(x) ? x : eval(fr, binop.getY());
- default:
- Object y = eval(fr, binop.getY());
- try {
- return EvalUtils.binaryOp(
- binop.getOperator(), x, y, fr.thread.getSemantics(), fr.thread.mutability());
- } catch (EvalException ex) {
- fr.setErrorLocation(binop.getOperatorLocation());
- throw ex;
- }
- }
- }
-
- private static Object evalConditional(StarlarkThread.Frame fr, ConditionalExpression cond)
- throws EvalException, InterruptedException {
- Object v = eval(fr, cond.getCondition());
- return eval(fr, Starlark.truth(v) ? cond.getThenCase() : cond.getElseCase());
- }
-
- private static Object evalDict(StarlarkThread.Frame fr, DictExpression dictexpr)
- throws EvalException, InterruptedException {
- Dict<Object, Object> dict = Dict.of(fr.thread.mutability());
- for (DictExpression.Entry entry : dictexpr.getEntries()) {
- Object k = eval(fr, entry.getKey());
- Object v = eval(fr, entry.getValue());
- int before = dict.size();
- try {
- dict.put(k, v, (Location) null);
- } catch (EvalException ex) {
- fr.setErrorLocation(entry.getColonLocation());
- throw ex;
- }
- if (dict.size() == before) {
- fr.setErrorLocation(entry.getColonLocation());
- throw Starlark.errorf("Duplicated key %s when creating dictionary", Starlark.repr(k));
- }
- }
- return dict;
- }
-
- private static Object evalDot(StarlarkThread.Frame fr, DotExpression dot)
- throws EvalException, InterruptedException {
- Object object = eval(fr, dot.getObject());
- String name = dot.getField().getName();
- try {
- return Starlark.getattr(
- fr.thread.mutability(), fr.thread.getSemantics(), object, name, /*defaultValue=*/ null);
- } catch (EvalException ex) {
- fr.setErrorLocation(dot.getDotLocation());
- throw ex;
- }
- }
-
- private static Object evalCall(StarlarkThread.Frame fr, CallExpression call)
- throws EvalException, InterruptedException {
- fr.thread.checkInterrupt();
-
- Object fn = eval(fr, call.getFunction());
-
- // Starlark arguments are ordered: positionals < keywords < *args < **kwargs.
- //
- // This is stricter than Python2, which doesn't constrain keywords wrt *args,
- // but this ensures that the effects of evaluation of Starlark arguments occur
- // in source order.
- //
- // Starlark does not support Python3's multiple *args and **kwargs
- // nor freer ordering, such as f(a, *list, *list, **dict, **dict, b=1).
- // Supporting it would complicate a compiler, and produce effects out of order.
- // Also, Python's argument ordering rules are complex and the errors sometimes cryptic.
-
- // StarStar and Star args are guaranteed to be last, if they occur.
- ImmutableList<Argument> arguments = call.getArguments();
- int n = arguments.size();
- Argument.StarStar starstar = null;
- if (n > 0 && arguments.get(n - 1) instanceof Argument.StarStar) {
- starstar = (Argument.StarStar) arguments.get(n - 1);
- n--;
- }
- Argument.Star star = null;
- if (n > 0 && arguments.get(n - 1) instanceof Argument.Star) {
- star = (Argument.Star) arguments.get(n - 1);
- n--;
- }
- // Inv: n = |positional| + |named|
-
- // Allocate assuming no *args/**kwargs.
- int npos = call.getNumPositionalArguments();
- int i;
-
- // f(expr) -- positional args
- Object[] positional = npos == 0 ? EMPTY : new Object[npos];
- for (i = 0; i < npos; i++) {
- Argument arg = arguments.get(i);
- Object value = eval(fr, arg.getValue());
- positional[i] = value;
- }
-
- // f(id=expr) -- named args
- Object[] named = n == npos ? EMPTY : new Object[2 * (n - npos)];
- for (int j = 0; i < n; i++) {
- Argument.Keyword arg = (Argument.Keyword) arguments.get(i);
- Object value = eval(fr, arg.getValue());
- named[j++] = arg.getName();
- named[j++] = value;
- }
-
- // f(*args) -- varargs
- if (star != null) {
- Object value = eval(fr, star.getValue());
- if (!(value instanceof StarlarkIterable)) {
- fr.setErrorLocation(star.getStartLocation());
- throw Starlark.errorf("argument after * must be an iterable, not %s", Starlark.type(value));
- }
- // TODO(adonovan): opt: if value.size is known, preallocate (and skip if empty).
- ArrayList<Object> list = new ArrayList<>();
- Collections.addAll(list, positional);
- Iterables.addAll(list, ((Iterable<?>) value));
- positional = list.toArray();
- }
-
- // f(**kwargs)
- if (starstar != null) {
- Object value = eval(fr, starstar.getValue());
- if (!(value instanceof Dict)) {
- fr.setErrorLocation(starstar.getStartLocation());
- throw Starlark.errorf("argument after ** must be a dict, not %s", Starlark.type(value));
- }
- Dict<?, ?> kwargs = (Dict<?, ?>) value;
- int j = named.length;
- named = Arrays.copyOf(named, j + 2 * kwargs.size());
- for (Map.Entry<?, ?> e : kwargs.entrySet()) {
- if (!(e.getKey() instanceof String)) {
- fr.setErrorLocation(starstar.getStartLocation());
- throw Starlark.errorf("keywords must be strings, not %s", Starlark.type(e.getKey()));
- }
- named[j++] = e.getKey();
- named[j++] = e.getValue();
- }
- }
-
- Location loc = call.getLparenLocation(); // (Location is prematerialized)
- fr.setLocation(loc);
- try {
- return Starlark.fastcall(fr.thread, fn, positional, named);
- } catch (EvalException ex) {
- fr.setErrorLocation(loc);
- throw ex;
- }
- }
-
- private static Object evalIdentifier(StarlarkThread.Frame fr, Identifier id)
- throws EvalException, InterruptedException {
- String name = id.getName();
- Resolver.Binding bind = id.getBinding();
- if (bind == null) {
- // Legacy behavior, to be removed.
- Object result = fr.locals.get(name);
- if (result != null) {
- return result;
- }
- result = fn(fr).getModule().get(name);
- if (result != null) {
- return result;
- }
-
- // Assuming resolution was successfully applied before execution
- // (which is not yet true for copybara, but will be soon),
- // then the identifier must have been resolved but the
- // resolution was not annotated onto the syntax tree---because
- // it's a BUILD file that may share trees with the prelude.
- // So this error does not mean "undefined variable" (morally a
- // static error), but "variable was (dynamically) referenced
- // before being bound", as in 'print(x); x=1'.
- fr.setErrorLocation(id.getStartLocation());
- throw Starlark.errorf("variable '%s' is referenced before assignment", name);
- }
-
- Object result;
- switch (bind.getScope()) {
- case LOCAL:
- result = fr.locals.get(name);
- break;
- case GLOBAL:
- result = fn(fr).getModule().getGlobal(name);
- break;
- case PREDECLARED:
- // TODO(adonovan): call getPredeclared
- result = fn(fr).getModule().get(name);
- break;
- default:
- throw new IllegalStateException(bind.toString());
- }
- if (result == null) {
- // Since Scope was set, we know that the local/global variable is defined,
- // but its assignment was not yet executed.
- fr.setErrorLocation(id.getStartLocation());
- throw Starlark.errorf(
- "%s variable '%s' is referenced before assignment.", bind.getScope(), name);
- }
- return result;
- }
-
- private static Object evalIndex(StarlarkThread.Frame fr, IndexExpression index)
- throws EvalException, InterruptedException {
- Object object = eval(fr, index.getObject());
- Object key = eval(fr, index.getKey());
- try {
- return EvalUtils.index(fr.thread.mutability(), fr.thread.getSemantics(), object, key);
- } catch (EvalException ex) {
- fr.setErrorLocation(index.getLbracketLocation());
- throw ex;
- }
- }
-
- private static Object evalList(StarlarkThread.Frame fr, ListExpression expr)
- throws EvalException, InterruptedException {
- int n = expr.getElements().size();
- Object[] array = new Object[n];
- for (int i = 0; i < n; i++) {
- array[i] = eval(fr, expr.getElements().get(i));
- }
- return expr.isTuple() ? Tuple.wrap(array) : StarlarkList.wrap(fr.thread.mutability(), array);
- }
-
- private static Object evalSlice(StarlarkThread.Frame fr, SliceExpression slice)
- throws EvalException, InterruptedException {
- Object x = eval(fr, slice.getObject());
- Object start = slice.getStart() == null ? Starlark.NONE : eval(fr, slice.getStart());
- Object stop = slice.getStop() == null ? Starlark.NONE : eval(fr, slice.getStop());
- Object step = slice.getStep() == null ? Starlark.NONE : eval(fr, slice.getStep());
- try {
- return Starlark.slice(fr.thread.mutability(), x, start, stop, step);
- } catch (EvalException ex) {
- fr.setErrorLocation(slice.getLbracketLocation());
- throw ex;
- }
- }
-
- private static Object evalUnaryOperator(StarlarkThread.Frame fr, UnaryOperatorExpression unop)
- throws EvalException, InterruptedException {
- Object x = eval(fr, unop.getX());
- try {
- return EvalUtils.unaryOp(unop.getOperator(), x);
- } catch (EvalException ex) {
- fr.setErrorLocation(unop.getStartLocation());
- throw ex;
- }
- }
-
- private static Object evalComprehension(StarlarkThread.Frame fr, Comprehension comp)
- throws EvalException, InterruptedException {
- final Dict<Object, Object> dict = comp.isDict() ? Dict.of(fr.thread.mutability()) : null;
- final ArrayList<Object> list = comp.isDict() ? null : new ArrayList<>();
-
- // Save previous value (if any) of local variables bound in a 'for' clause
- // so we can restore them later.
- // TODO(adonovan): throw all this away when we implement flat environments.
- List<Object> saved = new ArrayList<>(); // alternating keys and values
- for (Comprehension.Clause clause : comp.getClauses()) {
- if (clause instanceof Comprehension.For) {
- for (Identifier ident :
- Identifier.boundIdentifiers(((Comprehension.For) clause).getVars())) {
- String name = ident.getName();
- Object value = fr.locals.get(ident.getName()); // may be null
- saved.add(name);
- saved.add(value);
- }
- }
- }
- fr.compcount++;
-
- // The Lambda class serves as a recursive lambda closure.
- class Lambda {
- // execClauses(index) recursively executes the clauses starting at index,
- // and finally evaluates the body and adds its value to the result.
- void execClauses(int index) throws EvalException, InterruptedException {
- fr.thread.checkInterrupt();
-
- // recursive case: one or more clauses
- if (index < comp.getClauses().size()) {
- Comprehension.Clause clause = comp.getClauses().get(index);
- if (clause instanceof Comprehension.For) {
- Comprehension.For forClause = (Comprehension.For) clause;
-
- Object iterable = eval(fr, forClause.getIterable());
- Iterable<?> listValue = Starlark.toIterable(iterable);
- EvalUtils.addIterator(iterable);
- try {
- for (Object elem : listValue) {
- assign(fr, forClause.getVars(), elem);
- execClauses(index + 1);
- }
- } catch (EvalException ex) {
- fr.setErrorLocation(forClause.getStartLocation());
- throw ex;
- } finally {
- EvalUtils.removeIterator(iterable);
- }
-
- } else {
- Comprehension.If ifClause = (Comprehension.If) clause;
- if (Starlark.truth(eval(fr, ifClause.getCondition()))) {
- execClauses(index + 1);
- }
- }
- return;
- }
-
- // base case: evaluate body and add to result.
- if (dict != null) {
- DictExpression.Entry body = (DictExpression.Entry) comp.getBody();
- Object k = eval(fr, body.getKey());
- try {
- EvalUtils.checkHashable(k);
- Object v = eval(fr, body.getValue());
- dict.put(k, v, (Location) null);
- } catch (EvalException ex) {
- fr.setErrorLocation(body.getColonLocation());
- throw ex;
- }
- } else {
- list.add(eval(fr, ((Expression) comp.getBody())));
- }
- }
- }
- new Lambda().execClauses(0);
- fr.compcount--;
-
- // Restore outer scope variables.
- // This loop implicitly undefines comprehension variables.
- for (int i = 0; i != saved.size(); ) {
- String name = (String) saved.get(i++);
- Object value = saved.get(i++);
- if (value != null) {
- fr.locals.put(name, value);
- } else {
- fr.locals.remove(name);
- }
- }
-
- return comp.isDict() ? dict : StarlarkList.copyOf(fr.thread.mutability(), list);
- }
-
- private static final Object[] EMPTY = {};
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvalException.java b/src/main/java/com/google/devtools/build/lib/syntax/EvalException.java
deleted file mode 100644
index 2a5405e..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/EvalException.java
+++ /dev/null
@@ -1,267 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Splitter;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-import com.google.common.io.Files;
-import java.io.File;
-import java.util.List;
-import java.util.function.Supplier;
-import javax.annotation.Nullable;
-
-/** An EvalException indicates an Starlark evaluation error. */
-public class EvalException extends Exception {
-
- // The location optionally specified at construction.
- // TODO(adonovan): doesn't belong; essentially ignored.
- // Replace by making each caller incorporate
- // the file name into the error message if necessary.
- // In the vast majority of cases, it isn't.
- @Nullable private final Location location;
-
- // The call stack associated with this error.
- // It is initially null, but is set by the interpreter to a non-empty
- // stack when popping a frame. Thus an exception newly created by a
- // built-in function has no stack until it is thrown out of a function call.
- //
- // EvalExceptions are often used to indicate the failure of an operator
- // such as getattr, or some piece of bazel rule validation machinery,
- // without reference to Starlark code. Such exceptions have no stack
- // until they are thrown in the context of a Starlark thread (e.g.
- // by a built-in function, or by the interpreter itself).
- @Nullable private ImmutableList<StarlarkThread.CallStackEntry> callstack;
-
- /** Constructs an EvalException. Use {@link Starlak#errorf} if you want string formatting. */
- public EvalException(String message) {
- this((Location) null, message);
- }
-
- /**
- * Constructs an EvalException with a message and optional cause.
- *
- * <p>The cause does not affect the error message, so callers should incorporate {@code
- * cause.getMessage()} into {@code message} if desired, or call {@code EvalException(Throwable)}.
- */
- public EvalException(String message, @Nullable Throwable cause) {
- this((Location) null, message, cause);
- }
-
- /** Constructs an EvalException using the same message as the cause exception. */
- public EvalException(Throwable cause) {
- this((Location) null, cause);
- }
-
- // TODO(adonovan): delete all constructors below. Stop using Location.
-
- /**
- * Constructs an EvalException with a message and optional location (deprecated).
- *
- * <p>Few clients need this constructor, as the Starlark interpreter automatically fill in the
- * locations from the call stack. Use {@link Starlark#errorf} instead, unless the exception needs
- * to appear to originate from a different location.
- */
- // TODO(adonovan): eliminate.
- public EvalException(@Nullable Location location, String message) {
- super(Preconditions.checkNotNull(message));
- this.location = location;
- }
-
- /**
- * Constructs an EvalException with a message, optional location (deprecated), and optional cause.
- *
- * <p>See notes at {@link #EvalException(Location, String)}. The cause does not affect the error
- * message, so callers should incorporate {@code cause.getMessage()} into {@code message} if
- * desired.
- */
- // TODO(adonovan): eliminate.
- public EvalException(@Nullable Location location, String message, @Nullable Throwable cause) {
- super(Preconditions.checkNotNull(message), cause);
- this.location = location;
- }
-
- /**
- * Constructs an EvalException with an optional location (deprecated) using the same message as
- * the cause exception.
- *
- * <p>See notes at {@link #EvalException(Location, String)}.
- */
- // TODO(adonovan): eliminate.
- public EvalException(@Nullable Location location, Throwable cause) {
- super(getCauseMessage(cause), cause);
- this.location = location;
- }
-
- private static String getCauseMessage(Throwable cause) {
- String msg = cause.getMessage();
- return msg != null ? msg : cause.toString();
- }
-
- /** Returns the error message. Does not include location (deprecated), call stack, or cause. */
- @Override
- public final String getMessage() {
- return super.getMessage();
- }
-
- /**
- * Returns the call stack associated with this error, outermost call first. A newly constructed
- * exception has an empty stack, but an exception that has been thrown out of a Starlark function
- * call has its stack populated automatically.
- */
- public final ImmutableList<StarlarkThread.CallStackEntry> getCallStack() {
- return callstack != null ? callstack : ImmutableList.of();
- }
-
- /** Returns the error message along with its call stack. May be overridden by subclasses. */
- @Override
- public String toString() {
- return getMessageWithStack();
- }
-
- /**
- * Returns the error message along with its call stack or location (deprecated), if any.
- * Equivalent to {@code getMessageWithStack(newSourceReader())}.
- */
- public final String getMessageWithStack() {
- return getMessageWithStack(newSourceReader());
- }
-
- /**
- * Returns the error message along with its call stack or location (deprecated), if any. The
- * source line for each stack frame is obtained from the provided SourceReader.
- */
- public final String getMessageWithStack(SourceReader src) {
- if (callstack != null) {
- return formatCallStack(callstack, getMessage(), src);
- }
-
- // An exception that has not been thrown out of a Starlark call
- // has no stack. It may have a location (for now). If so, print it.
- if (location != null && !location.equals(Location.BUILTIN)) {
- return location + ": " + getMessage();
- }
-
- return getMessage();
- }
-
- /**
- * A SourceReader reads the line of source denoted by a Location to be displayed in a formatted a
- * stack trace.
- */
- public interface SourceReader {
- /** Returns a single line of source code (sans newline), or null if unavailable. */
- String readline(Location loc);
- }
-
- /**
- * Sets the function used to obtain a SourceReader when subsequently formatting a call stack.
- *
- * <p>The default supplier returns SourceReaders that read from the file system, but a
- * security-conscious client may wish to disable this capability or provide an alternative.
- */
- public static synchronized void setSourceReaderSupplier(Supplier<SourceReader> f) {
- sourceReaderSupplier = f;
- }
-
- /** Returns a new SourceReader. See {@link #setSourceReaderSupplier}. */
- public static synchronized SourceReader newSourceReader() {
- return sourceReaderSupplier.get();
- }
-
- private static Supplier<SourceReader> sourceReaderSupplier =
- () -> {
- // TODO(adonovan): opt: cache seen files, as the stack often repeats the same files.
- return loc -> {
- try {
- String content = Files.asCharSource(new File(loc.file()), UTF_8).read();
- return Iterables.get(Splitter.on("\n").split(content), loc.line() - 1, null);
- } catch (Throwable unused) {
- // ignore any failure (e.g. security manager rejecting I/O)
- }
- return null;
- };
- };
-
- /**
- * Formats the given call stack and error message. Provided as a separate function from {@link
- * #getMessageWithStack} so that clients may modify the stack and/or error before formatting it.
- * The source line for each stack frame is obtained from the provided SourceReader.
- */
- public static String formatCallStack(
- List<StarlarkThread.CallStackEntry> callstack, String message, SourceReader src) {
- StringBuilder buf = new StringBuilder();
- int n = callstack.size(); // n > 0
- String prefix = "Error: ";
- // If the topmost frame is a built-in, don't show it.
- // Instead just prefix the name of the built-in onto the error message.
- StarlarkThread.CallStackEntry leaf = callstack.get(n - 1);
- if (leaf.location.equals(Location.BUILTIN)) {
- prefix = "Error in " + leaf.name + ": ";
- n--;
- }
- if (n > 0) {
- buf.append("Traceback (most recent call last):\n");
- for (int i = 0; i < n; i++) {
- StarlarkThread.CallStackEntry fr = callstack.get(i);
- // 'File "file.bzl", line 1, column 2, in fn'
- buf.append(String.format("\tFile \"%s\", ", fr.location.file()));
- if (fr.location.line() != 0) {
- buf.append("line ").append(fr.location.line()).append(", ");
- if (fr.location.column() != 0) {
- buf.append("column ").append(fr.location.column()).append(", ");
- }
- }
- buf.append("in ").append(fr.name).append('\n');
-
- // source line
- String line = src.readline(fr.location);
- if (line != null) {
- buf.append("\t\t").append(line.trim()).append('\n');
- }
- }
- }
- buf.append(prefix).append(message);
- return buf.toString();
- }
-
- /**
- * Returns the optional location passed to the constructor.
- *
- * @deprecated Do not use this feature. Instead, record auxiliary (non-stack) locations in the
- * error message itself, or call a dummy wrapper function to introduce a fake frame into the
- * call stack.
- */
- @Nullable
- @Deprecated
- public final Location getDeprecatedLocation() {
- return location;
- }
-
- // Ensures that this exception holds a call stack, taking the current
- // stack (which must be non-empty) from the thread if not.
- final EvalException ensureStack(StarlarkThread thread) {
- if (callstack == null) {
- this.callstack = thread.getCallStack();
- if (callstack.isEmpty()) {
- throw new IllegalStateException("empty callstack");
- }
- }
- return this;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
deleted file mode 100644
index 80ffeda..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
+++ /dev/null
@@ -1,540 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Strings;
-import com.google.common.collect.Ordering;
-import java.util.IllegalFormatException;
-
-/** Internal declarations used by the evaluator. */
-final class EvalUtils {
-
- private EvalUtils() {}
-
- /**
- * The exception that STARLARK_COMPARATOR might throw. This is an unchecked exception because
- * Comparator doesn't let us declare exceptions. It should normally be caught and wrapped in an
- * EvalException.
- */
- static class ComparisonException extends RuntimeException {
- ComparisonException(String msg) {
- super(msg);
- }
- }
-
- /**
- * Compare two Starlark values.
- *
- * <p>It may throw an unchecked exception ComparisonException that should be wrapped in an
- * EvalException.
- */
- // TODO(adonovan): consider what API to expose around comparison and ordering. Java's three-valued
- // comparator cannot properly handle weakly or partially ordered values such as IEEE754 floats.
- static final Ordering<Object> STARLARK_COMPARATOR =
- new Ordering<Object>() {
- private int compareLists(Sequence<?> o1, Sequence<?> o2) {
- if (o1 instanceof RangeList || o2 instanceof RangeList) {
- throw new ComparisonException("Cannot compare range objects");
- }
-
- for (int i = 0; i < Math.min(o1.size(), o2.size()); i++) {
- int cmp = compare(o1.get(i), o2.get(i));
- if (cmp != 0) {
- return cmp;
- }
- }
- return Integer.compare(o1.size(), o2.size());
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public int compare(Object o1, Object o2) {
-
- // optimize the most common cases
-
- if (o1 instanceof String && o2 instanceof String) {
- return ((String) o1).compareTo((String) o2);
- }
- if (o1 instanceof Integer && o2 instanceof Integer) {
- return Integer.compare((Integer) o1, (Integer) o2);
- }
-
- o1 = Starlark.fromJava(o1, null);
- o2 = Starlark.fromJava(o2, null);
-
- if (o1 instanceof Sequence
- && o2 instanceof Sequence
- && o1 instanceof Tuple == o2 instanceof Tuple) {
- return compareLists((Sequence) o1, (Sequence) o2);
- }
-
- if (o1 instanceof ClassObject) {
- throw new ComparisonException("Cannot compare structs");
- }
- try {
- return ((Comparable<Object>) o1).compareTo(o2);
- } catch (ClassCastException e) {
- throw new ComparisonException(
- "Cannot compare " + Starlark.type(o1) + " with " + Starlark.type(o2));
- }
- }
- };
-
- /** Throws EvalException if x is not hashable. */
- static void checkHashable(Object x) throws EvalException {
- if (!isHashable(x)) {
- // This results in confusing errors such as "unhashable type: tuple".
- // TODO(adonovan): ideally the error message would explain which
- // element of, say, a tuple is unhashable. The only practical way
- // to implement this is by implementing isHashable as a call to
- // Object.hashCode within a try/catch, and requiring all
- // unhashable Starlark values to throw a particular unchecked exception
- // with a helpful error message.
- throw Starlark.errorf("unhashable type: '%s'", Starlark.type(x));
- }
- }
-
- /**
- * Reports whether a legal Starlark value is considered hashable to Starlark, and thus suitable as
- * a key in a dict.
- */
- static boolean isHashable(Object o) {
- // Bazel makes widespread assumptions that all Starlark values can be hashed
- // by Java code, so we cannot implement isHashable by having
- // StarlarkValue.hashCode throw an unchecked exception, which would be more
- // efficient. Instead, before inserting a value in a dict, we must first ask
- // it whether it isHashable, and then call its hashCode method only if so.
- // For structs and tuples, this unfortunately visits the object graph twice.
- //
- // One subtlety: the struct.isHashable recursively asks whether its
- // elements are immutable, not hashable. Consequently, even though a list
- // may not be used as a dict key (even if frozen), a struct containing
- // a list is hashable. TODO(adonovan): fix this inconsistency.
- // Requires an incompatible change flag.
- if (o instanceof StarlarkValue) {
- return ((StarlarkValue) o).isHashable();
- }
- return Starlark.isImmutable(o);
- }
-
- static void addIterator(Object x) {
- if (x instanceof Mutability.Freezable) {
- ((Mutability.Freezable) x).updateIteratorCount(+1);
- }
- }
-
- static void removeIterator(Object x) {
- if (x instanceof Mutability.Freezable) {
- ((Mutability.Freezable) x).updateIteratorCount(-1);
- }
- }
-
- // The following functions for indexing and slicing match the behavior of Python.
-
- /**
- * Resolves a positive or negative index to an index in the range [0, length), or throws
- * EvalException if it is out of range. If the index is negative, it counts backward from length.
- */
- static int getSequenceIndex(int index, int length) throws EvalException {
- int actualIndex = index;
- if (actualIndex < 0) {
- actualIndex += length;
- }
- if (actualIndex < 0 || actualIndex >= length) {
- throw Starlark.errorf(
- "index out of range (index is %d, but sequence has %d elements)", index, length);
- }
- return actualIndex;
- }
-
- /**
- * Returns the effective index denoted by a user-supplied integer. First, if the integer is
- * negative, the length of the sequence is added to it, so an index of -1 represents the last
- * element of the sequence. Then, the integer is "clamped" into the inclusive interval [0,
- * length].
- */
- static int toIndex(int index, int length) {
- if (index < 0) {
- index += length;
- }
-
- if (index < 0) {
- return 0;
- } else if (index > length) {
- return length;
- } else {
- return index;
- }
- }
-
- /** Evaluates an eager binary operation, {@code x op y}. (Excludes AND and OR.) */
- static Object binaryOp(
- TokenKind op, Object x, Object y, StarlarkSemantics semantics, Mutability mu)
- throws EvalException {
- switch (op) {
- case PLUS:
- if (x instanceof Integer) {
- if (y instanceof Integer) {
- // int + int
- int xi = (Integer) x;
- int yi = (Integer) y;
- int z = xi + yi;
- // Overflow Detection, §2-13 Hacker's Delight:
- // "operands have the same sign and the sum
- // has a sign opposite to that of the operands."
- if (((xi ^ z) & (yi ^ z)) < 0) {
- throw Starlark.errorf("integer overflow in addition");
- }
- return z;
- }
-
- } else if (x instanceof String) {
- if (y instanceof String) {
- // string + string
- return (String) x + (String) y;
- }
-
- } else if (x instanceof Tuple) {
- if (y instanceof Tuple) {
- // tuple + tuple
- return Tuple.concat((Tuple<?>) x, (Tuple<?>) y);
- }
-
- } else if (x instanceof StarlarkList) {
- if (y instanceof StarlarkList) {
- // list + list
- return StarlarkList.concat((StarlarkList<?>) x, (StarlarkList<?>) y, mu);
- }
-
- }
- break;
-
- case PIPE:
- if (x instanceof Integer) {
- if (y instanceof Integer) {
- // int | int
- return ((Integer) x) | (Integer) y;
- }
- }
- break;
-
- case AMPERSAND:
- if (x instanceof Integer && y instanceof Integer) {
- // int & int
- return (Integer) x & (Integer) y;
- }
- break;
-
- case CARET:
- if (x instanceof Integer && y instanceof Integer) {
- // int ^ int
- return (Integer) x ^ (Integer) y;
- }
- break;
-
- case GREATER_GREATER:
- if (x instanceof Integer && y instanceof Integer) {
- // int >> int
- int xi = (Integer) x;
- int yi = (Integer) y;
- if (yi < 0) {
- throw Starlark.errorf("negative shift count: %d", yi);
- } else if (yi >= Integer.SIZE) {
- return xi < 0 ? -1 : 0;
- }
- return xi >> yi;
- }
- break;
-
- case LESS_LESS:
- if (x instanceof Integer && y instanceof Integer) {
- // int << int
- int xi = (Integer) x;
- int yi = (Integer) y;
- if (yi < 0) {
- throw Starlark.errorf("negative shift count: %d", yi);
- }
- int z = xi << yi; // only uses low 5 bits of yi
- if ((z >> yi) != xi || yi >= 32) {
- throw Starlark.errorf("integer overflow in left shift");
- }
- return z;
- }
- break;
-
- case MINUS:
- if (x instanceof Integer && y instanceof Integer) {
- // int - int
- int xi = (Integer) x;
- int yi = (Integer) y;
- int z = xi - yi;
- if (((xi ^ yi) & (xi ^ z)) < 0) {
- throw Starlark.errorf("integer overflow in subtraction");
- }
- return z;
- }
- break;
-
- case STAR:
- if (x instanceof Integer) {
- int xi = (Integer) x;
- if (y instanceof Integer) {
- // int * int
- long z = (long) xi * (long) (Integer) y;
- if ((int) z != z) {
- throw Starlark.errorf("integer overflow in multiplication");
- }
- return (int) z;
- } else if (y instanceof String) {
- // int * string
- return repeatString((String) y, xi);
- } else if (y instanceof Tuple) {
- // int * tuple
- return ((Tuple<?>) y).repeat(xi);
- } else if (y instanceof StarlarkList) {
- // int * list
- return ((StarlarkList<?>) y).repeat(xi, mu);
- }
-
- } else if (x instanceof String) {
- if (y instanceof Integer) {
- // string * int
- return repeatString((String) x, (Integer) y);
- }
-
- } else if (x instanceof Tuple) {
- if (y instanceof Integer) {
- // tuple * int
- return ((Tuple<?>) x).repeat((Integer) y);
- }
-
- } else if (x instanceof StarlarkList) {
- if (y instanceof Integer) {
- // list * int
- return ((StarlarkList<?>) x).repeat((Integer) y, mu);
- }
- }
- break;
-
- case SLASH:
- throw Starlark.errorf("The `/` operator is not allowed. For integer division, use `//`.");
-
- case SLASH_SLASH:
- if (x instanceof Integer && y instanceof Integer) {
- // int // int
- int xi = (Integer) x;
- int yi = (Integer) y;
- if (yi == 0) {
- throw Starlark.errorf("integer division by zero");
- }
- // http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html
- int quo = xi / yi;
- int rem = xi % yi;
- if ((xi < 0) != (yi < 0) && rem != 0) {
- quo--;
- }
- if (xi == Integer.MIN_VALUE && yi == -1) { // HD 2-13
- throw Starlark.errorf("integer overflow in division");
- }
- return quo;
- }
- break;
-
- case PERCENT:
- if (x instanceof Integer) {
- if (y instanceof Integer) {
- // int % int
- int xi = (Integer) x;
- int yi = (Integer) y;
- if (yi == 0) {
- throw Starlark.errorf("integer modulo by zero");
- }
- // In Starlark, the sign of the result is the sign of the divisor.
- int z = xi % yi;
- if ((xi < 0) != (yi < 0) && z != 0) {
- z += yi;
- }
- return z;
- }
-
- } else if (x instanceof String) {
- // string % any
- String xs = (String) x;
- try {
- if (y instanceof Tuple) {
- return Starlark.formatWithList(xs, (Tuple) y);
- } else {
- return Starlark.format(xs, y);
- }
- } catch (IllegalFormatException ex) {
- throw new EvalException(ex);
- }
- }
- break;
-
- case EQUALS_EQUALS:
- return x.equals(y);
-
- case NOT_EQUALS:
- return !x.equals(y);
-
- case LESS:
- return compare(x, y) < 0;
-
- case LESS_EQUALS:
- return compare(x, y) <= 0;
-
- case GREATER:
- return compare(x, y) > 0;
-
- case GREATER_EQUALS:
- return compare(x, y) >= 0;
-
- case IN:
- if (y instanceof StarlarkIndexable) {
- return ((StarlarkIndexable) y).containsKey(semantics, x);
- } else if (y instanceof String) {
- if (!(x instanceof String)) {
- throw Starlark.errorf(
- "'in <string>' requires string as left operand, not '%s'", Starlark.type(x));
- }
- return ((String) y).contains((String) x);
- }
- break;
-
- case NOT_IN:
- Object z = binaryOp(TokenKind.IN, x, y, semantics, mu);
- if (z != null) {
- return !Starlark.truth(z);
- }
- break;
-
- default:
- throw new AssertionError("not a binary operator: " + op);
- }
-
- // custom binary operator?
- if (x instanceof HasBinary) {
- Object z = ((HasBinary) x).binaryOp(op, y, true);
- if (z != null) {
- return z;
- }
- }
- if (y instanceof HasBinary) {
- Object z = ((HasBinary) y).binaryOp(op, x, false);
- if (z != null) {
- return z;
- }
- }
-
- throw Starlark.errorf(
- "unsupported binary operation: %s %s %s", Starlark.type(x), op, Starlark.type(y));
- }
-
- /** Implements comparison operators. */
- private static int compare(Object x, Object y) throws EvalException {
- try {
- return STARLARK_COMPARATOR.compare(x, y);
- } catch (ComparisonException e) {
- throw new EvalException(e);
- }
- }
-
- private static String repeatString(String s, int n) {
- return n <= 0 ? "" : Strings.repeat(s, n);
- }
-
- /** Evaluates a unary operation. */
- static Object unaryOp(TokenKind op, Object x) throws EvalException {
- switch (op) {
- case NOT:
- return !Starlark.truth(x);
-
- case MINUS:
- if (x instanceof Integer) {
- int xi = (Integer) x;
- if (xi == Integer.MIN_VALUE) {
- throw Starlark.errorf("integer overflow in negation");
- }
- return -xi;
- }
- break;
-
- case PLUS:
- if (x instanceof Integer) {
- return x;
- }
- break;
-
- case TILDE:
- if (x instanceof Integer) {
- return ~((Integer) x);
- }
- break;
-
- default:
- /* fall through */
- }
- throw Starlark.errorf("unsupported unary operation: %s%s", op, Starlark.type(x));
- }
-
- /**
- * Returns the element of sequence or mapping {@code object} indexed by {@code key}.
- *
- * @throws EvalException if {@code object} is not a sequence or mapping.
- */
- static Object index(Mutability mu, StarlarkSemantics semantics, Object object, Object key)
- throws EvalException {
- if (object instanceof StarlarkIndexable) {
- Object result = ((StarlarkIndexable) object).getIndex(semantics, key);
- // TODO(bazel-team): We shouldn't have this fromJava call here. If it's needed at all,
- // it should go in the implementations of StarlarkIndexable#getIndex that produce non-Starlark
- // values.
- return result == null ? null : Starlark.fromJava(result, mu);
- } else if (object instanceof String) {
- String string = (String) object;
- int index = Starlark.toInt(key, "string index");
- index = getSequenceIndex(index, string.length());
- return string.substring(index, index + 1);
- } else {
- throw Starlark.errorf(
- "type '%s' has no operator [](%s)", Starlark.type(object), Starlark.type(key));
- }
- }
-
- /**
- * Updates an object as if by the Starlark statement {@code object[key] = value}.
- *
- * @throws EvalException if the object is not a list or dict.
- */
- static void setIndex(Object object, Object key, Object value) throws EvalException {
- if (object instanceof Dict) {
- @SuppressWarnings("unchecked")
- Dict<Object, Object> dict = (Dict<Object, Object>) object;
- dict.put(key, value, (Location) null);
-
- } else if (object instanceof StarlarkList) {
- @SuppressWarnings("unchecked")
- StarlarkList<Object> list = (StarlarkList<Object>) object;
- int index = Starlark.toInt(key, "list index");
- index = EvalUtils.getSequenceIndex(index, list.size());
- list.set(index, value, (Location) null);
-
- } else {
- throw Starlark.errorf(
- "can only assign an element in a dictionary or a list, not in a '%s'",
- Starlark.type(object));
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Expression.java b/src/main/java/com/google/devtools/build/lib/syntax/Expression.java
deleted file mode 100644
index 2206d79..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Expression.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2014 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.syntax;
-
-
-/**
- * Base class for all expression nodes in the AST.
- *
- * <p>The only expressions permitted on the left-hand side of an assignment (such as 'lhs=rhs' or
- * 'for lhs in expr') are identifiers, dot expressions (x.y), list expressions ([expr, ...]), tuple
- * expressions ((expr, ...)), or parenthesized variants of those. In particular and unlike Python,
- * slice expressions and starred expressions cannot appear on the LHS. TODO(bazel-team): Add support
- * for assigning to slices (e.g. a[2:6] = [3]).
- */
-public abstract class Expression extends Node {
-
- /**
- * Kind of the expression. This is similar to using instanceof, except that it's more efficient
- * and can be used in a switch/case.
- */
- public enum Kind {
- BINARY_OPERATOR,
- COMPREHENSION,
- CONDITIONAL,
- DICT_EXPR,
- DOT,
- CALL,
- IDENTIFIER,
- INDEX,
- INTEGER_LITERAL,
- LIST_EXPR,
- SLICE,
- STRING_LITERAL,
- UNARY_OPERATOR,
- }
-
- Expression(FileLocations locs) {
- super(locs);
- }
-
- /**
- * Kind of the expression. This is similar to using instanceof, except that it's more efficient
- * and can be used in a switch/case.
- */
- public abstract Kind kind();
-
- /** Parses an expression with the default options. */
- public static Expression parse(ParserInput input) throws SyntaxError.Exception {
- return parse(input, FileOptions.DEFAULT);
- }
-
- /** Parses an expression. */
- public static Expression parse(ParserInput input, FileOptions options)
- throws SyntaxError.Exception {
- return Parser.parseExpression(input, options);
- }
-
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ExpressionStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/ExpressionStatement.java
deleted file mode 100644
index 32d3b26..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ExpressionStatement.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2014 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.syntax;
-
-/** Syntax node for a statement consisting of an expression evaluated for effect. */
-public final class ExpressionStatement extends Statement {
-
- private final Expression expression;
-
- ExpressionStatement(FileLocations locs, Expression expression) {
- super(locs);
- this.expression = expression;
- }
-
- public Expression getExpression() {
- return expression;
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public int getStartOffset() {
- return expression.getStartOffset();
- }
-
- @Override
- public int getEndOffset() {
- return expression.getEndOffset();
- }
-
- @Override
- public Kind kind() {
- return Kind.EXPRESSION;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FileLocations.java b/src/main/java/com/google/devtools/build/lib/syntax/FileLocations.java
deleted file mode 100644
index a613d6e..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/FileLocations.java
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import java.util.Arrays;
-import java.util.Objects;
-import javax.annotation.concurrent.Immutable;
-
-/**
- * FileLocations maps each source offset within a file to a Location. An offset is a (UTF-16) char
- * index such that {@code 0 <= offset <= size}. A Location is a (file, line, column) triple.
- */
-@Immutable
-final class FileLocations {
-
- private final int[] linestart; // maps line number (line >= 1) to char offset
- private final String file;
- private final int size; // size of file in chars
-
- private FileLocations(int[] linestart, String file, int size) {
- this.linestart = linestart;
- this.file = file;
- this.size = size;
- }
-
- static FileLocations create(char[] buffer, String file) {
- return new FileLocations(computeLinestart(buffer), file, buffer.length);
- }
-
- String file() {
- return file;
- }
-
- private int getLineAt(int offset) {
- if (offset < 0 || offset > size) {
- throw new IllegalStateException("Illegal position: " + offset);
- }
- int lowBoundary = 1;
- int highBoundary = linestart.length - 1;
- while (true) {
- if ((highBoundary - lowBoundary) <= 1) {
- if (linestart[highBoundary] > offset) {
- return lowBoundary;
- } else {
- return highBoundary;
- }
- }
- int medium = lowBoundary + ((highBoundary - lowBoundary) >> 1);
- if (linestart[medium] > offset) {
- highBoundary = medium;
- } else {
- lowBoundary = medium;
- }
- }
- }
-
- Location getLocation(int offset) {
- int line = getLineAt(offset);
- int column = offset - linestart[line] + 1;
- return new Location(file, line, column);
- }
-
- int size() {
- return size;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(Arrays.hashCode(linestart), file, size);
- }
-
- @Override
- public boolean equals(Object other) {
- if (!(other instanceof FileLocations)) {
- return false;
- }
- FileLocations that = (FileLocations) other;
- return this.size == that.size
- && Arrays.equals(this.linestart, that.linestart)
- && this.file.equals(that.file);
- }
-
- private static int[] computeLinestart(char[] buffer) {
- // Compute the size.
- int size = 2;
- for (int i = 0; i < buffer.length; i++) {
- if (buffer[i] == '\n') {
- size++;
- }
- }
- int[] linestart = new int[size];
-
- int index = 0;
- linestart[index++] = 0; // The 0th line does not exist - so we fill something in
- // to make sure the start pos for the 1st line ends up at
- // linestart[1]. Using 0 is useful for tables that are
- // completely empty.
- linestart[index++] = 0; // The first line ("line 1") starts at offset 0.
-
- // Scan the buffer and record the offset of each line start. Doing this
- // once upfront is faster than checking each char as it is pulled from
- // the buffer.
- for (int i = 0; i < buffer.length; i++) {
- if (buffer[i] == '\n') {
- linestart[index++] = i + 1;
- }
- }
- return linestart;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FileOptions.java b/src/main/java/com/google/devtools/build/lib/syntax/FileOptions.java
deleted file mode 100644
index 99be932..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/FileOptions.java
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2020 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.syntax;
-
-import com.google.auto.value.AutoValue;
-
-/**
- * FileOptions is a set of options that affect the static processing---scanning, parsing, validation
- * (identifier resolution), and compilation---of a single Starlark file. These options affect the
- * language accepted by the frontend (in effect, the dialect), and "code generation", analogous to
- * the command-line options of a typical compiler.
- *
- * <p>Different files within the same application and even executed within the same thread may be
- * subject to different file options. For example, in Bazel, load statements in WORKSPACE files may
- * need to be interleaved with other statements, whereas in .bzl files, load statements must appear
- * all at the top. A single thread may execute a WORKSPACE file and call functions defined in .bzl
- * files.
- *
- * <p>The {@link #DEFAULT} options represent the desired behavior for new uses of Starlark. It is a
- * goal to keep this set of options small and closed. Each represents a language feature, perhaps a
- * deprecated, obscure, or regrettable one. By contrast, {@link StarlarkSemantics} defines a
- * (soon-to-be) open-ended set of options that affect the dynamic behavior of Starlark threads and
- * (mostly application-defined) built-in functions, and particularly attribute selection operations
- * {@code x.f}.
- */
-@AutoValue
-public abstract class FileOptions {
-
- /** The default options for Starlark static processing. New clients should use these defaults. */
- public static final FileOptions DEFAULT = builder().build();
-
- // Options are presented in phase order: scanner, parser, validator, compiler.
-
- // --- scanner options ---
-
- /** Disallow ineffective escape sequences such as {@code \a} when scanning string literals. */
- public abstract boolean restrictStringEscapes();
-
- // --- validator options ---
-
- /**
- * During resolution, permit load statements to access private names such as {@code _x}. <br>
- * (Required for continued support of Bazel "WORKSPACE.resolved" files.)
- */
- public abstract boolean allowLoadPrivateSymbols();
-
- /**
- * During resolution, permit multiple bindings of top-level variables. <br>
- * (Required for continued support of Bazel BUILD files and Copybara files.)
- */
- public abstract boolean allowToplevelRebinding();
-
- // TODO(adonovan): implement this option to support the REPL and prelude.
- //
- // /**
- // * During resolution, make load statements bind global variables of the module, not file-local
- // * variables. (Intended for use in REPLs, and the prelude.)
- // */
- // public abstract boolean loadBindsGlobally();
-
- /**
- * During resolution, require load statements to appear before other kinds of statements. <br>
- * (Required for continued support of Bazel BUILD and especially WORKSPACE files.)
- */
- public abstract boolean requireLoadStatementsFirst();
-
- /**
- * Record the results of name resolution in the syntax tree by setting {@code Identifer.scope}.
- * (Disabled for Bazel BUILD files, as its prelude's syntax trees are shared.)
- */
- public abstract boolean recordScope();
-
- public static Builder builder() {
- // These are the DEFAULT values.
- return new AutoValue_FileOptions.Builder()
- .restrictStringEscapes(true)
- .allowLoadPrivateSymbols(false)
- .allowToplevelRebinding(false)
- // .loadBindsGlobally(false)
- .requireLoadStatementsFirst(true)
- .recordScope(true);
- }
-
- public abstract Builder toBuilder();
-
- /** This javadoc comment states that FileOptions.Builder is a builder for FileOptions. */
- @AutoValue.Builder
- public abstract static class Builder {
- // AutoValue why u make me say it 3 times?
- public abstract Builder restrictStringEscapes(boolean value);
-
- public abstract Builder allowLoadPrivateSymbols(boolean value);
-
- public abstract Builder allowToplevelRebinding(boolean value);
-
- // public abstract Builder loadBindsGlobally(boolean value);
-
- public abstract Builder requireLoadStatementsFirst(boolean value);
-
- public abstract Builder recordScope(boolean value);
-
- public abstract FileOptions build();
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FlagGuardedValue.java b/src/main/java/com/google/devtools/build/lib/syntax/FlagGuardedValue.java
deleted file mode 100644
index 489fd24..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/FlagGuardedValue.java
+++ /dev/null
@@ -1,101 +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.syntax;
-
-/**
- * Wrapper on a value in the predeclared lexical block that controls its accessibility to Starlark
- * based on the value of a semantic flag.
- *
- * <p>For example, this could control whether symbol "Foo" exists in the Starlark global frame: such
- * a symbol might only be accessible if --experimental_foo is set to true. In order to create this
- * control, an instance of this class should be added to the global frame under "Foo". This flag
- * guard will throw a descriptive {@link EvalException} when "Foo" would be accessed without the
- * proper flag.
- */
-public final class FlagGuardedValue {
- private final Object obj;
- private final String flag;
- private final FlagType flagType;
-
- private enum FlagType {
- DEPRECATION,
- EXPERIMENTAL;
- }
-
- private FlagGuardedValue(Object obj, String flag, FlagType flagType) {
- this.obj = obj;
- if (flag.charAt(0) != '-' && flag.charAt(0) != '+') {
- throw new IllegalArgumentException(String.format("flag needs [+-] prefix: %s", flag));
- }
- this.flag = flag;
- this.flagType = flagType;
- }
-
- /**
- * Creates a flag guard which only permits access of the given object when the given boolean flag
- * is true. If the given flag is false and the object would be accessed, an error is thrown
- * describing the feature as experimental, and describing that the flag must be set to true.
- *
- * <p>The flag identifier must have a + or - prefix; see StarlarkSemantics.
- */
- public static FlagGuardedValue onlyWhenExperimentalFlagIsTrue(String flag, Object obj) {
- return new FlagGuardedValue(obj, flag, FlagType.EXPERIMENTAL);
- }
-
- /**
- * Creates a flag guard which only permits access of the given object when the given boolean flag
- * is false. If the given flag is true and the object would be accessed, an error is thrown
- * describing the feature as deprecated, and describing that the flag must be set to false.
- *
- * <p>The flag identifier must have a + or - prefix; see StarlarkSemantics.
- */
- public static FlagGuardedValue onlyWhenIncompatibleFlagIsFalse(String flag, Object obj) {
- return new FlagGuardedValue(obj, flag, FlagType.DEPRECATION);
- }
-
- /**
- * Returns an error describing an attempt to access this guard's protected object when it should
- * be inaccessible in the (contextually implied) semantics.
- */
- String getErrorFromAttemptingAccess(String name) {
- return flagType == FlagType.EXPERIMENTAL
- ? name
- + " is experimental and thus unavailable with the current flags. It may be enabled by"
- + " setting --"
- + flag.substring(1)
- : name
- + " is deprecated and will be removed soon. It may be temporarily re-enabled by"
- + " setting --"
- + flag.substring(1)
- + "=false";
- }
-
- /**
- * Returns this guard's underlying object. This should be called when appropriate validation has
- * occurred to ensure that the object is accessible with the (implied) semantics.
- */
- public Object getObject() {
- return obj;
- }
-
- /** Returns true if this guard's underlying object is accessible under the given semantics. */
- boolean isObjectAccessibleUsingSemantics(StarlarkSemantics semantics) {
- if (flagType == FlagType.EXPERIMENTAL) {
- return semantics.isFeatureEnabledBasedOnTogglingFlags(flag, "");
- } else {
- return semantics.isFeatureEnabledBasedOnTogglingFlags("", flag);
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FlowStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/FlowStatement.java
deleted file mode 100644
index 4013668..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/FlowStatement.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2014 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.syntax;
-
-
-/** A class for flow statements (break, continue, and pass) */
-public final class FlowStatement extends Statement {
-
- private final TokenKind kind; // BREAK | CONTINUE | PASS
- private final int offset;
-
- /** @param kind The label of the statement (break, continue, or pass) */
- FlowStatement(FileLocations locs, TokenKind kind, int offset) {
- super(locs);
- this.kind = kind;
- this.offset = offset;
- }
-
- public TokenKind getKind() {
- return kind;
- }
-
- @Override
- public String toString() {
- return kind.toString() + "\n";
- }
-
- @Override
- public int getStartOffset() {
- return offset;
- }
-
- @Override
- public int getEndOffset() {
- return offset + kind.toString().length();
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Statement.Kind kind() {
- return Statement.Kind.FLOW;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ForStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/ForStatement.java
deleted file mode 100644
index 8847860..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ForStatement.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-
-/** Syntax node for a for loop statement. */
-public final class ForStatement extends Statement {
-
- private final int forOffset;
- private final Expression vars;
- private final Expression collection;
- private final ImmutableList<Statement> body; // non-empty if well formed
-
- /** Constructs a for loop statement. */
- ForStatement(
- FileLocations locs,
- int forOffset,
- Expression vars,
- Expression collection,
- ImmutableList<Statement> body) {
- super(locs);
- this.forOffset = forOffset;
- this.vars = Preconditions.checkNotNull(vars);
- this.collection = Preconditions.checkNotNull(collection);
- this.body = body;
- }
-
- public Expression getVars() {
- return vars;
- }
-
- /**
- * @return The collection we iterate on, e.g. `col` in `for x in col:`
- */
- public Expression getCollection() {
- return collection;
- }
-
- public ImmutableList<Statement> getBody() {
- return body;
- }
-
- @Override
- public int getStartOffset() {
- return forOffset;
- }
-
- @Override
- public int getEndOffset() {
- return body.isEmpty()
- ? collection.getEndOffset() // wrong, but tree is ill formed
- : body.get(body.size() - 1).getEndOffset();
- }
-
- @Override
- public String toString() {
- return "for " + vars + " in " + collection + ": ...\n";
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.FOR;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FormatParser.java b/src/main/java/com/google/devtools/build/lib/syntax/FormatParser.java
deleted file mode 100644
index 92dd881..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/FormatParser.java
+++ /dev/null
@@ -1,291 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.CharMatcher;
-import com.google.common.collect.ImmutableSet;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A helper class that offers a subset of the functionality of Python's string#format.
- *
- * <p>Currently, both manual and automatic positional as well as named replacement fields are
- * supported. However, nested replacement fields are not allowed.
- */
-final class FormatParser {
-
- /**
- * Matches strings likely to be a number, faster alternative to relying solely on Integer.parseInt
- * and NumberFormatException to determine numericness.
- */
- private static final CharMatcher LIKELY_NUMERIC_MATCHER =
- CharMatcher.inRange('0', '9').or(CharMatcher.is('-'));
-
- private static final ImmutableSet<Character> ILLEGAL_IN_FIELD =
- ImmutableSet.of('.', '[', ']', ',');
-
- /**
- * Formats the given input string by using the given arguments
- *
- * <p>This method offers a subset of the functionality of Python's string#format
- *
- * @param input The string to be formatted
- * @param args Positional arguments
- * @param kwargs Named arguments
- * @return The formatted string
- */
- String format(String input, List<Object> args, Map<String, Object> kwargs) throws EvalException {
- char[] chars = input.toCharArray();
- StringBuilder output = new StringBuilder();
- History history = new History();
-
- for (int pos = 0; pos < chars.length; ++pos) {
- char current = chars[pos];
- int advancePos = 0;
-
- if (current == '{') {
- advancePos = processOpeningBrace(chars, pos, args, kwargs, history, output);
- } else if (current == '}') {
- advancePos = processClosingBrace(chars, pos, output);
- } else {
- output.append(current);
- }
-
- pos += advancePos;
- }
-
- return output.toString();
- }
-
- /**
- * Processes the expression after an opening brace (possibly a replacement field) and emits the
- * result to the output StringBuilder
- *
- * @param chars The entire string
- * @param pos The position of the opening brace
- * @param args List of positional arguments
- * @param kwargs Map of named arguments
- * @param history Helper object that tracks information about previously seen positional
- * replacement fields
- * @param output StringBuilder that consumes the result
- * @return Number of characters that have been consumed by this method
- */
- private int processOpeningBrace(
- char[] chars,
- int pos,
- List<Object> args,
- Map<String, Object> kwargs,
- History history,
- StringBuilder output)
- throws EvalException {
- Printer printer = new Printer(output);
- if (has(chars, pos + 1, '{')) {
- // Escaped brace -> output and move to char after right brace
- printer.append("{");
- return 1;
- }
-
- // Inside a replacement field
- String key = getFieldName(chars, pos);
- Object value = null;
-
- // Only positional replacement fields will lead to a valid index
- try {
- if (key.isEmpty() || LIKELY_NUMERIC_MATCHER.matchesAllOf(key)) {
- int index = parsePositional(key, history);
-
- if (index < 0 || index >= args.size()) {
- throw Starlark.errorf("No replacement found for index %d", index);
- }
-
- value = args.get(index);
- } else {
- value = getKwarg(kwargs, key);
- }
- } catch (NumberFormatException nfe) {
- // Non-integer index -> Named
- value = getKwarg(kwargs, key);
- }
-
- // Format object for output
- printer.str(value);
-
- // Advances the current position to the index of the closing brace of the
- // replacement field. Due to the definition of the enclosing for() loop,
- // the next iteration will examine the character right after the brace.
- return key.length() + 1;
- }
-
- private Object getKwarg(Map<String, Object> kwargs, String key) throws EvalException {
- if (!kwargs.containsKey(key)) {
- throw Starlark.errorf("Missing argument '%s'", key);
- }
-
- return kwargs.get(key);
- }
-
- /**
- * Processes a closing brace and emits the result to the output StringBuilder
- *
- * @param chars The entire string
- * @param pos Position of the closing brace
- * @param output StringBuilder that consumes the result
- * @return Number of characters that have been consumed by this method
- */
- private int processClosingBrace(char[] chars, int pos, StringBuilder output)
- throws EvalException {
- if (!has(chars, pos + 1, '}')) {
- // Invalid brace outside replacement field
- throw Starlark.errorf("Found '}' without matching '{'");
- }
-
- // Escaped brace -> output and move to char after right brace
- output.append("}");
- return 1;
- }
-
- /**
- * Checks whether the given input string has a specific character at the given location
- *
- * @param data Input string as character array
- * @param pos Position to be checked
- * @param needle Character to be searched for
- * @return True if string has the specified character at the given location
- */
- private static boolean has(char[] data, int pos, char needle) {
- return pos < data.length && data[pos] == needle;
- }
-
- /**
- * Extracts the name/index of the replacement field that starts at the specified location
- *
- * @param chars Input string
- * @param openingBrace Position of the opening brace of the replacement field
- * @return Name or index of the current replacement field
- */
- private String getFieldName(char[] chars, int openingBrace) throws EvalException {
- StringBuilder result = new StringBuilder();
- boolean foundClosingBrace = false;
-
- for (int pos = openingBrace + 1; pos < chars.length; ++pos) {
- char current = chars[pos];
-
- if (current == '}') {
- foundClosingBrace = true;
- break;
- } else {
- if (current == '{') {
- throw Starlark.errorf("Nested replacement fields are not supported");
- } else if (ILLEGAL_IN_FIELD.contains(current)) {
- throw Starlark.errorf("Invalid character '%s' inside replacement field", current);
- }
-
- result.append(current);
- }
- }
-
- if (!foundClosingBrace) {
- throw Starlark.errorf("Found '{' without matching '}'");
- }
-
- return result.toString();
- }
-
- /**
- * Converts the given key into an integer or assigns the next available index, if empty.
- *
- * @param key Key to be converted
- * @param history Helper object that tracks information about previously seen positional
- * replacement fields
- * @return The integer equivalent of the key
- */
- private int parsePositional(String key, History history) throws EvalException {
- int result = -1;
-
- try {
- if (key.isEmpty()) {
- // Automatic positional -> a new index value has to be assigned
- history.setAutomaticPositional();
- result = history.getNextPosition();
- } else {
- // This will fail if key is a named argument
- result = Integer.parseInt(key);
- history.setManualPositional(); // Only register if the conversion succeeds
- }
- } catch (MixedTypeException mte) {
- throw Starlark.errorf("%s", mte.getMessage());
- }
-
- return result;
- }
-
- /**
- * Exception for invalid combinations of replacement field types
- */
- private static final class MixedTypeException extends Exception {
- MixedTypeException() {
- super("Cannot mix manual and automatic numbering of positional fields");
- }
- }
-
- /**
- * A wrapper to keep track of information about previous replacement fields
- */
- private static final class History {
- /** Different types of positional replacement fields */
- enum Positional {
- NONE,
- MANUAL, // {0}, {1} etc.
- AUTOMATIC // {}
- }
-
- Positional type = Positional.NONE;
- int position = -1;
-
- /**
- * Returns the next available index for an automatic positional replacement field
- *
- * @return Next index
- */
- int getNextPosition() {
- ++position;
- return position;
- }
-
- /** Registers a manual positional replacement field */
- void setManualPositional() throws MixedTypeException {
- setPositional(Positional.MANUAL);
- }
-
- /** Registers an automatic positional replacement field */
- void setAutomaticPositional() throws MixedTypeException {
- setPositional(Positional.AUTOMATIC);
- }
-
- /**
- * Indicates that a positional replacement field of the specified type is being processed and
- * checks whether this conflicts with any previously seen replacement fields
- *
- * @param current Type of current replacement field
- */
- void setPositional(Positional current) throws MixedTypeException {
- if (type == Positional.NONE) {
- type = current;
- } else if (type != current) {
- throw new MixedTypeException();
- }
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/HasBinary.java b/src/main/java/com/google/devtools/build/lib/syntax/HasBinary.java
deleted file mode 100644
index d5b5566..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/HasBinary.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2020 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.syntax;
-
-import javax.annotation.Nullable;
-
-/**
- * A Starlark value that supports binary operators such as {@code x+y}.
- *
- * <p>During evaluation of a Starlark binary operation, if none of the built-in cases match, then
- * the left operand is queried; if it implements HasBinary, its {@link #binaryOp} method is called.
- * If the left operand does not implement HasBinary, or declines to implement the particular
- * operation by returning null, then the right operand is queried for HasBinary and its {@link
- * #binaryOp} method is called. If neither operand defines the operator, evaluation fails.
- *
- * <p>Subclasses should strive for appropriate symmetries in their implementations, such as {@code x
- * * y == y * x}.
- */
-// TODO(adonovan): rename BinaryOperand?
-public interface HasBinary extends StarlarkValue {
-
- /**
- * Returns {@code this op that}, if thisLeft, or {@code that op this} otherwise. May return null
- * to indicate that the operation is not supported, or may throw a specific exception.
- */
- @Nullable
- Object binaryOp(TokenKind op, Object that, boolean thisLeft) throws EvalException;
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Identifier.java b/src/main/java/com/google/devtools/build/lib/syntax/Identifier.java
deleted file mode 100644
index ac1ff86..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Identifier.java
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableSet;
-import javax.annotation.Nullable;
-
-/** Syntax node for an identifier. */
-public final class Identifier extends Expression {
-
- private final String name;
- private final int nameOffset;
-
- // set by Resolver
- @Nullable private Resolver.Binding binding;
-
- Identifier(FileLocations locs, String name, int nameOffset) {
- super(locs);
- this.name = name;
- this.nameOffset = nameOffset;
- }
-
- @Override
- public int getStartOffset() {
- return nameOffset;
- }
-
- @Override
- public int getEndOffset() {
- return nameOffset + name.length();
- }
-
- /**
- * Returns the name of the Identifier. If there were parse errors, misparsed regions may be
- * represented as an Identifier for which {@code !isValid(getName())}.
- */
- public String getName() {
- return name;
- }
-
- public boolean isPrivate() {
- return name.startsWith("_");
- }
-
- /** Returns information about the binding that the identifier denotes. Set by the resolver. */
- @Nullable
- public Resolver.Binding getBinding() {
- return binding;
- }
-
- void setBinding(Resolver.Binding bind) {
- Preconditions.checkState(this.binding == null);
- this.binding = bind;
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.IDENTIFIER;
- }
-
- /** Reports whether the string is a valid identifier. */
- public static boolean isValid(String name) {
- // Keep consistent with Lexer.scanIdentifier.
- for (int i = 0; i < name.length(); i++) {
- char c = name.charAt(i);
- if (!(('a' <= c && c <= 'z')
- || ('A' <= c && c <= 'Z')
- || (i > 0 && '0' <= c && c <= '9')
- || (c == '_'))) {
- return false;
- }
- }
- return !name.isEmpty();
- }
-
- /**
- * Returns all names bound by an LHS expression.
- *
- * <p>Examples:
- *
- * <ul>
- * <li><{@code x = ...} binds x.
- * <li><{@code x, [y,z] = ..} binds x, y, z.
- * <li><{@code x[5] = ..} does not bind any names.
- * </ul>
- */
- // TODO(adonovan): remove this function in due course.
- // - Resolver makes one pass to discover bindings than another to resolve uses.
- // When it works in a single pass, it is more efficient to process bindings in order,
- // deferring (rare) forward references until the end of the block.
- // - Eval calls boundIdentifiers for comprehensions. This can be eliminated when
- // recordScope is always enabled and variables are assigned frame slot indices.
- // - Eval calls boundIdentifiers for the 'export' hack. This can be eliminated
- // when we switch to compilation by emitting EXPORT instructions for the necessary
- // bindings. (Ideally we would eliminate Bazel's export hack entirely.)
- public static ImmutableSet<Identifier> boundIdentifiers(Expression expr) {
- if (expr instanceof Identifier) {
- // Common case/fast path - skip the builder.
- return ImmutableSet.of((Identifier) expr);
- } else {
- ImmutableSet.Builder<Identifier> result = ImmutableSet.builder();
- collectBoundIdentifiers(expr, result);
- return result.build();
- }
- }
-
- private static void collectBoundIdentifiers(
- Expression lhs, ImmutableSet.Builder<Identifier> result) {
- if (lhs instanceof Identifier) {
- result.add((Identifier) lhs);
- return;
- }
- if (lhs instanceof ListExpression) {
- ListExpression variables = (ListExpression) lhs;
- for (Expression expression : variables.getElements()) {
- collectBoundIdentifiers(expression, result);
- }
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/IfStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/IfStatement.java
deleted file mode 100644
index 08a0dfd..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/IfStatement.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.collect.ImmutableList;
-import java.util.List;
-import javax.annotation.Nullable;
-
-/** Syntax node for an if or elif statement. */
-public final class IfStatement extends Statement {
-
- private final TokenKind token; // IF or ELIF
- private final int ifOffset;
- private final Expression condition;
- // These blocks may be non-null but empty after a misparse:
- private final ImmutableList<Statement> thenBlock; // non-empty
- @Nullable ImmutableList<Statement> elseBlock; // non-empty if non-null; set after construction
-
- IfStatement(
- FileLocations locs,
- TokenKind token,
- int ifOffset,
- Expression condition,
- List<Statement> thenBlock) {
- super(locs);
- this.token = token;
- this.ifOffset = ifOffset;
- this.condition = condition;
- this.thenBlock = ImmutableList.copyOf(thenBlock);
- }
-
- /**
- * Reports whether this is an 'elif' statement.
- *
- * <p>An elif statement may appear only as the sole statement in the "else" block of another
- * IfStatement.
- */
- public boolean isElif() {
- return token == TokenKind.ELIF;
- }
-
- public Expression getCondition() {
- return condition;
- }
-
- public ImmutableList<Statement> getThenBlock() {
- return thenBlock;
- }
-
- @Nullable
- public ImmutableList<Statement> getElseBlock() {
- return elseBlock;
- }
-
- void setElseBlock(ImmutableList<Statement> elseBlock) {
- this.elseBlock = elseBlock;
- }
-
- @Override
- public int getStartOffset() {
- return ifOffset;
- }
-
- @Override
- public int getEndOffset() {
- List<Statement> body = elseBlock != null ? elseBlock : thenBlock;
- return body.isEmpty()
- ? condition.getEndOffset() // wrong, but tree is ill formed
- : body.get(body.size() - 1).getEndOffset();
- }
-
- @Override
- public String toString() {
- return String.format("if %s: ...\n", condition);
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.IF;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/IndexExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/IndexExpression.java
deleted file mode 100644
index 6baf1b5..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/IndexExpression.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2014 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.syntax;
-
-
-/**
- * An index expression ({@code obj[field]}). Not to be confused with a slice expression ({@code
- * obj[from:to]}). The object may be either a sequence or an associative mapping (most commonly
- * lists and dictionaries).
- */
-public final class IndexExpression extends Expression {
-
- private final Expression object;
- private final int lbracketOffset;
- private final Expression key;
- private final int rbracketOffset;
-
- IndexExpression(
- FileLocations locs,
- Expression object,
- int lbracketOffset,
- Expression key,
- int rbracketOffset) {
- super(locs);
- this.object = object;
- this.lbracketOffset = lbracketOffset;
- this.key = key;
- this.rbracketOffset = rbracketOffset;
- }
-
- public Expression getObject() {
- return object;
- }
-
- public Expression getKey() {
- return key;
- }
-
- @Override
- public int getStartOffset() {
- return object.getStartOffset();
- }
-
- @Override
- public int getEndOffset() {
- return rbracketOffset + 1;
- }
-
- public Location getLbracketLocation() {
- return locs.getLocation(lbracketOffset);
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.INDEX;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/IntegerLiteral.java b/src/main/java/com/google/devtools/build/lib/syntax/IntegerLiteral.java
deleted file mode 100644
index 415d8d2..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/IntegerLiteral.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2014 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.syntax;
-
-
-/** Syntax node for an integer literal. */
-public final class IntegerLiteral extends Expression {
- private final String raw;
- private final int tokenOffset;
- private final int value;
-
- IntegerLiteral(FileLocations locs, String raw, int tokenOffset, int value) {
- super(locs);
- this.raw = raw;
- this.tokenOffset = tokenOffset;
- this.value = value;
- }
-
- public int getValue() {
- return value;
- }
-
- /** Returns the raw source text of the literal. */
- public String getRaw() {
- return raw;
- }
-
- @Override
- public int getStartOffset() {
- return tokenOffset;
- }
-
- @Override
- public int getEndOffset() {
- return tokenOffset + raw.length();
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.INTEGER_LITERAL;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/JNI.java b/src/main/java/com/google/devtools/build/lib/syntax/JNI.java
deleted file mode 100644
index b8de3009..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/JNI.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2020 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.syntax;
-
-final class JNI {
- private JNI() {} // uninstantiable
-
- static void load() {
- try {
- System.loadLibrary("cpu_profiler");
- } catch (UnsatisfiedLinkError ex) {
- // Ignore, deferring the error until a C function is called, if ever.
- // Without this hack //src/test/shell/bazel:bazel_bootstrap_distfile_test
- // fails with an utterly uninformative error.
- // TODO(adonovan): remove try/catch once that test is fixed.
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java b/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java
deleted file mode 100644
index 4d066fa..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java
+++ /dev/null
@@ -1,867 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableMap;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-
-/** A scanner for Starlark. */
-final class Lexer {
-
- // --- These fields are accessed directly by the parser: ---
-
- // Mapping from file offsets to Locations.
- final FileLocations locs;
-
- // Information about current token. Updated by nextToken.
- // raw and value are defined only for STRING, INT, IDENTIFIER, and COMMENT.
- // TODO(adonovan): rename s/xyz/tokenXyz/
- TokenKind kind;
- int start; // start offset
- int end; // end offset
- String raw; // source text of token
- Object value; // String or Integer value of token
-
- // --- end of parser-visible fields ---
-
- private final List<SyntaxError> errors;
-
- // Input buffer and position
- private final char[] buffer;
- private int pos;
-
- private final FileOptions options;
-
- // The stack of enclosing indentation levels in spaces.
- // The first (outermost) element is always zero.
- private final Stack<Integer> indentStack = new Stack<>();
-
- private final List<Comment> comments;
-
- // The number of unclosed open-parens ("(", '{', '[') at the current point in
- // the stream. Whitespace is handled differently when this is nonzero.
- private int openParenStackDepth = 0;
-
- // True after a NEWLINE token. In other words, we are outside an
- // expression and we have to check the indentation.
- private boolean checkIndentation;
-
- // Number of saved INDENT (>0) or OUTDENT (<0) tokens detected but not yet returned.
- private int dents;
-
- // Characters that can come immediately prior to an '=' character to generate
- // a different token
- private static final ImmutableMap<Character, TokenKind> EQUAL_TOKENS =
- ImmutableMap.<Character, TokenKind>builder()
- .put('=', TokenKind.EQUALS_EQUALS)
- .put('!', TokenKind.NOT_EQUALS)
- .put('>', TokenKind.GREATER_EQUALS)
- .put('<', TokenKind.LESS_EQUALS)
- .put('+', TokenKind.PLUS_EQUALS)
- .put('-', TokenKind.MINUS_EQUALS)
- .put('*', TokenKind.STAR_EQUALS)
- .put('/', TokenKind.SLASH_EQUALS)
- .put('%', TokenKind.PERCENT_EQUALS)
- .put('^', TokenKind.CARET_EQUALS)
- .put('&', TokenKind.AMPERSAND_EQUALS)
- .put('|', TokenKind.PIPE_EQUALS)
- .build();
-
- // Constructs a lexer which tokenizes the parser input.
- // Errors are appended to errors.
- Lexer(ParserInput input, FileOptions options, List<SyntaxError> errors) {
- this.locs = FileLocations.create(input.getContent(), input.getFile());
- this.options = options;
- this.buffer = input.getContent();
- this.pos = 0;
- this.errors = errors;
- this.checkIndentation = true;
- this.comments = new ArrayList<>();
- this.dents = 0;
-
- indentStack.push(0);
- }
-
- List<Comment> getComments() {
- return comments;
- }
-
- /**
- * Reads the next token, updating the Lexer's token fields. It is an error to call nextToken after
- * an EOF token.
- */
- void nextToken() {
- boolean afterNewline = kind == TokenKind.NEWLINE;
- tokenize();
- Preconditions.checkState(kind != null);
-
- // Like Python, always end with a NEWLINE token, even if no '\n' in input:
- if (kind == TokenKind.EOF && !afterNewline) {
- kind = TokenKind.NEWLINE;
- }
- }
-
- private void popParen() {
- if (openParenStackDepth == 0) {
- // TODO(adonovan): fix: the input ')' should not report an indentation error.
- error("indentation error", pos - 1);
- } else {
- openParenStackDepth--;
- }
- }
-
- private void error(String message, int pos) {
- errors.add(new SyntaxError(locs.getLocation(pos), message));
- }
-
- private void setToken(TokenKind kind, int start, int end) {
- this.kind = kind;
- this.start = start;
- this.end = end;
- this.value = null;
- this.raw = null;
- }
-
- // setValue sets the value associated with a STRING, FLOAT, INT,
- // IDENTIFIER, or COMMENT token, and records the raw text of the token.
- private void setValue(Object value) {
- this.value = value;
- this.raw = bufferSlice(start, end);
- }
-
- /**
- * Parses an end-of-line sequence, handling statement indentation correctly.
- *
- * <p>UNIX newlines are assumed (LF). Carriage returns are always ignored.
- */
- private void newline() {
- if (openParenStackDepth > 0) {
- newlineInsideExpression(); // in an expression: ignore space
- } else {
- checkIndentation = true;
- setToken(TokenKind.NEWLINE, pos - 1, pos);
- }
- }
-
- private void newlineInsideExpression() {
- while (pos < buffer.length) {
- switch (buffer[pos]) {
- case ' ': case '\t': case '\r':
- pos++;
- break;
- default:
- return;
- }
- }
- }
-
- /** Computes indentation (updates dent) and advances pos. */
- private void computeIndentation() {
- // we're in a stmt: suck up space at beginning of next line
- int indentLen = 0;
- while (pos < buffer.length) {
- char c = buffer[pos];
- if (c == ' ') {
- indentLen++;
- pos++;
- } else if (c == '\r') {
- pos++;
- } else if (c == '\t') {
- indentLen++;
- pos++;
- error("Tab characters are not allowed for indentation. Use spaces instead.", pos);
- } else if (c == '\n') { // entirely blank line: discard
- indentLen = 0;
- pos++;
- } else if (c == '#') { // line containing only indented comment
- int oldPos = pos;
- while (pos < buffer.length && c != '\n') {
- c = buffer[pos++];
- }
- addComment(oldPos, pos - 1);
- indentLen = 0;
- } else { // printing character
- break;
- }
- }
-
- if (pos == buffer.length) {
- indentLen = 0;
- } // trailing space on last line
-
- int peekedIndent = indentStack.peek();
- if (peekedIndent < indentLen) { // push a level
- indentStack.push(indentLen);
- dents++;
-
- } else if (peekedIndent > indentLen) { // pop one or more levels
- while (peekedIndent > indentLen) {
- indentStack.pop();
- dents--;
- peekedIndent = indentStack.peek();
- }
-
- if (peekedIndent < indentLen) {
- error("indentation error", pos - 1);
- }
- }
- }
-
- /**
- * Returns true if current position is in the middle of a triple quote
- * delimiter (3 x quot), and advances 'pos' by two if so.
- */
- private boolean skipTripleQuote(char quot) {
- if (lookaheadIs(0, quot) && lookaheadIs(1, quot)) {
- pos += 2;
- return true;
- } else {
- return false;
- }
- }
-
- /**
- * Scans a string literal delimited by 'quot', containing escape sequences.
- *
- * <p>ON ENTRY: 'pos' is 1 + the index of the first delimiter
- * ON EXIT: 'pos' is 1 + the index of the last delimiter.
- */
- private void escapedStringLiteral(char quot, boolean isRaw) {
- int literalStartPos = isRaw ? pos - 2 : pos - 1;
- boolean inTriplequote = skipTripleQuote(quot);
- // more expensive second choice that expands escaped into a buffer
- StringBuilder literal = new StringBuilder();
- while (pos < buffer.length) {
- char c = buffer[pos];
- pos++;
- switch (c) {
- case '\n':
- if (inTriplequote) {
- literal.append(c);
- break;
- } else {
- error("unterminated string literal at eol", literalStartPos);
- setToken(TokenKind.STRING, literalStartPos, pos);
- setValue(literal.toString());
- return;
- }
- case '\\':
- if (pos == buffer.length) {
- error("unterminated string literal at eof", literalStartPos);
- setToken(TokenKind.STRING, literalStartPos, pos);
- setValue(literal.toString());
- return;
- }
- if (isRaw) {
- // Insert \ and the following character.
- // As in Python, it means that a raw string can never end with a single \.
- literal.append('\\');
- if (lookaheadIs(0, '\r') && lookaheadIs(1, '\n')) {
- literal.append("\n");
- pos += 2;
- } else if (buffer[pos] == '\r' || buffer[pos] == '\n') {
- literal.append("\n");
- pos += 1;
- } else {
- literal.append(buffer[pos]);
- pos += 1;
- }
- break;
- }
- c = buffer[pos];
- pos++;
- switch (c) {
- case '\r':
- if (lookaheadIs(0, '\n')) {
- pos += 1;
- break;
- } else {
- break;
- }
- case '\n':
- // ignore end of line character
- break;
- case 'n':
- literal.append('\n');
- break;
- case 'r':
- literal.append('\r');
- break;
- case 't':
- literal.append('\t');
- break;
- case '\\':
- literal.append('\\');
- break;
- case '\'':
- literal.append('\'');
- break;
- case '"':
- literal.append('"');
- break;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- { // octal escape
- int octal = c - '0';
- if (pos < buffer.length) {
- c = buffer[pos];
- if (c >= '0' && c <= '7') {
- pos++;
- octal = (octal << 3) | (c - '0');
- if (pos < buffer.length) {
- c = buffer[pos];
- if (c >= '0' && c <= '7') {
- pos++;
- octal = (octal << 3) | (c - '0');
- }
- }
- }
- }
- if (octal > 0xff) {
- error("octal escape sequence out of range (maximum is \\377)", pos - 1);
- }
- literal.append((char) (octal & 0xff));
- break;
- }
- case 'a':
- case 'b':
- case 'f':
- case 'N':
- case 'u':
- case 'U':
- case 'v':
- case 'x':
- // exists in Python but not implemented in Blaze => error
- error("invalid escape sequence: \\" + c, pos - 1);
- break;
- default:
- // unknown char escape => "\literal"
- if (options.restrictStringEscapes()) {
- error(
- "invalid escape sequence: \\"
- + c
- + ". You can enable unknown escape sequences by passing the flag"
- + " --incompatible_restrict_string_escapes=false",
- pos - 1);
- }
- literal.append('\\');
- literal.append(c);
- break;
- }
- break;
- case '\'':
- case '"':
- if (c != quot || (inTriplequote && !skipTripleQuote(quot))) {
- // Non-matching quote, treat it like a regular char.
- literal.append(c);
- } else {
- // Matching close-delimiter, all done.
- setToken(TokenKind.STRING, literalStartPos, pos);
- setValue(literal.toString());
- return;
- }
- break;
- default:
- literal.append(c);
- break;
- }
- }
- error("unterminated string literal at eof", literalStartPos);
- setToken(TokenKind.STRING, literalStartPos, pos);
- setValue(literal.toString());
- }
-
- /**
- * Scans a string literal delimited by 'quot'.
- *
- * <ul>
- * <li> ON ENTRY: 'pos' is 1 + the index of the first delimiter
- * <li> ON EXIT: 'pos' is 1 + the index of the last delimiter.
- * </ul>
- *
- * @param isRaw if true, do not escape the string.
- */
- private void stringLiteral(char quot, boolean isRaw) {
- int literalStartPos = isRaw ? pos - 2 : pos - 1;
- int contentStartPos = pos;
-
- // Don't even attempt to parse triple-quotes here.
- if (skipTripleQuote(quot)) {
- pos -= 2;
- escapedStringLiteral(quot, isRaw);
- return;
- }
-
- // first quick optimistic scan for a simple non-escaped string
- while (pos < buffer.length) {
- char c = buffer[pos++];
- switch (c) {
- case '\n':
- error("unterminated string literal at eol", literalStartPos);
- setToken(TokenKind.STRING, literalStartPos, pos);
- setValue(bufferSlice(contentStartPos, pos - 1));
- return;
- case '\\':
- if (isRaw) {
- if (lookaheadIs(0, '\r') && lookaheadIs(1, '\n')) {
- // There was a CRLF after the newline. No shortcut possible, since it needs to be
- // transformed into a single LF.
- pos = contentStartPos;
- escapedStringLiteral(quot, true);
- return;
- } else {
- pos++;
- break;
- }
- }
- // oops, hit an escape, need to start over & build a new string buffer
- pos = contentStartPos;
- escapedStringLiteral(quot, false);
- return;
- case '\'':
- case '"':
- if (c == quot) {
- // close-quote, all done.
- setToken(TokenKind.STRING, literalStartPos, pos);
- setValue(bufferSlice(contentStartPos, pos - 1));
- return;
- }
- break;
- default: // fall out
- }
- }
-
- // If the current position is beyond the end of the file, need to move it backwards
- // Possible if the file ends with `r"\` (unterminated raw string literal with a backslash)
- if (pos > buffer.length) {
- pos = buffer.length;
- }
-
- error("unterminated string literal at eof", literalStartPos);
- setToken(TokenKind.STRING, literalStartPos, pos);
- setValue(bufferSlice(contentStartPos, pos));
- }
-
- private static final Map<String, TokenKind> keywordMap = new HashMap<>();
-
- static {
- keywordMap.put("and", TokenKind.AND);
- keywordMap.put("as", TokenKind.AS);
- keywordMap.put("assert", TokenKind.ASSERT);
- keywordMap.put("break", TokenKind.BREAK);
- keywordMap.put("class", TokenKind.CLASS);
- keywordMap.put("continue", TokenKind.CONTINUE);
- keywordMap.put("def", TokenKind.DEF);
- keywordMap.put("del", TokenKind.DEL);
- keywordMap.put("elif", TokenKind.ELIF);
- keywordMap.put("else", TokenKind.ELSE);
- keywordMap.put("except", TokenKind.EXCEPT);
- keywordMap.put("finally", TokenKind.FINALLY);
- keywordMap.put("for", TokenKind.FOR);
- keywordMap.put("from", TokenKind.FROM);
- keywordMap.put("global", TokenKind.GLOBAL);
- keywordMap.put("if", TokenKind.IF);
- keywordMap.put("import", TokenKind.IMPORT);
- keywordMap.put("in", TokenKind.IN);
- keywordMap.put("is", TokenKind.IS);
- keywordMap.put("lambda", TokenKind.LAMBDA);
- keywordMap.put("load", TokenKind.LOAD);
- keywordMap.put("nonlocal", TokenKind.NONLOCAL);
- keywordMap.put("not", TokenKind.NOT);
- keywordMap.put("or", TokenKind.OR);
- keywordMap.put("pass", TokenKind.PASS);
- keywordMap.put("raise", TokenKind.RAISE);
- keywordMap.put("return", TokenKind.RETURN);
- keywordMap.put("try", TokenKind.TRY);
- keywordMap.put("while", TokenKind.WHILE);
- keywordMap.put("with", TokenKind.WITH);
- keywordMap.put("yield", TokenKind.YIELD);
- }
-
- /**
- * Scans an identifier or keyword.
- *
- * <p>ON ENTRY: 'pos' is 1 + the index of the first char in the identifier.
- * ON EXIT: 'pos' is 1 + the index of the last char in the identifier.
- */
- private void identifierOrKeyword() {
- int oldPos = pos - 1;
- String id = scanIdentifier();
- TokenKind kind = keywordMap.get(id);
- if (kind == null) {
- setToken(TokenKind.IDENTIFIER, oldPos, pos);
- setValue(id);
- } else {
- setToken(kind, oldPos, pos);
- }
- }
-
- private String scanIdentifier() {
- // Keep consistent with Identifier.isValid.
- // TODO(laurentlb): Handle Unicode letters.
- int oldPos = pos - 1;
- while (pos < buffer.length) {
- switch (buffer[pos]) {
- case '_':
- case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
- case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
- case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
- case 's': case 't': case 'u': case 'v': case 'w': case 'x':
- case 'y': case 'z':
- case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
- case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
- case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
- case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
- case 'Y': case 'Z':
- case '0': case '1': case '2': case '3': case '4': case '5':
- case '6': case '7': case '8': case '9':
- pos++;
- break;
- default:
- return bufferSlice(oldPos, pos);
- }
- }
- return bufferSlice(oldPos, pos);
- }
-
- private String scanInteger() {
- int oldPos = pos - 1;
- loop:
- while (pos < buffer.length) {
- char c = buffer[pos];
- switch (c) {
- case 'X': case 'x': // for hexadecimal prefix
- case 'O': case 'o': // for octal prefix
- case 'a': case 'A':
- case 'b': case 'B':
- case 'c': case 'C':
- case 'd': case 'D':
- case 'e': case 'E':
- case 'f': case 'F':
- if (buffer[oldPos] != '0') {
- // A number not starting with zero must be decimal and can only contain decimal digits.
- break loop;
- }
- pos++;
- break;
- case '0': case '1':
- case '2': case '3':
- case '4': case '5':
- case '6': case '7':
- case '8': case '9':
- pos++;
- break;
- default:
- break loop;
- }
- }
- return bufferSlice(oldPos, pos);
- }
-
- /**
- * Scans an integer literal.
- *
- * <p>ON ENTRY: 'pos' is 1 + the index of the first char in the literal.
- * ON EXIT: 'pos' is 1 + the index of the last char in the literal.
- */
- private void integer() {
- int oldPos = pos - 1;
- String literal = scanInteger();
-
- final String substring;
- final int radix;
- if (literal.startsWith("0x") || literal.startsWith("0X")) {
- radix = 16;
- substring = literal.substring(2);
- } else if (literal.startsWith("0o") || literal.startsWith("0O")) {
- radix = 8;
- substring = literal.substring(2);
- } else if (literal.startsWith("0") && literal.length() > 1) {
- radix = 8;
- substring = literal.substring(1);
- error("invalid octal value `" + literal + "`, should be: `0o" + substring + "`", oldPos);
- } else {
- radix = 10;
- substring = literal;
- }
-
- int value = 0;
- try {
- value = Integer.parseInt(substring, radix);
- } catch (NumberFormatException e) {
- error("invalid base-" + radix + " integer constant: " + literal, oldPos);
- }
-
- setToken(TokenKind.INT, oldPos, pos);
- setValue(value);
- }
-
- /**
- * Tokenizes a two-char operator.
- * @return true if it tokenized an operator
- */
- private boolean tokenizeTwoChars() {
- if (pos + 2 >= buffer.length) {
- return false;
- }
- char c1 = buffer[pos];
- char c2 = buffer[pos + 1];
- TokenKind tok = null;
- if (c2 == '=') {
- tok = EQUAL_TOKENS.get(c1);
- } else if (c2 == '*' && c1 == '*') {
- tok = TokenKind.STAR_STAR;
- }
- if (tok == null) {
- return false;
- } else {
- setToken(tok, pos, pos + 2);
- return true;
- }
- }
-
- /** Test if the character at pos+p is c. */
- private boolean lookaheadIs(int p, char c) {
- return pos + p < buffer.length && buffer[pos + p] == c;
- }
-
- /**
- * Performs tokenization of the character buffer of file contents provided to the constructor. At
- * least one token will be added to the tokens queue.
- */
- private void tokenize() {
- if (checkIndentation) {
- checkIndentation = false;
- computeIndentation();
- }
-
- // Return saved indentation tokens.
- if (dents != 0) {
- if (dents < 0) {
- dents++;
- setToken(TokenKind.OUTDENT, pos - 1, pos);
- } else {
- dents--;
- setToken(TokenKind.INDENT, pos - 1, pos);
- }
- return;
- }
-
- // TODO(adonovan): cleanup: replace break after setToken with return,
- // and eliminate null-check of this.kind.
- kind = null;
- while (pos < buffer.length) {
- if (tokenizeTwoChars()) {
- pos += 2;
- return;
- }
- char c = buffer[pos];
- pos++;
- switch (c) {
- case '{':
- setToken(TokenKind.LBRACE, pos - 1, pos);
- openParenStackDepth++;
- break;
- case '}':
- setToken(TokenKind.RBRACE, pos - 1, pos);
- popParen();
- break;
- case '(':
- setToken(TokenKind.LPAREN, pos - 1, pos);
- openParenStackDepth++;
- break;
- case ')':
- setToken(TokenKind.RPAREN, pos - 1, pos);
- popParen();
- break;
- case '[':
- setToken(TokenKind.LBRACKET, pos - 1, pos);
- openParenStackDepth++;
- break;
- case ']':
- setToken(TokenKind.RBRACKET, pos - 1, pos);
- popParen();
- break;
- case '>':
- if (lookaheadIs(0, '>') && lookaheadIs(1, '=')) {
- setToken(TokenKind.GREATER_GREATER_EQUALS, pos - 1, pos + 2);
- pos += 2;
- } else if (lookaheadIs(0, '>')) {
- setToken(TokenKind.GREATER_GREATER, pos - 1, pos + 1);
- pos += 1;
- } else {
- setToken(TokenKind.GREATER, pos - 1, pos);
- }
- break;
- case '<':
- if (lookaheadIs(0, '<') && lookaheadIs(1, '=')) {
- setToken(TokenKind.LESS_LESS_EQUALS, pos - 1, pos + 2);
- pos += 2;
- } else if (lookaheadIs(0, '<')) {
- setToken(TokenKind.LESS_LESS, pos - 1, pos + 1);
- pos += 1;
- } else {
- setToken(TokenKind.LESS, pos - 1, pos);
- }
- break;
- case ':':
- setToken(TokenKind.COLON, pos - 1, pos);
- break;
- case ',':
- setToken(TokenKind.COMMA, pos - 1, pos);
- break;
- case '+':
- setToken(TokenKind.PLUS, pos - 1, pos);
- break;
- case '-':
- setToken(TokenKind.MINUS, pos - 1, pos);
- break;
- case '|':
- setToken(TokenKind.PIPE, pos - 1, pos);
- break;
- case '=':
- setToken(TokenKind.EQUALS, pos - 1, pos);
- break;
- case '%':
- setToken(TokenKind.PERCENT, pos - 1, pos);
- break;
- case '~':
- setToken(TokenKind.TILDE, pos - 1, pos);
- break;
- case '&':
- setToken(TokenKind.AMPERSAND, pos - 1, pos);
- break;
- case '^':
- setToken(TokenKind.CARET, pos - 1, pos);
- break;
- case '/':
- if (lookaheadIs(0, '/') && lookaheadIs(1, '=')) {
- setToken(TokenKind.SLASH_SLASH_EQUALS, pos - 1, pos + 2);
- pos += 2;
- } else if (lookaheadIs(0, '/')) {
- setToken(TokenKind.SLASH_SLASH, pos - 1, pos + 1);
- pos += 1;
- } else {
- // /= is handled by tokenizeTwoChars.
- setToken(TokenKind.SLASH, pos - 1, pos);
- }
- break;
- case ';':
- setToken(TokenKind.SEMI, pos - 1, pos);
- break;
- case '.':
- setToken(TokenKind.DOT, pos - 1, pos);
- break;
- case '*':
- setToken(TokenKind.STAR, pos - 1, pos);
- break;
- case ' ':
- case '\t':
- case '\r':
- /* ignore */
- break;
- case '\\':
- // Backslash character is valid only at the end of a line (or in a string)
- if (lookaheadIs(0, '\n')) {
- pos += 1; // skip the end of line character
- } else if (lookaheadIs(0, '\r') && lookaheadIs(1, '\n')) {
- pos += 2; // skip the CRLF at the end of line
- } else {
- setToken(TokenKind.ILLEGAL, pos - 1, pos);
- setValue(Character.toString(c));
- }
- break;
- case '\n':
- newline();
- break;
- case '#':
- int oldPos = pos - 1;
- while (pos < buffer.length) {
- c = buffer[pos];
- if (c == '\n') {
- break;
- } else {
- pos++;
- }
- }
- addComment(oldPos, pos);
- break;
- case '\'':
- case '\"':
- stringLiteral(c, false);
- break;
- default:
- // detect raw strings, e.g. r"str"
- if (c == 'r' && pos < buffer.length && (buffer[pos] == '\'' || buffer[pos] == '\"')) {
- c = buffer[pos];
- pos++;
- stringLiteral(c, true);
- break;
- }
-
- if (c >= '0' && c <= '9') {
- integer();
- } else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_') {
- identifierOrKeyword();
- } else {
- error("invalid character: '" + c + "'", pos - 1);
- }
- break;
- } // switch
- if (kind != null) { // stop here if we scanned a token
- return;
- }
- } // while
-
- if (indentStack.size() > 1) { // top of stack is always zero
- setToken(TokenKind.NEWLINE, pos - 1, pos);
- while (indentStack.size() > 1) {
- indentStack.pop();
- dents--;
- }
- return;
- }
-
- setToken(TokenKind.EOF, pos, pos);
- }
-
- /**
- * Returns parts of the source buffer based on offsets
- *
- * @param start the beginning offset for the slice
- * @param end the offset immediately following the slice
- * @return the text at offset start with length end - start
- */
- String bufferSlice(int start, int end) {
- return new String(this.buffer, start, end - start);
- }
-
- // TODO(adonovan): don't retain comments unconditionally.
- private void addComment(int start, int end) {
- String content = bufferSlice(start, end);
- comments.add(new Comment(locs, start, content));
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ListExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/ListExpression.java
deleted file mode 100644
index 5293172..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ListExpression.java
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Preconditions;
-import java.util.List;
-
-/** Syntax node for list and tuple expressions. */
-public final class ListExpression extends Expression {
-
- // TODO(adonovan): split class into {List,Tuple}Expression, as a tuple may have no parens.
- // Materialize all source-level expressions as a separate ParenExpression so that we can roundtrip
- // faithfully.
-
- private final boolean isTuple;
- private final int lbracketOffset; // -1 => unparenthesized non-empty tuple
- private final List<Expression> elements;
- private final int rbracketOffset; // -1 => unparenthesized non-empty tuple
-
- ListExpression(
- FileLocations locs,
- boolean isTuple,
- int lbracketOffset,
- List<Expression> elements,
- int rbracketOffset) {
- super(locs);
- // An unparenthesized tuple must be non-empty.
- Preconditions.checkArgument(
- !elements.isEmpty() || (lbracketOffset >= 0 && rbracketOffset >= 0));
- this.lbracketOffset = lbracketOffset;
- this.isTuple = isTuple;
- this.elements = elements;
- this.rbracketOffset = rbracketOffset;
- }
-
- public List<Expression> getElements() {
- return elements;
- }
-
- /** Reports whether this is a tuple expression. */
- public boolean isTuple() {
- return isTuple;
- }
-
- @Override
- public int getStartOffset() {
- return lbracketOffset < 0 ? elements.get(0).getStartOffset() : lbracketOffset;
- }
-
- @Override
- public int getEndOffset() {
- // Unlike Python, trailing commas are not allowed in unparenthesized tuples.
- return rbracketOffset < 0
- ? elements.get(elements.size() - 1).getEndOffset()
- : rbracketOffset + 1;
- }
-
- @Override
- public String toString() {
- // Print [a, b, c, ...] up to a maximum of 4 elements or 32 chars.
- StringBuilder buf = new StringBuilder();
- buf.append(isTuple() ? '(' : '[');
- appendNodes(buf, elements);
- if (isTuple() && elements.size() == 1) {
- buf.append(',');
- }
- buf.append(isTuple() ? ')' : ']');
- return buf.toString();
- }
-
- // Appends elements to buf, comma-separated, abbreviating if they are numerous or long.
- // (Also used by CallExpression.)
- static void appendNodes(StringBuilder buf, List<? extends Node> elements) {
- int n = elements.size();
- for (int i = 0; i < n; i++) {
- if (i > 0) {
- buf.append(", ");
- }
- int mark = buf.length();
- buf.append(elements.get(i));
- // Abbreviate, dropping this element, if we exceed 32 chars,
- // or 4 elements (with more elements following).
- if (buf.length() >= 32 || (i == 4 && i + 1 < n)) {
- buf.setLength(mark);
- buf.append(String.format("+%d more", n - i));
- break;
- }
- }
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Expression.Kind kind() {
- return Expression.Kind.LIST_EXPR;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/LoadStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/LoadStatement.java
deleted file mode 100644
index 78e9c2e..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/LoadStatement.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.collect.ImmutableList;
-
-/** Syntax node for an import statement. */
-public final class LoadStatement extends Statement {
-
- /**
- * Binding represents a binding in a load statement. load("...", local = "orig")
- *
- * <p>If there's no alias, a single Identifier can be used for both local and orig.
- * TODO(adonovan): don't do that; be faithful to source.
- */
- public static final class Binding {
- private final Identifier local;
- private final Identifier orig;
-
- public Identifier getLocalName() {
- return local;
- }
-
- public Identifier getOriginalName() {
- return orig;
- }
-
- Binding(Identifier localName, Identifier originalName) {
- this.local = localName;
- this.orig = originalName;
- }
- }
-
- private final int loadOffset;
- private final StringLiteral module;
- private final ImmutableList<Binding> bindings;
- private final int rparenOffset;
-
- LoadStatement(
- FileLocations locs,
- int loadOffset,
- StringLiteral module,
- ImmutableList<Binding> bindings,
- int rparenOffset) {
- super(locs);
- this.loadOffset = loadOffset;
- this.module = module;
- this.bindings = bindings;
- this.rparenOffset = rparenOffset;
- }
-
- public ImmutableList<Binding> getBindings() {
- return bindings;
- }
-
- public StringLiteral getImport() {
- return module;
- }
-
- @Override
- public int getStartOffset() {
- return loadOffset;
- }
-
- @Override
- public int getEndOffset() {
- return rparenOffset + 1;
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.LOAD;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Location.java b/src/main/java/com/google/devtools/build/lib/syntax/Location.java
deleted file mode 100644
index f152421..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Location.java
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Preconditions;
-import java.io.Serializable;
-import javax.annotation.concurrent.Immutable;
-
-/**
- * A Location denotes a position within a Starlark file.
- *
- * <p>A location is a triple {@code (file, line, column)}, where {@code file} is the apparent name
- * of the file, {@code line} is the optional 1-based line number, and {@code column} is the optional
- * 1-based column number measured in UTF-16 code units. If the column is zero it is not displayed.
- * If the line number is also zero, it too is not displayed; in this case, the location denotes the
- * file as a whole.
- */
-@Immutable
-public final class Location implements Serializable, Comparable<Location> {
-
- private final String file;
- private final int line;
- private final int column;
-
- public Location(String file, int line, int column) {
- this.file = Preconditions.checkNotNull(file);
- this.line = line;
- this.column = column;
- }
-
- /** Returns the name of the file containing this location. */
- public String file() {
- return file;
- }
-
- /** Returns the line number of this location. */
- public int line() {
- return line;
- }
-
- /** Returns the column number of this location. */
- public int column() {
- return column;
- }
-
- /**
- * Returns a Location for the given file, line and column. If {@code column} is non-zero, {@code
- * line} too must be non-zero.
- */
- public static Location fromFileLineColumn(String file, int line, int column) {
- Preconditions.checkArgument(line != 0 || column == 0, "non-zero column but no line number");
- return new Location(file, line, column);
- }
-
- /** Returns a Location for the file as a whole. */
- public static Location fromFile(String file) {
- return new Location(file, 0, 0);
- }
-
- /**
- * Formats the location as {@code "file:line:col"}. If the column is zero, it is omitted. If the
- * line is also zero, it too is omitted.
- */
- @Override
- public String toString() {
- StringBuilder buf = new StringBuilder();
- buf.append(file);
- if (line != 0) {
- buf.append(':').append(line);
- if (column != 0) {
- buf.append(':').append(column);
- }
- }
- return buf.toString();
- }
-
- /** Returns a three-valued lexicographical comparison of two Locations. */
- @Override
- public final int compareTo(Location that) {
- int cmp = this.file().compareTo(that.file());
- if (cmp != 0) {
- return cmp;
- }
- return Long.compare(
- ((long) this.line << 32) | this.column, ((long) that.line << 32) | that.column);
- }
-
- @Override
- public int hashCode() {
- return 97 * file.hashCode() + 37 * line + column;
- }
-
- @Override
- public boolean equals(Object that) {
- return this == that
- || (that instanceof Location
- && this.file.equals(((Location) that).file)
- && this.line == ((Location) that).line
- && this.column == ((Location) that).column);
- }
-
- /** A location for built-in functions. */
- public static final Location BUILTIN = fromFile("<builtin>");
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/MethodDescriptor.java b/src/main/java/com/google/devtools/build/lib/syntax/MethodDescriptor.java
deleted file mode 100644
index e564043..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/MethodDescriptor.java
+++ /dev/null
@@ -1,253 +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.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Throwables;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import javax.annotation.Nullable;
-import net.starlark.java.annot.StarlarkMethod;
-
-/**
- * A value class to store Methods with their corresponding {@link StarlarkMethod} annotation
- * metadata. This is needed because the annotation is sometimes in a superclass.
- *
- * <p>The annotation metadata is duplicated in this class to avoid usage of Java dynamic proxies
- * which are ~7× slower.
- */
-final class MethodDescriptor {
- private final Method method;
- private final StarlarkMethod annotation;
-
- private final String name;
- private final String doc;
- private final boolean documented;
- private final boolean structField;
- private final ParamDescriptor[] parameters;
- private final boolean extraPositionals;
- private final boolean extraKeywords;
- private final boolean selfCall;
- private final boolean allowReturnNones;
- private final boolean useStarlarkThread;
- private final boolean useStarlarkSemantics;
-
- private MethodDescriptor(
- Method method,
- StarlarkMethod annotation,
- String name,
- String doc,
- boolean documented,
- boolean structField,
- ParamDescriptor[] parameters,
- boolean extraPositionals,
- boolean extraKeywords,
- boolean selfCall,
- boolean allowReturnNones,
- boolean useStarlarkThread,
- boolean useStarlarkSemantics) {
- this.method = method;
- this.annotation = annotation;
- this.name = name;
- this.doc = doc;
- this.documented = documented;
- this.structField = structField;
- this.parameters = parameters;
- this.extraPositionals = extraPositionals;
- this.extraKeywords = extraKeywords;
- this.selfCall = selfCall;
- this.allowReturnNones = allowReturnNones;
- this.useStarlarkThread = useStarlarkThread;
- this.useStarlarkSemantics = useStarlarkSemantics;
- }
-
- /** Returns the StarlarkMethod annotation corresponding to this method. */
- StarlarkMethod getAnnotation() {
- return annotation;
- }
-
- /** @return Starlark method descriptor for provided Java method and signature annotation. */
- static MethodDescriptor of(
- Method method, StarlarkMethod annotation, StarlarkSemantics semantics) {
- // This happens when the interface is public but the implementation classes
- // have reduced visibility.
- method.setAccessible(true);
- return new MethodDescriptor(
- method,
- annotation,
- annotation.name(),
- annotation.doc(),
- annotation.documented(),
- annotation.structField(),
- Arrays.stream(annotation.parameters())
- .map(param -> ParamDescriptor.of(param, semantics))
- .toArray(ParamDescriptor[]::new),
- !annotation.extraPositionals().name().isEmpty(),
- !annotation.extraKeywords().name().isEmpty(),
- annotation.selfCall(),
- annotation.allowReturnNones(),
- annotation.useStarlarkThread(),
- annotation.useStarlarkSemantics());
- }
-
- private static final Object[] EMPTY = {};
-
- /** Calls this method, which must have {@code structField=true}. */
- Object callField(Object obj, StarlarkSemantics semantics, @Nullable Mutability mu)
- throws EvalException, InterruptedException {
- if (!structField) {
- throw new IllegalStateException("not a struct field: " + name);
- }
- Object[] args = useStarlarkSemantics ? new Object[] {semantics} : EMPTY;
- return call(obj, args, mu);
- }
-
- /**
- * Invokes this method using {@code obj} as a target and {@code args} as Java arguments.
- *
- * <p>Methods with {@code void} return type return {@code None} following Python convention.
- *
- * <p>The Mutability is used if it is necessary to allocate a Starlark copy of a Java result.
- */
- Object call(Object obj, Object[] args, @Nullable Mutability mu)
- throws EvalException, InterruptedException {
- Preconditions.checkNotNull(obj);
- Object result;
- try {
- result = method.invoke(obj, args);
- } catch (IllegalAccessException ex) {
- // "Can't happen": the annotated processor ensures that annotated methods are accessible.
- throw new IllegalStateException(ex);
-
- } catch (IllegalArgumentException ex) {
- // "Can't happen": unexpected type mismatch.
- // Show details to aid debugging (see e.g. b/162444744).
- StringBuilder buf = new StringBuilder();
- buf.append(
- String.format(
- "IllegalArgumentException (%s) in Starlark call of %s, obj=%s (%s), args=[",
- ex.getMessage(), method, Starlark.repr(obj), Starlark.type(obj)));
- String sep = "";
- for (Object arg : args) {
- buf.append(String.format("%s%s (%s)", sep, Starlark.repr(arg), Starlark.type(arg)));
- sep = ", ";
- }
- buf.append(']');
- throw new IllegalArgumentException(buf.toString());
-
- } catch (InvocationTargetException ex) {
- Throwable e = ex.getCause();
- if (e == null) {
- throw new IllegalStateException(e);
- }
- // Don't intercept unchecked exceptions.
- Throwables.throwIfUnchecked(e);
- if (e instanceof EvalException) {
- throw (EvalException) e;
- } else if (e instanceof InterruptedException) {
- throw (InterruptedException) e;
- } else {
- // All other checked exceptions (e.g. LabelSyntaxException) are reported to Starlark.
- throw new EvalException(e);
- }
- }
- if (method.getReturnType().equals(Void.TYPE)) {
- return Starlark.NONE;
- }
- if (result == null) {
- // TODO(adonovan): eliminate allowReturnNones. Given that we convert
- // String/Integer/Boolean/List/Map, it seems obtuse to crash instead
- // of converting null too.
- if (isAllowReturnNones()) {
- return Starlark.NONE;
- } else {
- throw new IllegalStateException(
- "method invocation returned null: " + getName() + Tuple.copyOf(Arrays.asList(args)));
- }
- }
-
- return Starlark.fromJava(result, mu);
- }
-
- /** @see StarlarkMethod#name() */
- String getName() {
- return name;
- }
-
- Method getMethod() {
- return method;
- }
-
- /** @see StarlarkMethod#structField() */
- boolean isStructField() {
- return structField;
- }
-
- /** @see StarlarkMethod#useStarlarkThread() */
- boolean isUseStarlarkThread() {
- return useStarlarkThread;
- }
-
- /** @see StarlarkMethod#useStarlarkSemantics() */
- boolean isUseStarlarkSemantics() {
- return useStarlarkSemantics;
- }
-
- /** @see StarlarkMethod#allowReturnNones() */
- boolean isAllowReturnNones() {
- return allowReturnNones;
- }
-
- /** @return {@code true} if this method accepts extra arguments ({@code *args}) */
- boolean acceptsExtraArgs() {
- return extraPositionals;
- }
-
- /** @see StarlarkMethod#extraKeywords() */
- boolean acceptsExtraKwargs() {
- return extraKeywords;
- }
-
- /** @see StarlarkMethod#parameters() */
- ParamDescriptor[] getParameters() {
- return parameters;
- }
-
- /** Returns the index of the named parameter or -1 if not found. */
- int getParameterIndex(String name) {
- for (int i = 0; i < parameters.length; i++) {
- if (parameters[i].getName().equals(name)) {
- return i;
- }
- }
- return -1;
- }
-
- /** @see StarlarkMethod#documented() */
- boolean isDocumented() {
- return documented;
- }
-
- /** @see StarlarkMethod#doc() */
- String getDoc() {
- return doc;
- }
-
- /** @see StarlarkMethod#selfCall() */
- boolean isSelfCall() {
- return selfCall;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
deleted file mode 100644
index 6357337..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
+++ /dev/null
@@ -1,808 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Ascii;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Ordering;
-import com.google.devtools.build.lib.syntax.EvalUtils.ComparisonException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import javax.annotation.Nullable;
-import net.starlark.java.annot.Param;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkDocumentationCategory;
-import net.starlark.java.annot.StarlarkGlobalLibrary;
-import net.starlark.java.annot.StarlarkMethod;
-
-/** The universal predeclared functions of core Starlark. */
-@StarlarkGlobalLibrary
-class MethodLibrary {
-
- @StarlarkMethod(
- name = "min",
- doc =
- "Returns the smallest one of all given arguments. "
- + "If only one argument is provided, it must be a non-empty iterable. "
- + "It is an error if elements are not comparable (for example int with string). "
- + "<pre class=\"language-python\">min(2, 5, 4) == 2\n"
- + "min([5, 6, 3]) == 3</pre>",
- extraPositionals = @Param(name = "args", doc = "The elements to be checked."))
- public Object min(Sequence<?> args) throws EvalException {
- try {
- return findExtreme(args, EvalUtils.STARLARK_COMPARATOR.reverse());
- } catch (ComparisonException e) {
- throw new EvalException(e);
- }
- }
-
- @StarlarkMethod(
- name = "max",
- doc =
- "Returns the largest one of all given arguments. "
- + "If only one argument is provided, it must be a non-empty iterable."
- + "It is an error if elements are not comparable (for example int with string). "
- + "<pre class=\"language-python\">max(2, 5, 4) == 5\n"
- + "max([5, 6, 3]) == 6</pre>",
- extraPositionals = @Param(name = "args", doc = "The elements to be checked."))
- public Object max(Sequence<?> args) throws EvalException {
- try {
- return findExtreme(args, EvalUtils.STARLARK_COMPARATOR);
- } catch (ComparisonException e) {
- throw new EvalException(e);
- }
- }
-
- /** Returns the maximum element from this list, as determined by maxOrdering. */
- private static Object findExtreme(Sequence<?> args, Ordering<Object> maxOrdering)
- throws EvalException {
- // Args can either be a list of items to compare, or a singleton list whose element is an
- // iterable of items to compare. In either case, there must be at least one item to compare.
- try {
- Iterable<?> items = (args.size() == 1) ? Starlark.toIterable(args.get(0)) : args;
- return maxOrdering.max(items);
- } catch (NoSuchElementException ex) {
- throw new EvalException("expected at least one item", ex);
- }
- }
-
- @StarlarkMethod(
- name = "all",
- doc =
- "Returns true if all elements evaluate to True or if the collection is empty. "
- + "Elements are converted to boolean using the <a href=\"#bool\">bool</a> function."
- + "<pre class=\"language-python\">all([\"hello\", 3, True]) == True\n"
- + "all([-1, 0, 1]) == False</pre>",
- parameters = {
- @Param(
- name = "elements",
- type = Object.class,
- noneable = true,
- doc = "A string or a collection of elements.")
- })
- public Boolean all(Object collection) throws EvalException {
- return !hasElementWithBooleanValue(collection, false);
- }
-
- @StarlarkMethod(
- name = "any",
- doc =
- "Returns true if at least one element evaluates to True. "
- + "Elements are converted to boolean using the <a href=\"#bool\">bool</a> function."
- + "<pre class=\"language-python\">any([-1, 0, 1]) == True\n"
- + "any([False, 0, \"\"]) == False</pre>",
- parameters = {
- @Param(
- name = "elements",
- type = Object.class,
- noneable = true,
- doc = "A string or a collection of elements.")
- })
- public Boolean any(Object collection) throws EvalException {
- return hasElementWithBooleanValue(collection, true);
- }
-
- private static boolean hasElementWithBooleanValue(Object seq, boolean value)
- throws EvalException {
- for (Object x : Starlark.toIterable(seq)) {
- if (Starlark.truth(x) == value) {
- return true;
- }
- }
- return false;
- }
-
- @StarlarkMethod(
- name = "sorted",
- doc =
- "Sort a collection. Elements should all belong to the same orderable type, they are "
- + "sorted by their value (in ascending order). "
- + "It is an error if elements are not comparable (for example int with string)."
- + "<pre class=\"language-python\">sorted([3, 5, 4]) == [3, 4, 5]</pre>",
- parameters = {
- @Param(name = "iterable", type = Object.class, doc = "The iterable sequence to sort."),
- @Param(
- name = "key",
- doc = "An optional function applied to each element before comparison.",
- named = true,
- defaultValue = "None",
- positional = false,
- noneable = true),
- @Param(
- name = "reverse",
- type = Boolean.class,
- doc = "Return results in descending order.",
- named = true,
- defaultValue = "False",
- positional = false)
- },
- useStarlarkThread = true)
- public StarlarkList<?> sorted(
- Object iterable, final Object key, Boolean reverse, final StarlarkThread thread)
- throws EvalException, InterruptedException {
- Object[] array = Starlark.toArray(iterable);
- if (key == Starlark.NONE) {
- try {
- Arrays.sort(array, EvalUtils.STARLARK_COMPARATOR);
- } catch (EvalUtils.ComparisonException e) {
- throw Starlark.errorf("%s", e.getMessage());
- }
- } else if (key instanceof StarlarkCallable) {
- final StarlarkCallable keyfn = (StarlarkCallable) key;
-
- class KeyComparator implements Comparator<Object> {
- Exception e;
-
- @Override
- public int compare(Object x, Object y) {
- try {
- return EvalUtils.STARLARK_COMPARATOR.compare(callKeyFunc(x), callKeyFunc(y));
- } catch (InterruptedException | EvalException e) {
- if (this.e == null) {
- this.e = e;
- }
- return 0;
- }
- }
-
- Object callKeyFunc(Object x) throws EvalException, InterruptedException {
- return Starlark.call(thread, keyfn, Collections.singletonList(x), ImmutableMap.of());
- }
- }
-
- KeyComparator comp = new KeyComparator();
- try {
- Arrays.sort(array, comp);
- } catch (EvalUtils.ComparisonException e) {
- throw Starlark.errorf("%s", e.getMessage());
- }
-
- if (comp.e != null) {
- if (comp.e instanceof InterruptedException) {
- throw (InterruptedException) comp.e;
- }
- throw (EvalException) comp.e;
- }
- } else {
- throw Starlark.errorf("%s object is not callable", Starlark.repr(Starlark.type(key)));
- }
-
- if (reverse) {
- reverse(array);
- }
- return StarlarkList.wrap(thread.mutability(), array);
- }
-
- private static void reverse(Object[] array) {
- for (int i = 0, j = array.length - 1; i < j; i++, j--) {
- Object tmp = array[i];
- array[i] = array[j];
- array[j] = tmp;
- }
- }
-
- @StarlarkMethod(
- name = "reversed",
- doc =
- "Returns a list that contains the elements of the original sequence in reversed order."
- + "<pre class=\"language-python\">reversed([3, 5, 4]) == [4, 5, 3]</pre>",
- parameters = {
- @Param(
- name = "sequence",
- type = Sequence.class,
- doc = "The sequence (list or tuple) to be reversed."),
- },
- useStarlarkThread = true)
- public StarlarkList<?> reversed(Sequence<?> sequence, StarlarkThread thread)
- throws EvalException {
- Object[] array = Starlark.toArray(sequence);
- reverse(array);
- return StarlarkList.wrap(thread.mutability(), array);
- }
-
- @StarlarkMethod(
- name = "tuple",
- doc =
- "Returns a tuple with the same elements as the given iterable value."
- + "<pre class=\"language-python\">tuple([1, 2]) == (1, 2)\n"
- + "tuple((2, 3, 2)) == (2, 3, 2)\n"
- + "tuple({5: \"a\", 2: \"b\", 4: \"c\"}) == (5, 2, 4)</pre>",
- parameters = {@Param(name = "x", defaultValue = "()", doc = "The object to convert.")})
- public Tuple<?> tuple(Object x) throws EvalException {
- if (x instanceof Tuple) {
- return (Tuple<?>) x;
- }
- return Tuple.wrap(Starlark.toArray(x));
- }
-
- @StarlarkMethod(
- name = "list",
- doc =
- "Returns a new list with the same elements as the given iterable value."
- + "<pre class=\"language-python\">list([1, 2]) == [1, 2]\n"
- + "list((2, 3, 2)) == [2, 3, 2]\n"
- + "list({5: \"a\", 2: \"b\", 4: \"c\"}) == [5, 2, 4]</pre>",
- parameters = {@Param(name = "x", defaultValue = "[]", doc = "The object to convert.")},
- useStarlarkThread = true)
- public StarlarkList<?> list(Object x, StarlarkThread thread) throws EvalException {
- return StarlarkList.wrap(thread.mutability(), Starlark.toArray(x));
- }
-
- @StarlarkMethod(
- name = "len",
- doc =
- "Returns the length of a string, sequence (such as a list or tuple), dict, or other"
- + " iterable.",
- parameters = {@Param(name = "x", doc = "The value whose length to report.")},
- useStarlarkThread = true)
- public Integer len(Object x, StarlarkThread thread) throws EvalException {
- int len = Starlark.len(x);
- if (len < 0) {
- throw Starlark.errorf("%s is not iterable", Starlark.type(x));
- }
- return len;
- }
-
- @StarlarkMethod(
- name = "str",
- doc =
- "Converts any object to string. This is useful for debugging."
- + "<pre class=\"language-python\">str(\"ab\") == \"ab\"\n"
- + "str(8) == \"8\"</pre>",
- parameters = {@Param(name = "x", doc = "The object to convert.", noneable = true)})
- public String str(Object x) throws EvalException {
- return Starlark.str(x);
- }
-
- @StarlarkMethod(
- name = "repr",
- doc =
- "Converts any object to a string representation. This is useful for debugging.<br>"
- + "<pre class=\"language-python\">repr(\"ab\") == '\"ab\"'</pre>",
- parameters = {@Param(name = "x", doc = "The object to convert.", noneable = true)})
- public String repr(Object x) {
- return Starlark.repr(x);
- }
-
- @StarlarkMethod(
- name = "bool",
- doc =
- "Constructor for the bool type. "
- + "It returns <code>False</code> if the object is <code>None</code>, <code>False"
- + "</code>, an empty string (<code>\"\"</code>), the number <code>0</code>, or an "
- + "empty collection (e.g. <code>()</code>, <code>[]</code>). "
- + "Otherwise, it returns <code>True</code>.",
- parameters = {
- @Param(
- name = "x",
- defaultValue = "False",
- doc = "The variable to convert.",
- noneable = true)
- })
- public Boolean bool(Object x) throws EvalException {
- return Starlark.truth(x);
- }
-
- private final ImmutableMap<String, Integer> intPrefixes =
- ImmutableMap.of("0b", 2, "0o", 8, "0x", 16);
-
- @StarlarkMethod(
- name = "int",
- doc =
- "Returns x as an int value."
- + "<ul>"
- + "<li>If <code>x</code> is already an int, it is returned as-is."
- + "<li>If <code>x</code> is a boolean, a true value returns 1 and a false value "
- + " returns 0."
- + "<li>If <code>x</code> is a string, it must have the format "
- + " <code><sign><prefix><digits></code>. "
- + " <code><sign></code> is either <code>\"+\"</code>, <code>\"-\"</code>, "
- + " or empty (interpreted as positive). <code><digits></code> are a "
- + " sequence of digits from 0 up to <code>base</code> - 1, where the letters a-z "
- + " (or equivalently, A-Z) are used as digits for 10-35. In the case where "
- + " <code>base</code> is 2/8/16, <code><prefix></code> is optional and may "
- + " be 0b/0o/0x (or equivalently, 0B/0O/0X) respectively; if the "
- + " <code>base</code> is any other value besides these bases or the special value "
- + " 0, the prefix must be empty. In the case where <code>base</code> is 0, the "
- + " string is interpreted as an integer literal, in the sense that one of the "
- + " bases 2/8/10/16 is chosen depending on which prefix if any is used. If "
- + " <code>base</code> is 0, no prefix is used, and there is more than one digit, "
- + " the leading digit cannot be 0; this is to avoid confusion between octal and "
- + " decimal. The magnitude of the number represented by the string must be within "
- + " the allowed range for the int type."
- + "</ul>"
- + "This function fails if <code>x</code> is any other type, or if the value is a "
- + "string not satisfying the above format. Unlike Python's <code>int()</code> "
- + "function, this function does not allow zero arguments, and does not allow "
- + "extraneous whitespace for string arguments."
- + "<p>Examples:"
- + "<pre class=\"language-python\">"
- + "int(\"123\") == 123\n"
- + "int(\"-123\") == -123\n"
- + "int(\"+123\") == 123\n"
- + "int(\"FF\", 16) == 255\n"
- + "int(\"0xFF\", 16) == 255\n"
- + "int(\"10\", 0) == 10\n"
- + "int(\"-0x10\", 0) == -16"
- + "</pre>",
- parameters = {
- @Param(name = "x", type = Object.class, doc = "The string to convert."),
- @Param(
- name = "base",
- type = Object.class,
- defaultValue = "unbound",
- doc =
- "The base used to interpret a string value; defaults to 10. Must be between 2 "
- + "and 36 (inclusive), or 0 to detect the base as if <code>x</code> were an "
- + "integer literal. This parameter must not be supplied if the value is not a "
- + "string.",
- named = true)
- })
- public Integer convertToInt(Object x, Object base) throws EvalException {
- if (x instanceof String) {
- if (base == Starlark.UNBOUND) {
- base = 10;
- } else if (!(base instanceof Integer)) {
- throw Starlark.errorf("base must be an integer (got '%s')", Starlark.type(base));
- }
- return fromString((String) x, (Integer) base);
- } else {
- if (base != Starlark.UNBOUND) {
- throw Starlark.errorf("int() can't convert non-string with explicit base");
- }
- if (x instanceof Boolean) {
- return ((Boolean) x).booleanValue() ? 1 : 0;
- } else if (x instanceof Integer) {
- return (Integer) x;
- }
- throw Starlark.errorf("%s is not of type string or int or bool", Starlark.repr(x));
- }
- }
-
- private int fromString(String string, int base) throws EvalException {
- String stringForErrors = string;
-
- boolean isNegative = false;
- if (string.isEmpty()) {
- throw Starlark.errorf("string argument to int() cannot be empty");
- }
- char c = string.charAt(0);
- if (c == '+') {
- string = string.substring(1);
- } else if (c == '-') {
- string = string.substring(1);
- isNegative = true;
- }
-
- String prefix = getIntegerPrefix(string);
- String digits;
- if (prefix == null) {
- // Nothing to strip. Infer base 10 if autodetection was requested (base == 0).
- digits = string;
- if (base == 0) {
- if (string.length() > 1 && string.startsWith("0")) {
- // We don't infer the base when input starts with '0' (due
- // to confusion between octal and decimal).
- throw Starlark.errorf(
- "cannot infer base for int() when value begins with a 0: %s",
- Starlark.repr(stringForErrors));
- }
- base = 10;
- }
- } else {
- // Strip prefix. Infer base from prefix if unknown (base == 0), or else verify its
- // consistency.
- digits = string.substring(prefix.length());
- int expectedBase = intPrefixes.get(prefix);
- if (base == 0) {
- base = expectedBase;
- } else if (base != expectedBase) {
- throw Starlark.errorf(
- "invalid literal for int() with base %d: %s", base, Starlark.repr(stringForErrors));
- }
- }
-
- if (base < 2 || base > 36) {
- throw Starlark.errorf("int() base must be >= 2 and <= 36");
- }
- try {
- // Negate by prepending a negative symbol, rather than by using arithmetic on the
- // result, to handle the edge case of -2^31 correctly.
- String parseable = isNegative ? "-" + digits : digits;
- return Integer.parseInt(parseable, base);
- } catch (NumberFormatException | ArithmeticException e) {
- throw Starlark.errorf(
- "invalid literal for int() with base %d: %s", base, Starlark.repr(stringForErrors));
- }
- }
-
- @Nullable
- private String getIntegerPrefix(String value) {
- value = Ascii.toLowerCase(value);
- for (String prefix : intPrefixes.keySet()) {
- if (value.startsWith(prefix)) {
- return prefix;
- }
- }
- return null;
- }
-
- @StarlarkMethod(
- name = "dict",
- doc =
- "Creates a <a href=\"dict.html\">dictionary</a> from an optional positional "
- + "argument and an optional set of keyword arguments. In the case where the same key "
- + "is given multiple times, the last value will be used. Entries supplied via "
- + "keyword arguments are considered to come after entries supplied via the "
- + "positional argument.",
- parameters = {
- @Param(
- name = "args",
- type = Object.class,
- defaultValue = "[]",
- doc =
- "Either a dictionary or a list of entries. Entries must be tuples or lists with "
- + "exactly two elements: key, value."),
- },
- extraKeywords = @Param(name = "kwargs", doc = "Dictionary of additional entries."),
- useStarlarkThread = true)
- public Dict<?, ?> dict(Object args, Dict<String, Object> kwargs, StarlarkThread thread)
- throws EvalException {
- Dict<?, ?> dict =
- args instanceof Dict
- ? (Dict) args
- : Dict.getDictFromArgs("dict", args, thread.mutability());
- return Dict.plus(dict, kwargs, thread.mutability());
- }
-
- @StarlarkMethod(
- name = "enumerate",
- doc =
- "Returns a list of pairs (two-element tuples), with the index (int) and the item from"
- + " the input sequence.\n<pre class=\"language-python\">"
- + "enumerate([24, 21, 84]) == [(0, 24), (1, 21), (2, 84)]</pre>\n",
- parameters = {
- // Note Python uses 'sequence' keyword instead of 'list'. We may want to change tihs
- // some day.
- @Param(name = "list", type = Object.class, doc = "input sequence.", named = true),
- @Param(
- name = "start",
- type = Integer.class,
- doc = "start index.",
- defaultValue = "0",
- named = true)
- },
- useStarlarkThread = true)
- public StarlarkList<?> enumerate(Object input, Integer start, StarlarkThread thread)
- throws EvalException {
- Object[] array = Starlark.toArray(input);
- for (int i = 0; i < array.length; i++) {
- array[i] = Tuple.pair(i + start, array[i]); // update in place
- }
- return StarlarkList.wrap(thread.mutability(), array);
- }
-
- @StarlarkMethod(
- name = "hash",
- doc =
- "Return a hash value for a string. This is computed deterministically using the same "
- + "algorithm as Java's <code>String.hashCode()</code>, namely: "
- + "<pre class=\"language-python\">s[0] * (31^(n-1)) + s[1] * (31^(n-2)) + ... + "
- + "s[n-1]</pre> Hashing of values besides strings is not currently supported.",
- // Deterministic hashing is important for the consistency of builds, hence why we
- // promise a specific algorithm. This is in contrast to Java (Object.hashCode()) and
- // Python, which promise stable hashing only within a given execution of the program.
- parameters = {@Param(name = "value", type = String.class, doc = "String value to hash.")})
- public Integer hash(String value) throws EvalException {
- return value.hashCode();
- }
-
- @StarlarkMethod(
- name = "range",
- doc =
- "Creates a list where items go from <code>start</code> to <code>stop</code>, using a "
- + "<code>step</code> increment. If a single argument is provided, items will "
- + "range from 0 to that element."
- + "<pre class=\"language-python\">range(4) == [0, 1, 2, 3]\n"
- + "range(3, 9, 2) == [3, 5, 7]\n"
- + "range(3, 0, -1) == [3, 2, 1]</pre>",
- parameters = {
- @Param(
- name = "start_or_stop",
- type = Integer.class,
- doc =
- "Value of the start element if stop is provided, "
- + "otherwise value of stop and the actual start is 0"),
- @Param(
- name = "stop_or_none",
- type = Integer.class,
- noneable = true,
- defaultValue = "None",
- doc =
- "optional index of the first item <i>not</i> to be included in the resulting "
- + "list; generation of the list stops before <code>stop</code> is reached."),
- @Param(
- name = "step",
- type = Integer.class,
- defaultValue = "1",
- doc = "The increment (default is 1). It may be negative.")
- },
- useStarlarkThread = true)
- public Sequence<Integer> range(
- Integer startOrStop, Object stopOrNone, Integer step, StarlarkThread thread)
- throws EvalException {
- int start;
- int stop;
- if (stopOrNone == Starlark.NONE) {
- start = 0;
- stop = startOrStop;
- } else if (stopOrNone instanceof Integer) {
- start = startOrStop;
- stop = (Integer) stopOrNone;
- } else {
- throw Starlark.errorf("want int, got %s", Starlark.type(stopOrNone));
- }
- if (step == 0) {
- throw Starlark.errorf("step cannot be 0");
- }
- return new RangeList(start, stop, step);
- }
-
- /** Returns true if the object has a field of the given name, otherwise false. */
- @StarlarkMethod(
- name = "hasattr",
- doc =
- "Returns True if the object <code>x</code> has an attribute or method of the given "
- + "<code>name</code>, otherwise False. Example:<br>"
- + "<pre class=\"language-python\">hasattr(ctx.attr, \"myattr\")</pre>",
- parameters = {
- @Param(name = "x", doc = "The object to check.", noneable = true),
- @Param(name = "name", type = String.class, doc = "The name of the attribute.")
- },
- useStarlarkThread = true)
- public Boolean hasattr(Object obj, String name, StarlarkThread thread) throws EvalException {
- return Starlark.hasattr(thread.getSemantics(), obj, name);
- }
-
- @StarlarkMethod(
- name = "getattr",
- doc =
- "Returns the struct's field of the given name if it exists. If not, it either returns "
- + "<code>default</code> (if specified) or raises an error. "
- + "<code>getattr(x, \"foobar\")</code> is equivalent to <code>x.foobar</code>."
- + "<pre class=\"language-python\">getattr(ctx.attr, \"myattr\")\n"
- + "getattr(ctx.attr, \"myattr\", \"mydefault\")</pre>",
- parameters = {
- @Param(name = "x", doc = "The struct whose attribute is accessed.", noneable = true),
- @Param(name = "name", doc = "The name of the struct attribute."),
- @Param(
- name = "default",
- defaultValue = "unbound",
- doc =
- "The default value to return in case the struct "
- + "doesn't have an attribute of the given name.",
- noneable = true)
- },
- useStarlarkThread = true)
- public Object getattr(Object obj, String name, Object defaultValue, StarlarkThread thread)
- throws EvalException, InterruptedException {
- return Starlark.getattr(
- thread.mutability(),
- thread.getSemantics(),
- obj,
- name,
- defaultValue == Starlark.UNBOUND ? null : defaultValue);
- }
-
- @StarlarkMethod(
- name = "dir",
- doc =
- "Returns a list of strings: the names of the attributes and "
- + "methods of the parameter object.",
- parameters = {@Param(name = "x", doc = "The object to check.", noneable = true)},
- useStarlarkThread = true)
- public StarlarkList<?> dir(Object object, StarlarkThread thread) throws EvalException {
- return Starlark.dir(thread.mutability(), thread.getSemantics(), object);
- }
-
- @StarlarkMethod(
- name = "fail",
- doc =
- "Raises an error that cannot be intercepted. It can be used anywhere, "
- + "both in the loading phase and in the analysis phase.",
- parameters = {
- @Param(
- name = "msg",
- type = Object.class,
- doc = "Error to display for the user. The object is converted to a string.",
- defaultValue = "None",
- named = true,
- noneable = true),
- @Param(
- name = "attr",
- type = String.class,
- noneable = true,
- defaultValue = "None",
- doc =
- "The name of the attribute that caused the error. This is used only for "
- + "error reporting.",
- named = true)
- })
- public NoneType fail(Object msg, Object attr) throws EvalException {
- String str = Starlark.str(msg);
- if (attr != Starlark.NONE) {
- str = Starlark.format("attribute %s: %s", attr, str);
- }
- throw Starlark.errorf("%s", str);
- }
-
- @StarlarkMethod(
- name = "print",
- doc =
- "Prints <code>args</code> as debug output. It will be prefixed with the string <code>"
- + "\"DEBUG\"</code> and the location (file and line number) of this call. The "
- + "exact way in which the arguments are converted to strings is unspecified and may "
- + "change at any time. In particular, it may be different from (and more detailed "
- + "than) the formatting done by <a href='#str'><code>str()</code></a> and <a "
- + "href='#repr'><code>repr()</code></a>."
- + "<p>Using <code>print</code> in production code is discouraged due to the spam it "
- + "creates for users. For deprecations, prefer a hard error using <a href=\"#fail\">"
- + "<code>fail()</code></a> whenever possible.",
- parameters = {
- @Param(
- name = "sep",
- type = String.class,
- defaultValue = "\" \"",
- named = true,
- positional = false,
- doc = "The separator string between the objects, default is space (\" \").")
- },
- // NB: as compared to Python3, we're missing optional named-only arguments 'end' and 'file'
- extraPositionals = @Param(name = "args", doc = "The objects to print."),
- useStarlarkThread = true)
- public NoneType print(String sep, Sequence<?> args, StarlarkThread thread) throws EvalException {
- Printer p = new Printer();
- String separator = "";
- for (Object x : args) {
- p.append(separator);
- p.debugPrint(x);
- separator = sep;
- }
- // The PRINT_TEST_MARKER key is used in tests to verify the effects of command-line options.
- // See starlark_flag_test.sh, which runs bazel with --internal_starlark_flag_test_canary.
- if (thread.getSemantics().getBool(StarlarkSemantics.PRINT_TEST_MARKER)) {
- p.append("<== Starlark flag test ==>");
- }
-
- thread.getPrintHandler().print(thread, p.toString());
- return Starlark.NONE;
- }
-
- @StarlarkMethod(
- name = "type",
- doc =
- "Returns the type name of its argument. This is useful for debugging and "
- + "type-checking. Examples:"
- + "<pre class=\"language-python\">"
- + "type(2) == \"int\"\n"
- + "type([1]) == \"list\"\n"
- + "type(struct(a = 2)) == \"struct\""
- + "</pre>"
- + "This function might change in the future. To write Python-compatible code and "
- + "be future-proof, use it only to compare return values: "
- + "<pre class=\"language-python\">"
- + "if type(x) == type([]): # if x is a list"
- + "</pre>",
- parameters = {@Param(name = "x", doc = "The object to check type of.", noneable = true)})
- public String type(Object object) {
- // There is no 'type' type in Starlark, so we return a string with the type name.
- return Starlark.type(object);
- }
-
- @StarlarkMethod(
- name = "zip",
- doc =
- "Returns a <code>list</code> of <code>tuple</code>s, where the i-th tuple contains "
- + "the i-th element from each of the argument sequences or iterables. The list has "
- + "the size of the shortest input. With a single iterable argument, it returns a "
- + "list of 1-tuples. With no arguments, it returns an empty list. Examples:"
- + "<pre class=\"language-python\">"
- + "zip() # == []\n"
- + "zip([1, 2]) # == [(1,), (2,)]\n"
- + "zip([1, 2], [3, 4]) # == [(1, 3), (2, 4)]\n"
- + "zip([1, 2], [3, 4, 5]) # == [(1, 3), (2, 4)]</pre>",
- extraPositionals = @Param(name = "args", doc = "lists to zip."),
- useStarlarkThread = true)
- public StarlarkList<?> zip(Sequence<?> args, StarlarkThread thread) throws EvalException {
- Iterator<?>[] iterators = new Iterator<?>[args.size()];
- for (int i = 0; i < args.size(); i++) {
- iterators[i] = Starlark.toIterable(args.get(i)).iterator();
- }
- ArrayList<Tuple<?>> result = new ArrayList<>();
- boolean allHasNext;
- do {
- allHasNext = !args.isEmpty();
- List<Object> elem = Lists.newArrayListWithExpectedSize(args.size());
- for (Iterator<?> iterator : iterators) {
- if (iterator.hasNext()) {
- elem.add(iterator.next());
- } else {
- allHasNext = false;
- }
- }
- if (allHasNext) {
- result.add(Tuple.copyOf(elem));
- }
- } while (allHasNext);
- return StarlarkList.copyOf(thread.mutability(), result);
- }
-
- /** Starlark int type. */
- @StarlarkBuiltin(
- name = "int",
- category = StarlarkDocumentationCategory.BUILTIN,
- doc =
- "A type to represent integers. It can represent any number between -2147483648 and "
- + "2147483647 (included). "
- + "Examples of int values:<br>"
- + "<pre class=\"language-python\">"
- + "153\n"
- + "0x2A # hexadecimal literal\n"
- + "0o54 # octal literal\n"
- + "23 * 2 + 5\n"
- + "100 / -7\n"
- + "100 % -7 # -5 (unlike in some other languages)\n"
- + "int(\"18\")\n"
- + "</pre>")
- static final class IntModule implements StarlarkValue {} // (documentation only)
-
- /** Starlark bool type. */
- @StarlarkBuiltin(
- name = "bool",
- category = StarlarkDocumentationCategory.BUILTIN,
- doc =
- "A type to represent booleans. There are only two possible values: "
- + "<a href=\"globals.html#True\">True</a> and "
- + "<a href=\"globals.html#False\">False</a>. "
- + "Any value can be converted to a boolean using the "
- + "<a href=\"globals.html#bool\">bool</a> function.")
- static final class BoolModule implements StarlarkValue {} // (documentation only)
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Module.java b/src/main/java/com/google/devtools/build/lib/syntax/Module.java
deleted file mode 100644
index 1aec2f7..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Module.java
+++ /dev/null
@@ -1,259 +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.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableMap;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-import javax.annotation.Nullable;
-
-/**
- * A {@link Module} represents a Starlark module, a container of global variables populated by
- * executing a Starlark file. Each top-level assignment updates a global variable in the module.
- *
- * <p>Each module references its "predeclared" environment, which is often shared among many
- * modules. These are the names that are defined even at the start of execution. For example, in
- * Bazel, the predeclared environment of the module for a BUILD or .bzl file defines name values
- * such as cc_binary and glob.
- *
- * <p>The predeclared environment implicitly includes the "universal" names present in every
- * Starlark thread in every dialect, such as None, len, and str; see {@link Starlark#UNIVERSE}.
- *
- * <p>Global bindings in a Module may shadow bindings inherited from the predeclared block.
- *
- * <p>A module may carry an arbitrary piece of client data. In Bazel, for example, the client data
- * records the module's build label (such as "//dir:file.bzl").
- *
- * <p>Use {@link #create} to create a {@link Module} with no predeclared bindings other than the
- * universal ones. Use {@link #withPredeclared(StarlarkSemantics, Map)} to create a module with the
- * predeclared environment specified by the map, using the semantics to determine whether any
- * FlagGuardedValues in the map are enabled or disabled.
- */
-public final class Module implements Resolver.Module {
-
- // The module's predeclared environment. Excludes UNIVERSE bindings.
- private ImmutableMap<String, Object> predeclared;
-
- // The module's global bindings, in order of creation.
- private final LinkedHashMap<String, Object> globals = new LinkedHashMap<>();
-
- // Names of globals that are exported and can be loaded from other modules.
- // TODO(adonovan): eliminate this field when the resolver does its job properly.
- final HashSet<String> exportedGlobals = new HashSet<>();
-
- // An optional piece of metadata associated with the module/file.
- // May be set after construction (too obscure to burden the constructors).
- // Its toString appears to Starlark in str(function): "<function f from ...>".
- @Nullable private Object clientData;
-
- private Module(ImmutableMap<String, Object> predeclared) {
- this.predeclared = predeclared;
- }
-
- /**
- * Constructs a Module with the specified predeclared bindings, filtered by the semantics, in
- * addition to the standard environment, {@link Starlark#UNIVERSE}.
- */
- public static Module withPredeclared(
- StarlarkSemantics semantics, Map<String, Object> predeclared) {
- return new Module(filter(predeclared, semantics));
- }
-
- /**
- * Creates a module with no predeclared bindings other than the standard environment, {@link
- * Starlark#UNIVERSE}.
- */
- public static Module create() {
- return new Module(/*predeclared=*/ ImmutableMap.of());
- }
-
- /**
- * Returns the module (file) of the innermost enclosing Starlark function on the call stack, or
- * null if none of the active calls are functions defined in Starlark.
- *
- * <p>The name of this function is intentionally horrible to make you feel bad for using it.
- */
- @Nullable
- public static Module ofInnermostEnclosingStarlarkFunction(StarlarkThread thread) {
- for (Debug.Frame fr : thread.getDebugCallStack().reverse()) {
- if (fr.getFunction() instanceof StarlarkFunction) {
- return ((StarlarkFunction) fr.getFunction()).getModule();
- }
- }
- return null;
- }
-
- /**
- * Returns a map in which each semantics-enabled FlagGuardedValue has been replaced by the value
- * it guards. Disabled FlagGuardedValues are left in place, and should be treated as unavailable.
- * The iteration order is unchanged.
- */
- private static ImmutableMap<String, Object> filter(
- Map<String, Object> predeclared, StarlarkSemantics semantics) {
- ImmutableMap.Builder<String, Object> filtered = ImmutableMap.builder();
- for (Map.Entry<String, Object> bind : predeclared.entrySet()) {
- Object v = bind.getValue();
- if (v instanceof FlagGuardedValue) {
- FlagGuardedValue fv = (FlagGuardedValue) bind.getValue();
- if (fv.isObjectAccessibleUsingSemantics(semantics)) {
- v = fv.getObject();
- }
- }
- filtered.put(bind.getKey(), v);
- }
- return filtered.build();
- }
-
- /**
- * Sets the client data (an arbitrary application-specific value) associated with the module. It
- * may be retrieved using {@link #getClientData}. Its {@code toString} form appears in the result
- * of {@code str(fn)} where {@code fn} is a StarlarkFunction: "<function f from ...>".
- */
- public void setClientData(@Nullable Object clientData) {
- this.clientData = clientData;
- }
-
- /**
- * Returns the client data associated with this module by a prior call to {@link #setClientData}.
- */
- @Nullable
- public Object getClientData() {
- return clientData;
- }
-
- /** Returns the value of a predeclared (or universal) binding in this module. */
- Object getPredeclared(String name) {
- Object v = predeclared.get(name);
- if (v != null) {
- return v;
- }
- return Starlark.UNIVERSE.get(name);
- }
-
- /**
- * Returns this module's additional predeclared bindings. (Excludes {@link Starlark#UNIVERSE}.)
- *
- * <p>The map reflects any semantics-based filtering of FlagGuardedValues done by {@link
- * #withPredeclared}: enabled FlagGuardedValues are replaced by their underlying value.
- */
- public ImmutableMap<String, Object> getPredeclaredBindings() {
- return predeclared;
- }
-
- /**
- * Returns a read-only view of this module's global bindings.
- *
- * <p>The bindings are returned in a deterministic order (for a given sequence of initial values
- * and updates).
- */
- public Map<String, Object> getGlobals() {
- return Collections.unmodifiableMap(globals);
- }
-
- /**
- * Returns a map of bindings that are exported (i.e. symbols declared using `=` and `def`, but not
- * `load`).
- */
- // TODO(adonovan): whether bindings are exported should be decided by the resolver;
- // non-exported bindings should never be added to the module. Delete this.
- public ImmutableMap<String, Object> getExportedGlobals() {
- ImmutableMap.Builder<String, Object> result = new ImmutableMap.Builder<>();
- for (Map.Entry<String, Object> entry : globals.entrySet()) {
- if (exportedGlobals.contains(entry.getKey())) {
- result.put(entry);
- }
- }
- return result.build();
- }
-
- /** Implements the resolver's module interface. */
- @Override
- public Set<String> getNames() {
- // TODO(adonovan): for now, the resolver treats all predeclared/universe
- // and global names as one bucket (Scope.PREDECLARED). Fix that.
- // TODO(adonovan): opt: change the resolver to request names on
- // demand to avoid all this set copying.
- HashSet<String> names = new HashSet<>();
- for (Map.Entry<String, Object> bind : getTransitiveBindings().entrySet()) {
- if (bind.getValue() instanceof FlagGuardedValue) {
- continue; // disabled
- }
- names.add(bind.getKey());
- }
- return names;
- }
-
- @Override
- @Nullable
- public String getUndeclaredNameError(String name) {
- Object v = getPredeclared(name);
- return v instanceof FlagGuardedValue
- ? ((FlagGuardedValue) v).getErrorFromAttemptingAccess(name)
- : null;
- }
-
- /**
- * Returns a new map containing the predeclared (including universal) and global bindings of this
- * module.
- */
- // TODO(adonovan): eliminate; clients should explicitly choose getPredeclared or getGlobals.
- public Map<String, Object> getTransitiveBindings() {
- // Can't use ImmutableMap.Builder because it doesn't allow duplicates.
- LinkedHashMap<String, Object> env = new LinkedHashMap<>();
- env.putAll(Starlark.UNIVERSE);
- env.putAll(predeclared);
- env.putAll(globals);
- return env;
- }
-
- /**
- * Returns the value of the specified global variable, or null if not bound. Does not look in the
- * predeclared environment.
- */
- public Object getGlobal(String name) {
- return globals.get(name);
- }
-
- /**
- * Returns the value of the named variable in the module global environment (as if by {@link
- * #getGlobal}), or if not bound there, in the predeclared environment (as if by {@link
- * #getPredeclared}, or if not bound there, null.
- */
- public Object get(String name) {
- // TODO(adonovan): delete this whole function, and getTransitiveBindings.
- // With proper resolution, the interpreter will know whether
- // to look in the module or the predeclared/universal environment.
- Object v = getGlobal(name);
- if (v != null) {
- return v;
- }
- return getPredeclared(name);
- }
-
- /** Updates a global binding in the module environment. */
- public void setGlobal(String name, Object value) {
- Preconditions.checkNotNull(value, "Module.setGlobal(%s, null)", name);
- globals.put(name, value);
- }
-
- @Override
- public String toString() {
- return String.format("<module %s>", clientData == null ? "?" : clientData);
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Mutability.java b/src/main/java/com/google/devtools/build/lib/syntax/Mutability.java
deleted file mode 100644
index dd9e8c1..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Mutability.java
+++ /dev/null
@@ -1,280 +0,0 @@
-// Copyright 2015 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.syntax;
-
-import com.google.common.base.Joiner;
-import java.util.IdentityHashMap;
-
-/**
- * An object that manages the capability to mutate Starlark objects and their {@link
- * StarlarkThread}s. Collectively, the managed objects are called {@link Freezable}s.
- *
- * <p>Each {@code StarlarkThread}, and each of the mutable Starlark values (i.e., {@link
- * StarlarkMutable}s) that are created in that {@code StarlarkThread}, holds a pointer to the same
- * {@code Mutability} instance. Once the {@code StarlarkThread} is done evaluating, its {@code
- * Mutability} is irreversibly closed ("frozen"). At that point, it is no longer possible to change
- * either the bindings in that {@code StarlarkThread} or the state of its objects. This protects
- * each {@code StarlarkThread} from unintentional and unsafe modification.
- *
- * <p>{@code Mutability}s enforce isolation between {@code StarlarkThread}s; it is illegal for an
- * evaluation in one {@code StarlarkThread} to affect the bindings or values of another. In
- * particular, the {@code StarlarkThread} for any Starlark module is frozen before its symbols can
- * be imported for use by another module. Each individual {@code StarlarkThread}'s evaluation is
- * single-threaded, so this isolation also translates to thread safety. Any number of threads may
- * simultaneously access frozen data. (The {@code Mutability} itself is also thread-safe if and only
- * if it is frozen.}
- *
- * <p>Although the mutability pointer of a {@code Freezable} contains some debugging information
- * about its context, this should not affect the {@code Freezable}'s semantics. From a behavioral
- * point of view, the only thing that matters is whether the {@code Mutability} is frozen, not what
- * particular {@code Mutability} object is pointed to.
- *
- * <p>When a Starlark program iterates over a mutable sequence value in a for-loop or comprehension,
- * the sequence value becomes temporarily immutable for the duration of the loop. Conceptually, the
- * value maintains a counter of active iterations, and the interpreter notifies the {@code
- * Freezable} value before and after the loop so that it can alter its counter by calling its {@code
- * updateIteratorCount} method. While the counter value is nonzero, the value should cause all
- * attempts to mutate it to fail. The temporary immutability applies only to the sequence itself,
- * not to its elements. Once a mutable sequence becomes frozen, there is no need to count active
- * iterators (and doing so would be racy as frozen objects may be published to other Starlark
- * threads). The default implementation of {@code updateIteratorCount} uses a set of counters in the
- * Mutability, but a Freezable object may define a more efficient intrusive counter implementation.
- *
- * <p>We follow two disciplines to ensure safety. First, all mutation methods of a Freezable value
- * must confirm that the value's Mutability is not yet frozen, nor is the value temporarily
- * immutable due to active iterators.
- *
- * <p>Second, {@code Mutability}s are created using the try-with-resource style:
- *
- * <pre>{@code
- * try (Mutability mutability = Mutability.create(name, ...)) { ... }
- * }</pre>
- *
- * The general pattern is to create a {@code Mutability}, build an {@code StarlarkThread}, mutate
- * that {@code StarlarkThread} and its objects, and possibly return the result from within the
- * {@code try} block, relying on the try-with-resource construct to ensure that everything gets
- * frozen before the result is used. The only code that should create a {@code Mutability} without
- * using try-with-resource is test code that is not part of the Bazel jar.
- *
- * <p>We keep some (unchecked) invariants regarding where {@code Mutability} objects may appear
- * within a compound value.
- *
- * <ol>
- * <li>A compound value can never contain an unfrozen {@code Mutability} for any {@code
- * StarlarkThread} except the one currently being evaluated.
- * <li>If a value has the special {@link #IMMUTABLE} {@code Mutability}, all of its contents are
- * themselves deeply immutable too (i.e. have frozen {@code Mutability}s).
- * </ol>
- *
- * It follows that, if these invariants hold, an unfrozen value cannot appear as the child of a
- * value whose {@code Mutability} is already frozen. This knowledge is used by {@link
- * StarlarkMutable#isImmutable} to prune traversals of a compound value.
- *
- * <p>There is a special API for freezing individual values rather than whole {@code
- * StarlarkThread}s. Because this API makes it easier to violate the above invariants, you should
- * avoid using it if at all possible; at the moment it is only used for serialization. Under this
- * API, you may call {@link Freezable#unsafeShallowFreeze} to reset a value's {@code Mutability}
- * pointer to be {@link #IMMUTABLE}. This operation has no effect on the {@code Mutability} itself.
- * It is up to the caller to preserve or restore the above invariants by ensuring that any deeply
- * contained values are also frozen. For safety and explicitness, this operation is disallowed
- * unless the {@code Mutability}'s {@link #allowsUnsafeShallowFreeze} method returns true.
- */
-public final class Mutability implements AutoCloseable {
-
- // Maps each temporarily frozen Freezable value to the (positive) count of active iterators over
- // the value. This field is set to null when the Mutability becomes permanently frozen, at which
- // point there is no need to track iterators. This map does not contain Freezable values that
- // define their own implementation of updateIteratorCount.
- private IdentityHashMap<Freezable, Integer> iteratorCount =
- new IdentityHashMap<>(10); // 10 nested for-loops seems plenty
-
- // An optional list of values that are formatted with toString and joined with spaces to yield the
- // "annotation", an internal name describing the purpose of this Mutability.
- private final Object[] annotation;
-
- /** Controls access to {@link Freezable#unsafeShallowFreeze}. */
- private final boolean allowsUnsafeShallowFreeze;
-
- private Mutability(Object[] annotation, boolean allowsUnsafeShallowFreeze) {
- this.annotation = annotation;
- this.allowsUnsafeShallowFreeze = allowsUnsafeShallowFreeze;
- }
-
- /**
- * Creates a {@code Mutability}.
- *
- * @param annotation a list of objects whose toString representations are joined with spaces to
- * yield the annotation, an internal name describing the purpose of this Mutability.
- */
- public static Mutability create(Object... annotation) {
- return new Mutability(annotation, /*allowsUnsafeShallowFreeze=*/ false);
- }
-
- /**
- * Creates a {@code Mutability} whose objects can be individually frozen; see docstrings for
- * {@link Mutability} and {@link Freezable#unsafeShallowFreeze}.
- */
- public static Mutability createAllowingShallowFreeze(Object... annotation) {
- return new Mutability(annotation, /*allowsUnsafeShallowFreeze=*/ true);
- }
-
- /** Returns the Mutability's "annotation", an internal name describing its purpose. */
- public String getAnnotation() {
- // The annotation string is computed when needed, typically never,
- // to avoid the performance penalty of materializing it eagerly.
- return Joiner.on(" ").join(annotation);
- }
-
- @Override
- public String toString() {
- return (isFrozen() ? "(" : "[") + getAnnotation() + (isFrozen() ? ")" : "]");
- }
-
- public boolean isFrozen() {
- return this.iteratorCount == null;
- }
-
- // Defines the default behavior of mutable Freezable sequence values,
- // which become temporarily immutable while there are active iterators.
- private boolean updateIteratorCount(Freezable x, int delta) {
- if (isFrozen()) {
- return false;
- }
- int i = this.iteratorCount.getOrDefault(x, 0);
- if (delta > 0) {
- i++;
- this.iteratorCount.put(x, i);
- } else if (delta < 0) {
- i--;
- if (i == 0) {
- this.iteratorCount.remove(x);
- } else if (i > 0) {
- this.iteratorCount.put(x, i);
- } else {
- throw new IllegalStateException("zero value in this.iteratorCount");
- }
- }
- return i > 0;
- }
-
- /**
- * Freezes this {@code Mutability}, rendering all {@link Freezable} objects that refer to it
- * immutable.
- *
- * Note that freezing does not directly touch all the {@code Freezables}, so this operation is
- * constant-time.
- *
- * @return this object, in the fluent style
- */
- public Mutability freeze() {
- this.iteratorCount = null;
- return this;
- }
-
- @Override
- public void close() {
- freeze();
- }
-
- /**
- * Returns whether {@link Freezable}s having this {@code Mutability} allow the {@link
- * #unsafeShallowFreeze} operation.
- */
- public boolean allowsUnsafeShallowFreeze() {
- return allowsUnsafeShallowFreeze;
- }
-
- /**
- * An object that refers to a {@link Mutability} to decide whether to allow mutation. All {@link
- * Freezable} Starlark objects created within a given {@link StarlarkThread} will share the same
- * {@code Mutability} as that {@code StarlarkThread}.
- */
- public interface Freezable {
- /**
- * Returns the {@link Mutability} associated with this {@code Freezable}. This should not change
- * over the lifetime of the object, except by calling {@link #shallowFreeze} if applicable.
- */
- Mutability mutability();
-
- /**
- * Registers a change to this Freezable's iterator count and reports whether it is temporarily
- * immutable.
- *
- * <p>If the value is permanently frozen ({@code mutability().isFrozen()), this function is a
- * no-op that returns false.
- *
- * <p>Otherwise, if delta is positive, this increments the count of active iterators over the
- * value, causing it to appear temporarily frozen (if it wasn't already). If delta is negative,
- * the counter is decremented, and if delta is zero the counter is unchanged. It is illegal to
- * decrement the counter if it was already zero. The return value is true if the count is
- * positive after the change, and false otherwise.
- *
- * <p>The default implementation stores the counter of iterators in a hash table in the
- * Mutability, but a subclass of Freezable may define a more efficient implementation such as an
- * integer field in the freezable value itself.
- *
- * <p>Call this function with a positive value when starting an iteration and with a negative
- * value when ending it.
- */
- default boolean updateIteratorCount(int delta) {
- return mutability().updateIteratorCount(this, delta);
- }
-
- /**
- * Freezes this object (and not its contents). Use with care.
- *
- * <p>This method is optional (i.e. may throw {@link NotImplementedException}).
- *
- * <p>If this object's {@link Mutability} is 1) not frozen, and 2) has {@link
- * #allowUnsafeShallowFreeze} return true, then the object's {@code Mutability} reference is
- * updated to point to {@link #IMMUTABLE}. Otherwise, this method throws {@link
- * IllegalArgumentException}.
- *
- * <p>It is up to the caller to ensure that any contents of this {@code Freezable} are also
- * frozen in order to preserve/restore the invariant that an immutable value cannot contain a
- * mutable one. Note that {@link StarlarkMutable#isImmutable} correctness and thread-safety are
- * not guaranteed otherwise.
- */
- default void unsafeShallowFreeze() {
- throw new UnsupportedOperationException();
- }
-
- /**
- * Throws {@link IllegalArgumentException} if the precondition for {@link #unsafeShallowFreeze}
- * is violated. To be used by implementors of {@link #unsafeShallowFreeze}.
- */
- static void checkUnsafeShallowFreezePrecondition(
- Freezable freezable) {
- Mutability mutability = freezable.mutability();
- if (mutability.isFrozen()) {
- // It's not safe to rewrite the Mutability pointer if this is already frozen, because we
- // could be accessed by multiple threads.
- throw new IllegalArgumentException(
- "cannot call unsafeShallowFreeze() on an object whose Mutability is already frozen");
- }
- if (!mutability.allowsUnsafeShallowFreeze()) {
- throw new IllegalArgumentException(
- "cannot call unsafeShallowFreeze() on a mutable object whose Mutability's "
- + "allowsUnsafeShallowFreeze() == false");
- }
- }
- }
-
- /**
- * A {@code Mutability} indicating that a value is deeply immutable.
- *
- * <p>It is not associated with any particular {@link StarlarkThread}.
- */
- public static final Mutability IMMUTABLE = create("IMMUTABLE").freeze();
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Node.java b/src/main/java/com/google/devtools/build/lib/syntax/Node.java
deleted file mode 100644
index e89bc1a..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Node.java
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Preconditions;
-
-/**
- * A Node is a node in a Starlark syntax tree.
- *
- * <p>Nodes may be constructed only by the parser.
- *
- * <p>The syntax tree records the offsets within the file of all salient tokens, such as brackets
- * that mark the beginning or end of an expression, or operators whose position may be needed in a
- * run-time error message. The start and end offsets of each Node are computed inductively from
- * their tokens and subexpressions. Offsets are converted to Locations on demand in methods such as
- * {@link #getStartLocation}.
- */
-public abstract class Node {
-
- // Use these typical node distributions in Bazel files
- // as a rough guide for optimization decisions.
- // BUILD files are much more numerous than .bzl files,
- // and typically larger.
- //
- // Large BUILD file:
- // 49 % StringLiteral
- // 17 % Identifier
- // 12 % Argument.Keyword
- // 9 % ListExpression
- // 4 % CallExpression
- // 3.5% ExpressionStatement
- // 3.1% Comment
- // 1.2% Argument.Positional
- // 1.8% all others
- //
- // Large .bzl logic file:
- // 42 % Identifier
- // 12 % DotExpression
- // 7.1% StringLiteral
- // 6.7% Argument.Keyword
- // 6.7% CallExpression
- // 4.6% Argument.Positional
- // 3.1% Comment
- // 2.4% ListExpression
- // 2.4% ExpressionStatement
- // 2.2% AssignmentStatement
- // 1.9% DictExpression.Entry
- // 1.9% BinaryOperatorExpression
- // 1.0% Comprehension
- // 6 % all others
-
- // The FileLocations table holds the file name and a compressed
- // mapping from token char offsets to Locations.
- // It is shared by all nodes from the same file.
- final FileLocations locs;
-
- Node(FileLocations locs) {
- this.locs = Preconditions.checkNotNull(locs);
- }
-
- /**
- * Returns the node's start offset, as a char index (zero-based count of UTF-16 codes) from the
- * start of the file.
- */
- public abstract int getStartOffset();
-
- /** Returns the location of the start of this syntax node. */
- public final Location getStartLocation() {
- return locs.getLocation(getStartOffset());
- }
-
- /** Returns the char offset of the source position immediately after this syntax node. */
- public abstract int getEndOffset();
-
- /** Returns the location of the source position immediately after this syntax node. */
- public final Location getEndLocation() {
- return locs.getLocation(getEndOffset());
- }
-
- /**
- * Returns a pretty-printed representation of this syntax tree.
- *
- * <p>This function returns the canonical source code corresponding to a syntax tree. Generally,
- * the output can be round-tripped: pretty-printing a syntax tree then parsing the result should
- * yield an equivalent syntax tree.
- *
- * <p>The pretty-printed form of a syntax tree may be used as a proxy for equality in tests.
- * However, different trees may have the same printed form. In particular, {@link StarlarkFile}
- * includes comments that are not reflected in the string.
- */
- public final String prettyPrint() {
- StringBuilder buf = new StringBuilder();
- new NodePrinter(buf).printNode(this);
- return buf.toString();
- }
-
- /**
- * Print the syntax node in a form useful for debugging.
- *
- * <p>The output is not precisely specified; use {@link #prettyPrint()} if you need more stable
- * and complete information. For instance, this function may omit child statements of compound
- * statements, or parentheses around some expressions. It may also abbreviate large list literals.
- */
- @Override
- public String toString() {
- return prettyPrint(); // default behavior, overridden in several subclasses
- }
-
- /**
- * Implements the double dispatch by calling into the node specific <code>visit</code> method of
- * the {@link NodeVisitor}
- *
- * @param visitor the {@link NodeVisitor} instance to dispatch to.
- */
- public abstract void accept(NodeVisitor visitor);
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/NodePrinter.java b/src/main/java/com/google/devtools/build/lib/syntax/NodePrinter.java
deleted file mode 100644
index b9532fa..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/NodePrinter.java
+++ /dev/null
@@ -1,464 +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.syntax;
-
-import java.util.List;
-
-/** A pretty-printer for Starlark syntax trees. */
-final class NodePrinter {
-
- private final StringBuilder buf;
- private int indent;
-
- NodePrinter(StringBuilder buf) {
- this.buf = buf;
- }
-
- // Constructor exposed to legacy tests.
- // TODO(adonovan): rewrite the tests not to care about the indent parameter.
- NodePrinter(StringBuilder buf, int indent) {
- this.buf = buf;
- this.indent = indent;
- }
-
- // Main entry point for an arbitrary node.
- // Called by Node.prettyPrint.
- void printNode(Node n) {
- if (n instanceof Expression) {
- printExpr((Expression) n);
-
- } else if (n instanceof Statement) {
- printStmt((Statement) n);
-
- } else if (n instanceof StarlarkFile) {
- StarlarkFile file = (StarlarkFile) n;
- // Only statements are printed, not comments.
- for (Statement stmt : file.getStatements()) {
- printStmt(stmt);
- }
-
- } else if (n instanceof Comment) {
- Comment comment = (Comment) n;
- // We can't really print comments in the right place anyway,
- // due to how their relative order is lost in the representation
- // of StarlarkFile. So don't bother word-wrapping and just print
- // it on a single line.
- printIndent();
- buf.append(comment.getText());
-
- } else if (n instanceof Argument) {
- printArgument((Argument) n);
-
- } else if (n instanceof Parameter) {
- printParameter((Parameter) n);
-
- } else if (n instanceof DictExpression.Entry) {
- printDictEntry((DictExpression.Entry) n);
-
- } else {
- throw new IllegalArgumentException("unexpected: " + n.getClass());
- }
- }
-
- private void printSuite(List<Statement> statements) {
- // A suite is non-empty; pass statements are explicit.
- indent++;
- for (Statement stmt : statements) {
- printStmt(stmt);
- }
- indent--;
- }
-
- private void printIndent() {
- for (int i = 0; i < indent; i++) {
- buf.append(" ");
- }
- }
-
- private void printArgument(Argument arg) {
- if (arg instanceof Argument.Positional) {
- // nop
- } else if (arg instanceof Argument.Keyword) {
- buf.append(((Argument.Keyword) arg).getIdentifier().getName());
- buf.append(" = ");
- } else if (arg instanceof Argument.Star) {
- buf.append('*');
- } else if (arg instanceof Argument.StarStar) {
- buf.append("**");
- }
- printExpr(arg.getValue());
- }
-
- private void printParameter(Parameter param) {
- if (param instanceof Parameter.Mandatory) {
- buf.append(param.getName());
- } else if (param instanceof Parameter.Optional) {
- buf.append(param.getName());
- buf.append('=');
- printExpr(param.getDefaultValue());
- } else if (param instanceof Parameter.Star) {
- buf.append('*');
- if (param.getName() != null) {
- buf.append(param.getName());
- }
- } else if (param instanceof Parameter.StarStar) {
- buf.append("**");
- buf.append(param.getName());
- }
- }
-
- private void printDictEntry(DictExpression.Entry e) {
- printExpr(e.getKey());
- buf.append(": ");
- printExpr(e.getValue());
- }
-
- // Appends "def f(a, ..., z):" to the buf.
- // Also used by DefStatement.toString.
- void printDefSignature(DefStatement def) {
- buf.append("def ");
- printExpr(def.getIdentifier());
- buf.append('(');
- String sep = "";
- for (Parameter param : def.getParameters()) {
- buf.append(sep);
- printParameter(param);
- sep = ", ";
- }
- buf.append("):");
- }
-
- private void printStmt(Statement s) {
- printIndent();
-
- switch (s.kind()) {
- case ASSIGNMENT:
- {
- AssignmentStatement stmt = (AssignmentStatement) s;
- printExpr(stmt.getLHS());
- buf.append(' ');
- if (stmt.isAugmented()) {
- buf.append(stmt.getOperator());
- }
- buf.append("= ");
- printExpr(stmt.getRHS());
- buf.append('\n');
- break;
- }
-
- case EXPRESSION:
- {
- ExpressionStatement stmt = (ExpressionStatement) s;
- printExpr(stmt.getExpression());
- buf.append('\n');
- break;
- }
-
- case FLOW:
- {
- FlowStatement stmt = (FlowStatement) s;
- buf.append(stmt.getKind()).append('\n');
- break;
- }
-
- case FOR:
- {
- ForStatement stmt = (ForStatement) s;
- buf.append("for ");
- printExpr(stmt.getVars());
- buf.append(" in ");
- printExpr(stmt.getCollection());
- buf.append(":\n");
- printSuite(stmt.getBody());
- break;
- }
-
- case DEF:
- {
- DefStatement stmt = (DefStatement) s;
- printDefSignature(stmt);
- buf.append('\n');
- printSuite(stmt.getBody());
- break;
- }
-
- case IF:
- {
- IfStatement stmt = (IfStatement) s;
- buf.append(stmt.isElif() ? "elif " : "if ");
- printExpr(stmt.getCondition());
- buf.append(":\n");
- printSuite(stmt.getThenBlock());
- List<Statement> elseBlock = stmt.getElseBlock();
- if (elseBlock != null) {
- if (elseBlock.size() == 1
- && elseBlock.get(0) instanceof IfStatement
- && ((IfStatement) elseBlock.get(0)).isElif()) {
- printStmt(elseBlock.get(0));
- } else {
- printIndent();
- buf.append("else:\n");
- printSuite(elseBlock);
- }
- }
- break;
- }
-
- case LOAD:
- {
- LoadStatement stmt = (LoadStatement) s;
- buf.append("load(");
- printExpr(stmt.getImport());
- for (LoadStatement.Binding binding : stmt.getBindings()) {
- buf.append(", ");
- Identifier local = binding.getLocalName();
- String origName = binding.getOriginalName().getName();
- if (origName.equals(local.getName())) {
- buf.append('"');
- printExpr(local);
- buf.append('"');
- } else {
- printExpr(local);
- buf.append("=\"");
- buf.append(origName);
- buf.append('"');
- }
- }
- buf.append(")\n");
- break;
- }
-
- case RETURN:
- {
- ReturnStatement stmt = (ReturnStatement) s;
- buf.append("return");
- if (stmt.getResult() != null) {
- buf.append(' ');
- printExpr(stmt.getResult());
- }
- buf.append('\n');
- break;
- }
- }
- }
-
- private void printExpr(Expression expr) {
- switch (expr.kind()) {
- case BINARY_OPERATOR:
- {
- BinaryOperatorExpression binop = (BinaryOperatorExpression) expr;
- // TODO(bazel-team): retain parentheses in the syntax tree so we needn't
- // conservatively emit them here.
- buf.append('(');
- printExpr(binop.getX());
- buf.append(' ');
- buf.append(binop.getOperator());
- buf.append(' ');
- printExpr(binop.getY());
- buf.append(')');
- break;
- }
-
- case COMPREHENSION:
- {
- Comprehension comp = (Comprehension) expr;
- buf.append(comp.isDict() ? '{' : '[');
- printNode(comp.getBody()); // Expression or DictExpression.Entry
- for (Comprehension.Clause clause : comp.getClauses()) {
- buf.append(' ');
- if (clause instanceof Comprehension.For) {
- Comprehension.For forClause = (Comprehension.For) clause;
- buf.append("for ");
- printExpr(forClause.getVars());
- buf.append(" in ");
- printExpr(forClause.getIterable());
- } else {
- Comprehension.If ifClause = (Comprehension.If) clause;
- buf.append("if ");
- printExpr(ifClause.getCondition());
- }
- }
- buf.append(comp.isDict() ? '}' : ']');
- break;
- }
-
- case CONDITIONAL:
- {
- ConditionalExpression cond = (ConditionalExpression) expr;
- printExpr(cond.getThenCase());
- buf.append(" if ");
- printExpr(cond.getCondition());
- buf.append(" else ");
- printExpr(cond.getElseCase());
- break;
- }
-
- case DICT_EXPR:
- {
- DictExpression dictexpr = (DictExpression) expr;
- buf.append("{");
- String sep = "";
- for (DictExpression.Entry entry : dictexpr.getEntries()) {
- buf.append(sep);
- printDictEntry(entry);
- sep = ", ";
- }
- buf.append("}");
- break;
- }
-
- case DOT:
- {
- DotExpression dot = (DotExpression) expr;
- printExpr(dot.getObject());
- buf.append('.');
- printExpr(dot.getField());
- break;
- }
-
- case CALL:
- {
- CallExpression call = (CallExpression) expr;
- printExpr(call.getFunction());
- buf.append('(');
- String sep = "";
- for (Argument arg : call.getArguments()) {
- buf.append(sep);
- printArgument(arg);
- sep = ", ";
- }
- buf.append(')');
- break;
- }
-
- case IDENTIFIER:
- buf.append(((Identifier) expr).getName());
- break;
-
- case INDEX:
- {
- IndexExpression index = (IndexExpression) expr;
- printExpr(index.getObject());
- buf.append('[');
- printExpr(index.getKey());
- buf.append(']');
- break;
- }
-
- case INTEGER_LITERAL:
- {
- buf.append(((IntegerLiteral) expr).getValue());
- break;
- }
-
- case LIST_EXPR:
- {
- ListExpression list = (ListExpression) expr;
- buf.append(list.isTuple() ? '(' : '[');
- String sep = "";
- for (Expression e : list.getElements()) {
- buf.append(sep);
- printExpr(e);
- sep = ", ";
- }
- if (list.isTuple() && list.getElements().size() == 1) {
- buf.append(',');
- }
- buf.append(list.isTuple() ? ')' : ']');
- break;
- }
-
- case SLICE:
- {
- SliceExpression slice = (SliceExpression) expr;
- printExpr(slice.getObject());
- buf.append('[');
- // The first separator colon is unconditional.
- // The second separator appears only if step is printed.
- if (slice.getStart() != null) {
- printExpr(slice.getStart());
- }
- buf.append(':');
- if (slice.getStop() != null) {
- printExpr(slice.getStop());
- }
- if (slice.getStep() != null) {
- buf.append(':');
- printExpr(slice.getStep());
- }
- buf.append(']');
- break;
- }
-
- case STRING_LITERAL:
- {
- StringLiteral literal = (StringLiteral) expr;
- String value = literal.getValue();
-
- // TODO(adonovan): record the raw text of string (and integer) literals
- // so that we can use the syntax tree for source modification tools.
- // However, that may come with a memory cost until we start compiling
- // (at which point the cost is only transient).
- // For now, just simulate the behavior of repr(str).
- buf.append('"');
- for (int i = 0; i < value.length(); i++) {
- char c = value.charAt(i);
- switch (c) {
- case '"':
- buf.append("\\\"");
- break;
- case '\\':
- buf.append("\\\\");
- break;
- case '\r':
- buf.append("\\r");
- break;
- case '\n':
- buf.append("\\n");
- break;
- case '\t':
- buf.append("\\t");
- break;
- default:
- // The Starlark spec (and lexer) are far from complete here,
- // and it's hard to come up with a clean semantics for
- // string escapes that serves Java (UTF-16) and Go (UTF-8).
- // Clearly string literals should not contain non-printable
- // characters. For now we'll continue to pretend that all
- // non-printables are < 32, but this obviously false.
- if (c < 32) {
- buf.append(String.format("\\x%02x", (int) c));
- } else {
- buf.append(c);
- }
- }
- }
- buf.append('"');
- break;
- }
-
- case UNARY_OPERATOR:
- {
- UnaryOperatorExpression unop = (UnaryOperatorExpression) expr;
- // TODO(bazel-team): retain parentheses in the syntax tree so we needn't
- // conservatively emit them here.
- buf.append(unop.getOperator() == TokenKind.NOT ? "not " : unop.getOperator().toString());
- buf.append('(');
- printExpr(unop.getX());
- buf.append(')');
- break;
- }
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/NodeVisitor.java b/src/main/java/com/google/devtools/build/lib/syntax/NodeVisitor.java
deleted file mode 100644
index 303d538..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/NodeVisitor.java
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import java.util.List;
-
-/** A visitor for visiting the nodes of a syntax tree in lexical order. */
-public class NodeVisitor {
-
- public void visit(Node node) {
- // dispatch to the node specific method
- node.accept(this);
- }
-
- // methods dealing with sequences of nodes
- public void visitAll(List<? extends Node> nodes) {
- for (Node node : nodes) {
- visit(node);
- }
- }
-
- /**
- * Visit a sequence ("block") of statements (e.g. an if branch, for block, function block etc.)
- *
- * This method allows subclasses to handle statement blocks more easily, like doing an action
- * after every statement in a block without having to override visit(...) for all statements.
- *
- * @param statements list of statements in the block
- */
- public void visitBlock(List<Statement> statements) {
- visitAll(statements);
- }
-
- // node-specific visit methods
-
- // All four subclasses of Argument are handled together.
- public void visit(Argument node) {
- visit(node.getValue());
- }
-
- // All four subclasses of Parameter are handled together.
- public void visit(Parameter node) {
- visit(node.getIdentifier());
- if (node.getDefaultValue() != null) {
- visit(node.getDefaultValue());
- }
- }
-
- public void visit(StarlarkFile node) {
- visitBlock(node.getStatements());
- visitAll(node.getComments());
- }
-
- public void visit(BinaryOperatorExpression node) {
- visit(node.getX());
- visit(node.getY());
- }
-
- public void visit(CallExpression node) {
- visit(node.getFunction());
- visitAll(node.getArguments());
- }
-
- public void visit(Identifier node) {}
-
- public void visit(Comprehension node) {
- for (Comprehension.Clause clause : node.getClauses()) {
- if (clause instanceof Comprehension.For) {
- visit((Comprehension.For) clause);
- } else {
- visit((Comprehension.If) clause);
- }
- }
- visit(node.getBody());
- }
-
- public void visit(Comprehension.For node) {
- visit(node.getVars());
- visit(node.getIterable());
- }
-
- public void visit(Comprehension.If node) {
- visit(node.getCondition());
- }
-
- public void visit(ForStatement node) {
- visit(node.getCollection());
- visit(node.getVars());
- visitBlock(node.getBody());
- }
-
- public void visit(LoadStatement node) {
- for (LoadStatement.Binding binding : node.getBindings()) {
- visit(binding.getLocalName());
- }
- }
-
- public void visit(ListExpression node) {
- visitAll(node.getElements());
- }
-
- public void visit(@SuppressWarnings("unused") IntegerLiteral node) {}
-
- public void visit(@SuppressWarnings("unused") StringLiteral node) {}
-
- public void visit(AssignmentStatement node) {
- visit(node.getRHS());
- visit(node.getLHS());
- }
-
- public void visit(ExpressionStatement node) {
- visit(node.getExpression());
- }
-
- public void visit(IfStatement node) {
- visit(node.getCondition());
- visitBlock(node.getThenBlock());
- if (node.getElseBlock() != null) {
- visitBlock(node.getElseBlock());
- }
- }
-
- public void visit(DefStatement node) {
- visit(node.getIdentifier());
- visitAll(node.getParameters());
- visitBlock(node.getBody());
- }
-
- public void visit(ReturnStatement node) {
- if (node.getResult() != null) {
- visit(node.getResult());
- }
- }
-
- public void visit(FlowStatement node) {}
-
- public void visit(DictExpression node) {
- visitAll(node.getEntries());
- }
-
- public void visit(DictExpression.Entry node) {
- visit(node.getKey());
- visit(node.getValue());
- }
-
- public void visit(UnaryOperatorExpression node) {
- visit(node.getX());
- }
-
- public void visit(DotExpression node) {
- visit(node.getObject());
- visit(node.getField());
- }
-
- public void visit(IndexExpression node) {
- visit(node.getObject());
- visit(node.getKey());
- }
-
- public void visit(SliceExpression node) {
- visit(node.getObject());
- if (node.getStart() != null) {
- visit(node.getStart());
- }
- if (node.getStop() != null) {
- visit(node.getStop());
- }
- if (node.getStep() != null) {
- visit(node.getStep());
- }
- }
-
- public void visit(@SuppressWarnings("unused") Comment node) {}
-
- public void visit(ConditionalExpression node) {
- visit(node.getCondition());
- visit(node.getThenCase());
- if (node.getElseCase() != null) {
- visit(node.getElseCase());
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/NoneType.java b/src/main/java/com/google/devtools/build/lib/syntax/NoneType.java
deleted file mode 100644
index 9a543c9..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/NoneType.java
+++ /dev/null
@@ -1,51 +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.syntax;
-
-import javax.annotation.concurrent.Immutable;
-import net.starlark.java.annot.StarlarkBuiltin;
-
-/** The type of the Starlark None value. */
-@StarlarkBuiltin(
- name = "NoneType",
- documented = false,
- doc = "The type of the Starlark None value.")
-@Immutable
-public final class NoneType implements StarlarkValue {
-
- static final NoneType NONE = new NoneType();
-
- private NoneType() {}
-
- @Override
- public String toString() {
- return "None";
- }
-
- @Override
- public boolean isImmutable() {
- return true;
- }
-
- @Override
- public boolean truth() {
- return false;
- }
-
- @Override
- public void repr(Printer printer) {
- printer.append("None");
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ParamDescriptor.java b/src/main/java/com/google/devtools/build/lib/syntax/ParamDescriptor.java
deleted file mode 100644
index a364382..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ParamDescriptor.java
+++ /dev/null
@@ -1,227 +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.syntax;
-
-import com.google.common.base.Preconditions;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
-import javax.annotation.Nullable;
-import net.starlark.java.annot.Param;
-import net.starlark.java.annot.ParamType;
-
-/** A value class for storing {@link Param} metadata to avoid using Java proxies. */
-final class ParamDescriptor {
-
- private final String name;
- @Nullable private final Object defaultValue;
- private final boolean noneable;
- private final boolean named;
- private final boolean positional;
- private final List<Class<?>> allowedClasses; // non-empty
- // The semantics flag responsible for disabling this parameter, or null if enabled.
- // It is an error for Starlark code to supply a value to a disabled parameter.
- @Nullable private final String disabledByFlag;
-
- private ParamDescriptor(
- String name,
- String defaultExpr,
- boolean noneable,
- boolean named,
- boolean positional,
- List<Class<?>> allowedClasses,
- @Nullable String disabledByFlag) {
- this.name = name;
- this.defaultValue = defaultExpr.isEmpty() ? null : evalDefault(name, defaultExpr);
- this.noneable = noneable;
- this.named = named;
- this.positional = positional;
- this.allowedClasses = allowedClasses;
- this.disabledByFlag = disabledByFlag;
- }
-
- /**
- * Returns a {@link ParamDescriptor} representing the given raw {@link Param} annotation and the
- * given semantics.
- */
- static ParamDescriptor of(Param param, StarlarkSemantics starlarkSemantics) {
- String defaultExpr = param.defaultValue();
- String disabledByFlag = null;
- if (!starlarkSemantics.isFeatureEnabledBasedOnTogglingFlags(
- param.enableOnlyWithFlag(), param.disableWithFlag())) {
- defaultExpr = param.valueWhenDisabled();
- disabledByFlag =
- !param.enableOnlyWithFlag().isEmpty()
- ? param.enableOnlyWithFlag()
- : param.disableWithFlag();
- Preconditions.checkState(!disabledByFlag.isEmpty());
- }
-
- // Compute set of allowed classes.
- ParamType[] allowedTypes = param.allowedTypes();
- List<Class<?>> allowedClasses = new ArrayList<>();
- if (allowedTypes.length > 0) {
- for (ParamType pt : allowedTypes) {
- allowedClasses.add(pt.type());
- }
- } else {
- allowedClasses.add(param.type());
- }
- if (param.noneable()) {
- // A few annotations redundantly declare NoneType.
- if (!allowedClasses.contains(NoneType.class)) {
- allowedClasses.add(NoneType.class);
- }
- }
-
- return new ParamDescriptor(
- param.name(),
- defaultExpr,
- param.noneable(),
- param.named(),
- param.positional(),
- allowedClasses,
- disabledByFlag);
- }
-
- /** @see Param#name() */
- String getName() {
- return name;
- }
-
- /** Returns a description of allowed argument types suitable for an error message. */
- String getTypeErrorMessage() {
- return allowedClasses.stream().map(Starlark::classType).collect(Collectors.joining(" or "));
- }
-
- List<Class<?>> getAllowedClasses() {
- return allowedClasses;
- }
-
- /** @see Param#noneable() */
- boolean isNoneable() {
- return noneable;
- }
-
- /** @see Param#positional() */
- boolean isPositional() {
- return positional;
- }
-
- /** @see Param#named() */
- boolean isNamed() {
- return named;
- }
-
- /** Returns the effective default value of this parameter, or null if mandatory. */
- @Nullable
- Object getDefaultValue() {
- return defaultValue;
- }
-
- /** Returns the flag responsible for disabling this parameter, or null if it is enabled. */
- @Nullable
- String disabledByFlag() {
- return disabledByFlag;
- }
-
- // A memoization of evalDefault, keyed by expression.
- // This cache is manually maintained (instead of using LoadingCache),
- // as default values may sometimes be recursively requested.
- private static final ConcurrentHashMap<String, Object> defaultValueCache =
- new ConcurrentHashMap<>();
-
- // Evaluates the default value expression for a parameter.
- private static Object evalDefault(String name, String expr) {
- // Values required by defaults of functions in UNIVERSE must
- // be handled without depending on the evaluator, or even
- // on defaultValueCache, because JVM global variable initialization
- // is such a mess. (Specifically, it's completely dynamic,
- // so if two or more variables are mutually dependent, like
- // defaultValueCache and UNIVERSE would be, you have to write
- // code that works in all possible dynamic initialization orders.)
- // Better not to go there.
- if (expr.equals("None")) {
- return Starlark.NONE;
- } else if (expr.equals("True")) {
- return true;
- } else if (expr.equals("False")) {
- return false;
- } else if (expr.equals("unbound")) {
- return Starlark.UNBOUND;
- } else if (expr.equals("0")) {
- return 0;
- } else if (expr.equals("1")) {
- return 1;
- } else if (expr.equals("[]")) {
- return StarlarkList.empty();
- } else if (expr.equals("()")) {
- return Tuple.empty();
- } else if (expr.equals("\" \"")) {
- return " ";
- }
-
- Object x = defaultValueCache.get(expr);
- if (x != null) {
- return x;
- }
-
- // We can't evaluate Starlark code until UNIVERSE is bootstrapped.
- if (Starlark.UNIVERSE == null) {
- throw new IllegalStateException("no bootstrap value for " + name + "=" + expr);
- }
-
- Module module = Module.create();
- try (Mutability mu = Mutability.create("Builtin param default init")) {
- // Note that this Starlark thread ignores command line flags.
- StarlarkThread thread = new StarlarkThread(mu, StarlarkSemantics.DEFAULT);
-
- // Disable polling of the java.lang.Thread.interrupt flag during
- // Starlark evaluation. Assuming the expression does not call a
- // built-in that throws InterruptedException, this allows us to
- // assert that InterruptedException "can't happen".
- //
- // Bazel Java threads are routinely interrupted during Starlark execution,
- // and the Starlark interpreter may be in a call to LoadingCache (in CallUtils).
- // LoadingCache computes the cache entry in the same thread that first
- // requested the entry, propagating undesirable thread state (which Einstein
- // called "spooky action at a distance") from an arbitrary application thread
- // to here, which is logically one-time initialization code.
- //
- // A simpler non-solution would be to use a "clean" pool thread
- // to compute each cache entry; we could safely assume such a thread
- // is never interrupted. However, this runs afoul of JVM class initialization:
- // the initialization of Starlark.UNIVERSE depends on Starlark.UNBOUND
- // because of the reference above. That's fine if they are initialized by
- // the same thread, as JVM class initialization locks are reentrant,
- // but the reference deadlocks if made from another thread.
- // See https://docs.oracle.com/javase/specs/jls/se12/html/jls-12.html#jls-12.4
- thread.ignoreThreadInterrupts();
-
- x = Starlark.eval(ParserInput.fromLines(expr), FileOptions.DEFAULT, module, thread);
- } catch (InterruptedException ex) {
- throw new IllegalStateException(ex); // can't happen
- } catch (SyntaxError.Exception | EvalException ex) {
- throw new IllegalArgumentException(
- String.format(
- "failed to evaluate default value '%s' of parameter '%s': %s",
- expr, name, ex.getMessage()),
- ex);
- }
- defaultValueCache.put(expr, x);
- return x;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parameter.java b/src/main/java/com/google/devtools/build/lib/syntax/Parameter.java
deleted file mode 100644
index 2c4cbae..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parameter.java
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import javax.annotation.Nullable;
-
-/**
- * Syntax node for a parameter in a function definition.
- *
- * <p>Parameters may be of four forms, as in {@code def f(a, b=c, *args, **kwargs)}. They are
- * represented by the subclasses Mandatory, Optional, Star, and StarStar.
- */
-public abstract class Parameter extends Node {
-
- @Nullable private final Identifier id;
-
- private Parameter(FileLocations locs, @Nullable Identifier id) {
- super(locs);
- this.id = id;
- }
-
- @Nullable
- public String getName() {
- return id != null ? id.getName() : null;
- }
-
- @Nullable
- public Identifier getIdentifier() {
- return id;
- }
-
- @Nullable
- public Expression getDefaultValue() {
- return null;
- }
-
- /**
- * Syntax node for a mandatory parameter, {@code f(id)}. It may be positional or keyword-only
- * depending on its position.
- */
- public static final class Mandatory extends Parameter {
- Mandatory(FileLocations locs, Identifier id) {
- super(locs, id);
- }
-
- @Override
- public int getStartOffset() {
- return getIdentifier().getStartOffset();
- }
-
- @Override
- public int getEndOffset() {
- return getIdentifier().getEndOffset();
- }
- }
-
- /**
- * Syntax node for an optional parameter, {@code f(id=expr).}. It may be positional or
- * keyword-only depending on its position.
- */
- public static final class Optional extends Parameter {
-
- public final Expression defaultValue;
-
- Optional(FileLocations locs, Identifier id, @Nullable Expression defaultValue) {
- super(locs, id);
- this.defaultValue = defaultValue;
- }
-
- @Override
- @Nullable
- public Expression getDefaultValue() {
- return defaultValue;
- }
-
- @Override
- public int getStartOffset() {
- return getIdentifier().getStartOffset();
- }
-
- @Override
- public int getEndOffset() {
- return getDefaultValue().getEndOffset();
- }
-
- @Override
- public String toString() {
- return getName() + "=" + defaultValue;
- }
- }
-
- /** Syntax node for a star parameter, {@code f(*id)} or or {@code f(..., *, ...)}. */
- public static final class Star extends Parameter {
- private final int starOffset;
-
- Star(FileLocations locs, int starOffset, @Nullable Identifier id) {
- super(locs, id);
- this.starOffset = starOffset;
- }
-
- @Override
- public int getStartOffset() {
- return starOffset;
- }
-
- @Override
- public int getEndOffset() {
- return getIdentifier().getEndOffset();
- }
- }
-
- /** Syntax node for a parameter of the form {@code f(**id)}. */
- public static final class StarStar extends Parameter {
- private final int starStarOffset;
-
- StarStar(FileLocations locs, int starStarOffset, Identifier id) {
- super(locs, id);
- this.starStarOffset = starStarOffset;
- }
-
- @Override
- public int getStartOffset() {
- return starStarOffset;
- }
-
- @Override
- public int getEndOffset() {
- return getIdentifier().getEndOffset();
- }
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
deleted file mode 100644
index 2117b84..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
+++ /dev/null
@@ -1,1217 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.errorprone.annotations.FormatMethod;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.annotation.Nullable;
-
-/** Parser is a recursive-descent parser for Starlark. */
-final class Parser {
-
- /** Combines the parser result into a single value object. */
- static final class ParseResult {
- // Maps char offsets in the file to Locations.
- final FileLocations locs;
-
- /** The top-level statements of the parsed file. */
- final ImmutableList<Statement> statements;
-
- /** The comments from the parsed file. */
- final List<Comment> comments;
-
- // Errors encountered during scanning or parsing.
- // These lists are ultimately owned by StarlarkFile.
- final List<SyntaxError> errors;
-
- private ParseResult(
- FileLocations locs,
- ImmutableList<Statement> statements,
- List<Comment> comments,
- List<SyntaxError> errors) {
- this.locs = locs;
- // No need to copy here; when the object is created, the parser instance is just about to go
- // out of scope and be garbage collected.
- this.statements = Preconditions.checkNotNull(statements);
- this.comments = Preconditions.checkNotNull(comments);
- this.errors = errors;
- }
- }
-
- private static final EnumSet<TokenKind> STATEMENT_TERMINATOR_SET =
- EnumSet.of(TokenKind.EOF, TokenKind.NEWLINE, TokenKind.SEMI);
-
- private static final EnumSet<TokenKind> LIST_TERMINATOR_SET =
- EnumSet.of(TokenKind.EOF, TokenKind.RBRACKET, TokenKind.SEMI);
-
- private static final EnumSet<TokenKind> DICT_TERMINATOR_SET =
- EnumSet.of(TokenKind.EOF, TokenKind.RBRACE, TokenKind.SEMI);
-
- private static final EnumSet<TokenKind> EXPR_LIST_TERMINATOR_SET =
- EnumSet.of(
- TokenKind.EOF,
- TokenKind.NEWLINE,
- TokenKind.EQUALS,
- TokenKind.RBRACE,
- TokenKind.RBRACKET,
- TokenKind.RPAREN,
- TokenKind.SEMI);
-
- private static final EnumSet<TokenKind> EXPR_TERMINATOR_SET =
- EnumSet.of(
- TokenKind.COLON,
- TokenKind.COMMA,
- TokenKind.EOF,
- TokenKind.FOR,
- TokenKind.MINUS,
- TokenKind.PERCENT,
- TokenKind.PLUS,
- TokenKind.RBRACKET,
- TokenKind.RPAREN,
- TokenKind.SLASH);
-
- /** Current lookahead token. May be mutated by the parser. */
- private final Lexer token; // token.kind is a prettier alias for lexer.kind
-
- private static final boolean DEBUGGING = false;
-
- private final Lexer lexer;
- private final FileLocations locs;
- private final List<SyntaxError> errors;
-
- // TODO(adonovan): opt: compute this by subtraction.
- private static final Map<TokenKind, TokenKind> augmentedAssignments =
- new ImmutableMap.Builder<TokenKind, TokenKind>()
- .put(TokenKind.PLUS_EQUALS, TokenKind.PLUS)
- .put(TokenKind.MINUS_EQUALS, TokenKind.MINUS)
- .put(TokenKind.STAR_EQUALS, TokenKind.STAR)
- .put(TokenKind.SLASH_EQUALS, TokenKind.SLASH)
- .put(TokenKind.SLASH_SLASH_EQUALS, TokenKind.SLASH_SLASH)
- .put(TokenKind.PERCENT_EQUALS, TokenKind.PERCENT)
- .put(TokenKind.AMPERSAND_EQUALS, TokenKind.AMPERSAND)
- .put(TokenKind.CARET_EQUALS, TokenKind.CARET)
- .put(TokenKind.PIPE_EQUALS, TokenKind.PIPE)
- .put(TokenKind.GREATER_GREATER_EQUALS, TokenKind.GREATER_GREATER)
- .put(TokenKind.LESS_LESS_EQUALS, TokenKind.LESS_LESS)
- .build();
-
- /**
- * Highest precedence goes last. Based on:
- * http://docs.python.org/2/reference/expressions.html#operator-precedence
- */
- private static final List<EnumSet<TokenKind>> operatorPrecedence =
- ImmutableList.of(
- EnumSet.of(TokenKind.OR),
- EnumSet.of(TokenKind.AND),
- EnumSet.of(TokenKind.NOT),
- EnumSet.of(
- TokenKind.EQUALS_EQUALS,
- TokenKind.NOT_EQUALS,
- TokenKind.LESS,
- TokenKind.LESS_EQUALS,
- TokenKind.GREATER,
- TokenKind.GREATER_EQUALS,
- TokenKind.IN,
- TokenKind.NOT_IN),
- EnumSet.of(TokenKind.PIPE),
- EnumSet.of(TokenKind.CARET),
- EnumSet.of(TokenKind.AMPERSAND),
- EnumSet.of(TokenKind.GREATER_GREATER, TokenKind.LESS_LESS),
- EnumSet.of(TokenKind.MINUS, TokenKind.PLUS),
- EnumSet.of(TokenKind.SLASH, TokenKind.SLASH_SLASH, TokenKind.STAR, TokenKind.PERCENT));
-
- private int errorsCount;
- private boolean recoveryMode; // stop reporting errors until next statement
-
- // Intern string literals, as some files contain many literals for the same string.
- private final Map<String, String> stringInterner = new HashMap<>();
-
- private Parser(Lexer lexer, List<SyntaxError> errors) {
- this.lexer = lexer;
- this.locs = lexer.locs;
- this.errors = errors;
- this.token = lexer;
- nextToken();
- }
-
- private String intern(String s) {
- String prev = stringInterner.putIfAbsent(s, s);
- return prev != null ? prev : s;
- }
-
- // Returns a token's string form as used in error messages.
- private static String tokenString(TokenKind kind, @Nullable Object value) {
- return kind == TokenKind.STRING
- ? "\"" + value + "\"" // TODO(adonovan): do proper quotation
- : value == null ? kind.toString() : value.toString();
- }
-
- // Main entry point for parsing a file.
- static ParseResult parseFile(ParserInput input, FileOptions options) {
- List<SyntaxError> errors = new ArrayList<>();
- Lexer lexer = new Lexer(input, options, errors);
- Parser parser = new Parser(lexer, errors);
-
- StarlarkFile.ParseProfiler profiler = Parser.profiler;
- Object span = profiler != null ? profiler.start(input.getFile()) : null;
- try {
- ImmutableList<Statement> statements = parser.parseFileInput();
- return new ParseResult(lexer.locs, statements, lexer.getComments(), errors);
- } finally {
- if (profiler != null) {
- profiler.end(span);
- }
- }
- }
-
- @Nullable static StarlarkFile.ParseProfiler profiler;
-
- // stmt = simple_stmt
- // | def_stmt
- // | for_stmt
- // | if_stmt
- private void parseStatement(ImmutableList.Builder<Statement> list) {
- if (token.kind == TokenKind.DEF) {
- list.add(parseDefStatement());
- } else if (token.kind == TokenKind.IF) {
- list.add(parseIfStatement());
- } else if (token.kind == TokenKind.FOR) {
- list.add(parseForStatement());
- } else {
- parseSimpleStatement(list);
- }
- }
-
- /** Parses an expression, possibly followed by newline tokens. */
- static Expression parseExpression(ParserInput input, FileOptions options)
- throws SyntaxError.Exception {
- List<SyntaxError> errors = new ArrayList<>();
- Lexer lexer = new Lexer(input, options, errors);
- Parser parser = new Parser(lexer, errors);
- Expression result = null;
- try {
- result = parser.parseExpression();
- while (parser.token.kind == TokenKind.NEWLINE) {
- parser.nextToken();
- }
- parser.expect(TokenKind.EOF);
- } catch (StackOverflowError ex) {
- // See rationale at parseFile.
- parser.reportError(
- lexer.end,
- "internal error: stack overflow while parsing Starlark expression <<%s>>. Please report"
- + " the bug.\n"
- + "%s",
- new String(input.getContent()),
- Throwables.getStackTraceAsString(ex));
- }
- if (!errors.isEmpty()) {
- throw new SyntaxError.Exception(errors);
- }
- return result;
- }
-
- // Equivalent to 'testlist' rule in Python grammar. It can parse every kind of
- // expression. In many cases, we need to use parseTest to avoid ambiguity:
- // e.g. fct(x, y) vs fct((x, y))
- //
- // A trailing comma is disallowed in an unparenthesized tuple.
- // This prevents bugs where a one-element tuple is surprisingly created:
- // e.g. foo = f(x),
- private Expression parseExpression() {
- Expression e = parseTest();
- if (token.kind != TokenKind.COMMA) {
- return e;
- }
-
- // unparenthesized tuple
- List<Expression> elems = new ArrayList<>();
- elems.add(e);
- parseExprList(elems, /*trailingCommaAllowed=*/ false);
- return new ListExpression(locs, /*isTuple=*/ true, -1, elems, -1);
- }
-
- @FormatMethod
- private void reportError(int offset, String format, Object... args) {
- errorsCount++;
- // Limit the number of reported errors to avoid spamming output.
- if (errorsCount <= 5) {
- Location location = locs.getLocation(offset);
- errors.add(new SyntaxError(location, String.format(format, args)));
- }
- }
-
- private void syntaxError(String message) {
- if (!recoveryMode) {
- if (token.kind == TokenKind.INDENT) {
- reportError(token.start, "indentation error");
- } else {
- reportError(
- token.start, "syntax error at '%s': %s", tokenString(token.kind, token.value), message);
- }
- recoveryMode = true;
- }
- }
-
- // Consumes the current token and returns its position, like nextToken.
- // Reports a syntax error if the new token is not of the expected kind.
- private int expect(TokenKind kind) {
- if (token.kind != kind) {
- syntaxError("expected " + kind);
- }
- return nextToken();
- }
-
- // Like expect, but stops recovery mode if the token was expected.
- private int expectAndRecover(TokenKind kind) {
- if (token.kind != kind) {
- syntaxError("expected " + kind);
- } else {
- recoveryMode = false;
- }
- return nextToken();
- }
-
- // Consumes tokens past the first token belonging to terminatingTokens.
- // It returns the end offset of the terminating token.
- // TODO(adonovan): always used with makeErrorExpression. Combine and simplify.
- private int syncPast(EnumSet<TokenKind> terminatingTokens) {
- Preconditions.checkState(terminatingTokens.contains(TokenKind.EOF));
- while (!terminatingTokens.contains(token.kind)) {
- nextToken();
- }
- int end = token.end;
- // read past the synchronization token
- nextToken();
- return end;
- }
-
- /**
- * Consume tokens until we reach the first token that has a kind that is in
- * the set of terminatingTokens.
- * @param terminatingTokens
- * @return the end offset of the terminating token.
- */
- private int syncTo(EnumSet<TokenKind> terminatingTokens) {
- // EOF must be in the set to prevent an infinite loop
- Preconditions.checkState(terminatingTokens.contains(TokenKind.EOF));
- // read past the problematic token
- int previous = token.end;
- nextToken();
- int current = previous;
- while (!terminatingTokens.contains(token.kind)) {
- nextToken();
- previous = current;
- current = token.end;
- }
- return previous;
- }
-
- // Keywords that exist in Python and that we don't parse.
- private static final EnumSet<TokenKind> FORBIDDEN_KEYWORDS =
- EnumSet.of(
- TokenKind.AS,
- TokenKind.ASSERT,
- TokenKind.CLASS,
- TokenKind.DEL,
- TokenKind.EXCEPT,
- TokenKind.FINALLY,
- TokenKind.FROM,
- TokenKind.GLOBAL,
- TokenKind.IMPORT,
- TokenKind.IS,
- TokenKind.LAMBDA,
- TokenKind.NONLOCAL,
- TokenKind.RAISE,
- TokenKind.TRY,
- TokenKind.WITH,
- TokenKind.WHILE,
- TokenKind.YIELD);
-
- private void checkForbiddenKeywords() {
- if (!FORBIDDEN_KEYWORDS.contains(token.kind)) {
- return;
- }
- String error;
- switch (token.kind) {
- case ASSERT: error = "'assert' not supported, use 'fail' instead"; break;
- case DEL:
- error = "'del' not supported, use '.pop()' to delete an item from a dictionary or a list";
- break;
- case IMPORT: error = "'import' not supported, use 'load' instead"; break;
- case IS: error = "'is' not supported, use '==' instead"; break;
- case LAMBDA: error = "'lambda' not supported, declare a function instead"; break;
- case RAISE: error = "'raise' not supported, use 'fail' instead"; break;
- case TRY: error = "'try' not supported, all exceptions are fatal"; break;
- case WHILE: error = "'while' not supported, use 'for' instead"; break;
- default:
- error = "keyword '" + token.kind + "' not supported";
- break;
- }
- reportError(token.start, "%s", error);
- }
-
- private int nextToken() {
- int prev = token.start;
- if (token.kind != TokenKind.EOF) {
- lexer.nextToken();
- }
- checkForbiddenKeywords();
- // TODO(adonovan): move this to lexer so we see the first token too.
- if (DEBUGGING) {
- System.err.print(tokenString(token.kind, token.value));
- }
- return prev;
- }
-
- // Returns an "Identifier" whose content is the input from start to end.
- private Identifier makeErrorExpression(int start, int end) {
- // It's tempting to define a dedicated BadExpression type,
- // but it is convenient for parseIdent to return an Identifier
- // even when it fails.
- return new Identifier(locs, lexer.bufferSlice(start, end), start);
- }
-
-
- // arg = IDENTIFIER '=' test
- // | expr
- // | *args
- // | **kwargs
- private Argument parseArgument() {
- Expression expr;
-
- // parse **expr
- if (token.kind == TokenKind.STAR_STAR) {
- int starStarOffset = nextToken();
- expr = parseTest();
- return new Argument.StarStar(locs, starStarOffset, expr);
- }
-
- // parse *expr
- if (token.kind == TokenKind.STAR) {
- int starOffset = nextToken();
- expr = parseTest();
- return new Argument.Star(locs, starOffset, expr);
- }
-
- // IDENTIFIER or IDENTIFIER = test
- expr = parseTest();
- if (expr instanceof Identifier) {
- Identifier id = (Identifier) expr;
- // parse a named argument
- if (token.kind == TokenKind.EQUALS) {
- nextToken();
- Expression arg = parseTest();
- return new Argument.Keyword(locs, id, arg);
- }
- }
-
- // parse a positional argument
- return new Argument.Positional(locs, expr);
- }
-
- // arg = IDENTIFIER '=' test
- // | IDENTIFIER
- private Parameter parseFunctionParameter() {
- // **kwargs
- if (token.kind == TokenKind.STAR_STAR) {
- int starStarOffset = nextToken();
- Identifier id = parseIdent();
- return new Parameter.StarStar(locs, starStarOffset, id);
- }
-
- // * or *args
- if (token.kind == TokenKind.STAR) {
- int starOffset = nextToken();
- if (token.kind == TokenKind.IDENTIFIER) {
- Identifier id = parseIdent();
- return new Parameter.Star(locs, starOffset, id);
- }
- return new Parameter.Star(locs, starOffset, null);
- }
-
- // name=default
- Identifier id = parseIdent();
- if (token.kind == TokenKind.EQUALS) {
- nextToken(); // TODO: save token pos?
- Expression expr = parseTest();
- return new Parameter.Optional(locs, id, expr);
- }
-
- // name
- return new Parameter.Mandatory(locs, id);
- }
-
- // call_suffix = '(' arg_list? ')'
- private Expression parseCallSuffix(Expression fn) {
- ImmutableList<Argument> args = ImmutableList.of();
- int lparenOffset = expect(TokenKind.LPAREN);
- if (token.kind != TokenKind.RPAREN) {
- args = parseArguments(); // (includes optional trailing comma)
- }
- int rparenOffset = expect(TokenKind.RPAREN);
- return new CallExpression(locs, fn, locs.getLocation(lparenOffset), args, rparenOffset);
- }
-
- // Parse a list of call arguments.
- //
- // arg_list = ( (arg ',')* arg ','? )?
- private ImmutableList<Argument> parseArguments() {
- boolean seenArg = false;
- ImmutableList.Builder<Argument> list = ImmutableList.builder();
- while (token.kind != TokenKind.RPAREN && token.kind != TokenKind.EOF) {
- if (seenArg) {
- expect(TokenKind.COMMA);
- // If nonempty, the list may end with a comma.
- if (token.kind == TokenKind.RPAREN) {
- break;
- }
- }
- list.add(parseArgument());
- seenArg = true;
- }
- return list.build();
- }
-
- // selector_suffix = '.' IDENTIFIER
- private Expression parseSelectorSuffix(Expression e) {
- int dotOffset = expect(TokenKind.DOT);
- if (token.kind == TokenKind.IDENTIFIER) {
- Identifier id = parseIdent();
- return new DotExpression(locs, e, dotOffset, id);
- }
-
- syntaxError("expected identifier after dot");
- syncTo(EXPR_TERMINATOR_SET);
- return e;
- }
-
- // expr_list parses a comma-separated list of expression. It assumes that the
- // first expression was already parsed, so it starts with a comma.
- // It is used to parse tuples and list elements.
- //
- // expr_list = ( ',' expr )* ','?
- private void parseExprList(List<Expression> list, boolean trailingCommaAllowed) {
- // terminating tokens for an expression list
- while (token.kind == TokenKind.COMMA) {
- expect(TokenKind.COMMA);
- if (EXPR_LIST_TERMINATOR_SET.contains(token.kind)) {
- if (!trailingCommaAllowed) {
- reportError(token.start, "Trailing comma is allowed only in parenthesized tuples.");
- }
- break;
- }
- list.add(parseTest());
- }
- }
-
- // dict_entry_list = ( (dict_entry ',')* dict_entry ','? )?
- private List<DictExpression.Entry> parseDictEntryList() {
- List<DictExpression.Entry> list = new ArrayList<>();
- // the terminating token for a dict entry list
- while (token.kind != TokenKind.RBRACE) {
- list.add(parseDictEntry());
- if (token.kind == TokenKind.COMMA) {
- nextToken();
- } else {
- break;
- }
- }
- return list;
- }
-
- // dict_entry = test ':' test
- private DictExpression.Entry parseDictEntry() {
- Expression key = parseTest();
- int colonOffset = expect(TokenKind.COLON);
- Expression value = parseTest();
- return new DictExpression.Entry(locs, key, colonOffset, value);
- }
-
- // expr = STRING
- private StringLiteral parseStringLiteral() {
- Preconditions.checkState(token.kind == TokenKind.STRING);
- StringLiteral literal =
- new StringLiteral(locs, token.start, intern((String) token.value), token.end);
- nextToken();
- if (token.kind == TokenKind.STRING) {
- reportError(token.start, "Implicit string concatenation is forbidden, use the + operator");
- }
- return literal;
- }
-
- // primary = INTEGER
- // | STRING
- // | IDENTIFIER
- // | list_expression
- // | '(' ')' // a tuple with zero elements
- // | '(' expr ')' // a parenthesized expression
- // | dict_expression
- // | '-' primary_with_suffix
- private Expression parsePrimary() {
- switch (token.kind) {
- case INT:
- {
- IntegerLiteral literal =
- new IntegerLiteral(locs, token.raw, token.start, (Integer) token.value);
- nextToken();
- return literal;
- }
-
- case STRING:
- return parseStringLiteral();
-
- case IDENTIFIER:
- return parseIdent();
-
- case LBRACKET: // [...]
- return parseListMaker();
-
- case LBRACE: // {...}
- return parseDictExpression();
-
- case LPAREN:
- {
- int lparenOffset = nextToken();
-
- // empty tuple: ()
- if (token.kind == TokenKind.RPAREN) {
- int rparen = nextToken();
- return new ListExpression(
- locs, /*isTuple=*/ true, lparenOffset, ImmutableList.of(), rparen);
- }
-
- Expression e = parseTest();
-
- // parenthesized expression: (e)
- // TODO(adonovan): materialize paren expressions (for fidelity).
- if (token.kind == TokenKind.RPAREN) {
- nextToken();
- return e;
- }
-
- // non-empty tuple: (e,) or (e, ..., e)
- if (token.kind == TokenKind.COMMA) {
- List<Expression> elems = new ArrayList<>();
- elems.add(e);
- parseExprList(elems, /*trailingCommaAllowed=*/ true);
- int rparenOffset = expect(TokenKind.RPAREN);
- return new ListExpression(locs, /*isTuple=*/ true, lparenOffset, elems, rparenOffset);
- }
-
- expect(TokenKind.RPAREN);
- int end = syncTo(EXPR_TERMINATOR_SET);
- return makeErrorExpression(lparenOffset, end);
- }
-
- case MINUS:
- case PLUS:
- case TILDE:
- {
- TokenKind op = token.kind;
- int offset = nextToken();
- Expression x = parsePrimaryWithSuffix();
- return new UnaryOperatorExpression(locs, op, offset, x);
- }
-
- default:
- {
- int start = token.start;
- syntaxError("expected expression");
- int end = syncTo(EXPR_TERMINATOR_SET);
- return makeErrorExpression(start, end);
- }
- }
- }
-
- // primary_with_suffix = primary (selector_suffix | slice_suffix | call_suffix)*
- private Expression parsePrimaryWithSuffix() {
- Expression e = parsePrimary();
- while (true) {
- if (token.kind == TokenKind.DOT) {
- e = parseSelectorSuffix(e);
- } else if (token.kind == TokenKind.LBRACKET) {
- e = parseSliceSuffix(e);
- } else if (token.kind == TokenKind.LPAREN) {
- e = parseCallSuffix(e);
- } else {
- return e;
- }
- }
- }
-
- // slice_suffix = '[' expr? ':' expr? ':' expr? ']'
- // | '[' expr? ':' expr? ']'
- // | '[' expr ']'
- private Expression parseSliceSuffix(Expression e) {
- int lbracketOffset = expect(TokenKind.LBRACKET);
- Expression start = null;
- Expression end = null;
- Expression step = null;
-
- if (token.kind != TokenKind.COLON) {
- start = parseExpression();
-
- // index x[i]
- if (token.kind == TokenKind.RBRACKET) {
- int rbracketOffset = expect(TokenKind.RBRACKET);
- return new IndexExpression(locs, e, lbracketOffset, start, rbracketOffset);
- }
- }
-
- // slice or substring x[i:j] or x[i:j:k]
- expect(TokenKind.COLON);
- if (token.kind != TokenKind.COLON && token.kind != TokenKind.RBRACKET) {
- end = parseTest();
- }
- if (token.kind == TokenKind.COLON) {
- expect(TokenKind.COLON);
- if (token.kind != TokenKind.RBRACKET) {
- step = parseTest();
- }
- }
- int rbracketOffset = expect(TokenKind.RBRACKET);
- return new SliceExpression(locs, e, lbracketOffset, start, end, step, rbracketOffset);
- }
-
- // Equivalent to 'exprlist' rule in Python grammar.
- // loop_variables = primary_with_suffix ( ',' primary_with_suffix )* ','?
- private Expression parseForLoopVariables() {
- // We cannot reuse parseExpression because it would parse the 'in' operator.
- // e.g. "for i in e: pass" -> we want to parse only "i" here.
- Expression e1 = parsePrimaryWithSuffix();
- if (token.kind != TokenKind.COMMA) {
- return e1;
- }
-
- // unparenthesized tuple
- List<Expression> elems = new ArrayList<>();
- elems.add(e1);
- while (token.kind == TokenKind.COMMA) {
- expect(TokenKind.COMMA);
- if (EXPR_LIST_TERMINATOR_SET.contains(token.kind)) {
- break;
- }
- elems.add(parsePrimaryWithSuffix());
- }
- return new ListExpression(locs, /*isTuple=*/ true, -1, elems, -1);
- }
-
- // comprehension_suffix = 'FOR' loop_variables 'IN' expr comprehension_suffix
- // | 'IF' expr comprehension_suffix
- // | ']' | '}'
- private Expression parseComprehensionSuffix(int loffset, Node body, TokenKind closingBracket) {
- ImmutableList.Builder<Comprehension.Clause> clauses = ImmutableList.builder();
- while (true) {
- if (token.kind == TokenKind.FOR) {
- int forOffset = nextToken();
- Expression vars = parseForLoopVariables();
- expect(TokenKind.IN);
- // The expression cannot be a ternary expression ('x if y else z') due to
- // conflicts in Python grammar ('if' is used by the comprehension).
- Expression seq = parseTest(0);
- clauses.add(new Comprehension.For(locs, forOffset, vars, seq));
- } else if (token.kind == TokenKind.IF) {
- int ifOffset = nextToken();
- // [x for x in li if 1, 2] # parse error
- // [x for x in li if (1, 2)] # ok
- Expression cond = parseTest(0);
- clauses.add(new Comprehension.If(locs, ifOffset, cond));
- } else if (token.kind == closingBracket) {
- break;
- } else {
- syntaxError("expected '" + closingBracket + "', 'for' or 'if'");
- int end = syncPast(LIST_TERMINATOR_SET);
- return makeErrorExpression(loffset, end);
- }
- }
-
- boolean isDict = closingBracket == TokenKind.RBRACE;
- int roffset = expect(closingBracket);
- return new Comprehension(locs, isDict, loffset, body, clauses.build(), roffset);
- }
-
- // list_maker = '[' ']'
- // | '[' expr ']'
- // | '[' expr expr_list ']'
- // | '[' expr comprehension_suffix ']'
- private Expression parseListMaker() {
- int lbracketOffset = expect(TokenKind.LBRACKET);
- if (token.kind == TokenKind.RBRACKET) { // empty List
- int rbracketOffset = nextToken();
- return new ListExpression(
- locs, /*isTuple=*/ false, lbracketOffset, ImmutableList.of(), rbracketOffset);
- }
-
- Expression expression = parseTest();
- switch (token.kind) {
- case RBRACKET:
- // [e], singleton list
- {
- int rbracketOffset = nextToken();
- return new ListExpression(
- locs,
- /*isTuple=*/ false,
- lbracketOffset,
- ImmutableList.of(expression),
- rbracketOffset);
- }
-
- case FOR:
- // [e for x in y], list comprehension
- return parseComprehensionSuffix(lbracketOffset, expression, TokenKind.RBRACKET);
-
- case COMMA:
- // [e, ...], list expression
- {
- List<Expression> elems = new ArrayList<>();
- elems.add(expression);
- parseExprList(elems, /*trailingCommaAllowed=*/ true);
- if (token.kind == TokenKind.RBRACKET) {
- int rbracketOffset = nextToken();
- return new ListExpression(
- locs, /*isTuple=*/ false, lbracketOffset, elems, rbracketOffset);
- }
-
- expect(TokenKind.RBRACKET);
- int end = syncPast(LIST_TERMINATOR_SET);
- return makeErrorExpression(lbracketOffset, end);
- }
-
- default:
- {
- syntaxError("expected ',', 'for' or ']'");
- int end = syncPast(LIST_TERMINATOR_SET);
- return makeErrorExpression(lbracketOffset, end);
- }
- }
- }
-
- // dict_expression = '{' '}'
- // | '{' dict_entry_list '}'
- // | '{' dict_entry comprehension_suffix '}'
- private Expression parseDictExpression() {
- int lbraceOffset = expect(TokenKind.LBRACE);
- if (token.kind == TokenKind.RBRACE) { // empty Dict
- int rbraceOffset = nextToken();
- return new DictExpression(locs, lbraceOffset, ImmutableList.of(), rbraceOffset);
- }
-
- DictExpression.Entry entry = parseDictEntry();
- if (token.kind == TokenKind.FOR) {
- // Dict comprehension
- return parseComprehensionSuffix(lbraceOffset, entry, TokenKind.RBRACE);
- }
-
- List<DictExpression.Entry> entries = new ArrayList<>();
- entries.add(entry);
- if (token.kind == TokenKind.COMMA) {
- expect(TokenKind.COMMA);
- entries.addAll(parseDictEntryList());
- }
- if (token.kind == TokenKind.RBRACE) {
- int rbraceOffset = nextToken();
- return new DictExpression(locs, lbraceOffset, entries, rbraceOffset);
- }
-
- expect(TokenKind.RBRACE);
- int end = syncPast(DICT_TERMINATOR_SET);
- return makeErrorExpression(lbraceOffset, end);
- }
-
- private Identifier parseIdent() {
- if (token.kind != TokenKind.IDENTIFIER) {
- int start = token.start;
- int end = expect(TokenKind.IDENTIFIER);
- return makeErrorExpression(start, end);
- }
-
- String name = (String) token.value;
- int offset = nextToken();
- return new Identifier(locs, name, offset);
- }
-
- // binop_expression = binop_expression OP binop_expression
- // | parsePrimaryWithSuffix
- // This function takes care of precedence between operators (see operatorPrecedence for
- // the order), and it assumes left-to-right associativity.
- private Expression parseBinOpExpression(int prec) {
- Expression x = parseTest(prec + 1);
- // The loop is not strictly needed, but it prevents risks of stack overflow. Depth is
- // limited to number of different precedence levels (operatorPrecedence.size()).
- TokenKind lastOp = null;
- for (;;) {
- if (token.kind == TokenKind.NOT) {
- // If NOT appears when we expect a binary operator, it must be followed by IN.
- // Since the code expects every operator to be a single token, we push a NOT_IN token.
- expect(TokenKind.NOT);
- if (token.kind != TokenKind.IN) {
- syntaxError("expected 'in'");
- }
- token.kind = TokenKind.NOT_IN;
- }
-
- TokenKind op = token.kind;
- if (!operatorPrecedence.get(prec).contains(op)) {
- return x;
- }
-
- // Operator '==' and other operators of the same precedence (e.g. '<', 'in')
- // are not associative.
- if (lastOp != null && operatorPrecedence.get(prec).contains(TokenKind.EQUALS_EQUALS)) {
- reportError(
- token.start,
- "Operator '%s' is not associative with operator '%s'. Use parens.",
- lastOp,
- op);
- }
-
- int opOffset = nextToken();
- Expression y = parseTest(prec + 1);
- x = optimizeBinOpExpression(x, op, opOffset, y);
- lastOp = op;
- }
- }
-
- // Optimize binary expressions.
- // string literal + string literal can be concatenated into one string literal
- // so we don't have to do the expensive string concatenation at runtime.
- private Expression optimizeBinOpExpression(
- Expression x, TokenKind op, int opOffset, Expression y) {
- if (op == TokenKind.PLUS && x instanceof StringLiteral && y instanceof StringLiteral) {
- return new StringLiteral(
- locs,
- x.getStartOffset(),
- intern(((StringLiteral) x).getValue() + ((StringLiteral) y).getValue()),
- y.getEndOffset());
- }
- return new BinaryOperatorExpression(locs, x, op, opOffset, y);
- }
-
- // Parses a non-tuple expression ("test" in Python terminology).
- private Expression parseTest() {
- int start = token.start;
- Expression expr = parseTest(0);
- if (token.kind == TokenKind.IF) {
- nextToken();
- Expression condition = parseTest(0);
- if (token.kind == TokenKind.ELSE) {
- nextToken();
- Expression elseClause = parseTest();
- return new ConditionalExpression(locs, expr, condition, elseClause);
- } else {
- reportError(start, "missing else clause in conditional expression or semicolon before if");
- return expr; // Try to recover from error: drop the if and the expression after it. Ouch.
- }
- }
- return expr;
- }
-
- private Expression parseTest(int prec) {
- if (prec >= operatorPrecedence.size()) {
- return parsePrimaryWithSuffix();
- }
- if (token.kind == TokenKind.NOT && operatorPrecedence.get(prec).contains(TokenKind.NOT)) {
- return parseNotExpression(prec);
- }
- return parseBinOpExpression(prec);
- }
-
- // not_expr = 'not' expr
- private Expression parseNotExpression(int prec) {
- int notOffset = expect(TokenKind.NOT);
- Expression x = parseTest(prec);
- return new UnaryOperatorExpression(locs, TokenKind.NOT, notOffset, x);
- }
-
- // file_input = ('\n' | stmt)* EOF
- private ImmutableList<Statement> parseFileInput() {
- ImmutableList.Builder<Statement> list = ImmutableList.builder();
- try {
- while (token.kind != TokenKind.EOF) {
- if (token.kind == TokenKind.NEWLINE) {
- expectAndRecover(TokenKind.NEWLINE);
- } else if (recoveryMode) {
- // If there was a parse error, we want to recover here
- // before starting a new top-level statement.
- syncTo(STATEMENT_TERMINATOR_SET);
- recoveryMode = false;
- } else {
- parseStatement(list);
- }
- }
- } catch (StackOverflowError ex) {
- // JVM threads have very limited stack, and deeply nested inputs can
- // easily cause the parser to consume all available stack. It is hard
- // to anticipate all the possible recursions in the parser, especially
- // when considering error recovery. Consider a long list of dicts:
- // even if the intended parse tree has a depth of only two,
- // if each dict contains a syntax error, the parser will go into recovery
- // and may discard each dict's closing '}', turning a shallow tree
- // into a deep one (see b/157470754).
- //
- // So, for robustness, the parser treats StackOverflowError as a parse
- // error, exhorting the user to report a bug.
- reportError(
- token.end,
- "internal error: stack overflow in Starlark parser. Please report the bug and include"
- + " the text of %s.\n"
- + "%s",
- locs.file(),
- Throwables.getStackTraceAsString(ex));
- }
- return list.build();
- }
-
- // load '(' STRING (COMMA [IDENTIFIER EQUALS] STRING)+ COMMA? ')'
- private Statement parseLoadStatement() {
- int loadOffset = expect(TokenKind.LOAD);
- expect(TokenKind.LPAREN);
- if (token.kind != TokenKind.STRING) {
- // error: module is not a string literal.
- StringLiteral module = new StringLiteral(locs, token.start, "", token.end);
- expect(TokenKind.STRING);
- return new LoadStatement(locs, loadOffset, module, ImmutableList.of(), token.end);
- }
-
- StringLiteral module = parseStringLiteral();
- if (token.kind == TokenKind.RPAREN) {
- syntaxError("expected at least one symbol to load");
- return new LoadStatement(locs, loadOffset, module, ImmutableList.of(), token.end);
- }
- expect(TokenKind.COMMA);
-
- ImmutableList.Builder<LoadStatement.Binding> bindings = ImmutableList.builder();
- // At least one symbol is required.
- parseLoadSymbol(bindings);
- while (token.kind != TokenKind.RPAREN && token.kind != TokenKind.EOF) {
- // A trailing comma is permitted after the last symbol.
- expect(TokenKind.COMMA);
- if (token.kind == TokenKind.RPAREN) {
- break;
- }
- parseLoadSymbol(bindings);
- }
-
- int rparen = expect(TokenKind.RPAREN);
- return new LoadStatement(locs, loadOffset, module, bindings.build(), rparen);
- }
-
- /**
- * Parses the next symbol argument of a load statement and puts it into the output map.
- *
- * <p>The symbol is either "name" (STRING) or name = "declared" (IDENTIFIER EQUALS STRING). If no
- * alias is used, "name" and "declared" will be identical. "Declared" refers to the original name
- * in the Bazel file that should be loaded, while "name" will be the key of the entry in the map.
- */
- private void parseLoadSymbol(ImmutableList.Builder<LoadStatement.Binding> symbols) {
- if (token.kind != TokenKind.STRING && token.kind != TokenKind.IDENTIFIER) {
- syntaxError("expected either a literal string or an identifier");
- return;
- }
-
- String name = (String) token.value;
- int nameOffset = token.start + (token.kind == TokenKind.STRING ? 1 : 0);
- Identifier local = new Identifier(locs, name, nameOffset);
-
- Identifier original;
- if (token.kind == TokenKind.STRING) {
- // load(..., "name")
- original = local;
- } else {
- // load(..., local = "orig")
- // The name "orig" is morally an identifier but, for legacy reasons (specifically,
- // a partial implementation of Starlark embedded in a Python interpreter used by
- // tests of Blaze), it must be a quoted string literal.
- expect(TokenKind.IDENTIFIER);
- expect(TokenKind.EQUALS);
- if (token.kind != TokenKind.STRING) {
- syntaxError("expected string");
- return;
- }
- original = new Identifier(locs, (String) token.value, token.start + 1);
- }
- nextToken();
- symbols.add(new LoadStatement.Binding(local, original));
- }
-
- // simple_stmt = small_stmt (';' small_stmt)* ';'? NEWLINE
- private void parseSimpleStatement(ImmutableList.Builder<Statement> list) {
- list.add(parseSmallStatement());
-
- while (token.kind == TokenKind.SEMI) {
- nextToken();
- if (token.kind == TokenKind.NEWLINE) {
- break;
- }
- list.add(parseSmallStatement());
- }
- expectAndRecover(TokenKind.NEWLINE);
- }
-
- // small_stmt = assign_stmt
- // | expr
- // | load_stmt
- // | return_stmt
- // | BREAK | CONTINUE | PASS
- //
- // assign_stmt = expr ('=' | augassign) expr
- //
- // augassign = '+=' | '-=' | '*=' | '/=' | '%=' | '//=' | '&=' | '|=' | '^=' |'<<=' | '>>='
- private Statement parseSmallStatement() {
- // return
- if (token.kind == TokenKind.RETURN) {
- return parseReturnStatement();
- }
-
- // control flow
- if (token.kind == TokenKind.BREAK
- || token.kind == TokenKind.CONTINUE
- || token.kind == TokenKind.PASS) {
- TokenKind kind = token.kind;
- int offset = nextToken();
- return new FlowStatement(locs, kind, offset);
- }
-
- // load
- if (token.kind == TokenKind.LOAD) {
- return parseLoadStatement();
- }
-
- Expression lhs = parseExpression();
-
- // lhs = rhs or lhs += rhs
- TokenKind op = augmentedAssignments.get(token.kind);
- if (token.kind == TokenKind.EQUALS || op != null) {
- int opOffset = nextToken();
- Expression rhs = parseExpression();
- // op == null for ordinary assignment. TODO(adonovan): represent as EQUALS.
- return new AssignmentStatement(locs, lhs, op, opOffset, rhs);
- } else {
- return new ExpressionStatement(locs, lhs);
- }
- }
-
- // if_stmt = IF expr ':' suite [ELIF expr ':' suite]* [ELSE ':' suite]?
- private IfStatement parseIfStatement() {
- int ifOffset = expect(TokenKind.IF);
- Expression cond = parseTest();
- expect(TokenKind.COLON);
- ImmutableList<Statement> body = parseSuite();
- IfStatement ifStmt = new IfStatement(locs, TokenKind.IF, ifOffset, cond, body);
- IfStatement tail = ifStmt;
- while (token.kind == TokenKind.ELIF) {
- int elifOffset = expect(TokenKind.ELIF);
- cond = parseTest();
- expect(TokenKind.COLON);
- body = parseSuite();
- IfStatement elif = new IfStatement(locs, TokenKind.ELIF, elifOffset, cond, body);
- tail.setElseBlock(ImmutableList.of(elif));
- tail = elif;
- }
- if (token.kind == TokenKind.ELSE) {
- expect(TokenKind.ELSE);
- expect(TokenKind.COLON);
- body = parseSuite();
- tail.setElseBlock(body);
- }
- return ifStmt;
- }
-
- // for_stmt = FOR IDENTIFIER IN expr ':' suite
- private ForStatement parseForStatement() {
- int forOffset = expect(TokenKind.FOR);
- Expression vars = parseForLoopVariables();
- expect(TokenKind.IN);
- Expression collection = parseExpression();
- expect(TokenKind.COLON);
- ImmutableList<Statement> body = parseSuite();
- return new ForStatement(locs, forOffset, vars, collection, body);
- }
-
- // def_stmt = DEF IDENTIFIER '(' arguments ')' ':' suite
- private DefStatement parseDefStatement() {
- int defOffset = expect(TokenKind.DEF);
- Identifier ident = parseIdent();
- expect(TokenKind.LPAREN);
- ImmutableList<Parameter> params = parseParameters();
- expect(TokenKind.RPAREN);
- expect(TokenKind.COLON);
- ImmutableList<Statement> block = parseSuite();
- return new DefStatement(locs, defOffset, ident, params, block);
- }
-
- // Parse a list of function parameters.
- // Validation of parameter ordering and uniqueness is the job of the Resolver.
- private ImmutableList<Parameter> parseParameters() {
- boolean hasParam = false;
- ImmutableList.Builder<Parameter> list = ImmutableList.builder();
-
- while (token.kind != TokenKind.RPAREN && token.kind != TokenKind.EOF) {
- if (hasParam) {
- expect(TokenKind.COMMA);
- // The list may end with a comma.
- if (token.kind == TokenKind.RPAREN) {
- break;
- }
- }
- Parameter param = parseFunctionParameter();
- hasParam = true;
- list.add(param);
- }
- return list.build();
- }
-
- // suite is typically what follows a colon (e.g. after def or for).
- // suite = simple_stmt
- // | NEWLINE INDENT stmt+ OUTDENT
- private ImmutableList<Statement> parseSuite() {
- ImmutableList.Builder<Statement> list = ImmutableList.builder();
- if (token.kind == TokenKind.NEWLINE) {
- expect(TokenKind.NEWLINE);
- if (token.kind != TokenKind.INDENT) {
- reportError(token.start, "expected an indented block");
- return list.build();
- }
- expect(TokenKind.INDENT);
- while (token.kind != TokenKind.OUTDENT && token.kind != TokenKind.EOF) {
- parseStatement(list);
- }
- expectAndRecover(TokenKind.OUTDENT);
- } else {
- parseSimpleStatement(list);
- }
- return list.build();
- }
-
- // return_stmt = RETURN [expr]
- private ReturnStatement parseReturnStatement() {
- int returnOffset = expect(TokenKind.RETURN);
-
- Expression result = null;
- if (!STATEMENT_TERMINATOR_SET.contains(token.kind)) {
- result = parseExpression();
- }
- return new ReturnStatement(locs, returnOffset, result);
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ParserInput.java b/src/main/java/com/google/devtools/build/lib/syntax/ParserInput.java
deleted file mode 100644
index c8da69c..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ParserInput.java
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-
-import com.google.common.base.Joiner;
-import com.google.common.base.Preconditions;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-/**
- * The apparent name and contents of a source file, for consumption by the parser. The file name
- * appears in the location information in the syntax tree, and in error messages, but the Starlark
- * interpreter will not attempt to open the file. However, the default behavior of {@link
- * EvalException#getMessageWithStack} attempts to read the specified file when formatting a stack
- * trace.
- *
- * <p>The parser consumes a stream of chars (UTF-16 codes), and the syntax positions reported by
- * {@link Node#getStartOffset} and {@link Location.column} are effectively indices into a char
- * array.
- */
-public final class ParserInput {
-
- private final String file;
- private final char[] content;
-
- private ParserInput(char[] content, String file) {
- this.content = content;
- this.file = Preconditions.checkNotNull(file);
- }
-
- /** Returns the content of the input source. Callers must not modify the result. */
- char[] getContent() {
- return content;
- }
-
- /** Returns the apparent file name of the input source. */
- public String getFile() {
- return file;
- }
-
- /**
- * Returns an input source that uses the name and content of the specified UTF-8-encoded text
- * file.
- */
- public static ParserInput readFile(String file) throws IOException {
- byte[] utf8 = Files.readAllBytes(Paths.get(file));
- return fromUTF8(utf8, file);
- }
-
- /** Returns an unnamed input source that reads from a list of strings, joined by newlines. */
- public static ParserInput fromLines(String... lines) {
- return fromString(Joiner.on("\n").join(lines), "");
- }
-
- /**
- * Returns an input source that reads from a UTF-8-encoded byte array. The caller is free to
- * subsequently mutate the array.
- */
- public static ParserInput fromUTF8(byte[] bytes, String file) {
- CharBuffer cb = UTF_8.decode(ByteBuffer.wrap(bytes));
- char[] utf16 = new char[cb.length()];
- cb.get(utf16);
- return fromCharArray(utf16, file);
- }
-
- /**
- * Returns an input source that reads from a Latin1-encoded byte array. The caller is free to
- * subsequently mutate the array.
- *
- * <p>This function exists to support legacy uses of Latin1 in Bazel. Do not use Latin1 in new
- * applications. (Consider this deprecated, without the fussy warnings.)
- */
- public static ParserInput fromLatin1(byte[] bytes, String file) {
- char[] chars = new char[bytes.length];
- for (int i = 0; i < bytes.length; i++) {
- chars[i] = (char) (0xff & bytes[i]);
- }
- return new ParserInput(chars, file);
- }
-
- /** Returns an input source that reads from the given string. */
- public static ParserInput fromString(String content, String file) {
- return fromCharArray(content.toCharArray(), file);
- }
-
- /**
- * Returns an input source that reads from the given char array. The caller must not subsequently
- * modify the array.
- */
- public static ParserInput fromCharArray(char[] content, String file) {
- return new ParserInput(content, file);
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Printer.java b/src/main/java/com/google/devtools/build/lib/syntax/Printer.java
deleted file mode 100644
index 0d1766a..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Printer.java
+++ /dev/null
@@ -1,359 +0,0 @@
-// Copyright 2015 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.syntax;
-
-import java.util.Arrays;
-import java.util.IllegalFormatException;
-import java.util.List;
-import java.util.Map;
-import java.util.MissingFormatWidthException;
-
-/**
- * A printer of Starlark values.
- *
- * <p>Subclasses may override methods such as {@link #repr} and {@link #printList} to alter the
- * formatting behavior.
- */
-// TODO(adonovan): disallow printing of objects that are not Starlark values.
-public class Printer {
-
- private final StringBuilder buffer;
-
- // Stack of values in the middle of being printed.
- // Each renders as "..." if recursively encountered,
- // indicating a cycle.
- private Object[] stack;
- private int depth;
-
- /** Creates a printer that writes to the given buffer. */
- public Printer(StringBuilder buffer) {
- this.buffer = buffer;
- }
-
- /** Creates a printer that uses a fresh buffer. */
- public Printer() {
- this(new StringBuilder());
- }
-
- /** Appends a char to the printer's buffer */
- public final Printer append(char c) {
- buffer.append(c);
- return this;
- }
-
- /** Appends a char sequence to the printer's buffer */
- public final Printer append(CharSequence s) {
- buffer.append(s);
- return this;
- }
-
- /** Appends a char subsequence to the printer's buffer */
- public final Printer append(CharSequence s, int start, int end) {
- buffer.append(s, start, end);
- return this;
- }
-
- /**
- * Appends a list to the printer's buffer. List elements are rendered with {@code repr}.
- *
- * <p>May be overridden by subclasses.
- *
- * @param list the list of objects to repr (each as with repr)
- * @param before a string to print before the list items, e.g. an opening bracket
- * @param separator a separator to print between items
- * @param after a string to print after the list items, e.g. a closing bracket
- */
- public Printer printList(Iterable<?> list, String before, String separator, String after) {
- this.append(before);
- String sep = "";
- for (Object elem : list) {
- this.append(sep);
- sep = separator;
- this.repr(elem);
- }
- return this.append(after);
- }
-
- @Override
- public final String toString() {
- return buffer.toString();
- }
-
- /**
- * Appends the {@code StarlarkValue.debugPrint} representation of a value (as used by the Starlark
- * {@code print} statement) to the printer's buffer.
- *
- * <p>Implementations of StarlarkValue may define their own behavior of {@code debugPrint}.
- */
- public Printer debugPrint(Object o) {
- if (o instanceof StarlarkValue) {
- ((StarlarkValue) o).debugPrint(this);
- return this;
- }
-
- return this.str(o);
- }
-
- /**
- * Appends the {@code StarlarkValue.str} representation of a value to the printer's buffer. Unlike
- * {@code repr(x)}, it does not quote strings at top level, though strings and other values
- * appearing as elements of other structures are quoted as if by {@code repr}.
- *
- * <p>Implementations of StarlarkValue may define their own behavior of {@code str}.
- */
- public Printer str(Object o) {
- if (o instanceof String) {
- return this.append((String) o);
-
- } else if (o instanceof StarlarkValue) {
- ((StarlarkValue) o).str(this);
- return this;
-
- } else {
- return this.repr(o);
- }
- }
-
- /**
- * Appends the {@code StarlarkValue.repr} (quoted) representation of a value to the printer's
- * buffer. The quoted form is often a Starlark expression that evaluates to the value.
- *
- * <p>Implementations of StarlarkValue may define their own behavior of {@code repr}.
- *
- * <p>Cyclic values are rendered as {@code ...} if they are recursively encountered by the same
- * printer. (Implementations of {@link StarlarkValue#repr} should avoid calling {@code
- * Starlark#repr}, as it creates another printer, which hide cycles from the cycle detector.)
- *
- * <p>In addition to Starlark values, {@code repr} also prints instances of classes Map, List,
- * Map.Entry, or Class. All other values are formatted using their {@code toString} method.
- * TODO(adonovan): disallow that.
- */
- public Printer repr(Object o) {
- // atomic values
- if (o == null) {
- // Java null is not a valid Starlark value, but sometimes printers are used on non-Starlark
- // values such as Locations or Nodes.
- return this.append("null");
-
- } else if (o instanceof String) {
- appendQuoted((String) o);
- return this;
-
- } else if (o instanceof Integer) {
- this.buffer.append((int) o);
- return this;
-
- } else if (o instanceof Boolean) {
- this.append(((boolean) o) ? "True" : "False");
- return this;
-
- } else if (o instanceof Class) { // (a non-Starlark value)
- this.append(Starlark.classType((Class<?>) o));
- return this;
- }
-
- // compound values
-
- if (!push(o)) {
- return this.append("..."); // elided cycle
- }
- try {
- if (o instanceof StarlarkValue) {
- ((StarlarkValue) o).repr(this);
-
- // -- non-Starlark values --
-
- } else if (o instanceof Map) {
- Map<?, ?> dict = (Map<?, ?>) o;
- this.printList(dict.entrySet(), "{", ", ", "}");
-
- } else if (o instanceof List) {
- this.printList((List) o, "[", ", ", "]");
-
- } else if (o instanceof Map.Entry) {
- Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o;
- this.repr(entry.getKey());
- this.append(": ");
- this.repr(entry.getValue());
-
- } else {
- // All other non-Starlark Java values (e.g. Node, Location).
- // Starlark code cannot access values of o that would reach here,
- // and native code is already trusted to be deterministic.
- this.append(o.toString());
- }
- } finally {
- pop();
- }
-
- return this;
- }
-
- private Printer appendQuoted(String s) {
- this.append('"');
- int len = s.length();
- for (int i = 0; i < len; i++) {
- char c = s.charAt(i);
- escapeCharacter(c);
- }
- return this.append('"');
- }
-
- private Printer backslashChar(char c) {
- return this.append('\\').append(c);
- }
-
- private Printer escapeCharacter(char c) {
- if (c == '"') {
- return backslashChar(c);
- }
- switch (c) {
- case '\\':
- return backslashChar('\\');
- case '\r':
- return backslashChar('r');
- case '\n':
- return backslashChar('n');
- case '\t':
- return backslashChar('t');
- default:
- if (c < 32) {
- // TODO(bazel-team): support \x escapes
- return this.append(String.format("\\x%02x", (int) c));
- }
- return this.append(c); // no need to support UTF-8
- }
- }
-
- // Reports whether x is already present on the visitation stack, pushing it if not.
- private boolean push(Object x) {
- // cyclic?
- for (int i = 0; i < depth; i++) {
- if (x == stack[i]) {
- return false;
- }
- }
-
- if (stack == null) {
- this.stack = new Object[4];
- } else if (depth == stack.length) {
- this.stack = Arrays.copyOf(stack, 2 * stack.length);
- }
- this.stack[depth++] = x;
- return true;
- }
-
- private void pop() {
- this.stack[--depth] = null;
- }
-
- /**
- * Appends a string, formatted as if by Starlark's {@code str % tuple} operator, to the printer's
- * buffer.
- *
- * <p>Supported conversions:
- *
- * <ul>
- * <li>{@code %s} (convert as if by {@code str()})
- * <li>{@code %r} (convert as if by {@code repr()})
- * <li>{@code %d} (convert an integer to its decimal representation)
- * </ul>
- *
- * To encode a literal percent character, escape it as {@code %%}. It is an error to have a
- * non-escaped {@code %} at the end of the string or followed by any character not listed above.
- *
- * @param format the format string
- * @param arguments an array containing arguments to substitute into the format operators in order
- * @throws IllegalFormatException if the format string is invalid or the arguments do not match it
- */
- public static void format(Printer printer, String format, Object... arguments) {
- formatWithList(printer, format, Arrays.asList(arguments));
- }
-
- /** Same as {@link #format}, but with a list instead of variadic args. */
- public static void formatWithList(Printer printer, String pattern, List<?> arguments) {
- // N.B. MissingFormatWidthException is the only kind of IllegalFormatException
- // whose constructor can take and display arbitrary error message, hence its use below.
- // TODO(adonovan): this suggests we're using the wrong exception. Throw IAE?
-
- int length = pattern.length();
- int argLength = arguments.size();
- int i = 0; // index of next character in pattern
- int a = 0; // index of next argument in arguments
-
- while (i < length) {
- int p = pattern.indexOf('%', i);
- if (p == -1) {
- printer.append(pattern, i, length);
- break;
- }
- if (p > i) {
- printer.append(pattern, i, p);
- }
- if (p == length - 1) {
- throw new MissingFormatWidthException(
- "incomplete format pattern ends with %: " + Starlark.repr(pattern));
- }
- char directive = pattern.charAt(p + 1);
- i = p + 2;
- switch (directive) {
- case '%':
- printer.append('%');
- continue;
- case 'd':
- case 'r':
- case 's':
- if (a >= argLength) {
- throw new MissingFormatWidthException(
- "not enough arguments for format pattern "
- + Starlark.repr(pattern)
- + ": "
- + Starlark.repr(Tuple.copyOf(arguments)));
- }
- Object argument = arguments.get(a++);
- switch (directive) {
- case 'd':
- if (!(argument instanceof Integer)) {
- throw new MissingFormatWidthException(
- "invalid argument " + Starlark.repr(argument) + " for format pattern %d");
- }
- printer.append(argument.toString());
- continue;
-
- case 'r':
- printer.repr(argument);
- continue;
-
- case 's':
- printer.str(argument);
- continue;
-
- default:
- // no-op
- }
- // fall through
- default:
- throw new MissingFormatWidthException(
- // The call to Starlark.repr doesn't cause an infinite recursion because it's
- // only used to format a string properly
- String.format(
- "unsupported format character \"%s\" at index %s in %s",
- String.valueOf(directive), p + 1, Starlark.repr(pattern)));
- }
- }
- if (a < argLength) {
- throw new MissingFormatWidthException("not all arguments converted during string formatting");
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Program.java b/src/main/java/com/google/devtools/build/lib/syntax/Program.java
deleted file mode 100644
index 576b60a..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Program.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2020 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.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-
-/**
- * An opaque, executable representation of a valid Starlark program. Programs may
- * [eventually---TODO(adonovan)] be efficiently serialized and deserialized without parsing and
- * recompiling.
- */
-public final class Program {
-
- private final Resolver.Function body;
- private final ImmutableList<String> loads;
-
- private Program(Resolver.Function body, ImmutableList<String> loads) {
- // TODO(adonovan): compile here.
- this.body = body;
- this.loads = loads;
- }
-
- // TODO(adonovan): eliminate once Eval no longer needs access to syntax.
- public Resolver.Function getResolvedFunction() {
- return body;
- }
-
- /** Returns the file name of this compiled program. */
- public String getFilename() {
- return body.getLocation().file();
- }
-
- /** Returns the list of load strings of this compiled program, in source order. */
- public ImmutableList<String> getLoads() {
- return loads;
- }
-
- /**
- * Resolves a file syntax tree in the specified environment and compiles it to a Program. This
- * operation mutates the syntax tree, both by resolving identifiers and recording local variables,
- * and in case of error, by appending to {@code file.errors()}.
- *
- * @throws SyntaxError.Exception in case of resolution error, or if the syntax tree already
- * contained syntax scan/parse errors. Resolution errors are added to {@code file.errors()}.
- */
- public static Program compileFile(StarlarkFile file, Resolver.Module env)
- throws SyntaxError.Exception {
- Resolver.resolveFile(file, env);
- if (!file.ok()) {
- throw new SyntaxError.Exception(file.errors());
- }
- return compileResolvedFile(file);
- }
-
- /** Variant of {@link #compileFile} for an already-resolved file syntax tree. */
- // TODO(adonovan): eliminate. This is a stop-gap because Bazel's Skyframe functions
- // are currently split as parse/resolve + compile/run, not parse/resolve/compile + run.
- public static Program compileResolvedFile(StarlarkFile file) {
- Preconditions.checkState(file.ok());
-
- // Extract load statements.
- ImmutableList.Builder<String> loads = ImmutableList.builder();
- for (Statement stmt : file.getStatements()) {
- if (stmt instanceof LoadStatement) {
- LoadStatement load = (LoadStatement) stmt;
- String module = load.getImport().getValue();
- loads.add(module);
- }
- }
-
- return new Program(file.getResolvedFunction(), loads.build());
- }
-
- /**
- * Resolves an expression syntax tree in the specified environment and compiles it to a Program.
- * This operation mutates the syntax tree. The {@code options} must match those used when parsing
- * expression.
- *
- * @throws SyntaxError.Exception in case of resolution error.
- */
- public static Program compileExpr(Expression expr, Resolver.Module module, FileOptions options)
- throws SyntaxError.Exception {
- Resolver.Function body = Resolver.resolveExpr(expr, module, options);
- return new Program(body, /*loads=*/ ImmutableList.of());
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/RangeList.java b/src/main/java/com/google/devtools/build/lib/syntax/RangeList.java
deleted file mode 100644
index 789f201..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/RangeList.java
+++ /dev/null
@@ -1,179 +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.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.UnmodifiableIterator;
-import java.util.AbstractList;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import javax.annotation.concurrent.Immutable;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkDocumentationCategory;
-
-/**
- * A sequence returned by the {@code range} function invocation.
- *
- * <p>Instead of eagerly allocating an array with all elements of the sequence, this class uses
- * simple math to compute a value at each index. This is particularly useful when range is huge or
- * only a few elements from it are used.
- *
- * <p>Eventually {@code range} function should produce an instance of the {@code range} type as is
- * the case in Python 3, but for now to preserve backwards compatibility with Python 2, {@code list}
- * is returned.
- */
-@StarlarkBuiltin(
- name = "range",
- category = StarlarkDocumentationCategory.BUILTIN,
- doc =
- "A language built-in type to support ranges. Example of range literal:<br>"
- + "<pre class=language-python>x = range(1, 10, 3)</pre>"
- + "Accessing elements is possible using indexing (starts from <code>0</code>):<br>"
- + "<pre class=language-python>e = x[1] # e == 2</pre>"
- + "Ranges do not support the <code>+</code> operator for concatenation."
- + "Similar to strings, ranges support slice operations:"
- + "<pre class=language-python>range(10)[1:3] # range(1, 3)\n"
- + "range(10)[::2] # range(0, 10, 2)\n"
- + "range(10)[3:0:-1] # range(3, 0, -1)</pre>"
- + "Ranges are immutable, as in Python 3.")
-@Immutable
-final class RangeList extends AbstractList<Integer> implements Sequence<Integer> {
-
- private final int start;
- private final int stop;
- private final int step;
- private final int size; // (derived)
-
- RangeList(int start, int stop, int step) {
- Preconditions.checkArgument(step != 0);
-
- this.start = start;
- this.stop = stop;
- this.step = step;
-
- // compute size.
- // Python version:
- // https://github.com/python/cpython/blob/09bb918a61031377d720f1a0fa1fe53c962791b6/Objects/rangeobject.c#L144
- int low; // [low,high) is a half-open interval
- int high;
- if (step > 0) {
- low = start;
- high = stop;
- } else {
- low = stop;
- high = start;
- step = -step;
- }
- if (low >= high) {
- this.size = 0;
- } else {
- int diff = high - low - 1;
- this.size = diff / step + 1;
- }
- }
-
- @Override
- public boolean contains(Object x) {
- if (!(x instanceof Integer)) {
- return false;
- }
- int i = (Integer) x;
- // constant-time implementation
- if (step > 0) {
- return start <= i && i < stop && (i - start) % step == 0;
- } else {
- return stop < i && i <= start && (i - start) % step == 0;
- }
- }
-
- @Override
- public Integer get(int index) {
- if (index < 0 || index >= size()) {
- throw new ArrayIndexOutOfBoundsException(index + ":" + this);
- }
- return at(index);
- }
-
- @Override
- public int size() {
- return size;
- }
-
- @Override
- public int hashCode() {
- return 7873 ^ (5557 * start) ^ (3251 * step) ^ (1091 * size);
- }
-
- @Override
- public boolean equals(Object other) {
- if (!(other instanceof RangeList)) {
- return false;
- }
- RangeList that = (RangeList) other;
-
- // Two RangeLists compare equal if they denote the same sequence.
- if (this.size != that.size) {
- return false; // sequences differ in length
- }
- if (this.size == 0) {
- return true; // both sequences are empty
- }
- if (this.start != that.start) {
- return false; // first element differs
- }
- return this.size == 1 || this.step == that.step;
- }
-
- @Override
- public Iterator<Integer> iterator() {
- return new UnmodifiableIterator<Integer>() {
- int cursor = start;
-
- @Override
- public boolean hasNext() {
- return (step > 0) ? (cursor < stop) : (cursor > stop);
- }
-
- @Override
- public Integer next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- int current = cursor;
- cursor += step;
- return current;
- }
- };
- }
-
- @Override
- public Sequence<Integer> getSlice(Mutability mu, int start, int stop, int step) {
- return new RangeList(at(start), at(stop), step * this.step);
- }
-
- // Like get, but without bounds check or Integer allocation.
- int at(int i) {
- return start + step * i;
- }
-
- @Override
- public void repr(Printer printer) {
- if (step == 1) {
- Printer.format(printer, "range(%d, %d)", start, stop);
- } else {
- Printer.format(printer, "range(%d, %d, %d)", start, stop, step);
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Resolver.java b/src/main/java/com/google/devtools/build/lib/syntax/Resolver.java
deleted file mode 100644
index ad56e3b..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Resolver.java
+++ /dev/null
@@ -1,839 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import com.google.errorprone.annotations.FormatMethod;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.annotation.Nullable;
-import net.starlark.java.spelling.SpellChecker;
-
-/**
- * The Resolver resolves each identifier in a syntax tree to its binding, and performs other
- * validity checks.
- *
- * <p>When a variable is defined, it is visible in the entire block. For example, a global variable
- * is visible in the entire file; a variable in a function is visible in the entire function block
- * (even on the lines before its first assignment).
- *
- * <p>Resolution is a mutation of the syntax tree, as it attaches binding information to Identifier
- * nodes. (In the future, it will attach additional information to functions to support lexical
- * scope, and even compilation of the trees to bytecode.) Resolution errors are reported in the
- * analogous manner to scan/parse errors: for a StarlarkFile, they are appended to {@code
- * StarlarkFile.errors}; for an expression they are reported by an SyntaxError.Exception exception.
- * It is legal to resolve a file that already contains scan/parse errors, though it may lead to
- * secondary errors.
- */
-public final class Resolver extends NodeVisitor {
-
- // TODO(adonovan): use "keyword" (not "named") and "required" (not "mandatory") terminology
- // everywhere, including the spec.
-
- /** Scope discriminates the scope of a binding: global, local, etc. */
- public enum Scope {
- // TODO(adonovan): Add UNIVERSAL, FREE, CELL.
- // (PREDECLARED vs UNIVERSAL allows us to represent the app-dependent and fixed parts of the
- // predeclared environment separately, reducing the amount of copying.)
-
- /** Binding is local to a function, comprehension, or file (e.g. load). */
- LOCAL,
- /** Binding occurs outside any function or comprehension. */
- GLOBAL,
- /** Binding is predeclared by the core or application. */
- PREDECLARED;
-
- @Override
- public String toString() {
- return super.toString().toLowerCase();
- }
- }
-
- /**
- * A Binding is a static abstraction of a variable. The Resolver maps each Identifier to a
- * Binding.
- */
- public static final class Binding {
-
- private final Scope scope;
- @Nullable private final Identifier first; // first binding use, if syntactic
- private final int index; // within its block (currently unused)
-
- private Binding(Scope scope, @Nullable Identifier first, int index) {
- this.scope = scope;
- this.first = first;
- this.index = index;
- }
-
- /** Returns the scope of the binding. */
- public Scope getScope() {
- return scope;
- }
-
- @Override
- public String toString() {
- return first == null
- ? scope.toString()
- : String.format(
- "%s[%d] %s @ %s", scope, index, first.getName(), first.getStartLocation());
- }
- }
-
- /** A Resolver.Function records information about a resolved function. */
- public static final class Function {
-
- private final String name;
- private final Location location;
- private final ImmutableList<Parameter> params;
- private final ImmutableList<Statement> body;
- private final boolean hasVarargs;
- private final boolean hasKwargs;
- private final int numKeywordOnlyParams;
- private final ImmutableList<String> parameterNames;
- private final boolean isToplevel;
-
- private Function(
- String name,
- Location loc,
- ImmutableList<Parameter> params,
- ImmutableList<Statement> body,
- boolean hasVarargs,
- boolean hasKwargs,
- int numKeywordOnlyParams) {
- this.name = name;
- this.location = loc;
- this.params = params;
- this.body = body;
- this.hasVarargs = hasVarargs;
- this.hasKwargs = hasKwargs;
- this.numKeywordOnlyParams = numKeywordOnlyParams;
-
- ImmutableList.Builder<String> names = ImmutableList.builderWithExpectedSize(params.size());
- for (Parameter p : params) {
- names.add(p.getName());
- }
- this.parameterNames = names.build();
-
- this.isToplevel = name.equals("<toplevel>");
- }
-
- /**
- * Returns the name of the function. It may be "<toplevel>" for the implicit function that holds
- * the top-level statements of a file, or "<expr>" for the implicit function that evaluates a
- * single expression.
- */
- public String getName() {
- return name;
- }
-
- /** Returns the location of the function's identifier. */
- public Location getLocation() {
- return location;
- }
-
- /**
- * Returns the function's parameters, in "run-time order": non-keyword-only parameters,
- * keyword-only parameters, {@code *args}, and finally {@code **kwargs}. A bare {@code *}
- * parameter is dropped.
- */
- public ImmutableList<Parameter> getParameters() {
- return params;
- }
-
- /**
- * Returns the effective statements of the function's body. (For the implicit function created
- * to evaluate a single standalone expression, this may contain a synthesized Return statement.)
- */
- // TODO(adonovan): eliminate when we switch to compiler.
- public ImmutableList<Statement> getBody() {
- return body;
- }
-
- /** Reports whether the function has an {@code *args} parameter. */
- public boolean hasVarargs() {
- return hasVarargs;
- }
-
- /** Reports whether the function has a {@code **kwargs} parameter. */
- public boolean hasKwargs() {
- return hasKwargs;
- }
-
- /**
- * Returns the number of the function's keyword-only parameters, such as {@code c} in {@code def
- * f(a, *b, c, **d)} or {@code def f(a, *, c, **d)}.
- */
- public int numKeywordOnlyParams() {
- return numKeywordOnlyParams;
- }
-
- /** Returns the names of the parameters. Order is as for {@link #getParameters}. */
- public ImmutableList<String> getParameterNames() {
- return parameterNames;
- }
-
- /**
- * isToplevel indicates that this is the <toplevel> function containing top-level statements of
- * a file. It causes assignments to unresolved identifiers to update the module, not the lexical
- * frame.
- */
- // TODO(adonovan): remove this hack when identifier resolution is accurate.
- public boolean isToplevel() {
- return isToplevel;
- }
- }
-
- /**
- * Module is a static abstraction of a Starlark module. It describes the set of variable names for
- * use during name resolution.
- */
- public interface Module {
-
- // TODO(adonovan): opt: for efficiency, turn this into a predicate, not an enumerable set,
- // and look up bindings as they are needed, not preemptively.
- // Otherwise we must do work proportional to the number of bindings in the
- // environment, not the number of free variables of the file/expression.
- //
- // A single method will then suffice:
- // Scope resolve(String name) throws Undeclared
-
- /** Returns the set of names defined by this module. The caller must not modify the set. */
- Set<String> getNames();
-
- /**
- * Returns (optionally) a more specific error for an undeclared name than the generic message.
- * This hook allows the module to implement flag-enabled names without any knowledge in this
- * file.
- */
- @Nullable
- default String getUndeclaredNameError(String name) {
- return null;
- }
- }
-
- private static class Block {
- private final Map<String, Binding> bindings = new HashMap<>();
- private final Scope scope;
- @Nullable private final Block parent;
-
- Block(Scope scope, @Nullable Block parent) {
- this.scope = scope;
- this.parent = parent;
- }
- }
-
- private final List<SyntaxError> errors;
- private final FileOptions options;
- private final Module module;
- private Block block;
- private int loopCount;
-
- // Shared binding for all predeclared names.
- private static final Binding PREDECLARED = new Binding(Scope.PREDECLARED, null, 0);
-
- private Resolver(List<SyntaxError> errors, Module module, FileOptions options) {
- this.errors = errors;
- this.module = module;
- this.options = options;
-
- this.block = new Block(Scope.PREDECLARED, null);
- for (String name : module.getNames()) {
- block.bindings.put(name, PREDECLARED);
- }
- }
-
- // Formats and reports an error at the start of the specified node.
- @FormatMethod
- private void errorf(Node node, String format, Object... args) {
- errorf(node.getStartLocation(), format, args);
- }
-
- // Formats and reports an error at the specified location.
- @FormatMethod
- private void errorf(Location loc, String format, Object... args) {
- errors.add(new SyntaxError(loc, String.format(format, args)));
- }
-
- /**
- * First pass: add bindings for all variables to the current block. This is done because symbols
- * are sometimes used before their definition point (e.g. functions are not necessarily declared
- * in order).
- */
- // TODO(adonovan): eliminate this first pass by using go.starlark.net one-pass approach.
- private void createBindings(Iterable<Statement> stmts) {
- for (Statement stmt : stmts) {
- createBindings(stmt);
- }
- }
-
- private void createBindings(Statement stmt) {
- switch (stmt.kind()) {
- case ASSIGNMENT:
- createBindings(((AssignmentStatement) stmt).getLHS());
- break;
- case IF:
- IfStatement ifStmt = (IfStatement) stmt;
- createBindings(ifStmt.getThenBlock());
- if (ifStmt.getElseBlock() != null) {
- createBindings(ifStmt.getElseBlock());
- }
- break;
- case FOR:
- ForStatement forStmt = (ForStatement) stmt;
- createBindings(forStmt.getVars());
- createBindings(forStmt.getBody());
- break;
- case DEF:
- DefStatement def = (DefStatement) stmt;
- bind(def.getIdentifier());
- break;
- case LOAD:
- LoadStatement load = (LoadStatement) stmt;
- Set<String> names = new HashSet<>();
- for (LoadStatement.Binding b : load.getBindings()) {
- // Reject load('...', '_private').
- Identifier orig = b.getOriginalName();
- if (orig.isPrivate() && !options.allowLoadPrivateSymbols()) {
- errorf(orig, "symbol '%s' is private and cannot be imported", orig.getName());
- }
-
- // The allowToplevelRebinding check is not applied to all files
- // but we apply it to each load statement as a special case,
- // and emit a better error message than the generic check.
- if (!names.add(b.getLocalName().getName())) {
- errorf(
- b.getLocalName(),
- "load statement defines '%s' more than once",
- b.getLocalName().getName());
- }
- }
-
- // TODO(adonovan): support options.loadBindsGlobally().
- // Requires that we open a LOCAL block for each file,
- // as well as its Module block, and select which block
- // to declare it in. See go.starlark.net implementation.
-
- for (LoadStatement.Binding b : load.getBindings()) {
- bind(b.getLocalName());
- }
- break;
- case EXPRESSION:
- case FLOW:
- case RETURN:
- // nothing to declare
- }
- }
-
- private void createBindings(Expression lhs) {
- for (Identifier id : Identifier.boundIdentifiers(lhs)) {
- bind(id);
- }
- }
-
- private void assign(Expression lhs) {
- if (lhs instanceof Identifier) {
- Identifier id = (Identifier) lhs;
- // Bindings are created by the first pass (createBindings),
- // so there's nothing to do here.
- Preconditions.checkNotNull(block.bindings.get(id.getName()));
- } else if (lhs instanceof IndexExpression) {
- visit(lhs);
- } else if (lhs instanceof ListExpression) {
- for (Expression elem : ((ListExpression) lhs).getElements()) {
- assign(elem);
- }
- } else {
- // TODO(adonovan): support x.f = y.
- errorf(lhs, "cannot assign to '%s'", lhs);
- }
- }
-
- @Override
- public void visit(Identifier id) {
- for (Block b = block; b != null; b = b.parent) {
- Binding bind = b.bindings.get(id.getName());
- if (bind != null) {
- if (options.recordScope()) {
- id.setBinding(bind);
- }
- return;
- }
- }
-
- // The identifier might not exist because it was restricted (hidden) by flags.
- // If this is the case, output a more helpful error message than 'not found'.
- String error = module.getUndeclaredNameError(id.getName());
- if (error == null) {
- // generic error
- error = createInvalidIdentifierException(id.getName(), getAllSymbols());
- }
- errorf(id, "%s", error);
- }
-
- private static String createInvalidIdentifierException(String name, Set<String> candidates) {
- if (!Identifier.isValid(name)) {
- // Identifier was created by Parser.makeErrorExpression and contains misparsed text.
- return "contains syntax errors";
- }
-
- String suggestion = SpellChecker.didYouMean(name, candidates);
- return "name '" + name + "' is not defined" + suggestion;
- }
-
- @Override
- public void visit(ReturnStatement node) {
- if (block.scope != Scope.LOCAL) {
- errorf(node, "return statements must be inside a function");
- }
- super.visit(node);
- }
-
- @Override
- public void visit(CallExpression node) {
- // validate call arguments
- boolean seenVarargs = false;
- boolean seenKwargs = false;
- Set<String> keywords = null;
- for (Argument arg : node.getArguments()) {
- if (arg instanceof Argument.Positional) {
- if (seenVarargs) {
- errorf(arg, "positional argument may not follow *args");
- } else if (seenKwargs) {
- errorf(arg, "positional argument may not follow **kwargs");
- } else if (keywords != null) {
- errorf(arg, "positional argument may not follow keyword argument");
- }
-
- } else if (arg instanceof Argument.Keyword) {
- String keyword = ((Argument.Keyword) arg).getName();
- if (seenVarargs) {
- errorf(arg, "keyword argument %s may not follow *args", keyword);
- } else if (seenKwargs) {
- errorf(arg, "keyword argument %s may not follow **kwargs", keyword);
- }
- if (keywords == null) {
- keywords = new HashSet<>();
- }
- if (!keywords.add(keyword)) {
- errorf(arg, "duplicate keyword argument: %s", keyword);
- }
-
- } else if (arg instanceof Argument.Star) {
- if (seenKwargs) {
- errorf(arg, "*args may not follow **kwargs");
- } else if (seenVarargs) {
- errorf(arg, "multiple *args not allowed");
- }
- seenVarargs = true;
-
- } else if (arg instanceof Argument.StarStar) {
- if (seenKwargs) {
- errorf(arg, "multiple **kwargs not allowed");
- }
- seenKwargs = true;
- }
- }
-
- super.visit(node);
- }
-
- @Override
- public void visit(ForStatement node) {
- if (block.scope != Scope.LOCAL) {
- errorf(
- node,
- "for loops are not allowed at the top level. You may move it inside a function "
- + "or use a comprehension, [f(x) for x in sequence]");
- }
- loopCount++;
- visit(node.getCollection());
- assign(node.getVars());
- visitBlock(node.getBody());
- Preconditions.checkState(loopCount > 0);
- loopCount--;
- }
-
- @Override
- public void visit(LoadStatement node) {
- if (block.scope == Scope.LOCAL) {
- errorf(node, "load statement not at top level");
- }
- // Skip super.visit: don't revisit local Identifier as a use.
- }
-
- @Override
- public void visit(FlowStatement node) {
- if (node.getKind() != TokenKind.PASS && loopCount <= 0) {
- errorf(node, "%s statement must be inside a for loop", node.getKind());
- }
- super.visit(node);
- }
-
- @Override
- public void visit(DotExpression node) {
- visit(node.getObject());
- // Do not visit the field.
- }
-
- @Override
- public void visit(Comprehension node) {
- ImmutableList<Comprehension.Clause> clauses = node.getClauses();
-
- // Following Python3, the first for clause is resolved
- // outside the comprehension block. All the other loops
- // are resolved in the scope of their own bindings,
- // permitting forward references.
- Comprehension.For for0 = (Comprehension.For) clauses.get(0);
- visit(for0.getIterable());
-
- openBlock(Scope.LOCAL);
- for (Comprehension.Clause clause : clauses) {
- if (clause instanceof Comprehension.For) {
- Comprehension.For forClause = (Comprehension.For) clause;
- createBindings(forClause.getVars());
- }
- }
- for (int i = 0; i < clauses.size(); i++) {
- Comprehension.Clause clause = clauses.get(i);
- if (clause instanceof Comprehension.For) {
- Comprehension.For forClause = (Comprehension.For) clause;
- if (i > 0) {
- visit(forClause.getIterable());
- }
- assign(forClause.getVars());
- } else {
- Comprehension.If ifClause = (Comprehension.If) clause;
- visit(ifClause.getCondition());
- }
- }
- visit(node.getBody());
- closeBlock();
- }
-
- @Override
- public void visit(DefStatement node) {
- if (block.scope == Scope.LOCAL) {
- errorf(node, "nested functions are not allowed. Move the function to the top level.");
- }
- node.setResolvedFunction(
- resolveFunction(
- node.getIdentifier().getName(),
- node.getIdentifier().getStartLocation(),
- node.getParameters(),
- node.getBody()));
- }
-
- private Function resolveFunction(
- String name,
- Location loc,
- ImmutableList<Parameter> parameters,
- ImmutableList<Statement> body) {
-
- // Resolve defaults in enclosing environment.
- for (Parameter param : parameters) {
- if (param instanceof Parameter.Optional) {
- visit(param.getDefaultValue());
- }
- }
-
- // Enter function block.
- openBlock(Scope.LOCAL);
-
- // Check parameter order and convert to run-time order:
- // positionals, keyword-only, *args, **kwargs.
- Parameter.Star star = null;
- Parameter.StarStar starStar = null;
- boolean seenOptional = false;
- int numKeywordOnlyParams = 0;
- // TODO(adonovan): opt: when all Identifiers are resolved to bindings accumulated
- // in the function, params can be a prefix of the function's array of bindings.
- ImmutableList.Builder<Parameter> params =
- ImmutableList.builderWithExpectedSize(parameters.size());
- for (Parameter param : parameters) {
- if (param instanceof Parameter.Mandatory) {
- // e.g. id
- if (starStar != null) {
- errorf(
- param,
- "required parameter %s may not follow **%s",
- param.getName(),
- starStar.getName());
- } else if (star != null) {
- numKeywordOnlyParams++;
- } else if (seenOptional) {
- errorf(
- param,
- "required positional parameter %s may not follow an optional parameter",
- param.getName());
- }
- bindParam(params, param);
-
- } else if (param instanceof Parameter.Optional) {
- // e.g. id = default
- seenOptional = true;
- if (starStar != null) {
- errorf(param, "optional parameter may not follow **%s", starStar.getName());
- } else if (star != null) {
- numKeywordOnlyParams++;
- }
- bindParam(params, param);
-
- } else if (param instanceof Parameter.Star) {
- // * or *args
- if (starStar != null) {
- errorf(param, "* parameter may not follow **%s", starStar.getName());
- } else if (star != null) {
- errorf(param, "multiple * parameters not allowed");
- } else {
- star = (Parameter.Star) param;
- }
-
- } else {
- // **kwargs
- if (starStar != null) {
- errorf(param, "multiple ** parameters not allowed");
- }
- starStar = (Parameter.StarStar) param;
- }
- }
-
- // * or *args
- if (star != null) {
- if (star.getIdentifier() != null) {
- bindParam(params, star);
- } else if (numKeywordOnlyParams == 0) {
- errorf(star, "bare * must be followed by keyword-only parameters");
- }
- }
-
- // **kwargs
- if (starStar != null) {
- bindParam(params, starStar);
- }
-
- createBindings(body);
- visitAll(body);
- closeBlock();
-
- return new Function(
- name,
- loc,
- params.build(),
- body,
- star != null && star.getIdentifier() != null,
- starStar != null,
- numKeywordOnlyParams);
- }
-
- private void bindParam(ImmutableList.Builder<Parameter> params, Parameter param) {
- if (bind(param.getIdentifier())) {
- errorf(param, "duplicate parameter: %s", param.getName());
- }
- params.add(param);
- }
-
- @Override
- public void visit(IfStatement node) {
- if (block.scope != Scope.LOCAL) {
- errorf(
- node,
- "if statements are not allowed at the top level. You may move it inside a function "
- + "or use an if expression (x if condition else y).");
- }
- super.visit(node);
- }
-
- @Override
- public void visit(AssignmentStatement node) {
- visit(node.getRHS());
-
- // Disallow: [e, ...] += rhs
- // Other bad cases are handled in assign.
- if (node.isAugmented() && node.getLHS() instanceof ListExpression) {
- errorf(
- node.getOperatorLocation(),
- "cannot perform augmented assignment on a list or tuple expression");
- }
-
- assign(node.getLHS());
- }
-
- /**
- * Process a binding use of a name by adding a binding to the current block if not already bound,
- * and associate the identifier with it. Reports whether the name was already bound in this block.
- */
- private boolean bind(Identifier id) {
- Binding bind = block.bindings.get(id.getName());
-
- // Already bound in this block?
- if (bind != null) {
- // Symbols defined in the module block cannot be reassigned.
- if (block.scope == Scope.GLOBAL && !options.allowToplevelRebinding()) {
- errorf(
- id,
- "cannot reassign global '%s' (read more at"
- + " https://bazel.build/versions/master/docs/skylark/errors/read-only-variable.html)",
- id.getName());
- if (bind.first != null) {
- errorf(bind.first, "'%s' previously declared here", id.getName());
- }
- }
-
- if (options.recordScope()) {
- id.setBinding(bind);
- }
- return true;
- }
-
- // new binding
- // TODO(adonovan): accumulate locals in the enclosing function/file block.
- bind = new Binding(block.scope, id, block.bindings.size());
- block.bindings.put(id.getName(), bind);
- if (options.recordScope()) {
- id.setBinding(bind);
- }
- return false;
- }
-
- /** Returns the set of all accessible symbols (both local and global) */
- private Set<String> getAllSymbols() {
- Set<String> all = new HashSet<>();
- for (Block b = block; b != null; b = b.parent) {
- all.addAll(b.bindings.keySet());
- }
- return all;
- }
-
- // Report an error if a load statement appears after another kind of statement.
- private void checkLoadAfterStatement(List<Statement> statements) {
- Statement firstStatement = null;
-
- for (Statement statement : statements) {
- // Ignore string literals (e.g. docstrings).
- if (statement instanceof ExpressionStatement
- && ((ExpressionStatement) statement).getExpression() instanceof StringLiteral) {
- continue;
- }
-
- if (statement instanceof LoadStatement) {
- if (firstStatement == null) {
- continue;
- }
- errorf(statement, "load statements must appear before any other statement");
- errorf(firstStatement, "\tfirst non-load statement appears here");
- }
-
- if (firstStatement == null) {
- firstStatement = statement;
- }
- }
- }
-
- private void resolveToplevelStatements(List<Statement> statements) {
- // Check that load() statements are on top.
- if (options.requireLoadStatementsFirst()) {
- checkLoadAfterStatement(statements);
- }
-
- openBlock(Scope.GLOBAL);
-
- // Add a binding for each variable defined by statements, not including definitions that appear
- // in sub-scopes of the given statements (function bodies and comprehensions).
- createBindings(statements);
-
- // Second pass: ensure that all symbols have been defined.
- visitAll(statements);
- closeBlock();
- }
-
- /**
- * Performs static checks, including resolution of identifiers in {@code file} in the environment
- * defined by {@code module}. The StarlarkFile is mutated. Errors are appended to {@link
- * StarlarkFile#errors}.
- */
- public static void resolveFile(StarlarkFile file, Module module) {
- ImmutableList<Statement> stmts = file.getStatements();
-
- Resolver r = new Resolver(file.errors, module, file.getOptions());
- r.resolveToplevelStatements(stmts);
- // Check that no closeBlock was forgotten.
- Preconditions.checkState(r.block.parent == null);
-
- // If the final statement is an expression, synthesize a return statement.
- int n = stmts.size();
- if (n > 0 && stmts.get(n - 1) instanceof ExpressionStatement) {
- Expression expr = ((ExpressionStatement) stmts.get(n - 1)).getExpression();
- stmts =
- ImmutableList.<Statement>builder()
- .addAll(stmts.subList(0, n - 1))
- .add(ReturnStatement.make(expr))
- .build();
- }
-
- // Annotate with resolved information about the toplevel function.
- file.setResolvedFunction(
- new Function(
- "<toplevel>",
- file.getStartLocation(),
- /*params=*/ ImmutableList.of(),
- /*body=*/ stmts,
- /*hasVarargs=*/ false,
- /*hasKwargs=*/ false,
- /*numKeywordOnlyParams=*/ 0));
- }
-
- /**
- * Performs static checks, including resolution of identifiers in {@code expr} in the environment
- * defined by {@code module}. This operation mutates the Expression. Syntax must be resolved
- * before it is evaluated.
- */
- public static Function resolveExpr(Expression expr, Module module, FileOptions options)
- throws SyntaxError.Exception {
- List<SyntaxError> errors = new ArrayList<>();
- Resolver r = new Resolver(errors, module, options);
-
- r.visit(expr);
-
- if (!errors.isEmpty()) {
- throw new SyntaxError.Exception(errors);
- }
-
- // Return no-arg function that computes the expression.
- return new Function(
- "<expr>",
- expr.getStartLocation(),
- /*params=*/ ImmutableList.of(),
- ImmutableList.of(ReturnStatement.make(expr)),
- /*hasVarargs=*/ false,
- /*hasKwargs=*/ false,
- /*numKeywordOnlyParams=*/ 0);
- }
-
- /** Open a new lexical block that will contain the future declarations. */
- private void openBlock(Scope scope) {
- block = new Block(scope, block);
- }
-
- /** Close a lexical block (and lose all declarations it contained). */
- private void closeBlock() {
- block = Preconditions.checkNotNull(block.parent);
- }
-
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ReturnStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/ReturnStatement.java
deleted file mode 100644
index 52b1f79..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ReturnStatement.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import javax.annotation.Nullable;
-
-/** A syntax node for return statements. */
-public final class ReturnStatement extends Statement {
-
- private final int returnOffset;
- @Nullable private final Expression result;
-
- ReturnStatement(FileLocations locs, int returnOffset, @Nullable Expression result) {
- super(locs);
- this.returnOffset = returnOffset;
- this.result = result;
- }
-
- /**
- * Returns a new return statement that returns expr. It is provided only for use by the evaluator,
- * and will be removed when it switches to a compiled representation.
- */
- static ReturnStatement make(Expression expr) {
- return new ReturnStatement(expr.locs, expr.getStartOffset(), expr);
- }
-
- @Nullable
- public Expression getResult() {
- return result;
- }
-
- @Override
- public int getStartOffset() {
- return returnOffset;
- }
-
- @Override
- public int getEndOffset() {
- return result != null ? result.getEndOffset() : returnOffset + "return".length();
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.RETURN;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Sequence.java b/src/main/java/com/google/devtools/build/lib/syntax/Sequence.java
deleted file mode 100644
index edd81c2..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Sequence.java
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import java.util.List;
-import java.util.RandomAccess;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkDocumentationCategory;
-
-/**
- * A Sequence is a finite iterable sequence of Starlark values, such as a list or tuple.
- *
- * <p>Sequences implement the read-only operations of the {@link List} interface, but not its update
- * operations, similar to {@code ImmutableList}. The specification of {@code List} governs how such
- * methods behave and in particular how they report errors. Subclasses of sequence may define ad-hoc
- * mutator methods, such as {@link StarlarkList#extend}, exposed to Starlark, or Java, or both.
- *
- * <p>In principle, subclasses of Sequence could also define the standard update operations of List,
- * but there appears to be little demand, and doing so carries some risk of obscuring unintended
- * mutations to Starlark values that would currently cause the program to crash.
- */
-@StarlarkBuiltin(
- name = "sequence",
- documented = false,
- category = StarlarkDocumentationCategory.BUILTIN,
- doc = "common type of lists and tuples.")
-public interface Sequence<E>
- extends StarlarkValue, List<E>, RandomAccess, StarlarkIndexable, StarlarkIterable<E> {
-
- @Override
- default boolean truth() {
- return !isEmpty();
- }
-
- /** Returns an ImmutableList object with the current underlying contents of this Sequence. */
- default ImmutableList<E> getImmutableList() {
- return ImmutableList.copyOf(this);
- }
-
- /** Retrieves an entry from a Sequence. */
- @Override
- default E getIndex(StarlarkSemantics semantics, Object key) throws EvalException {
- int index = Starlark.toInt(key, "sequence index");
- return get(EvalUtils.getSequenceIndex(index, size()));
- }
-
- @Override
- default boolean containsKey(StarlarkSemantics semantics, Object key) throws EvalException {
- return contains(key);
- }
-
- /**
- * Returns the slice of this sequence, {@code this[start:stop:step]}. <br>
- * For positive strides ({@code step > 0}), {@code 0 <= start <= stop <= size()}. <br>
- * For negative strides ({@code step < 0}), {@code -1 <= stop <= start < size()}. <br>
- * The caller must ensure that the start and stop indices are valid and that step is non-zero.
- */
- Sequence<E> getSlice(Mutability mu, int start, int stop, int step);
-
- /**
- * Casts a non-null Starlark value {@code x} to a {@code Sequence<T>}, after checking that each
- * element is an instance of {@code elemType}. On error, it throws an EvalException whose message
- * includes {@code what}, ideally a string literal, as a description of the role of {@code x}.
- */
- public static <T> Sequence<T> cast(Object x, Class<T> elemType, String what)
- throws EvalException {
- Preconditions.checkNotNull(x);
- if (!(x instanceof Sequence)) {
- throw Starlark.errorf("for %s, got %s, want sequence", what, Starlark.type(x));
- }
- int i = 0;
- for (Object elem : (Sequence) x) {
- if (!elemType.isAssignableFrom(elem.getClass())) {
- throw Starlark.errorf(
- "at index %d of %s, got element of type %s, want %s",
- i, what, Starlark.type(elem), Starlark.classType(elemType));
- }
- }
- @SuppressWarnings("unchecked") // safe
- Sequence<T> result = (Sequence) x;
- return result;
- }
-
- /** Like {@link #cast}, but if x is None, returns an immutable empty list. */
- public static <T> Sequence<T> noneableCast(Object x, Class<T> type, String what)
- throws EvalException {
- return x == Starlark.NONE ? StarlarkList.empty() : cast(x, type, what);
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SliceExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/SliceExpression.java
deleted file mode 100644
index 29f6d70..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/SliceExpression.java
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import javax.annotation.Nullable;
-
-/** Syntax node for a slice expression, {@code object[start:stop:step]}. */
-public final class SliceExpression extends Expression {
-
- private final Expression object;
- private final int lbracketOffset;
- @Nullable private final Expression start;
- @Nullable private final Expression stop;
- @Nullable private final Expression step;
- private final int rbracketOffset;
-
- SliceExpression(
- FileLocations locs,
- Expression object,
- int lbracketOffset,
- Expression start,
- Expression stop,
- Expression step,
- int rbracketOffset) {
- super(locs);
- this.object = object;
- this.lbracketOffset = lbracketOffset;
- this.start = start;
- this.stop = stop;
- this.step = step;
- this.rbracketOffset = rbracketOffset;
- }
-
- public Expression getObject() {
- return object;
- }
-
- @Nullable
- public Expression getStart() {
- return start;
- }
-
- @Nullable
- public Expression getStop() {
- return stop;
- }
-
- @Nullable
- public Expression getStep() {
- return step;
- }
-
- @Override
- public int getStartOffset() {
- return object.getStartOffset();
- }
-
- @Override
- public int getEndOffset() {
- return rbracketOffset + 1;
- }
-
- public Location getLbracketLocation() {
- return locs.getLocation(lbracketOffset);
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.SLICE;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Starlark.java b/src/main/java/com/google/devtools/build/lib/syntax/Starlark.java
deleted file mode 100644
index 9036dee..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Starlark.java
+++ /dev/null
@@ -1,805 +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.syntax;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.errorprone.annotations.CheckReturnValue;
-import com.google.errorprone.annotations.FormatMethod;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.lang.reflect.Method;
-import java.time.Duration;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.Immutable;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkInterfaceUtils;
-import net.starlark.java.annot.StarlarkMethod;
-import net.starlark.java.spelling.SpellChecker;
-
-/**
- * The Starlark class defines the most important entry points, constants, and functions needed by
- * all clients of the Starlark interpreter.
- */
-public final class Starlark {
-
- private Starlark() {} // uninstantiable
-
- /** The Starlark None value. */
- public static final NoneType NONE = NoneType.NONE;
-
- /**
- * A sentinel value passed to optional parameters of StarlarkMethod-annotated methods to indicate
- * that no argument value was supplied.
- */
- public static final Object UNBOUND = new UnboundMarker();
-
- @Immutable
- private static final class UnboundMarker implements StarlarkValue {
- private UnboundMarker() {}
-
- @Override
- public String toString() {
- return "<unbound>";
- }
-
- @Override
- public boolean isImmutable() {
- return true;
- }
-
- @Override
- public void repr(Printer printer) {
- printer.append("<unbound>");
- }
- }
-
- /**
- * The universal bindings predeclared in every Starlark file, such as None, True, len, and range.
- */
- public static final ImmutableMap<String, Object> UNIVERSE = makeUniverse();
-
- private static ImmutableMap<String, Object> makeUniverse() {
- ImmutableMap.Builder<String, Object> env = ImmutableMap.builder();
- env //
- .put("False", false)
- .put("True", true)
- .put("None", NONE);
- addMethods(env, new MethodLibrary());
- return env.build();
- }
-
- /**
- * Reports whether the argument is a legal Starlark value: a string, boolean, integer, or
- * StarlarkValue.
- */
- public static boolean valid(Object x) {
- return x instanceof StarlarkValue
- || x instanceof String
- || x instanceof Boolean
- || x instanceof Integer;
- }
-
- /**
- * Returns {@code x} if it is a {@link #valid} Starlark value, otherwise throws
- * IllegalArgumentException.
- */
- public static <T> T checkValid(T x) {
- if (!valid(x)) {
- throw new IllegalArgumentException("invalid Starlark value: " + x.getClass());
- }
- return x;
- }
-
- /** Reports whether {@code x} is Java null or Starlark None. */
- public static boolean isNullOrNone(Object x) {
- return x == null || x == NONE;
- }
-
- /** Reports whether a Starlark value is assumed to be deeply immutable. */
- // TODO(adonovan): eliminate the concept of querying for immutability. It is currently used for
- // only one purpose, the precondition for adding an element to a Depset, but Depsets should check
- // hashability, like Dicts. (Similarly, querying for hashability should go: just attempt to hash a
- // value, and be prepared for it to fail.) In practice, a value may be immutable, either
- // inherently (e.g. string) or because it has become frozen, but we don't need to query for it.
- // Just attempt a mutation and be prepared for it to fail.
- // It is inefficient and potentially inconsistent to ask before doing.
- //
- // The main obstacle is that although depsets disallow (say) lists as keys even when frozen,
- // they permit a tuple of lists, or a struct containing lists, and many users exploit this.
- public static boolean isImmutable(Object x) {
- // NB: This is used as the basis for accepting objects in Depsets,
- // as well as for accepting objects as keys for Starlark dicts.
-
- if (x instanceof String || x instanceof Integer || x instanceof Boolean) {
- return true;
- } else if (x instanceof StarlarkValue) {
- return ((StarlarkValue) x).isImmutable();
- } else {
- throw new IllegalArgumentException("invalid Starlark value: " + x.getClass());
- }
- }
-
- /**
- * Converts a Java value {@code x} to a Starlark one, if x is not already a valid Starlark value.
- * A Java List or Map is converted to a Starlark list or dict, respectively, and null becomes
- * {@link #NONE}. Any other non-Starlark value causes the function to throw
- * IllegalArgumentException.
- *
- * <p>This function is applied to the results of StarlarkMethod-annotated Java methods.
- */
- public static Object fromJava(Object x, @Nullable Mutability mutability) {
- if (x == null) {
- return NONE;
- } else if (valid(x)) {
- return x;
- } else if (x instanceof List) {
- return StarlarkList.copyOf(mutability, (List<?>) x);
- } else if (x instanceof Map) {
- return Dict.copyOf(mutability, (Map<?, ?>) x);
- } else {
- throw new IllegalArgumentException(
- "cannot expose internal type to Starlark: " + x.getClass());
- }
- }
-
- /**
- * Returns the truth value of a valid Starlark value, as if by the Starlark expression {@code
- * bool(x)}.
- */
- public static boolean truth(Object x) {
- if (x instanceof Boolean) {
- return (Boolean) x;
- } else if (x instanceof StarlarkValue) {
- return ((StarlarkValue) x).truth();
- } else if (x instanceof String) {
- return !((String) x).isEmpty();
- } else if (x instanceof Integer) {
- return (Integer) x != 0;
- } else {
- throw new IllegalArgumentException("invalid Starlark value: " + x.getClass());
- }
- }
-
- /**
- * Checks whether the Freezable Starlark value is frozen or temporarily immutable due to active
- * iterators.
- *
- * @throws EvalException if the value is not mutable.
- */
- public static void checkMutable(Mutability.Freezable x) throws EvalException {
- if (x.mutability().isFrozen()) {
- throw errorf("trying to mutate a frozen %s value", type(x));
- }
- if (x.updateIteratorCount(0)) {
- throw errorf("%s value is temporarily immutable due to active for-loop iteration", type(x));
- }
- }
-
- /**
- * Returns an iterable view of {@code x} if it is an iterable Starlark value; throws EvalException
- * otherwise.
- *
- * <p>Whereas the interpreter temporarily freezes the iterable value by bracketing {@code for}
- * loops and comprehensions in calls to {@link Freezable#updateIteratorCount}, iteration using
- * this method does not freeze the value. Callers should exercise care not to mutate the
- * underlying object during iteration.
- */
- public static Iterable<?> toIterable(Object x) throws EvalException {
- if (x instanceof StarlarkIterable) {
- return (Iterable<?>) x;
- }
- throw errorf("type '%s' is not iterable", type(x));
- }
-
- /**
- * Returns a new array containing the elements of Starlark iterable value {@code x}. A Starlark
- * value is iterable if it implements {@link StarlarkIterable}.
- */
- public static Object[] toArray(Object x) throws EvalException {
- // Specialize Sequence and Dict to avoid allocation and/or indirection.
- if (x instanceof Sequence) {
- return ((Sequence<?>) x).toArray();
- } else if (x instanceof Dict) {
- return ((Dict<?, ?>) x).keySet().toArray();
- } else {
- return Iterables.toArray(toIterable(x), Object.class);
- }
- }
-
- /**
- * Returns the length of a Starlark string, sequence (such as a list or tuple), dict, or other
- * iterable, as if by the Starlark expression {@code len(x)}, or -1 if the value is valid but has
- * no length.
- */
- public static int len(Object x) {
- if (x instanceof String) {
- return ((String) x).length();
- } else if (x instanceof Sequence) {
- return ((Sequence) x).size();
- } else if (x instanceof Dict) {
- return ((Dict) x).size();
- } else if (x instanceof StarlarkIterable) {
- // Iterables.size runs in constant time if x implements Collection.
- return Iterables.size((Iterable<?>) x);
- } else {
- checkValid(x);
- return -1; // valid but not a sequence
- }
- }
-
- /** Returns the name of the type of a value as if by the Starlark expression {@code type(x)}. */
- public static String type(Object x) {
- return classType(x.getClass());
- }
-
- /**
- * Returns the name of the type of instances of class c.
- *
- * <p>This function accepts any class, not just those of legal Starlark values, and may be used
- * for reporting error messages involving arbitrary Java classes, for example at the interface
- * between Starlark and Java.
- */
- // TODO(adonovan): reconsider allowing any classes other than String, Integer, Boolean, and
- // subclasses of StarlarkValue, with a special exception for Object.class meaning "any Starlark
- // value" (not: any Java object). Ditto for Depset.ElementType.
- public static String classType(Class<?> c) {
- // Check for "direct hits" first to avoid needing to scan for annotations.
- if (c.equals(String.class)) {
- return "string";
- } else if (c.equals(Integer.class)) {
- return "int";
- } else if (c.equals(Boolean.class)) {
- return "bool";
- }
-
- // Shortcut for the most common types.
- // These cases can be handled by `getStarlarkBuiltin`
- // but `getStarlarkBuiltin` is quite expensive.
- if (c.equals(StarlarkList.class)) {
- return "list";
- } else if (c.equals(Tuple.class)) {
- return "tuple";
- } else if (c.equals(Dict.class)) {
- return "dict";
- } else if (c.equals(NoneType.class)) {
- return "NoneType";
- } else if (c.equals(StarlarkFunction.class)) {
- return "function";
- } else if (c.equals(RangeList.class)) {
- return "range";
- }
-
- StarlarkBuiltin module = StarlarkInterfaceUtils.getStarlarkBuiltin(c);
- if (module != null) {
- return module.name();
-
- } else if (StarlarkCallable.class.isAssignableFrom(c)) {
- // All callable values have historically been lumped together as "function".
- // TODO(adonovan): built-in types that don't use StarlarkModule should report
- // their own type string, but this is a breaking change as users often
- // use type(x)=="function" for Starlark and built-in functions.
- return "function";
-
- } else if (c.equals(Object.class)) {
- // "Unknown" is another unfortunate choice.
- // Object.class does mean "unknown" when talking about the type parameter
- // of a collection (List<Object>), but it also means "any" when used
- // as an argument to Sequence.cast, and more generally it means "value".
- return "unknown";
-
- } else if (List.class.isAssignableFrom(c)) {
- // Any class of java.util.List that isn't a Sequence.
- return "List";
-
- } else if (Map.class.isAssignableFrom(c)) {
- // Any class of java.util.Map that isn't a Dict.
- return "Map";
-
- } else {
- String simpleName = c.getSimpleName();
- return simpleName.isEmpty() ? c.getName() : simpleName;
- }
- }
-
- /** Returns the string form of a value as if by the Starlark expression {@code str(x)}. */
- public static String str(Object x) {
- return new Printer().str(x).toString();
- }
-
- /** Returns the string form of a value as if by the Starlark expression {@code repr(x)}. */
- public static String repr(Object x) {
- return new Printer().repr(x).toString();
- }
-
- /** Returns a string formatted as if by the Starlark expression {@code pattern % arguments}. */
- public static String format(String pattern, Object... arguments) {
- Printer pr = new Printer();
- Printer.format(pr, pattern, arguments);
- return pr.toString();
- }
-
- /** Returns a string formatted as if by the Starlark expression {@code pattern % arguments}. */
- public static String formatWithList(String pattern, List<?> arguments) {
- Printer pr = new Printer();
- Printer.formatWithList(pr, pattern, arguments);
- return pr.toString();
- }
-
- /** Returns a slice of a sequence as if by the Starlark operation {@code x[start:stop:step]}. */
- public static Object slice(
- Mutability mu, Object x, Object startObj, Object stopObj, Object stepObj)
- throws EvalException {
- int n;
- if (x instanceof String) {
- n = ((String) x).length();
- } else if (x instanceof Sequence) {
- n = ((Sequence) x).size();
- } else {
- throw errorf("invalid slice operand: %s", type(x));
- }
-
- int start;
- int stop;
- int step;
-
- // step
- if (stepObj == NONE) {
- step = 1;
- } else {
- step = toInt(stepObj, "slice step");
- if (step == 0) {
- throw errorf("slice step cannot be zero");
- }
- }
-
- // start, stop
- if (step > 0) {
- // positive stride: default indices are [0:n].
- if (startObj == NONE) {
- start = 0;
- } else {
- start = EvalUtils.toIndex(toInt(startObj, "start index"), n);
- }
-
- if (stopObj == NONE) {
- stop = n;
- } else {
- stop = EvalUtils.toIndex(toInt(stopObj, "stop index"), n);
- }
-
- if (stop < start) {
- stop = start; // => empty result
- }
-
- } else {
- // negative stride: default indices are effectively [n-1:-1],
- // though to get this effect using explicit indices requires
- // [n-1:-1-n:-1] because of the treatment of negative values.
- if (startObj == NONE) {
- start = n - 1;
- } else {
- start = toInt(startObj, "start index");
- if (start < 0) {
- start += n;
- }
- if (start >= n) {
- start = n - 1;
- }
- }
-
- if (stopObj == NONE) {
- stop = -1;
- } else {
- stop = toInt(stopObj, "stop index");
- if (stop < 0) {
- stop += n;
- }
- if (stop < -1) {
- stop = -1;
- }
- }
-
- if (start < stop) {
- start = stop; // => empty result
- }
- }
-
- // slice operation
- if (x instanceof String) {
- return StringModule.slice((String) x, start, stop, step);
- } else {
- return ((Sequence<?>) x).getSlice(mu, start, stop, step);
- }
- }
-
- static int toInt(Object x, String name) throws EvalException {
- if (x instanceof Integer) {
- return (Integer) x;
- }
- throw errorf("got %s for %s, want int", type(x), name);
- }
-
- /**
- * Calls the function-like value {@code fn} in the specified thread, passing it the given
- * positional and named arguments, as if by the Starlark expression {@code fn(*args, **kwargs)}.
- *
- * <p>See also {@link #fastcall}.
- */
- public static Object call(
- StarlarkThread thread, Object fn, List<Object> args, Map<String, Object> kwargs)
- throws EvalException, InterruptedException {
- Object[] named = new Object[2 * kwargs.size()];
- int i = 0;
- for (Map.Entry<String, Object> e : kwargs.entrySet()) {
- named[i++] = e.getKey();
- named[i++] = e.getValue();
- }
- return fastcall(thread, fn, args.toArray(), named);
- }
-
- /**
- * Calls the function-like value {@code fn} in the specified thread, passing it the given
- * positional and named arguments in the "fastcall" array representation.
- *
- * <p>The caller must not subsequently modify or even inspect the two arrays.
- *
- * <p>If the call throws a StackOverflowError or any instance of RuntimeException (other than
- * UncheckedEvalException), regardless of whether it originates in a user-defined built-in
- * function or a bug in the interpreter itself, the exception is wrapped by an
- * UncheckedEvalException whose message includes the Starlark stack. The original exception may be
- * retrieved using {@code getCause}.
- */
- public static Object fastcall(
- StarlarkThread thread, Object fn, Object[] positional, Object[] named)
- throws EvalException, InterruptedException {
- StarlarkCallable callable;
- if (fn instanceof StarlarkCallable) {
- callable = (StarlarkCallable) fn;
- } else {
- // @StarlarkMethod(selfCall)?
- MethodDescriptor desc =
- CallUtils.getSelfCallMethodDescriptor(thread.getSemantics(), fn.getClass());
- if (desc == null) {
- throw errorf("'%s' object is not callable", type(fn));
- }
- callable = new BuiltinCallable(fn, desc.getName(), desc);
- }
-
- thread.push(callable);
- try {
- return callable.fastcall(thread, positional, named);
- } catch (UncheckedEvalException ex) {
- throw ex; // already wrapped
- } catch (RuntimeException | StackOverflowError ex) {
- throw new UncheckedEvalException(ex, thread.getCallStack());
- } catch (EvalException ex) {
- // If this exception was newly thrown, set its stack.
- throw ex.ensureStack(thread);
- } finally {
- thread.pop();
- }
- }
-
- /**
- * An UncheckedEvalException decorates an unchecked exception with its Starlark stack, to help
- * maintainers locate problematic source expressions. The original exception can be retrieved
- * using {@code getCause}.
- */
- public static final class UncheckedEvalException extends RuntimeException {
- private final ImmutableList<StarlarkThread.CallStackEntry> stack;
-
- private UncheckedEvalException(
- Throwable cause, ImmutableList<StarlarkThread.CallStackEntry> stack) {
- super(cause);
- this.stack = stack;
- }
-
- /** Returns the stack of Starlark calls active at the moment of the error. */
- public ImmutableList<StarlarkThread.CallStackEntry> getCallStack() {
- return stack;
- }
-
- @Override
- public String getMessage() {
- return String.format("%s (Starlark stack: %s)", super.getMessage(), stack);
- }
- }
-
- /**
- * Returns a new EvalException with no location and an error message produced by Java-style string
- * formatting ({@code String.format(format, args)}). Use {@code errorf("%s", msg)} to produce an
- * error message from a non-constant expression {@code msg}.
- */
- @FormatMethod
- @CheckReturnValue // don't forget to throw it
- public static EvalException errorf(String format, Object... args) {
- return new EvalException(String.format(format, args));
- }
-
- // --- methods related to attributes (fields and methods) ---
-
- /**
- * Reports whether the value {@code x} has a field or method of the given name, as if by the
- * Starlark expression {@code hasattr(x, name)}.
- */
- public static boolean hasattr(StarlarkSemantics semantics, Object x, String name)
- throws EvalException {
- return (x instanceof ClassObject && ((ClassObject) x).getValue(name) != null)
- || CallUtils.getAnnotatedMethodNames(semantics, x.getClass()).contains(name);
- }
-
- /**
- * Returns the named field or method of value {@code x}, as if by the Starlark expression {@code
- * getattr(x, name, defaultValue)}. If the value has no such attribute, getattr returns {@code
- * defaultValue} if non-null, or throws an EvalException otherwise.
- */
- public static Object getattr(
- Mutability mu,
- StarlarkSemantics semantics,
- Object x,
- String name,
- @Nullable Object defaultValue)
- throws EvalException, InterruptedException {
- // StarlarkMethod-annotated field or method?
- MethodDescriptor method = CallUtils.getAnnotatedMethod(semantics, x.getClass(), name);
- if (method != null) {
- if (method.isStructField()) {
- return method.callField(x, semantics, mu);
- } else {
- return new BuiltinCallable(x, name, method);
- }
- }
-
- // user-defined field?
- if (x instanceof ClassObject) {
- ClassObject obj = (ClassObject) x;
- Object field = obj.getValue(semantics, name);
- if (field != null) {
- return Starlark.checkValid(field);
- }
-
- if (defaultValue != null) {
- return defaultValue;
- }
-
- String error = obj.getErrorMessageForUnknownField(name);
- if (error != null) {
- throw Starlark.errorf("%s", error);
- }
-
- } else if (defaultValue != null) {
- return defaultValue;
- }
-
- throw Starlark.errorf(
- "'%s' value has no field or method '%s'%s",
- Starlark.type(x), name, SpellChecker.didYouMean(name, dir(mu, semantics, x)));
- }
-
- /**
- * Returns a new sorted list containing the names of the Starlark-accessible fields and methods of
- * the specified value, as if by the Starlark expression {@code dir(x)}.
- */
- public static StarlarkList<String> dir(Mutability mu, StarlarkSemantics semantics, Object x) {
- // Order the fields alphabetically.
- Set<String> fields = new TreeSet<>();
- if (x instanceof ClassObject) {
- fields.addAll(((ClassObject) x).getFieldNames());
- }
- fields.addAll(CallUtils.getAnnotatedMethodNames(semantics, x.getClass()));
- return StarlarkList.copyOf(mu, fields);
- }
-
- // --- methods related to StarlarkMethod-annotated classes ---
-
- /**
- * Returns the value of the named field of Starlark value {@code x}, as defined by a Java method
- * with a {@code StarlarkMethod(structField=true)} annotation.
- *
- * <p>Most callers should use {@link #getattr} instead.
- */
- public static Object getAnnotatedField(StarlarkSemantics semantics, Object x, String name)
- throws EvalException, InterruptedException {
- return CallUtils.getAnnotatedField(semantics, x, name);
- }
-
- /**
- * Returns the names of the fields of Starlark value {@code x}, as defined by Java methods with
- * {@code StarlarkMethod(structField=true)} annotations under the specified semantics.
- *
- * <p>Most callers should use {@link #dir} instead.
- */
- public static ImmutableSet<String> getAnnotatedFieldNames(StarlarkSemantics semantics, Object x) {
- return CallUtils.getAnnotatedFieldNames(semantics, x);
- }
-
- /**
- * Returns a map from annotated methods of the specified class to their corresponding {@link
- * StarlarkMethod} annotations. Elements are ordered by Java method name, which is not necessarily
- * the same as the Starlark attribute name.
- *
- * <p>Most callers should use {@link #dir} and {@link #getattr} instead.
- */
- public static ImmutableMap<Method, StarlarkMethod> getAnnotatedMethods(Class<?> clazz) {
- return CallUtils.getAnnotatedMethods(clazz);
- }
-
- /**
- * Returns the {@code StarlarkMethod(selfCall=true)}-annotated Java method of the specified Java
- * class that is called when Starlark calls an instance of that class like a function. It returns
- * null if no such method exists.
- */
- @Nullable
- public static Method getSelfCallMethod(StarlarkSemantics semantics, Class<?> clazz) {
- return CallUtils.getSelfCallMethod(semantics, clazz);
- }
-
- /** Equivalent to {@code addMethods(env, v, StarlarkSemantics.DEFAULT)}. */
- public static void addMethods(ImmutableMap.Builder<String, Object> env, Object v) {
- addMethods(env, v, StarlarkSemantics.DEFAULT);
- }
-
- /**
- * Adds to the environment {@code env} all {@code StarlarkCallable}-annotated fields and methods
- * of value {@code v}, filtered by the given semantics. The class of {@code v} must have or
- * inherit a {@link StarlarkBuiltin} or {@code StarlarkGlobalLibrary} annotation.
- */
- public static void addMethods(
- ImmutableMap.Builder<String, Object> env, Object v, StarlarkSemantics semantics) {
- Class<?> cls = v.getClass();
- if (!StarlarkInterfaceUtils.hasStarlarkGlobalLibrary(cls)
- && StarlarkInterfaceUtils.getStarlarkBuiltin(cls) == null) {
- throw new IllegalArgumentException(
- cls.getName() + " is annotated with neither @StarlarkGlobalLibrary nor @StarlarkBuiltin");
- }
- for (String name : CallUtils.getAnnotatedMethodNames(semantics, v.getClass())) {
- // We use the 2-arg (desc=null) BuiltinCallable constructor instead of passing
- // the descriptor that CallUtils.getAnnotatedMethod would return,
- // because most calls to addMethods pass StarlarkSemantics.DEFAULT,
- // which is probably incorrect for the call.
- // The effect is that the default semantics determine which methods appear in
- // env, but the thread's semantics determine which method calls succeed.
- env.put(name, new BuiltinCallable(v, name));
- }
- }
-
- /**
- * Adds to the environment {@code env} the value {@code v}, under its annotated name. The class of
- * {@code v} must have or inherit a {@link StarlarkBuiltin} annotation.
- */
- public static void addModule(ImmutableMap.Builder<String, Object> env, Object v) {
- Class<?> cls = v.getClass();
- StarlarkBuiltin annot = StarlarkInterfaceUtils.getStarlarkBuiltin(cls);
- if (annot == null) {
- throw new IllegalArgumentException(cls.getName() + " is not annotated with @StarlarkBuiltin");
- }
- env.put(annot.name(), v);
- }
-
- /**
- * Parses the input as a file, resolves it in the specified module environment, compiles it, and
- * executes it in the specified thread. On success it returns None, unless the file's final
- * statement is an expression, in which case its value is returned.
- *
- * @throws SyntaxError.Exception if there were (static) scanner, parser, or resolver errors.
- * @throws EvalException if there was a (dynamic) evaluation error.
- * @throws InterruptedException if the Java thread was interrupted during evaluation.
- */
- public static Object execFile(
- ParserInput input, FileOptions options, Module module, StarlarkThread thread)
- throws SyntaxError.Exception, EvalException, InterruptedException {
- StarlarkFile file = StarlarkFile.parse(input, options);
- Program prog = Program.compileFile(file, module);
- return execFileProgram(prog, module, thread);
- }
-
- /** Variant of {@link #execFile} that creates a module for the given predeclared environment. */
- // TODO(adonovan): is this needed?
- public static Object execFile(
- ParserInput input,
- FileOptions options,
- Map<String, Object> predeclared,
- StarlarkThread thread)
- throws SyntaxError.Exception, EvalException, InterruptedException {
- Module module = Module.withPredeclared(thread.getSemantics(), predeclared);
- return execFile(input, options, module, thread);
- }
-
- /**
- * Executes a compiled Starlark file (as obtained from {@link Program#compileFile}) in the given
- * StarlarkThread. On success it returns None, unless the file's final statement is an expression,
- * in which case its value is returned.
- *
- * @throws EvalException if there was a (dynamic) evaluation error.
- * @throws InterruptedException if the Java thread was interrupted during evaluation.
- */
- public static Object execFileProgram(Program prog, Module module, StarlarkThread thread)
- throws EvalException, InterruptedException {
- Tuple<Object> defaultValues = Tuple.empty();
- StarlarkFunction toplevel =
- new StarlarkFunction(prog.getResolvedFunction(), defaultValues, module);
- return Starlark.fastcall(thread, toplevel, NOARGS, NOARGS);
- }
-
- private static final Object[] NOARGS = {};
-
- /**
- * Parses the input as an expression, resolves it in the specified module environment, compiles
- * it, evaluates it, and returns its value.
- *
- * @throws SyntaxError.Exception if there were (static) scanner, parser, or resolver errors.
- * @throws EvalException if there was a (dynamic) evaluation error.
- * @throws InterruptedException if the Java thread was interrupted during evaluation.
- */
- public static Object eval(
- ParserInput input, FileOptions options, Module module, StarlarkThread thread)
- throws SyntaxError.Exception, EvalException, InterruptedException {
- StarlarkFunction fn = newExprFunction(input, options, module);
- return Starlark.fastcall(thread, fn, NOARGS, NOARGS);
- }
-
- /** Variant of {@link #eval} that creates a module for the given predeclared environment. */
- // TODO(adonovan): is this needed?
- public static Object eval(
- ParserInput input,
- FileOptions options,
- Map<String, Object> predeclared,
- StarlarkThread thread)
- throws SyntaxError.Exception, EvalException, InterruptedException {
- Module module = Module.withPredeclared(thread.getSemantics(), predeclared);
- return eval(input, options, module, thread);
- }
-
- /**
- * Parses the input as an expression, resolves it in the specified module environment, and returns
- * a callable no-argument Starlark function value that computes and returns the value of the
- * expression.
- *
- * @throws SyntaxError.Exception if there were scanner, parser, or resolver errors.
- */
- public static StarlarkFunction newExprFunction(
- ParserInput input, FileOptions options, Module module) throws SyntaxError.Exception {
- Expression expr = Expression.parse(input, options);
- Program prog = Program.compileExpr(expr, module, options);
- Tuple<Object> defaultValues = Tuple.empty();
- return new StarlarkFunction(prog.getResolvedFunction(), defaultValues, module);
- }
-
- /**
- * Starts the CPU profiler with the specified sampling period, writing a pprof profile to {@code
- * out}. All running Starlark threads are profiled. May be called concurrent with Starlark
- * execution.
- *
- * @throws IllegalStateException exception if the Starlark profiler is already running or if the
- * operating system's profiling resources for this process are already in use.
- */
- public static void startCpuProfile(OutputStream out, Duration period) {
- CpuProfiler.start(out, period);
- }
-
- /**
- * Stops the profiler and waits for the log to be written. Throws an unchecked exception if the
- * profiler was not already started by a prior call to {@link #startCpuProfile}.
- */
- public static void stopCpuProfile() throws IOException {
- CpuProfiler.stop();
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkCallable.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkCallable.java
deleted file mode 100644
index 85723db..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkCallable.java
+++ /dev/null
@@ -1,98 +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.syntax;
-
-import com.google.common.collect.Maps;
-import java.util.LinkedHashMap;
-
-/**
- * The StarlarkCallable interface is implemented by all Starlark values that may be called from
- * Starlark like a function, including built-in functions and methods, Starlark functions, and
- * application-defined objects (such as rules, aspects, and providers in Bazel).
- *
- * <p>It defines two methods: {@code fastcall}, for performance, or {@code call} for convenience. By
- * default, {@code fastcall} delegates to {@code call}, and call throws an exception, so an
- * implementer may override either one.
- */
-public interface StarlarkCallable extends StarlarkValue {
-
- /**
- * Defines the "convenient" implementation of function calling for a callable value.
- *
- * <p>Do not call this function directly. Use the {@link Starlark#call} function to make a call,
- * as it handles necessary book-keeping such as maintenance of the call stack, exception handling,
- * and so on.
- *
- * <p>The default implementation throws an EvalException.
- *
- * <p>See {@link Starlark#fastcall} for basic information about function calls.
- *
- * @param thread the StarlarkThread in which the function is called
- * @param args a tuple of the arguments passed by position
- * @param kwargs a new, mutable dict of the arguments passed by keyword. Iteration order is
- * determined by keyword order in the call expression.
- */
- default Object call(StarlarkThread thread, Tuple<Object> args, Dict<String, Object> kwargs)
- throws EvalException, InterruptedException {
- throw Starlark.errorf("function %s not implemented", getName());
- }
-
- /**
- * Defines the "fast" implementation of function calling for a callable value.
- *
- * <p>Do not call this function directly. Use the {@link Starlark#call} or {@link
- * Starlark#fastcall} function to make a call, as it handles necessary book-keeping such as
- * maintenance of the call stack, exception handling, and so on.
- *
- * <p>The fastcall implementation takes ownership of the two arrays, and may retain them
- * indefinitely or modify them. The caller must not modify or even access the two arrays after
- * making the call.
- *
- * <p>This method defines the low-level or "fast" calling convention. A more convenient interface
- * is provided by the {@link #call} method, which provides a signature analogous to {@code def
- * f(*args, **kwargs)}, or possibly the "self-call" feature of the {@link StarlarkMethod#selfCall}
- * annotation mechanism.
- *
- * <p>The default implementation forwards the call to {@code call}, after rejecting any duplicate
- * named arguments. Other implementations of this method should similarly reject duplicates.
- *
- * <p>See {@link Starlark#fastcall} for basic information about function calls.
- *
- * @param thread the StarlarkThread in which the function is called
- * @param positional a list of positional arguments
- * @param named a list of named arguments, as alternating Strings/Objects. May contain dups.
- */
- default Object fastcall(StarlarkThread thread, Object[] positional, Object[] named)
- throws EvalException, InterruptedException {
- LinkedHashMap<String, Object> kwargs = Maps.newLinkedHashMapWithExpectedSize(named.length >> 1);
- for (int i = 0; i < named.length; i += 2) {
- if (kwargs.put((String) named[i], named[i + 1]) != null) {
- throw Starlark.errorf("%s got multiple values for parameter '%s'", this, named[i]);
- }
- }
- return call(thread, Tuple.of(positional), Dict.wrap(thread.mutability(), kwargs));
- }
-
- /** Returns the form this callable value should take in a stack trace. */
- String getName();
-
- /**
- * Returns the location of the definition of this callable value, or BUILTIN if it was not defined
- * in Starlark code.
- */
- default Location getLocation() {
- return Location.BUILTIN;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkFile.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkFile.java
deleted file mode 100644
index e601938..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkFile.java
+++ /dev/null
@@ -1,186 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.collect.ImmutableList;
-import java.util.Collections;
-import java.util.List;
-import javax.annotation.Nullable;
-
-/**
- * Syntax tree for a Starlark file, such as a Bazel BUILD or .bzl file.
- *
- * <p>Call {@link #parse} to parse a file. Parser errors are recorded in the syntax tree (see {@link
- * #errors}), which may be incomplete.
- */
-public final class StarlarkFile extends Node {
-
- private final ImmutableList<Statement> statements;
- private final FileOptions options;
- private final ImmutableList<Comment> comments;
- final List<SyntaxError> errors; // appended to by Resolver
-
- // set by resolver
- @Nullable private Resolver.Function resolved;
-
- @Override
- public int getStartOffset() {
- return 0;
- }
-
- @Override
- public int getEndOffset() {
- return locs.size();
- }
-
- private StarlarkFile(
- FileLocations locs,
- ImmutableList<Statement> statements,
- FileOptions options,
- ImmutableList<Comment> comments,
- List<SyntaxError> errors) {
- super(locs);
- this.statements = statements;
- this.options = options;
- this.comments = comments;
- this.errors = errors;
- }
-
- // Creates a StarlarkFile from the given effective list of statements,
- // which may include the prelude.
- private static StarlarkFile create(
- FileLocations locs,
- ImmutableList<Statement> statements,
- FileOptions options,
- Parser.ParseResult result) {
- return new StarlarkFile(
- locs, statements, options, ImmutableList.copyOf(result.comments), result.errors);
- }
-
- /** Extract a subtree containing only statements from i (included) to j (excluded). */
- public StarlarkFile subTree(int i, int j) {
- return new StarlarkFile(
- this.locs,
- this.statements.subList(i, j),
- this.options,
- /*comments=*/ ImmutableList.of(),
- errors);
- }
- /**
- * Returns an unmodifiable view of the list of scanner, parser, and (perhaps) resolver errors
- * accumulated in this Starlark file.
- */
- public List<SyntaxError> errors() {
- return Collections.unmodifiableList(errors);
- }
-
- /** Returns errors().isEmpty(). */
- public boolean ok() {
- return errors.isEmpty();
- }
-
- /** Returns an (immutable, ordered) list of statements in this BUILD file. */
- public ImmutableList<Statement> getStatements() {
- return statements;
- }
-
- /** Returns an (immutable, ordered) list of comments in this BUILD file. */
- public ImmutableList<Comment> getComments() {
- return comments;
- }
-
- @Override
- public String toString() {
- return "<StarlarkFile with " + statements.size() + " statements>";
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- void setResolvedFunction(Resolver.Function resolved) {
- this.resolved = resolved;
- }
-
- /**
- * Returns information about the implicit function containing the top-level statements of the
- * file. Set by the resolver.
- */
- @Nullable
- public Resolver.Function getResolvedFunction() {
- return resolved;
- }
-
- /**
- * Parse the specified file, returning its syntax tree with the prelude statements inserted at the
- * front of its statement list.
- */
- public static StarlarkFile parseWithPrelude(
- ParserInput input, List<Statement> prelude, FileOptions options) {
- Parser.ParseResult result = Parser.parseFile(input, options);
-
- ImmutableList.Builder<Statement> stmts = ImmutableList.builder();
- stmts.addAll(prelude);
- stmts.addAll(result.statements);
-
- return create(result.locs, stmts.build(), options, result);
- }
-
- /**
- * Parse a Starlark file.
- *
- * <p>A syntax tree is always returned, even in case of error. Errors are recorded in the tree.
- * Example usage:
- *
- * <pre>
- * StarlarkFile file = StarlarkFile.parse(input, options);
- * if (!file.ok()) {
- * Event.replayEventsOn(handler, file.errors());
- * ...
- * }
- * </pre>
- */
- public static StarlarkFile parse(ParserInput input, FileOptions options) {
- Parser.ParseResult result = Parser.parseFile(input, options);
- return create(result.locs, ImmutableList.copyOf(result.statements), options, result);
- }
-
- /** Parse a Starlark file with default options. */
- public static StarlarkFile parse(ParserInput input) {
- return parse(input, FileOptions.DEFAULT);
- }
-
- /** Returns the options specified when parsing this file. */
- public FileOptions getOptions() {
- return options;
- }
-
- /** Returns the name of this file, as specified to the parser. */
- public String getName() {
- return locs.file();
- }
-
- /** A ParseProfiler records the start and end times of parse operations. */
- public interface ParseProfiler {
- Object start(String filename);
-
- void end(Object span);
- }
-
- /** Installs a global hook that will be notified of parse operations. */
- public static void setParseProfiler(@Nullable ParseProfiler p) {
- Parser.profiler = p;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkFunction.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkFunction.java
deleted file mode 100644
index f2cfe9f..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkFunction.java
+++ /dev/null
@@ -1,363 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableList;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import javax.annotation.Nullable;
-import net.starlark.java.spelling.SpellChecker;
-
-/** A StarlarkFunction is a function value created by a Starlark {@code def} statement. */
-public final class StarlarkFunction implements StarlarkCallable {
-
- private final Resolver.Function rfn;
- private final Module module; // a function closes over its defining module
- private final Tuple<Object> defaultValues;
-
- StarlarkFunction(Resolver.Function rfn, Tuple<Object> defaultValues, Module module) {
- this.rfn = rfn;
- this.module = module;
- this.defaultValues = defaultValues;
- }
-
- boolean isToplevel() {
- return rfn.isToplevel();
- }
-
- // TODO(adonovan): many functions would be simpler if
- // parameterNames excluded the *args and **kwargs parameters,
- // (whose names are immaterial to the callee anyway). Do that.
- // Also, reject getDefaultValue for varargs and kwargs.
-
- /**
- * Returns the default value of the ith parameter ({@code 0 <= i < getParameterNames().size()}),
- * or null if the parameter is required. Residual parameters, if any, are always last, and have no
- * default value.
- */
- @Nullable
- public Object getDefaultValue(int i) {
- if (i < 0 || i >= rfn.getParameters().size()) {
- throw new IndexOutOfBoundsException();
- }
- int nparams =
- rfn.getParameters().size() - (rfn.hasKwargs() ? 1 : 0) - (rfn.hasVarargs() ? 1 : 0);
- int prefix = nparams - defaultValues.size();
- if (i < prefix) {
- return null; // implicit prefix of mandatory parameters
- }
- if (i < nparams) {
- Object v = defaultValues.get(i - prefix);
- return v == MANDATORY ? null : v;
- }
- return null; // *args or *kwargs
- }
-
- /**
- * Returns the names of this function's parameters. The residual {@code *args} and {@code
- * **kwargs} parameters, if any, are always last.
- */
- public ImmutableList<String> getParameterNames() {
- return rfn.getParameterNames();
- }
-
- /**
- * Reports whether this function has a residual positional arguments parameter, {@code def
- * f(*args)}.
- */
- public boolean hasVarargs() {
- return rfn.hasVarargs();
- }
-
- /**
- * Reports whether this function has a residual keyword arguments parameter, {@code def
- * f(**kwargs)}.
- */
- public boolean hasKwargs() {
- return rfn.hasKwargs();
- }
-
- /** Returns the location of the function's defining identifier. */
- @Override
- public Location getLocation() {
- return rfn.getLocation();
- }
-
- /**
- * Returns the name of the function. Implicit functions (those not created by a def statement),
- * may have names such as "<toplevel>" or "<expr>".
- */
- @Override
- public String getName() {
- return rfn.getName();
- }
-
- /** Returns the value denoted by the function's doc string literal, or null if absent. */
- @Nullable
- public String getDocumentation() {
- if (rfn.getBody().isEmpty()) {
- return null;
- }
- Statement first = rfn.getBody().get(0);
- if (!(first instanceof ExpressionStatement)) {
- return null;
- }
- Expression expr = ((ExpressionStatement) first).getExpression();
- if (!(expr instanceof StringLiteral)) {
- return null;
- }
- return ((StringLiteral) expr).getValue();
- }
-
- public Module getModule() {
- return module;
- }
-
- @Override
- public Object fastcall(StarlarkThread thread, Object[] positional, Object[] named)
- throws EvalException, InterruptedException {
- if (thread.mutability().isFrozen()) {
- throw Starlark.errorf("Trying to call in frozen environment");
- }
- if (thread.isRecursiveCall(this)) {
- throw Starlark.errorf("function '%s' called recursively", getName());
- }
-
- // Compute the effective parameter values
- // and update the corresponding variables.
- Object[] arguments = processArgs(thread.mutability(), positional, named);
-
- StarlarkThread.Frame fr = thread.frame(0);
- ImmutableList<String> names = rfn.getParameterNames();
- for (int i = 0; i < names.size(); ++i) {
- fr.locals.put(names.get(i), arguments[i]);
- }
-
- return Eval.execFunctionBody(fr, rfn.getBody());
- }
-
- @Override
- public void repr(Printer printer) {
- // TODO(adonovan): use the file name instead. But that's a breaking Bazel change.
- Object clientData = module.getClientData();
-
- printer.append("<function " + getName());
- if (clientData != null) {
- printer.append(" from " + clientData);
- }
- printer.append(">");
- }
-
- // Checks the positional and named arguments to ensure they match the signature. It returns a new
- // array of effective parameter values corresponding to the parameters of the signature. Newly
- // allocated values (e.g. a **kwargs dict) use the Mutability mu.
- //
- // If the function has optional parameters, their default values are supplied by getDefaultValue.
- private Object[] processArgs(Mutability mu, Object[] positional, Object[] named)
- throws EvalException {
-
- // This is the general schema of a function:
- //
- // def f(p1, p2=dp2, p3=dp3, *args, k1, k2=dk2, k3, **kwargs)
- //
- // The p parameters are non-kwonly, and may be specified positionally.
- // The k parameters are kwonly, and must be specified by name.
- // The defaults tuple is (dp2, dp3, MANDATORY, dk2, MANDATORY).
- // The missing prefix (p1) is assumed to be all MANDATORY.
- //
- // Arguments are processed as follows:
- // - positional arguments are bound to a prefix of [p1, p2, p3].
- // - surplus positional arguments are bound to *args.
- // - keyword arguments are bound to any of {p1, p2, p3, k1, k2, k3};
- // duplicate bindings are rejected.
- // - surplus keyword arguments are bound to **kwargs.
- // - defaults are bound to each parameter from p2 to k3 if no value was set.
- // default values come from the tuple above.
- // It is an error if the defaults tuple entry for an unset parameter is MANDATORY.
-
- ImmutableList<String> names = rfn.getParameterNames();
-
- // TODO(adonovan): when we have flat frames, pass in the locals array here instead of
- // allocating.
- Object[] arguments = new Object[names.size()];
-
- // nparams is the number of ordinary parameters.
- int nparams =
- rfn.getParameters().size() - (rfn.hasKwargs() ? 1 : 0) - (rfn.hasVarargs() ? 1 : 0);
-
- // numPositionalParams is the number of non-kwonly parameters.
- int numPositionalParams = nparams - rfn.numKeywordOnlyParams();
-
- // Too many positional args?
- int n = positional.length;
- if (n > numPositionalParams) {
- if (!rfn.hasVarargs()) {
- if (numPositionalParams > 0) {
- throw Starlark.errorf(
- "%s() accepts no more than %d positional argument%s but got %d",
- getName(), numPositionalParams, plural(numPositionalParams), n);
- } else {
- throw Starlark.errorf(
- "%s() does not accept positional arguments, but got %d", getName(), n);
- }
- }
- n = numPositionalParams;
- }
- // Inv: n is number of positional arguments that are not surplus.
-
- // Bind positional arguments to non-kwonly parameters.
- for (int i = 0; i < n; i++) {
- arguments[i] = positional[i];
- }
-
- // Bind surplus positional arguments to *args parameter.
- if (rfn.hasVarargs()) {
- arguments[nparams] = Tuple.wrap(Arrays.copyOfRange(positional, n, positional.length));
- }
-
- List<String> unexpected = null;
-
- // named arguments
- Dict<String, Object> kwargs = null;
- if (rfn.hasKwargs()) {
- kwargs = Dict.of(mu);
- arguments[rfn.getParameters().size() - 1] = kwargs;
- }
- for (int i = 0; i < named.length; i += 2) {
- String keyword = (String) named[i]; // safe
- Object value = named[i + 1];
- int pos = names.indexOf(keyword); // the list should be short, so linear scan is OK.
- if (0 <= pos && pos < nparams) {
- // keyword is the name of a named parameter
- if (arguments[pos] != null) {
- throw Starlark.errorf("%s() got multiple values for parameter '%s'", getName(), keyword);
- }
- arguments[pos] = value;
-
- } else if (kwargs != null) {
- // residual keyword argument
- int sz = kwargs.size();
- kwargs.put(keyword, value, null);
- if (kwargs.size() == sz) {
- throw Starlark.errorf(
- "%s() got multiple values for keyword argument '%s'", getName(), keyword);
- }
-
- } else {
- // unexpected keyword argument
- if (unexpected == null) {
- unexpected = new ArrayList<>();
- }
- unexpected.add(keyword);
- }
- }
- if (unexpected != null) {
- // Give a spelling hint if there is exactly one.
- // More than that suggests the wrong function was called.
- throw Starlark.errorf(
- "%s() got unexpected keyword argument%s: %s%s",
- getName(),
- plural(unexpected.size()),
- Joiner.on(", ").join(unexpected),
- unexpected.size() == 1
- ? SpellChecker.didYouMean(unexpected.get(0), names.subList(0, nparams))
- : "");
- }
-
- // Apply defaults and report errors for missing required arguments.
- int m = nparams - defaultValues.size(); // first default
- List<String> missingPositional = null;
- List<String> missingKwonly = null;
- for (int i = n; i < nparams; i++) {
- // provided?
- if (arguments[i] != null) {
- continue;
- }
-
- // optional?
- if (i >= m) {
- Object dflt = defaultValues.get(i - m);
- if (dflt != MANDATORY) {
- arguments[i] = dflt;
- continue;
- }
- }
-
- // missing
- if (i < numPositionalParams) {
- if (missingPositional == null) {
- missingPositional = new ArrayList<>();
- }
- missingPositional.add(names.get(i));
- } else {
- if (missingKwonly == null) {
- missingKwonly = new ArrayList<>();
- }
- missingKwonly.add(names.get(i));
- }
- }
- if (missingPositional != null) {
- throw Starlark.errorf(
- "%s() missing %d required positional argument%s: %s",
- getName(),
- missingPositional.size(),
- plural(missingPositional.size()),
- Joiner.on(", ").join(missingPositional));
- }
- if (missingKwonly != null) {
- throw Starlark.errorf(
- "%s() missing %d required keyword-only argument%s: %s",
- getName(),
- missingKwonly.size(),
- plural(missingKwonly.size()),
- Joiner.on(", ").join(missingKwonly));
- }
-
- return arguments;
- }
-
- private static String plural(int n) {
- return n == 1 ? "" : "s";
- }
-
- @Override
- public String toString() {
- StringBuilder out = new StringBuilder();
- out.append(getName());
- out.append('(');
- String sep = "";
- // TODO(adonovan): include *, ** tokens.
- for (String param : getParameterNames()) {
- out.append(sep).append(param);
- sep = ", ";
- }
- out.append(')');
- return out.toString();
- }
-
- @Override
- public boolean isImmutable() {
- // Only correct because closures are not yet supported.
- return true;
- }
-
- // The MANDATORY sentinel indicates a slot in the defaultValues
- // tuple corresponding to a required parameter. It is not visible
- // to Java or Starlark code.
- static final Object MANDATORY = new Mandatory();
-
- private static class Mandatory implements StarlarkValue {}
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkIndexable.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkIndexable.java
deleted file mode 100644
index 07717cd..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkIndexable.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2015 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.syntax;
-
-/**
- * A Starlark value that support indexed access ({@code object[key]}) and membership tests ({@code
- * key in object}).
- */
-public interface StarlarkIndexable extends StarlarkValue {
-
- /** Returns the value associated with the given key. */
- Object getIndex(StarlarkSemantics semantics, Object key) throws EvalException;
-
- /**
- * Returns whether the key is in the object. New types should try to follow the semantics of dict:
- * 'x in y' should return True when 'y[x]' is valid; otherwise, it should either be False or a
- * failure. Note however that the builtin types string, list, and tuple do not follow this
- * convention.
- */
- boolean containsKey(StarlarkSemantics semantics, Object key) throws EvalException;
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkIterable.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkIterable.java
deleted file mode 100644
index 1db623f..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkIterable.java
+++ /dev/null
@@ -1,24 +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.syntax;
-
-/**
- * A StarlarkIterable value may be iterated by Starlark language constructs such as {@code for}
- * loops, list and dict comprehensions, and {@code f(*args)}.
- *
- * <p>Functionally this interface is equivalent to {@code java.lang.Iterable}, but it additionally
- * affirms that the iterability of a Java class should be exposed to Starlark programs.
- */
-public interface StarlarkIterable<T> extends StarlarkValue, Iterable<T> {}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkList.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkList.java
deleted file mode 100644
index a438d06..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkList.java
+++ /dev/null
@@ -1,476 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-import java.util.AbstractList;
-import java.util.Arrays;
-import java.util.Collection;
-import javax.annotation.Nullable;
-import net.starlark.java.annot.Param;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkDocumentationCategory;
-import net.starlark.java.annot.StarlarkMethod;
-
-/** A StarlarkList is a mutable finite sequence of values. */
-@StarlarkBuiltin(
- name = "list",
- category = StarlarkDocumentationCategory.BUILTIN,
- doc =
- "The built-in list type. Example list expressions:<br>"
- + "<pre class=language-python>x = [1, 2, 3]</pre>"
- + "Accessing elements is possible using indexing (starts from <code>0</code>):<br>"
- + "<pre class=language-python>e = x[1] # e == 2</pre>"
- + "Lists support the <code>+</code> operator to concatenate two lists. Example:<br>"
- + "<pre class=language-python>x = [1, 2] + [3, 4] # x == [1, 2, 3, 4]\n"
- + "x = [\"a\", \"b\"]\n"
- + "x += [\"c\"] # x == [\"a\", \"b\", \"c\"]</pre>"
- + "Similar to strings, lists support slice operations:"
- + "<pre class=language-python>['a', 'b', 'c', 'd'][1:3] # ['b', 'c']\n"
- + "['a', 'b', 'c', 'd'][::2] # ['a', 'c']\n"
- + "['a', 'b', 'c', 'd'][3:0:-1] # ['d', 'c', 'b']</pre>"
- + "Lists are mutable, as in Python.")
-public final class StarlarkList<E> extends AbstractList<E>
- implements Sequence<E>, StarlarkValue, Mutability.Freezable {
-
- // The implementation strategy is similar to ArrayList,
- // but without the extra indirection of using ArrayList.
-
- private int size;
- private int iteratorCount; // number of active iterators (unused once frozen)
- private Object[] elems = EMPTY_ARRAY; // elems[i] == null iff i >= size
-
- /** Final except for {@link #unsafeShallowFreeze}; must not be modified any other way. */
- private Mutability mutability;
-
- private static final Object[] EMPTY_ARRAY = {};
-
- private StarlarkList(@Nullable Mutability mutability, Object[] elems) {
- this.elems = elems;
- this.size = elems.length;
- this.mutability = mutability == null ? Mutability.IMMUTABLE : mutability;
- }
-
- /**
- * Takes ownership of the supplied array and returns a new StarlarkList instance that initially
- * wraps the array. The caller must not subsequently modify the array, but the StarlarkList
- * instance may do so.
- */
- static <T> StarlarkList<T> wrap(@Nullable Mutability mutability, Object[] elems) {
- return new StarlarkList<>(mutability, elems);
- }
-
- @Override
- public boolean isImmutable() {
- return mutability().isFrozen();
- }
-
- @Override
- public boolean isHashable() {
- return false; // even a frozen list is unhashable in Starlark
- }
-
- @Override
- public boolean updateIteratorCount(int delta) {
- if (mutability().isFrozen()) {
- return false;
- }
- if (delta > 0) {
- iteratorCount++;
- } else if (delta < 0) {
- iteratorCount--;
- }
- return iteratorCount > 0;
- }
-
- /**
- * A shared instance for the empty list with immutable mutability.
- *
- * <p>Other immutable empty list objects can exist, e.g. lists that were once mutable but whose
- * environments were then frozen. This instance is for empty lists that were always frozen from
- * the beginning.
- */
- private static final StarlarkList<?> EMPTY = wrap(Mutability.IMMUTABLE, EMPTY_ARRAY);
-
- /** Returns an empty frozen list of the desired type. */
- @SuppressWarnings("unchecked")
- public static <T> StarlarkList<T> empty() {
- return (StarlarkList<T>) EMPTY;
- }
-
- /** Returns a new, empty list with the specified Mutability. */
- public static <T> StarlarkList<T> newList(Mutability mutability) {
- return wrap(mutability, EMPTY_ARRAY);
- }
-
- /**
- * Returns a {@code StarlarkList} whose items are given by an iterable and which has the given
- * {@link Mutability}. If {@code mutability} is null, the list is immutable.
- */
- public static <T> StarlarkList<T> copyOf(
- @Nullable Mutability mutability, Iterable<? extends T> elems) {
- return wrap(mutability, Iterables.toArray(elems, Object.class));
- }
-
- /**
- * Returns an immutable list with the given elements. Equivalent to {@code copyOf(null, elems)}.
- */
- public static <T> StarlarkList<T> immutableCopyOf(Iterable<? extends T> elems) {
- return copyOf(null, elems);
- }
-
- /**
- * Returns a {@code StarlarkList} with the given items and the {@link Mutability}. If {@code
- * mutability} is null, the list is immutable.
- */
- public static <T> StarlarkList<T> of(@Nullable Mutability mutability, T... elems) {
- return wrap(mutability, Arrays.copyOf(elems, elems.length));
- }
-
- @Override
- public Mutability mutability() {
- return mutability;
- }
-
- @Override
- public void unsafeShallowFreeze() {
- Mutability.Freezable.checkUnsafeShallowFreezePrecondition(this);
- this.mutability = Mutability.IMMUTABLE;
- }
-
- @Override
- public ImmutableList<E> getImmutableList() {
- // Optimization: a frozen array needn't be copied.
- // If the entire array is full, we can wrap it directly.
- if (elems.length == size && mutability().isFrozen()) {
- return Tuple.wrapImmutable(elems);
- }
-
- return ImmutableList.copyOf(this);
- }
-
- /**
- * Returns a new {@code StarlarkList} that is the concatenation of two {@code StarlarkList}s. The
- * new list will have the given {@link Mutability}.
- */
- public static <T> StarlarkList<T> concat(
- StarlarkList<? extends T> x, StarlarkList<? extends T> y, Mutability mutability) {
- Object[] res = new Object[x.size + y.size];
- System.arraycopy(x.elems, 0, res, 0, x.size);
- System.arraycopy(y.elems, 0, res, x.size, y.size);
- return wrap(mutability, res);
- }
-
- @Override
- public boolean equals(Object that) {
- // This slightly violates the java.util.List equivalence contract
- // because it considers the class, not just the elements.
- return this == that || (that instanceof StarlarkList && sameElems(this, ((StarlarkList) that)));
- }
-
- private static boolean sameElems(StarlarkList<?> x, StarlarkList<?> y) {
- if (x.size != y.size) {
- return false;
- }
- for (int i = 0; i < x.size; i++) {
- if (!x.elems[i].equals(y.elems[i])) {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public int hashCode() {
- // Roll our own hash code to avoid iterating through null part of elems.
- int result = 1;
- for (int i = 0; i < size; i++) {
- result = 31 * result + elems[i].hashCode();
- }
- return 6047 + 4673 * result;
- }
-
- @Override
- public void repr(Printer printer) {
- printer.printList(this, "[", ", ", "]");
- }
-
- // TODO(adonovan): StarlarkValue has 3 String methods yet still we need this fourth. Why?
- @Override
- public String toString() {
- return Starlark.repr(this);
- }
-
- /** Returns a new StarlarkList containing n consecutive repeats of this tuple. */
- public StarlarkList<E> repeat(int n, Mutability mutability) {
- if (n <= 0) {
- return wrap(mutability, EMPTY_ARRAY);
- }
-
- // TODO(adonovan): reject unreasonably large n.
- Object[] res = new Object[n * size];
- for (int i = 0; i < n; i++) {
- System.arraycopy(elems, 0, res, i * size, size);
- }
- return wrap(mutability, res);
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public E get(int i) {
- return (E) elems[i]; // unchecked
- }
-
- @Override
- public int size() {
- return size;
- }
-
- @Override
- public StarlarkList<E> getSlice(Mutability mu, int start, int stop, int step) {
- RangeList indices = new RangeList(start, stop, step);
- int n = indices.size();
- Object[] res = new Object[n];
- if (step == 1) { // common case
- System.arraycopy(elems, indices.at(0), res, 0, n);
- } else {
- for (int i = 0; i < n; ++i) {
- res[i] = elems[indices.at(i)];
- }
- }
- return wrap(mu, res);
- }
-
- // Postcondition: elems.length >= mincap.
- private void grow(int mincap) {
- int oldcap = elems.length;
- if (oldcap < mincap) {
- int newcap = oldcap + (oldcap >> 1); // grow by at least 50%
- if (newcap < mincap) {
- newcap = mincap;
- }
- elems = Arrays.copyOf(elems, newcap);
- }
- }
-
- /**
- * Appends an element to the end of the list, after validating that mutation is allowed.
- *
- * @param element the element to add
- * @param unused a nonce value to select this overload, not List.add
- */
- public void add(E element, Location unused) throws EvalException {
- Starlark.checkMutable(this);
- grow(size + 1);
- elems[size++] = element;
- }
-
- /**
- * Inserts an element at a given position to the list.
- *
- * @param index the new element's index
- * @param element the element to add
- * @param unused a nonce value to select this overload, not List.add
- */
- public void add(int index, E element, Location unused) throws EvalException {
- Starlark.checkMutable(this);
- grow(size + 1);
- System.arraycopy(elems, index, elems, index + 1, size - index);
- elems[index] = element;
- size++;
- }
-
- /**
- * Appends all the elements to the end of the list.
- *
- * @param elements the elements to add
- * @param unused a nonce value to select this overload, not List.addAll
- */
- public void addAll(Iterable<? extends E> elements, Location unused) throws EvalException {
- Starlark.checkMutable(this);
- if (elements instanceof StarlarkList) {
- StarlarkList<?> that = (StarlarkList) elements;
- // (safe even if this == that)
- grow(this.size + that.size);
- System.arraycopy(that.elems, 0, this.elems, this.size, that.size);
- this.size += that.size;
- } else if (elements instanceof Collection) {
- // collection of known size
- Collection<?> that = (Collection) elements;
- grow(size + that.size());
- for (Object x : that) {
- elems[size++] = x;
- }
- } else {
- // iterable
- for (Object x : elements) {
- grow(size + 1);
- elems[size++] = x;
- }
- }
- }
-
- /**
- * Removes the element at a given index. The index must already have been validated to be in
- * range.
- *
- * @param index the index of the element to remove
- * @param unused a nonce value to select this overload, not List.remove
- */
- public void remove(int index, Location unused) throws EvalException {
- Starlark.checkMutable(this);
- int n = size - index - 1;
- if (n > 0) {
- System.arraycopy(elems, index + 1, elems, index, n);
- }
- elems[--size] = null; // aid GC
- }
-
- @StarlarkMethod(
- name = "remove",
- doc =
- "Removes the first item from the list whose value is x. "
- + "It is an error if there is no such item.",
- parameters = {@Param(name = "x", type = Object.class, doc = "The object to remove.")})
- public NoneType removeObject(Object x) throws EvalException {
- for (int i = 0; i < size; i++) {
- if (elems[i].equals(x)) {
- remove(i, (Location) null);
- return Starlark.NONE;
- }
- }
- throw Starlark.errorf("item %s not found in list", Starlark.repr(x));
- }
-
- /**
- * Sets the position at the given index to contain the given value. The index must already have
- * been validated to be in range.
- *
- * @param index the position to change
- * @param value the new value
- * @param unused a nonce value to select this overload, not List.set
- */
- public void set(int index, E value, Location unused) throws EvalException {
- Starlark.checkMutable(this);
- elems[index] = value;
- }
-
- @StarlarkMethod(
- name = "append",
- doc = "Adds an item to the end of the list.",
- parameters = {
- @Param(name = "item", type = Object.class, doc = "Item to add at the end.", noneable = true)
- })
- @SuppressWarnings("unchecked")
- public NoneType append(Object item) throws EvalException {
- add((E) item, (Location) null); // unchecked
- return Starlark.NONE;
- }
-
- @StarlarkMethod(name = "clear", doc = "Removes all the elements of the list.")
- public NoneType clearMethod() throws EvalException {
- Starlark.checkMutable(this);
- for (int i = 0; i < size; i++) {
- elems[i] = null; // aid GC
- }
- size = 0;
- return Starlark.NONE;
- }
-
- @StarlarkMethod(
- name = "insert",
- doc = "Inserts an item at a given position.",
- parameters = {
- @Param(name = "index", type = Integer.class, doc = "The index of the given position."),
- @Param(name = "item", type = Object.class, doc = "The item.", noneable = true)
- })
- @SuppressWarnings("unchecked")
- public NoneType insert(Integer index, Object item) throws EvalException {
- add(EvalUtils.toIndex(index, size), (E) item, (Location) null); // unchecked
- return Starlark.NONE;
- }
-
- @StarlarkMethod(
- name = "extend",
- doc = "Adds all items to the end of the list.",
- parameters = {@Param(name = "items", type = Object.class, doc = "Items to add at the end.")})
- public NoneType extend(Object items) throws EvalException {
- @SuppressWarnings("unchecked")
- Iterable<? extends E> src = (Iterable<? extends E>) Starlark.toIterable(items);
- addAll(src, (Location) null);
- return Starlark.NONE;
- }
-
- @StarlarkMethod(
- name = "index",
- doc =
- "Returns the index in the list of the first item whose value is x. "
- + "It is an error if there is no such item.",
- parameters = {
- @Param(name = "x", type = Object.class, doc = "The object to search."),
- @Param(
- name = "start",
- type = Integer.class,
- defaultValue = "None",
- noneable = true, // TODO(adonovan): this is wrong
- named = true,
- doc = "The start index of the list portion to inspect."),
- @Param(
- name = "end",
- type = Integer.class,
- defaultValue = "None",
- noneable = true, // TODO(adonovan): this is wrong
- named = true,
- doc = "The end index of the list portion to inspect.")
- })
- public Integer index(Object x, Object start, Object end) throws EvalException {
- int i = start == Starlark.NONE ? 0 : EvalUtils.toIndex((Integer) start, size);
- int j = end == Starlark.NONE ? size : EvalUtils.toIndex((Integer) end, size);
- for (; i < j; i++) {
- if (elems[i].equals(x)) {
- return i;
- }
- }
- throw Starlark.errorf("item %s not found in list", Starlark.repr(x));
- }
-
- @StarlarkMethod(
- name = "pop",
- doc =
- "Removes the item at the given position in the list, and returns it. "
- + "If no <code>index</code> is specified, "
- + "it removes and returns the last item in the list.",
- parameters = {
- @Param(
- name = "i",
- type = Integer.class,
- noneable = true, // TODO(adonovan): this is wrong
- defaultValue = "-1",
- doc = "The index of the item.")
- })
- public Object pop(Object i) throws EvalException {
- int arg = i == Starlark.NONE ? -1 : (Integer) i;
- int index = EvalUtils.getSequenceIndex(arg, size);
- Object result = elems[index];
- remove(index, (Location) null);
- return result;
- }
-
- @Override
- public Object[] toArray() {
- return size != 0 ? Arrays.copyOf(elems, size) : EMPTY_ARRAY;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
deleted file mode 100644
index 04b4937..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
+++ /dev/null
@@ -1,214 +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.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableSortedMap;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A StarlarkSemantics is an immutable set of optional name/value pairs that affect the dynamic
- * behavior of Starlark operators and built-in functions, both core and application-defined.
- *
- * <p>For extensibility, a StarlarkSemantics only records a name/value pair when the value differs
- * from the default value appropriate to that name. Values of most types are accessed using a {@link
- * Key}, which defines the name, type, and default value for an entry. Boolean values are accessed
- * using a string key; the string must have the prefix "+" or "-", indicating the default value: +
- * for true, - for false. The reason for the special treatment of boolean entries is that they may
- * enable or disable methods and parameters in the StarlarkMethod annotation system, and it is not
- * possible to refer to a Key from a Java annotation, only a string.
- *
- * <p>It is the client's responsibility to ensure that a StarlarkSemantics does not encounter
- * multiple Keys of the same name but different value types.
- *
- * <p>For Bazel's semantics options, see {@link packages.semantics.BuildLanguageOptions}.
- *
- * <p>For options that affect the static behavior of the Starlark frontend (lexer, parser,
- * validator, compiler), see {@link FileOptions}.
- */
-public final class StarlarkSemantics {
-
- /** Returns the empty semantics, in which every option has its default value. */
- public static final StarlarkSemantics DEFAULT = new StarlarkSemantics(ImmutableSortedMap.of());
-
- // A map entry must be accessed by Key iff its name has no [+-] prefix.
- // Key<Boolean> is permitted too.
- // We use ImmutableSortedMap for the benefit of equals/hashCode/toString.
- private final ImmutableSortedMap<String, Object> map;
- private final int hashCode;
-
- private StarlarkSemantics(ImmutableSortedMap<String, Object> map) {
- this.map = map;
- this.hashCode = map.hashCode();
- }
-
- /** Returns the value of a boolean option, which must have a [+-] prefix. */
- public boolean getBool(String name) {
- char prefix = name.charAt(0);
- Preconditions.checkArgument(prefix == '+' || prefix == '-');
- boolean defaultValue = prefix == '+';
- Boolean v = (Boolean) map.get(name); // prefix => cast cannot fail
- return v != null ? v : defaultValue;
- }
-
- /** Returns the value of the option denoted by {@code key}. */
- public <T> T get(Key<T> key) {
- @SuppressWarnings("unchecked") // safe, if Key.names are unique
- T v = (T) map.get(key.name);
- return v != null ? v : key.defaultValue;
- }
-
- /** A Key identifies an option, providing its name, type, and default value. */
- public static class Key<T> {
- public final String name;
- public final T defaultValue;
-
- /**
- * Constructs a key. The name must not start with [+-]. The value must not be subsequently
- * modified.
- */
- public Key(String name, T defaultValue) {
- char prefix = name.charAt(0);
- Preconditions.checkArgument(prefix != '-' && prefix != '+');
- this.name = name;
- this.defaultValue = Preconditions.checkNotNull(defaultValue);
- }
-
- @Override
- public String toString() {
- return this.name;
- }
- }
-
- /**
- * Returns a new builder that initially holds the same key/value pairs as this StarlarkSemantics.
- */
- public Builder toBuilder() {
- return new Builder(new HashMap<>(map));
- }
-
- /** Returns a new empty builder. */
- public static Builder builder() {
- return new Builder(new HashMap<>());
- }
-
- /** A Builder is a mutable container used to construct an immutable StarlarkSemantics. */
- public static final class Builder {
- private final HashMap<String, Object> map;
-
- private Builder(HashMap<String, Object> map) {
- this.map = map;
- }
-
- /** Sets the value for the specified key. */
- public <T> Builder set(Key<T> key, T value) {
- if (!value.equals(key.defaultValue)) {
- map.put(key.name, value);
- } else {
- map.remove(key.name);
- }
- return this;
- }
-
- /** Sets the value for the boolean key, which must have a [+-] prefix. */
- public Builder setBool(String name, boolean value) {
- char prefix = name.charAt(0);
- Preconditions.checkArgument(prefix == '+' || prefix == '-');
- boolean defaultValue = prefix == '+';
- if (value != defaultValue) {
- map.put(name, value);
- } else {
- map.remove(name);
- }
- return this;
- }
-
- /** Returns an immutable StarlarkSemantics. */
- public StarlarkSemantics build() {
- return new StarlarkSemantics(ImmutableSortedMap.copyOf(map));
- }
- }
-
- /**
- * Returns true if a feature attached to the given toggling flags should be enabled.
- *
- * <ul>
- * <li>If both parameters are empty, this indicates the feature is not controlled by flags, and
- * should thus be enabled.
- * <li>If the {@code enablingFlag} parameter is non-empty, this returns true if and only if that
- * flag is true. (This represents a feature that is only on if a given flag is *on*).
- * <li>If the {@code disablingFlag} parameter is non-empty, this returns true if and only if
- * that flag is false. (This represents a feature that is only on if a given flag is *off*).
- * <li>It is illegal to pass both parameters as non-empty.
- * </ul>
- */
- boolean isFeatureEnabledBasedOnTogglingFlags(String enablingFlag, String disablingFlag) {
- Preconditions.checkArgument(
- enablingFlag.isEmpty() || disablingFlag.isEmpty(),
- "at least one of 'enablingFlag' or 'disablingFlag' must be empty");
- if (!enablingFlag.isEmpty()) {
- return this.getBool(enablingFlag);
- } else if (!disablingFlag.isEmpty()) {
- return !this.getBool(disablingFlag);
- } else {
- return true;
- }
- }
-
- @Override
- public int hashCode() {
- return hashCode;
- }
-
- @Override
- public boolean equals(Object that) {
- return this == that
- || (that instanceof StarlarkSemantics && this.map.equals(((StarlarkSemantics) that).map));
- }
-
- /**
- * Returns a representation of this StarlarkSemantics' non-default key/value pairs in key order.
- */
- @Override
- public String toString() {
- // Print "StarlarkSemantics{k=v, ...}", without +/- prefixes.
- StringBuilder buf = new StringBuilder();
- buf.append("StarlarkSemantics{");
- String sep = "";
- for (Map.Entry<String, Object> e : map.entrySet()) {
- String key = e.getKey();
- buf.append(sep);
- sep = ", ";
- if (key.charAt(0) == '+' || key.charAt(0) == '-') {
- buf.append(key, 1, key.length());
- } else {
- buf.append(key);
- }
- buf.append('=').append(e.getValue());
- }
- return buf.append('}').toString();
- }
-
- // -- semantics options affecting the Starlark interpreter itself --
-
- /** Ignore negative n in string.replace(count=n), and treat n=None as an error. */
- public static final String INCOMPATIBLE_STRING_REPLACE_COUNT =
- "-incompatible_string_replace_count";
-
- /** Change the behavior of 'print' statements. Used in tests to verify flag propagation. */
- public static final String PRINT_TEST_MARKER = "-print_test_marker";
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkThread.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkThread.java
deleted file mode 100644
index f6cc8b3..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkThread.java
+++ /dev/null
@@ -1,473 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.Immutable;
-
-/**
- * An StarlarkThread represents a Starlark thread.
- *
- * <p>It holds the stack of active Starlark and built-in function calls. In addition, it may hold
- * per-thread application state (see {@link #setThreadLocal}) that passes through Starlark functions
- * but does not directly affect them, such as information about the BUILD file being loaded.
- *
- * <p>Every {@code StarlarkThread} has a {@link Mutability} field, and must be used within a
- * function that creates and closes this {@link Mutability} with the try-with-resource pattern. This
- * {@link Mutability} is also used when initializing mutable objects within that {@code
- * StarlarkThread}. When the {@code Mutability} is closed at the end of the computation, it freezes
- * the {@code StarlarkThread} along with all of those objects. This pattern enforces the discipline
- * that there should be no dangling mutable {@code StarlarkThread}, or concurrency between
- * interacting {@code StarlarkThread}s. It is a Starlark-level error to attempt to mutate a frozen
- * {@code StarlarkThread} or its objects, but it is a Java-level error to attempt to mutate an
- * unfrozen {@code StarlarkThread} or its objects from within a different {@code StarlarkThread}.
- */
-public final class StarlarkThread {
-
- /** The mutability of values created by this thread. */
- private final Mutability mutability;
-
- // profiler state
- //
- // The profiler field (and savedThread) are set when we first observe during a
- // push (function call entry) that the profiler is active. They are unset
- // not in the corresponding pop, but when the last frame is popped, because
- // the profiler session might start in the middle of a call and/or run beyond
- // the lifetime of this thread.
- final AtomicInteger cpuTicks = new AtomicInteger();
- @Nullable private CpuProfiler profiler;
- StarlarkThread savedThread; // saved StarlarkThread, when profiling reentrant evaluation
-
- private final Map<Class<?>, Object> threadLocals = new HashMap<>();
-
- private boolean interruptible = true;
-
- long steps; // count of logical computation steps executed so far
- long stepLimit = Long.MAX_VALUE; // limit on logical computation steps
-
- /**
- * Returns the number of Starlark computation steps executed by this thread according to a
- * small-step semantics. (Today, that means exec, eval, and assign operations executed by the
- * tree-walking evaluator, but in future will mean byte code instructions; the two are not
- * commensurable.)
- */
- public long getExecutedSteps() {
- return steps;
- }
-
- /**
- * Sets the maximum number of Starlark computation steps that may be executed by this thread (see
- * {@link #getExecutedSteps}). When the step counter reaches or exceeds this value, execution
- * fails with an EvalException.
- */
- public void setMaxExecutionSteps(long steps) {
- this.stepLimit = steps;
- }
-
- /**
- * Disables polling of the {@link java.lang.Thread#interrupted} flag during Starlark evaluation.
- */
- // TODO(adonovan): expose a public API for this if we can establish a stronger semantics. (There
- // are other ways besides polling for evaluation to be interrupted, such as calling certain
- // built-in functions.)
- void ignoreThreadInterrupts() {
- interruptible = false;
- }
-
- void checkInterrupt() throws InterruptedException {
- if (interruptible && Thread.interrupted()) {
- throw new InterruptedException();
- }
- }
-
- /**
- * setThreadLocal saves {@code value} as a thread-local variable of this Starlark thread, keyed by
- * {@code key}, so that it can later be retrieved by {@code getThreadLocal(key)}.
- */
- public <T> void setThreadLocal(Class<T> key, T value) {
- threadLocals.put(key, value);
- }
-
- /**
- * getThreadLocal returns the value {@code v} supplied to the most recent {@code
- * setThreadLocal(key, v)} call, or null if there was no prior call.
- */
- public <T> T getThreadLocal(Class<T> key) {
- Object v = threadLocals.get(key);
- return v == null ? null : key.cast(v);
- }
-
- /** A Frame records information about an active function call. */
- static final class Frame implements Debug.Frame {
- final StarlarkThread thread;
- final StarlarkCallable fn; // the called function
-
- @Nullable
- final Debug.Debugger dbg = Debug.debugger.get(); // the debugger, if active for this frame
-
- int compcount = 0; // number of enclosing comprehensions
-
- Object result = Starlark.NONE; // the operand of a Starlark return statement
-
- // Current PC location. Initially fn.getLocation(); for Starlark functions,
- // it is updated at key points when it may be observed: calls, breakpoints, errors.
- private Location loc;
-
- // Indicates that setErrorLocation has been called already and the error
- // location (loc) should not be overrwritten.
- private boolean errorLocationSet;
-
- // The locals of this frame, if fn is a StarlarkFunction, otherwise empty.
- Map<String, Object> locals;
-
- @Nullable private Object profileSpan; // current span of walltime call profiler
-
- private Frame(StarlarkThread thread, StarlarkCallable fn) {
- this.thread = thread;
- this.fn = fn;
- }
-
- // Updates the PC location in this frame.
- void setLocation(Location loc) {
- this.loc = loc;
- }
-
- // Sets location only the first time it is called,
- // to ensure that the location of the innermost expression
- // is used for errors.
- // (Once we switch to a bytecode interpreter, we can afford
- // to update fr.pc before each fallible operation, but until then
- // we must materialize Locations only after the fact of failure.)
- // Sets errorLocationSet.
- void setErrorLocation(Location loc) {
- if (!errorLocationSet) {
- errorLocationSet = true;
- setLocation(loc);
- }
- }
-
- @Override
- public StarlarkCallable getFunction() {
- return fn;
- }
-
- @Override
- public Location getLocation() {
- return loc;
- }
-
- @Override
- public ImmutableMap<String, Object> getLocals() {
- return ImmutableMap.copyOf(this.locals);
- }
-
- @Override
- public String toString() {
- return fn.getName() + "@" + loc;
- }
- }
-
- /** The semantics options that affect how Starlark code is evaluated. */
- private final StarlarkSemantics semantics;
-
- /** PrintHandler for Starlark print statements. */
- private PrintHandler printHandler = StarlarkThread::defaultPrintHandler;
-
- /** Loader for Starlark load statements. Null if loading is disallowed. */
- @Nullable private Loader loader = null;
-
- /** Stack of active function calls. */
- private final ArrayList<Frame> callstack = new ArrayList<>();
-
- /** A hook for notifications of assignments at top level. */
- PostAssignHook postAssignHook;
-
- /** Pushes a function onto the call stack. */
- void push(StarlarkCallable fn) {
- Frame fr = new Frame(this, fn);
- callstack.add(fr);
-
- // Notify debug tools of the thread's first push.
- if (callstack.size() == 1 && Debug.threadHook != null) {
- Debug.threadHook.onPushFirst(this);
- }
-
- if (fn instanceof StarlarkFunction) {
- StarlarkFunction sfn = (StarlarkFunction) fn;
- fr.locals = Maps.newLinkedHashMapWithExpectedSize(sfn.getParameterNames().size());
- } else {
- // built-in function
- fr.locals = ImmutableMap.of();
- }
-
- fr.loc = fn.getLocation();
-
- // Start wall-time call profile span.
- CallProfiler callProfiler = StarlarkThread.callProfiler;
- if (callProfiler != null) {
- fr.profileSpan = callProfiler.start(fn);
- }
-
- // Poll for newly installed CPU profiler.
- if (profiler == null) {
- this.profiler = CpuProfiler.get();
- if (profiler != null) {
- cpuTicks.set(0);
- // Associated current Java thread with this StarlarkThread.
- // (Save the previous association so we can restore it later.)
- this.savedThread = CpuProfiler.setStarlarkThread(this);
- }
- }
- }
-
- /** Pops a function off the call stack. */
- void pop() {
- int last = callstack.size() - 1;
- Frame fr = callstack.get(last);
-
- if (profiler != null) {
- int ticks = cpuTicks.getAndSet(0);
- if (ticks > 0) {
- profiler.addEvent(ticks, getDebugCallStack());
- }
-
- // If this is the final pop in this thread,
- // unregister it from the profiler.
- if (last == 0) {
- // Restore the previous association (in case of reentrant evaluation).
- CpuProfiler.setStarlarkThread(this.savedThread);
- this.savedThread = null;
- this.profiler = null;
- }
- }
-
- callstack.remove(last); // pop
-
- // End wall-time profile span.
- CallProfiler callProfiler = StarlarkThread.callProfiler;
- if (callProfiler != null && fr.profileSpan != null) {
- callProfiler.end(fr.profileSpan);
- }
-
- // Notify debug tools of the thread's last pop.
- if (last == 0 && Debug.threadHook != null) {
- Debug.threadHook.onPopLast(this);
- }
- }
-
- /** Returns the mutability for values created by this thread. */
- public Mutability mutability() {
- return mutability;
- }
-
- /**
- * A PrintHandler determines how a Starlark thread deals with print statements. It is invoked by
- * the built-in {@code print} function. Its default behavior is to write the message to standard
- * error, preceded by the location of the print statement, {@code thread.getCallerLocation()}.
- */
- @FunctionalInterface
- public interface PrintHandler {
- void print(StarlarkThread thread, String msg);
- }
-
- /** Returns the PrintHandler for Starlark print statements. */
- PrintHandler getPrintHandler() {
- return printHandler;
- }
-
- /** Sets the behavior of Starlark print statements executed by this thread. */
- public void setPrintHandler(PrintHandler h) {
- this.printHandler = Preconditions.checkNotNull(h);
- }
-
- private static void defaultPrintHandler(StarlarkThread thread, String msg) {
- System.err.println(thread.getCallerLocation() + ": " + msg);
- }
-
- /**
- * A Loader determines the behavior of load statements executed by this thread. It returns the
- * named module, or null if not found.
- */
- @FunctionalInterface
- public interface Loader {
- @Nullable
- Module load(String module);
- }
-
- /** Returns the loader for Starlark load statements. */
- Loader getLoader() {
- return loader;
- }
-
- /** Sets the behavior of Starlark load statements executed by this thread. */
- public void setLoader(Loader loader) {
- this.loader = Preconditions.checkNotNull(loader);
- }
-
- /** Reports whether {@code fn} has been recursively reentered within this thread. */
- boolean isRecursiveCall(StarlarkFunction fn) {
- // Find fn buried within stack. (The top of the stack is assumed to be fn.)
- for (int i = callstack.size() - 2; i >= 0; --i) {
- Frame fr = callstack.get(i);
- // TODO(adonovan): compare code, not closure values, otherwise
- // one can defeat this check by writing the Y combinator.
- if (fr.fn.equals(fn)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Returns the location of the program counter in the enclosing call frame. If called from within
- * a built-in function, this is the location of the call expression that called the built-in. It
- * returns BUILTIN if called with fewer than two frames (such as within a test).
- */
- public Location getCallerLocation() {
- return toplevel() ? Location.BUILTIN : frame(1).loc;
- }
-
- /**
- * Reports whether the call stack has less than two frames. Zero frames means an idle thread. One
- * frame means the function for the top-level statements of a file is active. More than that means
- * a function call is in progress.
- *
- * <p>Every use of this function is a hack to work around the lack of proper local vs global
- * identifier resolution at top level.
- */
- boolean toplevel() {
- return callstack.size() < 2;
- }
-
- // Returns the stack frame at the specified depth. 0 means top of stack, 1 is its caller, etc.
- Frame frame(int depth) {
- return callstack.get(callstack.size() - 1 - depth);
- }
-
- /**
- * Constructs a StarlarkThread.
- *
- * @param mu the (non-frozen) mutability of values created by this thread.
- * @param semantics the StarlarkSemantics for this thread.
- */
- public StarlarkThread(Mutability mu, StarlarkSemantics semantics) {
- Preconditions.checkArgument(!mu.isFrozen());
- this.mutability = mu;
- this.semantics = semantics;
- }
-
- /**
- * Specifies a hook function to be run after each assignment at top level.
- *
- * <p>This is a short-term hack to allow us to consolidate all StarlarkFile execution in one place
- * even while BzlLoadFunction implements the old "export" behavior, in which rules, aspects and
- * providers are "exported" as soon as they are assigned, not at the end of file execution.
- */
- public void setPostAssignHook(PostAssignHook postAssignHook) {
- this.postAssignHook = postAssignHook;
- }
-
- /** A hook for notifications of assignments at top level. */
- @FunctionalInterface
- public interface PostAssignHook {
- void assign(String name, Object value);
- }
-
- public StarlarkSemantics getSemantics() {
- return semantics;
- }
-
- // Implementation of Debug.getCallStack.
- // Intentionally obscured to steer most users to the simpler getCallStack.
- ImmutableList<Debug.Frame> getDebugCallStack() {
- return ImmutableList.<Debug.Frame>copyOf(callstack);
- }
-
- /** Returns the size of the callstack. This is needed for the debugger. */
- int getCallStackSize() {
- return callstack.size();
- }
-
- /**
- * A CallStackEntry describes the name and PC location of an active function call. See {@link
- * #getCallStack}.
- */
- @Immutable
- public static final class CallStackEntry {
- public final String name;
- public final Location location;
-
- public CallStackEntry(String name, Location location) {
- this.location = location;
- this.name = name;
- }
-
- @Override
- public String toString() {
- return name + "@" + location;
- }
- }
-
- /**
- * Returns information about this thread's current stack of active function calls, outermost call
- * first. For each function, it reports its name, and the location of its current program counter.
- * The result is immutable and does not reference interpreter data structures, so it may retained
- * indefinitely and safely shared with other threads.
- */
- public ImmutableList<CallStackEntry> getCallStack() {
- ImmutableList.Builder<CallStackEntry> stack = ImmutableList.builder();
- for (Frame fr : callstack) {
- stack.add(new CallStackEntry(fr.fn.getName(), fr.loc));
- }
- return stack.build();
- }
-
- @Override
- public int hashCode() {
- throw new UnsupportedOperationException(); // avoid nondeterminism
- }
-
- @Override
- public boolean equals(Object that) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public String toString() {
- return String.format("<StarlarkThread%s>", mutability);
- }
-
- /** CallProfiler records the start and end wall times of function calls. */
- public interface CallProfiler {
- Object start(StarlarkCallable fn);
-
- void end(Object span);
- }
-
- /** Installs a global hook that will be notified of function calls. */
- public static void setCallProfiler(@Nullable CallProfiler p) {
- callProfiler = p;
- }
-
- @Nullable private static CallProfiler callProfiler = null;
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkValue.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkValue.java
deleted file mode 100644
index 8a14128..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkValue.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2015 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.syntax;
-
-/** Base interface for all Starlark values besides boxed Java primitives. */
-public interface StarlarkValue {
-
- /**
- * Prints an official representation of object x.
- *
- * <p>Convention is that the string should be parseable back to the value x. If this isn't
- * feasible then it should be a short human-readable description enclosed in angled brackets, e.g.
- * {@code "<foo object>"}.
- *
- * @param printer a printer to be used for formatting nested values.
- */
- default void repr(Printer printer) {
- printer.append("<unknown object ").append(getClass().getName()).append(">");
- }
-
- /**
- * Prints an informal, human-readable representation of the value.
- *
- * <p>By default dispatches to the {@code repr} method.
- *
- * @param printer a printer to be used for formatting nested values.
- */
- default void str(Printer printer) {
- repr(printer);
- }
-
- /**
- * Prints an informal debug representation of the value.
- *
- * <p>This debug representation is only ever printed to the terminal or to another out-of-band
- * channel, and is never accessible to Starlark code. Therefore, it is safe for the debug
- * representation to reveal properties of the value that are usually hidden for the sake of
- * performance, determinism, or forward-compatibility.
- *
- * <p>By default dispatches to the {@code str} method.
- *
- * @param printer a printer to be used for formatting nested values.
- */
- default void debugPrint(Printer printer) {
- str(printer);
- }
-
- /** Returns the truth-value of this Starlark value. */
- default boolean truth() {
- return true;
- }
-
- /** Reports whether the value is deeply immutable. */
- // TODO(adonovan): eliminate this concept. All uses really need to know is, is it hashable?,
- // because Starlark values must have stable hashes: a hashable value must either be immutable or
- // its hash must be part of its identity.
- // But this must wait until --incompatible_disallow_hashing_frozen_mutables=true is removed.
- // (see github.com/bazelbuild/bazel/issues/7800)
- default boolean isImmutable() {
- return false;
- }
-
- /** Reports whether the Starlark value is hashable and thus suitable as a dict key. */
- default boolean isHashable() {
- return this.isImmutable();
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Statement.java b/src/main/java/com/google/devtools/build/lib/syntax/Statement.java
deleted file mode 100644
index e3633b4..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Statement.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2014 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.syntax;
-
-/** Base class for all statements nodes in the AST. */
-public abstract class Statement extends Node {
-
- /**
- * Kind of the statement. This is similar to using instanceof, except that it's more efficient and
- * can be used in a switch/case.
- */
- public enum Kind {
- ASSIGNMENT,
- EXPRESSION,
- FLOW,
- FOR,
- DEF,
- IF,
- LOAD,
- RETURN,
- }
-
- Statement(FileLocations locs) {
- super(locs);
- }
-
- /**
- * Kind of the statement. This is similar to using instanceof, except that it's more efficient and
- * can be used in a switch/case.
- */
- public abstract Kind kind();
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StringLiteral.java b/src/main/java/com/google/devtools/build/lib/syntax/StringLiteral.java
deleted file mode 100644
index 51d4909..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StringLiteral.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2014 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.syntax;
-
-/** Syntax node for a string literal. */
-public final class StringLiteral extends Expression {
-
- // See skyframe.serialization.StringLiteralCodec for custom serialization logic.
-
- private final int startOffset;
- private final String value;
- private final int endOffset;
-
- StringLiteral(FileLocations locs, int startOffset, String value, int endOffset) {
- super(locs);
- this.startOffset = startOffset;
- this.value = value;
- this.endOffset = endOffset;
- }
-
- /** Returns the value denoted by the string literal */
- public String getValue() {
- return value;
- }
-
- public Location getLocation() {
- return locs.getLocation(startOffset);
- }
-
- @Override
- public int getStartOffset() {
- return startOffset;
- }
-
- @Override
- public int getEndOffset() {
- // TODO(adonovan): when we switch to compilation,
- // making syntax trees ephemeral, we can afford to
- // record the raw literal. This becomes:
- // return startOffset + raw.length().
- return endOffset;
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.STRING_LITERAL;
- }
-
- // -- hooks to support Skyframe serialization without creating a dependency --
-
- /** Returns an opaque serializable object that may be passed to {@link #fromSerialization}. */
- public Object getFileLocations() {
- return locs;
- }
-
- /** Constructs a StringLiteral from its serialized components. */
- public static StringLiteral fromSerialization(
- Object fileLocations, int startOffset, String value, int endOffset) {
- return new StringLiteral((FileLocations) fileLocations, startOffset, value, endOffset);
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java b/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java
deleted file mode 100644
index bb28acb..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java
+++ /dev/null
@@ -1,993 +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.syntax;
-
-import com.google.common.base.Ascii;
-import com.google.common.base.CharMatcher;
-import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableList;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import net.starlark.java.annot.Param;
-import net.starlark.java.annot.ParamType;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkDocumentationCategory;
-import net.starlark.java.annot.StarlarkMethod;
-
-/**
- * Starlark String module.
- *
- * <p>This module has special treatment in Starlark, as its methods represent methods represent for
- * any 'string' objects in the language.
- *
- * <p>Methods of this class annotated with {@link StarlarkMethod} must have a positional-only
- * 'String self' parameter as the first parameter of the method.
- */
-@StarlarkBuiltin(
- name = "string",
- category = StarlarkDocumentationCategory.BUILTIN,
- doc =
- "A language built-in type to support strings. "
- + "Examples of string literals:<br>"
- + "<pre class=\"language-python\">a = 'abc\\ndef'\n"
- + "b = \"ab'cd\"\n"
- + "c = \"\"\"multiline string\"\"\"\n"
- + "\n"
- + "# Strings support slicing (negative index starts from the end):\n"
- + "x = \"hello\"[2:4] # \"ll\"\n"
- + "y = \"hello\"[1:-1] # \"ell\"\n"
- + "z = \"hello\"[:4] # \"hell\""
- + "# Slice steps can be used, too:\n"
- + "s = \"hello\"[::2] # \"hlo\"\n"
- + "t = \"hello\"[3:0:-1] # \"lle\"\n</pre>"
- + "Strings are not directly iterable, use the <code>.elems()</code> "
- + "method to iterate over their characters. Examples:<br>"
- + "<pre class=\"language-python\">\"bc\" in \"abcd\" # evaluates to True\n"
- + "x = [s for s.elems() in \"abc\"] # x == [\"a\", \"b\", \"c\"]</pre>\n"
- + "Implicit concatenation of strings is not allowed; use the <code>+</code> "
- + "operator instead. Comparison operators perform a lexicographical comparison; "
- + "use <code>==</code> to test for equality.")
-final class StringModule implements StarlarkValue {
-
- static final StringModule INSTANCE = new StringModule();
-
- private StringModule() {}
-
- // Returns s[start:stop:step], as if by Sequence.getSlice.
- static String slice(String s, int start, int stop, int step) {
- RangeList indices = new RangeList(start, stop, step);
- int n = indices.size();
- if (step == 1) { // common case
- return s.substring(indices.at(0), indices.at(n));
- } else {
- char[] res = new char[n];
- for (int i = 0; i < n; ++i) {
- res[i] = s.charAt(indices.at(i));
- }
- return new String(res);
- }
- }
-
- // Returns the substring denoted by str[start:end], which is never out of bounds.
- // For speed, we don't return str.substring(start, end), as substring allocates a copy.
- // Instead we return the (start, end) indices, packed into the lo/hi arms of a long.
- private static long substringIndices(String str, int start, Object end, String name)
- throws EvalException {
- // This function duplicates the logic of Starlark.slice for strings.
- int n = str.length();
- // TODO(adonovan): allow start to be None, as required by spec.
- start = EvalUtils.toIndex(start, n);
- int stop = end == Starlark.NONE ? n : EvalUtils.toIndex(Starlark.toInt(end, name), n);
- if (stop < start) {
- stop = start; // => empty result
- }
- return pack(start, stop); // = str.substring(start, stop)
- }
-
- private static long pack(int lo, int hi) {
- return (((long) hi) << 32) | (lo & 0xffffffffL);
- }
-
- private static int lo(long x) {
- return (int) x;
- }
-
- private static int hi(long x) {
- return (int) (x >>> 32);
- }
-
- @StarlarkMethod(
- name = "join",
- doc =
- "Returns a string in which the string elements of the argument have been "
- + "joined by this string as a separator. Example:<br>"
- + "<pre class=\"language-python\">\"|\".join([\"a\", \"b\", \"c\"]) == \"a|b|c\""
- + "</pre>",
- parameters = {
- @Param(name = "self", type = String.class),
- @Param(name = "elements", type = Object.class, doc = "The objects to join.")
- })
- public String join(String self, Object elements) throws EvalException {
- Iterable<?> items = Starlark.toIterable(elements);
- int i = 0;
- for (Object item : items) {
- if (!(item instanceof String)) {
- throw Starlark.errorf(
- "expected string for sequence element %d, got '%s'", i, Starlark.type(item));
- }
- i++;
- }
- return Joiner.on(self).join(items);
- }
-
- @StarlarkMethod(
- name = "lower",
- doc = "Returns the lower case version of this string.",
- parameters = {@Param(name = "self", type = String.class)})
- public String lower(String self) {
- return Ascii.toLowerCase(self);
- }
-
- @StarlarkMethod(
- name = "upper",
- doc = "Returns the upper case version of this string.",
- parameters = {@Param(name = "self", type = String.class)})
- public String upper(String self) {
- return Ascii.toUpperCase(self);
- }
-
- /**
- * For consistency with Python we recognize the same whitespace characters as they do over the
- * range 0x00-0xFF. See https://hg.python.org/cpython/file/3.6/Objects/unicodetype_db.h#l5738 This
- * list is a consequence of Unicode character information.
- *
- * <p>Note that this differs from Python 2.7, which uses ctype.h#isspace(), and from
- * java.lang.Character#isWhitespace(), which does not recognize U+00A0.
- */
- private static final String LATIN1_WHITESPACE =
- ("\u0009" + "\n" + "\u000B" + "\u000C" + "\r" + "\u001C" + "\u001D" + "\u001E" + "\u001F"
- + "\u0020" + "\u0085" + "\u00A0");
-
- private static String stringLStrip(String self, String chars) {
- CharMatcher matcher = CharMatcher.anyOf(chars);
- for (int i = 0; i < self.length(); i++) {
- if (!matcher.matches(self.charAt(i))) {
- return self.substring(i);
- }
- }
- return ""; // All characters were stripped.
- }
-
- private static String stringRStrip(String self, String chars) {
- CharMatcher matcher = CharMatcher.anyOf(chars);
- for (int i = self.length() - 1; i >= 0; i--) {
- if (!matcher.matches(self.charAt(i))) {
- return self.substring(0, i + 1);
- }
- }
- return ""; // All characters were stripped.
- }
-
- private static String stringStrip(String self, String chars) {
- return stringLStrip(stringRStrip(self, chars), chars);
- }
-
- @StarlarkMethod(
- name = "lstrip",
- doc =
- "Returns a copy of the string where leading characters that appear in "
- + "<code>chars</code> are removed. Note that <code>chars</code> "
- + "is not a prefix: all combinations of its value are removed:"
- + "<pre class=\"language-python\">"
- + "\"abcba\".lstrip(\"ba\") == \"cba\""
- + "</pre>",
- parameters = {
- @Param(name = "self", type = String.class),
- @Param(
- name = "chars",
- type = String.class,
- noneable = true,
- doc = "The characters to remove, or all whitespace if None.",
- defaultValue = "None")
- })
- public String lstrip(String self, Object charsOrNone) {
- String chars = charsOrNone != Starlark.NONE ? (String) charsOrNone : LATIN1_WHITESPACE;
- return stringLStrip(self, chars);
- }
-
- @StarlarkMethod(
- name = "rstrip",
- doc =
- "Returns a copy of the string where trailing characters that appear in "
- + "<code>chars</code> are removed. Note that <code>chars</code> "
- + "is not a suffix: all combinations of its value are removed:"
- + "<pre class=\"language-python\">"
- + "\"abcbaa\".rstrip(\"ab\") == \"abc\""
- + "</pre>",
- parameters = {
- @Param(name = "self", type = String.class, doc = "This string."),
- @Param(
- name = "chars",
- type = String.class,
- noneable = true,
- doc = "The characters to remove, or all whitespace if None.",
- defaultValue = "None")
- })
- public String rstrip(String self, Object charsOrNone) {
- String chars = charsOrNone != Starlark.NONE ? (String) charsOrNone : LATIN1_WHITESPACE;
- return stringRStrip(self, chars);
- }
-
- @StarlarkMethod(
- name = "strip",
- doc =
- "Returns a copy of the string where leading or trailing characters that appear in "
- + "<code>chars</code> are removed. Note that <code>chars</code> "
- + "is neither a prefix nor a suffix: all combinations of its value "
- + "are removed:"
- + "<pre class=\"language-python\">"
- + "\"aabcbcbaa\".strip(\"ab\") == \"cbc\""
- + "</pre>",
- parameters = {
- @Param(name = "self", type = String.class, doc = "This string."),
- @Param(
- name = "chars",
- type = String.class,
- noneable = true,
- doc = "The characters to remove, or all whitespace if None.",
- defaultValue = "None")
- })
- public String strip(String self, Object charsOrNone) {
- String chars = charsOrNone != Starlark.NONE ? (String) charsOrNone : LATIN1_WHITESPACE;
- return stringStrip(self, chars);
- }
-
- @StarlarkMethod(
- name = "replace",
- doc =
- "Returns a copy of the string in which the occurrences "
- + "of <code>old</code> have been replaced with <code>new</code>, optionally "
- + "restricting the number of replacements to <code>maxsplit</code>.",
- parameters = {
- @Param(name = "self", type = String.class, doc = "This string."),
- @Param(name = "old", type = String.class, doc = "The string to be replaced."),
- @Param(name = "new", type = String.class, doc = "The string to replace with."),
- @Param(
- name = "count",
- type = Integer.class,
- noneable = true, // TODO(#11244): Set false once incompatible flag is deleted.
- defaultValue = "unbound",
- doc =
- "The maximum number of replacements. If omitted, there is no limit."
- + "<p>If <code>--incompatible_string_replace_count</code> is true, a negative "
- + "value is ignored (so there's no limit) and a <code>None</code> value is an "
- + "error. Otherwise, a negative value is treated as 0 and a <code>None</code> "
- + "value is ignored. (See also issue <a "
- + "href='https://github.com/bazelbuild/bazel/issues/11244'>#11244</a>.)")
- },
- useStarlarkThread = true)
- public String replace(
- String self, String oldString, String newString, Object countUnchecked, StarlarkThread thread)
- throws EvalException {
- int count = Integer.MAX_VALUE;
-
- StarlarkSemantics semantics = thread.getSemantics();
- if (semantics.getBool(StarlarkSemantics.INCOMPATIBLE_STRING_REPLACE_COUNT)) {
- if (countUnchecked == Starlark.NONE) {
- throw Starlark.errorf(
- "Cannot pass a None count to string.replace(); omit the count argument instead. (You "
- + "can temporarily opt out of this change by setting "
- + "--incompatible_string_replace_count=false.)");
- }
- if (countUnchecked != Starlark.UNBOUND && (Integer) countUnchecked >= 0) {
- count = (Integer) countUnchecked;
- }
- } else {
- if (countUnchecked != Starlark.UNBOUND && countUnchecked != Starlark.NONE) {
- // Negative has same effect as 0 below.
- count = (Integer) countUnchecked;
- }
- }
-
- StringBuilder sb = new StringBuilder();
- int start = 0;
- for (int i = 0; i < count; i++) {
- if (oldString.isEmpty()) {
- sb.append(newString);
- if (start < self.length()) {
- sb.append(self.charAt(start++));
- } else {
- break;
- }
- } else {
- int end = self.indexOf(oldString, start);
- if (end < 0) {
- break;
- }
- sb.append(self, start, end).append(newString);
- start = end + oldString.length();
- }
- }
- sb.append(self, start, self.length());
- return sb.toString();
- }
-
- @StarlarkMethod(
- name = "split",
- doc =
- "Returns a list of all the words in the string, using <code>sep</code> as the "
- + "separator, optionally limiting the number of splits to <code>maxsplit</code>.",
- parameters = {
- @Param(name = "self", type = String.class, doc = "This string."),
- @Param(name = "sep", type = String.class, doc = "The string to split on."),
- @Param(
- name = "maxsplit",
- type = Integer.class,
- noneable = true,
- defaultValue = "None",
- doc = "The maximum number of splits.")
- },
- useStarlarkThread = true)
- public StarlarkList<String> split(
- String self, String sep, Object maxSplitO, StarlarkThread thread) throws EvalException {
- if (sep.isEmpty()) {
- throw Starlark.errorf("Empty separator");
- }
- int maxSplit = Integer.MAX_VALUE;
- if (maxSplitO != Starlark.NONE) {
- maxSplit = (Integer) maxSplitO;
- }
- ArrayList<String> res = new ArrayList<>();
- int start = 0;
- while (true) {
- int end = self.indexOf(sep, start);
- if (end < 0 || maxSplit-- == 0) {
- res.add(self.substring(start));
- break;
- }
- res.add(self.substring(start, end));
- start = end + sep.length();
- }
- return StarlarkList.copyOf(thread.mutability(), res);
- }
-
- @StarlarkMethod(
- name = "rsplit",
- doc =
- "Returns a list of all the words in the string, using <code>sep</code> as the "
- + "separator, optionally limiting the number of splits to <code>maxsplit</code>. "
- + "Except for splitting from the right, this method behaves like split().",
- parameters = {
- @Param(name = "self", type = String.class, doc = "This string."),
- @Param(name = "sep", type = String.class, doc = "The string to split on."),
- @Param(
- name = "maxsplit",
- type = Integer.class,
- noneable = true,
- defaultValue = "None",
- doc = "The maximum number of splits.")
- },
- useStarlarkThread = true)
- public StarlarkList<String> rsplit(
- String self, String sep, Object maxSplitO, StarlarkThread thread) throws EvalException {
- if (sep.isEmpty()) {
- throw Starlark.errorf("Empty separator");
- }
- int maxSplit = Integer.MAX_VALUE;
- if (maxSplitO != Starlark.NONE) {
- maxSplit = (Integer) maxSplitO;
- }
- ArrayList<String> res = new ArrayList<>();
- int end = self.length();
- while (true) {
- int start = self.lastIndexOf(sep, end - 1);
- if (start < 0 || maxSplit-- == 0) {
- res.add(self.substring(0, end));
- break;
- }
- res.add(self.substring(start + sep.length(), end));
- end = start;
- }
- Collections.reverse(res);
- return StarlarkList.copyOf(thread.mutability(), res);
- }
-
- @StarlarkMethod(
- name = "partition",
- doc =
- "Splits the input string at the first occurrence of the separator <code>sep</code> and"
- + " returns the resulting partition as a three-element tuple of the form (before,"
- + " separator, after). If the input string does not contain the separator, partition"
- + " returns (self, '', '').",
- parameters = {
- @Param(name = "self", type = String.class),
- @Param(name = "sep", type = String.class, doc = "The string to split on.")
- })
- public Tuple<String> partition(String self, String sep) throws EvalException {
- return partitionCommon(self, sep, /*first=*/ true);
- }
-
- @StarlarkMethod(
- name = "rpartition",
- doc =
- "Splits the input string at the last occurrence of the separator <code>sep</code> and"
- + " returns the resulting partition as a three-element tuple of the form (before,"
- + " separator, after). If the input string does not contain the separator,"
- + " rpartition returns ('', '', self).",
- parameters = {
- @Param(name = "self", type = String.class),
- @Param(name = "sep", type = String.class, doc = "The string to split on.")
- })
- public Tuple<String> rpartition(String self, String sep) throws EvalException {
- return partitionCommon(self, sep, /*first=*/ false);
- }
-
- // Splits input at the first or last occurrence of the given separator,
- // and returns a triple of substrings (before, separator, after).
- // If the input does not contain the separator,
- // it returns (input, "", "") if first, or ("", "", input), if !first.
- private static Tuple<String> partitionCommon(String input, String separator, boolean first)
- throws EvalException {
- if (separator.isEmpty()) {
- throw Starlark.errorf("empty separator");
- }
-
- String a = "";
- String b = "";
- String c = "";
-
- int pos = first ? input.indexOf(separator) : input.lastIndexOf(separator);
- if (pos < 0) {
- if (first) {
- a = input;
- } else {
- c = input;
- }
- } else {
- a = input.substring(0, pos);
- b = separator;
- c = input.substring(pos + separator.length());
- }
-
- return Tuple.triple(a, b, c);
- }
-
- @StarlarkMethod(
- name = "capitalize",
- doc =
- "Returns a copy of the string with its first character (if any) capitalized and the rest "
- + "lowercased. This method does not support non-ascii characters. ",
- parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
- public String capitalize(String self) throws EvalException {
- if (self.isEmpty()) {
- return self;
- }
- // TODO(adonovan): fix: support non-ASCII characters. Requires that Bazel stop abusing Latin1.
- return Character.toUpperCase(self.charAt(0)) + Ascii.toLowerCase(self.substring(1));
- }
-
- @StarlarkMethod(
- name = "title",
- doc =
- "Converts the input string into title case, i.e. every word starts with an "
- + "uppercase letter while the remaining letters are lowercase. In this "
- + "context, a word means strictly a sequence of letters. This method does "
- + "not support supplementary Unicode characters.",
- parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
- public String title(String self) throws EvalException {
- char[] data = self.toCharArray();
- boolean previousWasLetter = false;
-
- for (int pos = 0; pos < data.length; ++pos) {
- char current = data[pos];
- boolean currentIsLetter = Character.isLetter(current);
-
- if (currentIsLetter) {
- if (previousWasLetter && Character.isUpperCase(current)) {
- data[pos] = Character.toLowerCase(current);
- } else if (!previousWasLetter && Character.isLowerCase(current)) {
- data[pos] = Character.toUpperCase(current);
- }
- }
- previousWasLetter = currentIsLetter;
- }
-
- return new String(data);
- }
-
- /**
- * Common implementation for find, rfind, index, rindex.
- *
- * @param forward true if we want to return the last matching index.
- */
- private static int stringFind(
- boolean forward, String self, String sub, int start, Object end, String msg)
- throws EvalException {
- long indices = substringIndices(self, start, end, msg);
- // Unfortunately Java forces us to allocate here, even though
- // String has a private indexOf method that accepts indices.
- // Fortunately the common case is self[0:n].
- String substr = self.substring(lo(indices), hi(indices));
- int subpos = forward ? substr.indexOf(sub) : substr.lastIndexOf(sub);
- return subpos < 0
- ? subpos //
- : subpos + lo(indices);
- }
-
- private static final Pattern SPLIT_LINES_PATTERN =
- Pattern.compile("(?<line>.*)(?<break>(\\r\\n|\\r|\\n)?)");
-
- @StarlarkMethod(
- name = "rfind",
- doc =
- "Returns the last index where <code>sub</code> is found, or -1 if no such index exists, "
- + "optionally restricting to <code>[start:end]</code>, "
- + "<code>start</code> being inclusive and <code>end</code> being exclusive.",
- parameters = {
- @Param(name = "self", type = String.class, doc = "This string."),
- @Param(name = "sub", type = String.class, doc = "The substring to find."),
- @Param(
- name = "start",
- type = Integer.class,
- defaultValue = "0",
- doc = "Restrict to search from this position."),
- @Param(
- name = "end",
- type = Integer.class,
- noneable = true,
- defaultValue = "None",
- doc = "optional position before which to restrict to search.")
- })
- public Integer rfind(String self, String sub, Integer start, Object end) throws EvalException {
- return stringFind(false, self, sub, start, end, "'end' argument to rfind");
- }
-
- @StarlarkMethod(
- name = "find",
- doc =
- "Returns the first index where <code>sub</code> is found, or -1 if no such index exists, "
- + "optionally restricting to <code>[start:end]</code>, "
- + "<code>start</code> being inclusive and <code>end</code> being exclusive.",
- parameters = {
- @Param(name = "self", type = String.class, doc = "This string."),
- @Param(name = "sub", type = String.class, doc = "The substring to find."),
- @Param(
- name = "start",
- type = Integer.class,
- defaultValue = "0",
- doc = "Restrict to search from this position."),
- @Param(
- name = "end",
- type = Integer.class,
- noneable = true,
- defaultValue = "None",
- doc = "optional position before which to restrict to search.")
- })
- public Integer find(String self, String sub, Integer start, Object end) throws EvalException {
- return stringFind(true, self, sub, start, end, "'end' argument to find");
- }
-
- @StarlarkMethod(
- name = "rindex",
- doc =
- "Returns the last index where <code>sub</code> is found, or raises an error if no such "
- + "index exists, optionally restricting to <code>[start:end]</code>, "
- + "<code>start</code> being inclusive and <code>end</code> being exclusive.",
- parameters = {
- @Param(name = "self", type = String.class, doc = "This string."),
- @Param(name = "sub", type = String.class, doc = "The substring to find."),
- @Param(
- name = "start",
- type = Integer.class,
- defaultValue = "0",
- doc = "Restrict to search from this position."),
- @Param(
- name = "end",
- type = Integer.class,
- noneable = true,
- defaultValue = "None",
- doc = "optional position before which to restrict to search.")
- })
- public Integer rindex(String self, String sub, Integer start, Object end) throws EvalException {
- int res = stringFind(false, self, sub, start, end, "'end' argument to rindex");
- if (res < 0) {
- throw Starlark.errorf(
- "substring %s not found in %s", Starlark.repr(sub), Starlark.repr(self));
- }
- return res;
- }
-
- @StarlarkMethod(
- name = "index",
- doc =
- "Returns the first index where <code>sub</code> is found, or raises an error if no such "
- + " index exists, optionally restricting to <code>[start:end]</code>"
- + "<code>start</code> being inclusive and <code>end</code> being exclusive.",
- parameters = {
- @Param(name = "self", type = String.class, doc = "This string."),
- @Param(name = "sub", type = String.class, doc = "The substring to find."),
- @Param(
- name = "start",
- type = Integer.class,
- defaultValue = "0",
- doc = "Restrict to search from this position."),
- @Param(
- name = "end",
- type = Integer.class,
- noneable = true,
- defaultValue = "None",
- doc = "optional position before which to restrict to search.")
- })
- public Integer index(String self, String sub, Integer start, Object end) throws EvalException {
- int res = stringFind(true, self, sub, start, end, "'end' argument to index");
- if (res < 0) {
- throw Starlark.errorf(
- "substring %s not found in %s", Starlark.repr(sub), Starlark.repr(self));
- }
- return res;
- }
-
- @StarlarkMethod(
- name = "splitlines",
- doc =
- "Splits the string at line boundaries ('\\n', '\\r\\n', '\\r') "
- + "and returns the result as a list.",
- parameters = {
- @Param(name = "self", type = String.class, doc = "This string."),
- @Param(
- name = "keepends",
- type = Boolean.class,
- defaultValue = "False",
- doc = "Whether the line breaks should be included in the resulting list.")
- })
- public Sequence<String> splitLines(String self, Boolean keepEnds) throws EvalException {
- List<String> result = new ArrayList<>();
- Matcher matcher = SPLIT_LINES_PATTERN.matcher(self);
- while (matcher.find()) {
- String line = matcher.group("line");
- String lineBreak = matcher.group("break");
- boolean trailingBreak = lineBreak.isEmpty();
- if (line.isEmpty() && trailingBreak) {
- break;
- }
- if (keepEnds && !trailingBreak) {
- result.add(line + lineBreak);
- } else {
- result.add(line);
- }
- }
- return StarlarkList.immutableCopyOf(result);
- }
-
- @StarlarkMethod(
- name = "isalpha",
- doc =
- "Returns True if all characters in the string are alphabetic ([a-zA-Z]) and there is "
- + "at least one character.",
- parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
- public Boolean isAlpha(String self) throws EvalException {
- return matches(self, ALPHA, false);
- }
-
- @StarlarkMethod(
- name = "isalnum",
- doc =
- "Returns True if all characters in the string are alphanumeric ([a-zA-Z0-9]) and there "
- + "is at least one character.",
- parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
- public Boolean isAlnum(String self) throws EvalException {
- return matches(self, ALNUM, false);
- }
-
- @StarlarkMethod(
- name = "isdigit",
- doc =
- "Returns True if all characters in the string are digits ([0-9]) and there is "
- + "at least one character.",
- parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
- public Boolean isDigit(String self) throws EvalException {
- return matches(self, DIGIT, false);
- }
-
- @StarlarkMethod(
- name = "isspace",
- doc =
- "Returns True if all characters are white space characters and the string "
- + "contains at least one character.",
- parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
- public Boolean isSpace(String self) throws EvalException {
- return matches(self, SPACE, false);
- }
-
- @StarlarkMethod(
- name = "islower",
- doc =
- "Returns True if all cased characters in the string are lowercase and there is "
- + "at least one character.",
- parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
- public Boolean isLower(String self) throws EvalException {
- // Python also accepts non-cased characters, so we cannot use LOWER.
- return matches(self, UPPER.negate(), true);
- }
-
- @StarlarkMethod(
- name = "isupper",
- doc =
- "Returns True if all cased characters in the string are uppercase and there is "
- + "at least one character.",
- parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
- public Boolean isUpper(String self) throws EvalException {
- // Python also accepts non-cased characters, so we cannot use UPPER.
- return matches(self, LOWER.negate(), true);
- }
-
- @StarlarkMethod(
- name = "istitle",
- doc =
- "Returns True if the string is in title case and it contains at least one character. "
- + "This means that every uppercase character must follow an uncased one (e.g. "
- + "whitespace) and every lowercase character must follow a cased one (e.g. "
- + "uppercase or lowercase).",
- parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
- public Boolean isTitle(String self) throws EvalException {
- if (self.isEmpty()) {
- return false;
- }
- // From the Python documentation: "uppercase characters may only follow uncased characters
- // and lowercase characters only cased ones".
- char[] data = self.toCharArray();
- CharMatcher matcher = CharMatcher.any();
- char leftMostCased = ' ';
- for (int pos = data.length - 1; pos >= 0; --pos) {
- char current = data[pos];
- // 1. Check condition that was determined by the right neighbor.
- if (!matcher.matches(current)) {
- return false;
- }
- // 2. Determine condition for the left neighbor.
- if (LOWER.matches(current)) {
- matcher = CASED;
- } else if (UPPER.matches(current)) {
- matcher = CASED.negate();
- } else {
- matcher = CharMatcher.any();
- }
- // 3. Store character if it is cased.
- if (CASED.matches(current)) {
- leftMostCased = current;
- }
- }
- // The leftmost cased letter must be uppercase. If leftMostCased is not a cased letter here,
- // then the string doesn't have any cased letter, so UPPER.test will return false.
- return UPPER.matches(leftMostCased);
- }
-
- private static boolean matches(
- String str, CharMatcher matcher, boolean requiresAtLeastOneCasedLetter) {
- if (str.isEmpty()) {
- return false;
- } else if (!requiresAtLeastOneCasedLetter) {
- return matcher.matchesAllOf(str);
- }
- int casedLetters = 0;
- for (char current : str.toCharArray()) {
- if (!matcher.matches(current)) {
- return false;
- } else if (requiresAtLeastOneCasedLetter && CASED.matches(current)) {
- ++casedLetters;
- }
- }
- return casedLetters > 0;
- }
-
- private static final CharMatcher DIGIT = CharMatcher.javaDigit();
- private static final CharMatcher LOWER = CharMatcher.inRange('a', 'z');
- private static final CharMatcher UPPER = CharMatcher.inRange('A', 'Z');
- private static final CharMatcher ALPHA = LOWER.or(UPPER);
- private static final CharMatcher ALNUM = ALPHA.or(DIGIT);
- private static final CharMatcher CASED = ALPHA;
- private static final CharMatcher SPACE = CharMatcher.whitespace();
-
- @StarlarkMethod(
- name = "count",
- doc =
- "Returns the number of (non-overlapping) occurrences of substring <code>sub</code> in "
- + "string, optionally restricting to <code>[start:end]</code>, <code>start</code> "
- + "being inclusive and <code>end</code> being exclusive.",
- parameters = {
- @Param(name = "self", type = String.class, doc = "This string."),
- @Param(name = "sub", type = String.class, doc = "The substring to count."),
- @Param(
- name = "start",
- type = Integer.class,
- defaultValue = "0",
- doc = "Restrict to search from this position."),
- @Param(
- name = "end",
- type = Integer.class,
- noneable = true,
- defaultValue = "None",
- doc = "optional position before which to restrict to search.")
- })
- public Integer count(String self, String sub, Integer start, Object end) throws EvalException {
- long indices = substringIndices(self, start, end, "'end' operand of 'count'");
- if (sub.isEmpty()) {
- return hi(indices) - lo(indices) + 1; // str.length() + 1
- }
- // Unfortunately Java forces us to allocate here, even though
- // String has a private indexOf method that accepts indices.
- // Fortunately the common case is self[0:n].
- String str = self.substring(lo(indices), hi(indices));
- int count = 0;
- int index = 0;
- while ((index = str.indexOf(sub, index)) >= 0) {
- count++;
- index += sub.length();
- }
- return count;
- }
-
- @StarlarkMethod(
- name = "elems",
- doc =
- "Returns an iterable value containing successive 1-element substrings of the string. "
- + "Equivalent to <code>[s[i] for i in range(len(s))]</code>, except that the "
- + "returned value might not be a list.",
- parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
- public Sequence<String> elems(String self) throws EvalException {
- ImmutableList.Builder<String> builder = new ImmutableList.Builder<>();
- for (char c : self.toCharArray()) {
- builder.add(String.valueOf(c));
- }
- return StarlarkList.immutableCopyOf(builder.build());
- }
-
- @StarlarkMethod(
- name = "endswith",
- doc =
- "Returns True if the string ends with <code>sub</code>, otherwise False, optionally "
- + "restricting to <code>[start:end]</code>, <code>start</code> being inclusive "
- + "and <code>end</code> being exclusive.",
- parameters = {
- @Param(name = "self", type = String.class, doc = "This string."),
- @Param(
- name = "sub",
- allowedTypes = {
- @ParamType(type = String.class),
- @ParamType(type = Tuple.class, generic1 = String.class),
- },
- doc = "The suffix (or tuple of alternative suffixes) to match."),
- @Param(
- name = "start",
- type = Integer.class,
- defaultValue = "0",
- doc = "Test beginning at this position."),
- @Param(
- name = "end",
- type = Integer.class,
- noneable = true,
- defaultValue = "None",
- doc = "optional position at which to stop comparing.")
- })
- public Boolean endsWith(String self, Object sub, Integer start, Object end) throws EvalException {
- long indices = substringIndices(self, start, end, "'end' operand of 'endswith'");
- if (sub instanceof String) {
- return substringEndsWith(self, lo(indices), hi(indices), (String) sub);
- }
- for (String s : Sequence.cast(sub, String.class, "sub")) {
- if (substringEndsWith(self, lo(indices), hi(indices), s)) {
- return true;
- }
- }
- return false;
- }
-
- // Computes str.substring(start, end).endsWith(suffix) without allocation.
- private static boolean substringEndsWith(String str, int start, int end, String suffix) {
- int n = suffix.length();
- return start + n <= end && str.regionMatches(end - n, suffix, 0, n);
- }
-
- // In Python, formatting is very complex.
- // We handle here the simplest case which provides most of the value of the function.
- // https://docs.python.org/3/library/string.html#formatstrings
- @StarlarkMethod(
- name = "format",
- doc =
- "Perform string interpolation. Format strings contain replacement fields "
- + "surrounded by curly braces <code>{}</code>. Anything that is not contained "
- + "in braces is considered literal text, which is copied unchanged to the output."
- + "If you need to include a brace character in the literal text, it can be "
- + "escaped by doubling: <code>{{</code> and <code>}}</code>"
- + "A replacement field can be either a name, a number, or empty. Values are "
- + "converted to strings using the <a href=\"globals.html#str\">str</a> function."
- + "<pre class=\"language-python\">"
- + "# Access in order:\n"
- + "\"{} < {}\".format(4, 5) == \"4 < 5\"\n"
- + "# Access by position:\n"
- + "\"{1}, {0}\".format(2, 1) == \"1, 2\"\n"
- + "# Access by name:\n"
- + "\"x{key}x\".format(key = 2) == \"x2x\"</pre>\n",
- parameters = {
- @Param(name = "self", type = String.class, doc = "This string."),
- },
- extraPositionals =
- @Param(
- name = "args",
- type = Sequence.class,
- defaultValue = "()",
- doc = "List of arguments."),
- extraKeywords =
- @Param(
- name = "kwargs",
- type = Dict.class,
- defaultValue = "{}",
- doc = "Dictionary of arguments."))
- public String format(String self, Sequence<?> args, Dict<?, ?> kwargs) throws EvalException {
- @SuppressWarnings("unchecked")
- List<Object> argObjects = (List<Object>) args.getImmutableList();
- return new FormatParser()
- .format(self, argObjects, Dict.cast(kwargs, String.class, Object.class, "kwargs"));
- }
-
- @StarlarkMethod(
- name = "startswith",
- doc =
- "Returns True if the string starts with <code>sub</code>, otherwise False, optionally "
- + "restricting to <code>[start:end]</code>, <code>start</code> being inclusive and "
- + "<code>end</code> being exclusive.",
- parameters = {
- @Param(name = "self", type = String.class, doc = "This string."),
- @Param(
- name = "sub",
- allowedTypes = {
- @ParamType(type = String.class),
- @ParamType(type = Tuple.class, generic1 = String.class),
- },
- doc = "The prefix (or tuple of alternative prefixes) to match."),
- @Param(
- name = "start",
- type = Integer.class,
- defaultValue = "0",
- doc = "Test beginning at this position."),
- @Param(
- name = "end",
- type = Integer.class,
- noneable = true,
- defaultValue = "None",
- doc = "Stop comparing at this position.")
- })
- public Boolean startsWith(String self, Object sub, Integer start, Object end)
- throws EvalException {
- long indices = substringIndices(self, start, end, "'end' operand of 'startswith'");
- if (sub instanceof String) {
- return substringStartsWith(self, lo(indices), hi(indices), (String) sub);
- }
- for (String s : Sequence.cast(sub, String.class, "sub")) {
- if (substringStartsWith(self, lo(indices), hi(indices), s)) {
- return true;
- }
- }
- return false;
- }
-
- // Computes str.substring(start, end).startsWith(prefix) without allocation.
- private static boolean substringStartsWith(String str, int start, int end, String prefix) {
- return start + prefix.length() <= end && str.startsWith(prefix, start);
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SyntaxError.java b/src/main/java/com/google/devtools/build/lib/syntax/SyntaxError.java
deleted file mode 100644
index 95ca5d1..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/SyntaxError.java
+++ /dev/null
@@ -1,98 +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.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import java.util.List;
-
-/**
- * A SyntaxError represents a static error associated with the syntax, such as a scanner or parse
- * error, a structural problem, or a failure of identifier resolution. It records a description of
- * the error and its location in the syntax.
- */
-public final class SyntaxError {
-
- private final Location location;
- private final String message;
-
- public SyntaxError(Location location, String message) {
- this.location = Preconditions.checkNotNull(location);
- this.message = Preconditions.checkNotNull(message);
- }
-
- /** Returns the location of the error. */
- public Location location() {
- return location;
- }
-
- /** Returns a description of the error. */
- public String message() {
- return message;
- }
-
- /** Returns a string of the form {@code "foo.star:1:2: oops"}. */
- @Override
- public String toString() {
- return location + ": " + message;
- }
-
- /**
- * A SyntaxError.Exception is an exception holding one or more syntax errors.
- *
- * <p>SyntaxError.Exception is thrown by operations such as {@link Expression#parse}, which are
- * "all or nothing". By contrast, {@link StarlarkFile#parse} does not throw an exception; instead,
- * it records the accumulated scanner, parser, and optionally validation errors within the syntax
- * tree, so that clients may obtain partial information from a damaged file.
- *
- * <p>Clients that fail abruptly when encountering parse errors are encouraged to throw
- * SyntaxError.Exception, as in this example:
- *
- * <pre>
- * StarlarkFile file = StarlarkFile.parse(input);
- * if (!file.ok()) {
- * throw new SyntaxError.Exception(file.errors());
- * }
- * </pre>
- */
- public static final class Exception extends java.lang.Exception {
-
- private final ImmutableList<SyntaxError> errors;
-
- /** Construct a SyntaxError from a non-empty list of errors. */
- public Exception(List<SyntaxError> errors) {
- if (errors.isEmpty()) {
- throw new IllegalArgumentException("no errors");
- }
- this.errors = ImmutableList.copyOf(errors);
- }
-
- /** Returns an immutable non-empty list of errors. */
- public ImmutableList<SyntaxError> errors() {
- return errors;
- }
-
- @Override
- public String getMessage() {
- String first = errors.get(0).message();
- if (errors.size() > 1) {
- // TODO(adonovan): say ("+ n more errors") to avoid ambiguity.
- return String.format("%s (+ %d more)", first, errors.size() - 1);
- } else {
- return first;
- }
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java b/src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java
deleted file mode 100644
index e6fc450..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2014 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.syntax;
-
-/** A TokenKind represents the kind of a lexical token. */
-public enum TokenKind {
- AMPERSAND("&"),
- AMPERSAND_EQUALS("&="),
- AND("and"),
- AS("as"),
- ASSERT("assert"),
- BREAK("break"),
- CARET("^"),
- CARET_EQUALS("^="),
- CLASS("class"),
- COLON(":"),
- COMMA(","),
- CONTINUE("continue"),
- DEF("def"),
- DEL("del"),
- DOT("."),
- ELIF("elif"),
- ELSE("else"),
- EOF("EOF"),
- EQUALS("="),
- EQUALS_EQUALS("=="),
- EXCEPT("except"),
- FINALLY("finally"),
- FOR("for"),
- FROM("from"),
- GLOBAL("global"),
- GREATER(">"),
- GREATER_EQUALS(">="),
- GREATER_GREATER(">>"),
- GREATER_GREATER_EQUALS(">>="),
- IDENTIFIER("identifier"),
- IF("if"),
- ILLEGAL("illegal character"),
- IMPORT("import"),
- IN("in"),
- INDENT("indent"),
- INT("integer literal"),
- IS("is"),
- LAMBDA("lambda"),
- LBRACE("{"),
- LBRACKET("["),
- LESS("<"),
- LESS_EQUALS("<="),
- LESS_LESS("<<"),
- LESS_LESS_EQUALS("<<="),
- LOAD("load"),
- LPAREN("("),
- MINUS("-"),
- MINUS_EQUALS("-="),
- NEWLINE("newline"),
- NONLOCAL("nonlocal"),
- NOT("not"),
- NOT_EQUALS("!="),
- NOT_IN("not in"),
- OR("or"),
- OUTDENT("outdent"),
- PASS("pass"),
- PERCENT("%"),
- PERCENT_EQUALS("%="),
- PIPE("|"),
- PIPE_EQUALS("|="),
- PLUS("+"),
- PLUS_EQUALS("+="),
- RAISE("raise"),
- RBRACE("}"),
- RBRACKET("]"),
- RETURN("return"),
- RPAREN(")"),
- SEMI(";"),
- SLASH("/"),
- SLASH_EQUALS("/="),
- SLASH_SLASH("//"),
- SLASH_SLASH_EQUALS("//="),
- STAR("*"),
- STAR_EQUALS("*="),
- STAR_STAR("**"),
- STRING("string literal"),
- TILDE("~"),
- TRY("try"),
- WHILE("while"),
- WITH("with"),
- YIELD("yield");
-
- private final String name;
-
- private TokenKind(String name) {
- this.name = name;
- }
-
- @Override
- public String toString() {
- return name;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Tuple.java b/src/main/java/com/google/devtools/build/lib/syntax/Tuple.java
deleted file mode 100644
index 8b3e9a9..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Tuple.java
+++ /dev/null
@@ -1,243 +0,0 @@
-// Copyright 2014 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.syntax;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.ObjectArrays;
-import java.util.AbstractCollection;
-import java.util.AbstractList;
-import java.util.Arrays;
-import java.util.Iterator;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkDocumentationCategory;
-
-/**
- * A Starlark tuple, i.e. the value represented by {@code (1, 2, 3)}. Tuples are always immutable
- * (regardless of the {@link StarlarkThread} they are created in).
- */
-@StarlarkBuiltin(
- name = "tuple",
- category = StarlarkDocumentationCategory.BUILTIN,
- doc =
- "The built-in tuple type. Example tuple expressions:<br>"
- + "<pre class=language-python>x = (1, 2, 3)</pre>"
- + "Accessing elements is possible using indexing (starts from <code>0</code>):<br>"
- + "<pre class=language-python>e = x[1] # e == 2</pre>"
- + "Lists support the <code>+</code> operator to concatenate two tuples. Example:<br>"
- + "<pre class=language-python>x = (1, 2) + (3, 4) # x == (1, 2, 3, 4)\n"
- + "x = (\"a\", \"b\")\n"
- + "x += (\"c\",) # x == (\"a\", \"b\", \"c\")</pre>"
- + "Similar to lists, tuples support slice operations:"
- + "<pre class=language-python>('a', 'b', 'c', 'd')[1:3] # ('b', 'c')\n"
- + "('a', 'b', 'c', 'd')[::2] # ('a', 'c')\n"
- + "('a', 'b', 'c', 'd')[3:0:-1] # ('d', 'c', 'b')</pre>"
- + "Tuples are immutable, therefore <code>x[1] = \"a\"</code> is not supported.")
-public final class Tuple<E> extends AbstractList<E> implements Sequence<E> {
-
- private final Object[] elems;
-
- private Tuple(Object[] elems) {
- this.elems = elems;
- }
-
- // The shared (sole) empty tuple.
- private static final Tuple<?> EMPTY = new Tuple<>(new Object[0]);
-
- /** Returns the empty tuple, cast to have an arbitrary content type. */
- @SuppressWarnings("unchecked")
- public static <T> Tuple<T> empty() {
- return (Tuple<T>) EMPTY; // unchecked
- }
-
- /**
- * Returns a Tuple that wraps the specified array, which must not be subsequently modified. The
- * caller is additionally trusted to choose an appropriate type T.
- */
- static <T> Tuple<T> wrap(Object[] array) {
- return array.length == 0 ? empty() : new Tuple<T>(array);
- }
-
- /** Returns a tuple containing the given elements. */
- @SuppressWarnings("unchecked")
- public static <T> Tuple<T> copyOf(Iterable<? extends T> seq) {
- if (seq instanceof Tuple) {
- return (Tuple<T>) seq; // unchecked
- }
- return wrap(Iterables.toArray(seq, Object.class));
- }
-
- /** Returns a tuple containing the given elements. */
- public static <T> Tuple<T> of(T... elems) {
- if (elems.length == 0) {
- return empty();
- }
- return new Tuple<T>(Arrays.copyOf(elems, elems.length));
- }
-
- /** Returns a two-element tuple. */
- public static <T> Tuple<T> pair(T a, T b) {
- // Equivalent to of(a, b) but avoids variadic array allocation.
- return wrap(new Object[] {a, b});
- }
-
- /** Returns a three-element tuple. */
- public static <T> Tuple<T> triple(T a, T b, T c) {
- // Equivalent to of(a, b, c) but avoids variadic array allocation.
- return wrap(new Object[] {a, b, c});
- }
-
- /** Returns a tuple that is the concatenation of two tuples. */
- public static <T> Tuple<T> concat(Tuple<? extends T> x, Tuple<? extends T> y) {
- // TODO(adonovan): opt: exploit x + () == x; y + () == y.
- return wrap(ObjectArrays.concat(x.elems, y.elems, Object.class));
- }
-
- @Override
- public boolean isImmutable() {
- for (Object x : elems) {
- if (!Starlark.isImmutable(x)) {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public boolean isHashable() {
- for (Object x : elems) {
- if (!EvalUtils.isHashable(x)) {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public int hashCode() {
- return 9857 + 8167 * Arrays.hashCode(elems);
- }
-
- @Override
- public boolean equals(Object that) {
- // This slightly violates the java.util.List equivalence contract
- // because it considers the class, not just the elements.
- return this == that
- || (that instanceof Tuple && Arrays.equals(this.elems, ((Tuple) that).elems));
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public E get(int i) {
- return (E) elems[i]; // unchecked
- }
-
- @Override
- public int size() {
- return elems.length;
- }
-
- @Override
- public Tuple<E> subList(int from, int to) {
- return wrap(Arrays.copyOfRange(elems, from, to));
- }
-
- @Override
- public Object[] toArray() {
- return elems.length != 0 ? elems.clone() : elems;
- }
-
- @Override
- public void repr(Printer printer) {
- printer.append('(');
- String sep = "";
- for (Object elem : elems) {
- printer.append(sep);
- sep = ", ";
- printer.repr(elem);
- }
- if (elems.length == 1) {
- printer.append(',');
- }
- printer.append(')');
- }
-
- // TODO(adonovan): StarlarkValue has 3 String methods yet still we need this fourth. Why?
- @Override
- public String toString() {
- return Starlark.repr(this);
- }
-
- @Override
- public ImmutableList<E> getImmutableList() {
- // Share the array with this (immutable) Tuple.
- return wrapImmutable(elems);
- }
-
- /**
- * Returns a new ImmutableList<T> backed by {@code array}, which must not be subsequently
- * modified.
- */
- // TODO(adonovan): move this somewhere more appropriate.
- static <T> ImmutableList<T> wrapImmutable(Object[] array) {
- // Construct an ImmutableList that shares the array.
- // ImmutableList relies on the implementation of Collection.toArray
- // not subsequently modifying the returned array.
- return ImmutableList.copyOf(
- new AbstractCollection<T>() {
- @Override
- public Object[] toArray() {
- return array;
- }
-
- @Override
- public int size() {
- return array.length;
- }
-
- @Override
- public Iterator<T> iterator() {
- throw new UnsupportedOperationException();
- }
- });
- }
-
- @Override
- public Tuple<E> getSlice(Mutability mu, int start, int stop, int step) {
- RangeList indices = new RangeList(start, stop, step);
- int n = indices.size();
- if (step == 1) { // common case
- return subList(indices.at(0), indices.at(n));
- }
- Object[] res = new Object[n];
- for (int i = 0; i < n; ++i) {
- res[i] = elems[indices.at(i)];
- }
- return wrap(res);
- }
-
- /** Returns a Tuple containing n consecutive repeats of this tuple. */
- Tuple<E> repeat(int n) {
- if (n <= 0 || isEmpty()) {
- return empty();
- }
- // TODO(adonovan): reject unreasonably large n.
- Object[] res = new Object[n * elems.length];
- for (int i = 0; i < n; i++) {
- System.arraycopy(elems, 0, res, i * elems.length, elems.length);
- }
- return wrap(res);
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/UnaryOperatorExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/UnaryOperatorExpression.java
deleted file mode 100644
index 4b1e9f4..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/UnaryOperatorExpression.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2017 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.syntax;
-
-
-/** A UnaryOperatorExpression represents a unary operator expression, 'op x'. */
-public final class UnaryOperatorExpression extends Expression {
-
- private final TokenKind op; // NOT, TILDE, MINUS or PLUS
- private final int opOffset;
- private final Expression x;
-
- UnaryOperatorExpression(FileLocations locs, TokenKind op, int opOffset, Expression x) {
- super(locs);
- this.op = op;
- this.opOffset = opOffset;
- this.x = x;
- }
-
- /** Returns the operator. */
- public TokenKind getOperator() {
- return op;
- }
-
- @Override
- public int getStartOffset() {
- return opOffset;
- }
-
- @Override
- public int getEndOffset() {
- return x.getEndOffset();
- }
-
- /** Returns the operand. */
- public Expression getX() {
- return x;
- }
-
- @Override
- public String toString() {
- // Note that this omits the parentheses for brevity, but is not correct in general due to
- // operator precedence rules. For example, "(not False) in mylist" prints as
- // "not False in mylist", which evaluates to opposite results in the case that mylist is empty.
- // TODO(adonovan): record parentheses explicitly in syntax tree.
- return (op == TokenKind.NOT ? "not " : op.toString()) + x;
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.UNARY_OPERATOR;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/cpu_profiler_posix.cc b/src/main/java/com/google/devtools/build/lib/syntax/cpu_profiler_posix.cc
deleted file mode 100644
index c64b30d..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/cpu_profiler_posix.cc
+++ /dev/null
@@ -1,200 +0,0 @@
-// Copyright 2020 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.
-
-// POSIX support for Starlark CPU profiler.
-
-#include <arpa/inet.h> // for htonl
-#include <errno.h>
-#include <fcntl.h>
-#include <jni.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/syscall.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-namespace cpu_profiler {
-
-// static native boolean supported();
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_supported(JNIEnv *env,
- jclass clazz) {
- return true;
-}
-
-static int fd; // the write end of the profile event pipe
-
-pid_t gettid(void) {
-#ifdef __linux__
- return (pid_t)syscall(SYS_gettid);
-#else // darwin
- return (pid_t)syscall(SYS_thread_selfid);
-#endif
-}
-
-// SIGPROF handler.
-// Warning: asynchronous! See signal-safety(7) for the programming discipline.
-void onsigprof(int sig) {
- int old_errno = errno;
-
- if (fd == 0) {
- const char *msg = "startTimer called before createPipe\n";
- write(2, msg, strlen(msg));
- abort();
- }
-
- // Send an event containing the int32be-encoded OS thread ID.
- pid_t tid = gettid();
- uint32_t tid_be = htonl(tid);
- int r = write(fd, (void *)&tid_be, sizeof tid_be);
- if (r < 0) {
- if (errno == EAGAIN || errno == EWOULDBLOCK) {
- // The Java router thread cannot keep up.
- //
- // A busy 12-core machine receives 12 * 100Hz = 1200 signals per second,
- // and thus writes 4.8KB/s to the pipe. The default pipe buffer
- // size on Linux is 64KiB, sufficient to buffer ~14s of data.
- // (It is a quarter of that on Mac OS X.)
- //
- // Rather than block in write(2), causing the JVM to deadlock,
- // we print an error and discard the event.
- const char *msg =
- "Starlark profile event router thread cannot keep up; discarding "
- "events\n";
- write(2, msg, strlen(msg));
- } else {
- // We shouldn't use perror in a signal handler.
- // Strictly, we shouldn't use strerror either,
- // but for all errors returned by write it merely
- // returns a constant.
- char buf[1024] = "write: ";
- strncat(buf, strerror(errno), sizeof buf - strlen(buf) - 1);
- strncat(buf, "\n", sizeof buf - strlen(buf) - 1);
- write(2, buf, strlen(buf));
- abort();
- }
- }
-
- errno = old_errno;
-}
-
-// static native jint gettid();
-extern "C" JNIEXPORT jint JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_gettid(JNIEnv *env,
- jclass clazz) {
- return gettid();
-}
-
-// makeFD: return new FileDescriptor(fd)
-//
-// This would be easy to do in Java, but for the field being private.
-// Java really does everything it can to make system programming hateful.
-static jobject makeFD(JNIEnv *env, int fd) {
- jclass fdclass = env->FindClass("java/io/FileDescriptor");
- if (fdclass == NULL) return NULL; // exception
-
- jmethodID init = env->GetMethodID(fdclass, "<init>", "()V");
- if (init == NULL) return NULL; // exception
- jobject fdobj = env->NewObject(fdclass, init);
-
- jfieldID fd_field = env->GetFieldID(fdclass, "fd", "I");
- if (fd_field == NULL) return NULL; // exception
- env->SetIntField(fdobj, fd_field, fd);
-
- return fdobj;
-}
-
-// static native FileDescriptor createPipe();
-extern "C" JNIEXPORT jobject JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_createPipe(JNIEnv *env,
- jclass clazz) {
- // Create a pipe for profile events from the handler to Java.
- // The default pipe size is 64KiB on Linux and 16KiB on Mac OS X.
- int pipefds[2];
- if (pipe(pipefds) < 0) {
- perror("pipe");
- abort();
- }
- fd = pipefds[1];
-
- // Make the write end non-blocking so that the signal
- // handler can detect overflow (rather than deadlock).
- fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK);
-
- // Return the read end of the event pipe,
- // wrapped by a java FileDescriptor.
- return makeFD(env, pipefds[0]);
-}
-
-// static native boolean startTimer(long period_micros);
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_startTimer(
- JNIEnv *env, jclass clazz, jlong period_micros) {
- // Install the signal handler.
- // Use sigaction(2) not signal(2) so that we can correctly
- // restore the previous handler if necessary.
- struct sigaction oldact = {}, act = {};
- act.sa_handler = onsigprof;
- act.sa_flags = SA_RESTART; // the JVM doesn't expect EINTR
- if (sigaction(SIGPROF, &act, &oldact) < 0) {
- perror("sigaction");
- abort();
- }
-
- // Is a handler already in effect?
- // Check for 3-arg and 1-arg forms.
- typedef void (*sighandler_t)(int); // don't rely on this GNU extension
- sighandler_t prev = (oldact.sa_flags & SA_SIGINFO) != 0
- ? reinterpret_cast<sighandler_t>(oldact.sa_sigaction)
- : oldact.sa_handler;
- // The initial handler (DFL or IGN) may vary by thread package.
- if (prev != SIG_DFL && prev != SIG_IGN) {
- // Someone else is profiling this JVM.
- // Restore their handler and fail.
- (void)sigaction(SIGPROF, &oldact, nullptr);
- return false;
- }
-
- // Start the CPU interval timer.
- struct timeval period = {
- .tv_sec = 0,
- .tv_usec = static_cast<suseconds_t>(period_micros),
- };
- struct itimerval timer = {.it_interval = period, .it_value = period};
- if (setitimer(ITIMER_PROF, &timer, nullptr) < 0) {
- perror("setitimer");
- abort();
- }
-
- return true;
-}
-
-// static native void stopTimer();
-extern "C" JNIEXPORT void JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_stopTimer(JNIEnv *env,
- jclass clazz) {
- // Disarm the CPU interval timer.
- struct itimerval timer = {};
- if (setitimer(ITIMER_PROF, &timer, nullptr) < 0) {
- perror("setitimer");
- abort();
- }
-
- // Uninstall signal handler.
- signal(SIGPROF, SIG_IGN);
-}
-
-} // namespace cpu_profiler
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/cpu_profiler_unimpl.cc b/src/main/java/com/google/devtools/build/lib/syntax/cpu_profiler_unimpl.cc
deleted file mode 100644
index 103d401..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/cpu_profiler_unimpl.cc
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2020 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.
-
-// Starlark CPU profiler stubs for unsupported platforms.
-
-#include <jni.h>
-#include <stdlib.h>
-
-namespace cpu_profiler {
-
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_supported(JNIEnv *env,
- jclass clazz) {
- return false;
-}
-
-extern "C" JNIEXPORT jint JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_gettid(JNIEnv *env,
- jclass clazz) {
- abort();
-}
-
-extern "C" JNIEXPORT jobject JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_createPipe(JNIEnv *env,
- jclass clazz) {
- abort();
-}
-
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_startTimer(
- JNIEnv *env, jclass clazz, jlong period_micros) {
- abort();
-}
-
-extern "C" JNIEXPORT void JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_stopTimer(JNIEnv *env,
- jclass clazz) {
- abort();
-}
-
-} // namespace cpu_profiler
diff --git a/src/main/java/com/google/devtools/build/skydoc/BUILD b/src/main/java/com/google/devtools/build/skydoc/BUILD
index 7aeea4e..3d02297 100644
--- a/src/main/java/com/google/devtools/build/skydoc/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/BUILD
@@ -57,7 +57,6 @@
srcs = glob(["*.java"]),
visibility = ["//src/test:__subpackages__"],
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/events",
@@ -90,6 +89,8 @@
"//src/main/java/com/google/devtools/build/skydoc/rendering",
"//src/main/java/com/google/devtools/build/skydoc/rendering/proto:stardoc_output_java_proto",
"//src/main/java/com/google/devtools/common/options",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/tools/starlark/java/com/google/devtools/starlark/common",
"//third_party:guava",
],
diff --git a/src/main/java/com/google/devtools/build/skydoc/FilesystemFileAccessor.java b/src/main/java/com/google/devtools/build/skydoc/FilesystemFileAccessor.java
index 4015cfd..80d2fbe 100644
--- a/src/main/java/com/google/devtools/build/skydoc/FilesystemFileAccessor.java
+++ b/src/main/java/com/google/devtools/build/skydoc/FilesystemFileAccessor.java
@@ -14,10 +14,10 @@
package com.google.devtools.build.skydoc;
-import com.google.devtools.build.lib.syntax.ParserInput;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
+import net.starlark.java.syntax.ParserInput;
/** Implementation of {@link StarlarkFileAccessor} which uses the real filesystem. */
public class FilesystemFileAccessor implements StarlarkFileAccessor {
diff --git a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
index eb60115..664a54c 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -46,24 +46,6 @@
import com.google.devtools.build.lib.starlarkbuildapi.stubs.ProviderStub;
import com.google.devtools.build.lib.starlarkbuildapi.stubs.StarlarkAspectStub;
import com.google.devtools.build.lib.starlarkbuildapi.test.TestingBootstrap;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Expression;
-import com.google.devtools.build.lib.syntax.ExpressionStatement;
-import com.google.devtools.build.lib.syntax.FileOptions;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.Program;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Statement;
-import com.google.devtools.build.lib.syntax.StringLiteral;
-import com.google.devtools.build.lib.syntax.SyntaxError;
import com.google.devtools.build.skydoc.fakebuildapi.FakeActionsInfoProvider;
import com.google.devtools.build.skydoc.fakebuildapi.FakeBuildApiGlobals;
import com.google.devtools.build.skydoc.fakebuildapi.FakeConfigApi;
@@ -146,6 +128,24 @@
import java.util.Map.Entry;
import java.util.TreeMap;
import java.util.stream.Collectors;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Expression;
+import net.starlark.java.syntax.ExpressionStatement;
+import net.starlark.java.syntax.FileOptions;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.Program;
+import net.starlark.java.syntax.StarlarkFile;
+import net.starlark.java.syntax.Statement;
+import net.starlark.java.syntax.StringLiteral;
+import net.starlark.java.syntax.SyntaxError;
/**
* Main entry point for the Skydoc binary.
diff --git a/src/main/java/com/google/devtools/build/skydoc/StarlarkFileAccessor.java b/src/main/java/com/google/devtools/build/skydoc/StarlarkFileAccessor.java
index 369114d..0542a6c 100644
--- a/src/main/java/com/google/devtools/build/skydoc/StarlarkFileAccessor.java
+++ b/src/main/java/com/google/devtools/build/skydoc/StarlarkFileAccessor.java
@@ -14,8 +14,8 @@
package com.google.devtools.build.skydoc;
-import com.google.devtools.build.lib.syntax.ParserInput;
import java.io.IOException;
+import net.starlark.java.syntax.ParserInput;
/**
* Helper to handle Skydoc file I/O. This abstraction is useful for tests which don't involve
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/BUILD
index 26e3c2c..802fdbb 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/BUILD
@@ -15,7 +15,6 @@
name = "fakebuildapi",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/events",
@@ -23,6 +22,8 @@
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
"//src/main/java/com/google/devtools/build/skydoc/rendering",
"//src/main/java/com/google/devtools/build/skydoc/rendering/proto:stardoc_output_java_proto",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/ConfigApiFakes.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/ConfigApiFakes.java
index 0434dd5..919a543 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/ConfigApiFakes.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/ConfigApiFakes.java
@@ -17,7 +17,7 @@
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi.BuildSettingApi;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi.ExecTransitionFactoryApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/** Fakes for callables under the {@link StarlarkConfigApi} module. */
public class ConfigApiFakes {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeActionsInfoProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeActionsInfoProvider.java
index dc23b95..5399e08 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeActionsInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeActionsInfoProvider.java
@@ -15,7 +15,7 @@
package com.google.devtools.build.skydoc.fakebuildapi;
import com.google.devtools.build.lib.starlarkbuildapi.ActionsInfoProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/**
* Fake implementation of {@link ActionsInfoProviderApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeBuildApiGlobals.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeBuildApiGlobals.java
index 26b5da0..2b3d482 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeBuildApiGlobals.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeBuildApiGlobals.java
@@ -16,8 +16,8 @@
import com.google.devtools.build.lib.starlarkbuildapi.LateBoundDefaultApi;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkBuildApiGlobals;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
/** Fake implementation of {@link StarlarkBuildApiGlobals}. */
public class FakeBuildApiGlobals implements StarlarkBuildApiGlobals {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeConfigApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeConfigApi.java
index 9007edf..5b2ba52 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeConfigApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeConfigApi.java
@@ -15,9 +15,9 @@
package com.google.devtools.build.skydoc.fakebuildapi;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi;
-import com.google.devtools.build.lib.syntax.Printer;
import com.google.devtools.build.skydoc.fakebuildapi.ConfigApiFakes.FakeBuildSettingDescriptor;
import com.google.devtools.build.skydoc.fakebuildapi.ConfigApiFakes.FakeExecTransitionFactory;
+import net.starlark.java.eval.Printer;
/** Fake implementation of {@link StarlarkConfigApi}. */
public class FakeConfigApi implements StarlarkConfigApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDefaultInfoProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDefaultInfoProvider.java
index 103d848..02b48d4 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDefaultInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDefaultInfoProvider.java
@@ -18,9 +18,9 @@
import com.google.devtools.build.lib.starlarkbuildapi.DefaultInfoApi.DefaultInfoApiProvider;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.RunfilesApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkThread;
/**
* Fake implementation of {@link DefaultInfoApiProvider}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDescriptor.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDescriptor.java
index 6d6d25d..88b8bb2 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDescriptor.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDescriptor.java
@@ -15,11 +15,11 @@
package com.google.devtools.build.skydoc.fakebuildapi;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAttrModuleApi.Descriptor;
-import com.google.devtools.build.lib.syntax.Printer;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeInfo;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeType;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderNameGroup;
import java.util.List;
+import net.starlark.java.eval.Printer;
/**
* Fake implementation of {@link Descriptor}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeExecGroup.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeExecGroup.java
index 214ac42..18ffcd5 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeExecGroup.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeExecGroup.java
@@ -15,7 +15,7 @@
package com.google.devtools.build.skydoc.fakebuildapi;
import com.google.devtools.build.lib.starlarkbuildapi.ExecGroupApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/** Fake implementation of {@link ExecGroupApi} */
public class FakeExecGroup implements ExecGroupApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeLateBoundDefaultApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeLateBoundDefaultApi.java
index 6c81f56..9ea8671 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeLateBoundDefaultApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeLateBoundDefaultApi.java
@@ -15,7 +15,7 @@
package com.google.devtools.build.skydoc.fakebuildapi;
import com.google.devtools.build.lib.starlarkbuildapi.LateBoundDefaultApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/**
* Fake implementation of {@link LateBoundDefaultApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeOutputGroupInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeOutputGroupInfo.java
index 7a50a43..dba1beb 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeOutputGroupInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeOutputGroupInfo.java
@@ -15,9 +15,9 @@
package com.google.devtools.build.skydoc.fakebuildapi;
import com.google.devtools.build.lib.starlarkbuildapi.OutputGroupInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/**
* Fake implementation of {@link OutputGroupInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java
index e7ce53e..7a5bfb6 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java
@@ -15,11 +15,11 @@
package com.google.devtools.build.skydoc.fakebuildapi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Tuple;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
/** Fake callable implementation of {@link ProviderApi}. */
public class FakeProviderApi implements StarlarkCallable, ProviderApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSplitTransitionProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSplitTransitionProvider.java
index d84d18b..0cb3ba6 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSplitTransitionProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSplitTransitionProvider.java
@@ -15,7 +15,7 @@
package com.google.devtools.build.skydoc.fakebuildapi;
import com.google.devtools.build.lib.starlarkbuildapi.SplitTransitionProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/** Fake implementation of {@link SplitTransitionProviderApi}. */
public class FakeSplitTransitionProvider implements SplitTransitionProviderApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAspect.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAspect.java
index 4a5d1b4..bf4ffb8 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAspect.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAspect.java
@@ -15,8 +15,8 @@
package com.google.devtools.build.skydoc.fakebuildapi;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAspectApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkCallable;
/** Fake implementation of {@link StarlarkAspectApi}. */
public class FakeStarlarkAspect implements StarlarkCallable, StarlarkAspectApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAttrModuleApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAttrModuleApi.java
index 547e0f7..bbe8707 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAttrModuleApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAttrModuleApi.java
@@ -17,17 +17,17 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAttrModuleApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeType;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
/**
* Fake implementation of {@link StarlarkAttrModuleApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkNativeModuleApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkNativeModuleApi.java
index 0f19f49..1b1fd00 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkNativeModuleApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkNativeModuleApi.java
@@ -17,18 +17,18 @@
import com.google.common.collect.ImmutableCollection;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkNativeModuleApi;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/** Fake implementation of {@link StarlarkNativeModuleApi}. */
public class FakeStarlarkNativeModuleApi implements StarlarkNativeModuleApi, ClassObject {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkRuleFunctionsApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkRuleFunctionsApi.java
index 9ce5351..1573f18 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkRuleFunctionsApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkRuleFunctionsApi.java
@@ -23,14 +23,6 @@
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAspectApi;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleFunctionsApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.skydoc.rendering.AspectInfoWrapper;
import com.google.devtools.build.skydoc.rendering.ProviderInfoWrapper;
import com.google.devtools.build.skydoc.rendering.RuleInfoWrapper;
@@ -46,6 +38,14 @@
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/**
* Fake implementation of {@link StarlarkRuleFunctionsApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStructApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStructApi.java
index 38fd011..15185b5 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStructApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStructApi.java
@@ -20,13 +20,13 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Ordering;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkThread;
/**
* Fake implementation of {@link StructApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/BUILD
index a3e1b8f..1877c02 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/BUILD
@@ -15,7 +15,6 @@
name = "android",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/events",
@@ -24,6 +23,8 @@
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidApplicationResourceInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidApplicationResourceInfo.java
index dbb76ca..352629c 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidApplicationResourceInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidApplicationResourceInfo.java
@@ -18,8 +18,8 @@
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidApplicationResourceInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidApplicationResourceInfoApi.AndroidApplicationResourceInfoApiProvider;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidDeviceBrokerInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/** Fake implementation of {@link AndroidDeviceBrokerInfoApi}. */
public class FakeAndroidApplicationResourceInfo implements AndroidDeviceBrokerInfoApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidAssetsInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidAssetsInfo.java
index 891a0d5..cdcd1be 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidAssetsInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidAssetsInfo.java
@@ -20,8 +20,8 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidAssetsInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.ParsedAndroidAssetsApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
/** Fake implementation of AndroidAssetsInfo. */
public class FakeAndroidAssetsInfo
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidBinaryDataInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidBinaryDataInfo.java
index 1ef416a..67bd31f 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidBinaryDataInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidBinaryDataInfo.java
@@ -16,7 +16,7 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidBinaryDataInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** Fake implementation of {@link AndroidBinaryDataInfoApi}. */
public class FakeAndroidBinaryDataInfo implements AndroidBinaryDataInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidCcLinkParamsProvider.java
index 5672953..1d73b3e 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidCcLinkParamsProvider.java
@@ -17,7 +17,7 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidCcLinkParamsProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** Fake implementation of AndroidCcLinkParamsProvider. */
public class FakeAndroidCcLinkParamsProvider
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidDeviceBrokerInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidDeviceBrokerInfo.java
index 949a2f7..a3e7ed3 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidDeviceBrokerInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidDeviceBrokerInfo.java
@@ -15,8 +15,8 @@
package com.google.devtools.build.skydoc.fakebuildapi.android;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidDeviceBrokerInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/**
* Fake implementation of {@link AndroidDeviceBrokerInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidFeatureFlagSetProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidFeatureFlagSetProvider.java
index 46c8e13..de535e7 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidFeatureFlagSetProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidFeatureFlagSetProvider.java
@@ -17,8 +17,8 @@
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidFeatureFlagSetProviderApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
/** Fake implementation of {@link AndroidFeatureFlagSetProviderApi}. */
public class FakeAndroidFeatureFlagSetProvider implements AndroidFeatureFlagSetProviderApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdeInfoProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdeInfoProvider.java
index 1b6736f..d22f44a 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdeInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdeInfoProvider.java
@@ -20,10 +20,10 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidIdeInfoProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.OutputJarApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
/** Fake implementation of AndroidIdeInfoProvider. */
public class FakeAndroidIdeInfoProvider
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdlProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdlProvider.java
index 06aa79e..87a4be9 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdlProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdlProvider.java
@@ -17,7 +17,7 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidIdlProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** Fake implementation of AndroidIdlProvider. */
public class FakeAndroidIdlProvider implements AndroidIdlProviderApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidInstrumentationInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidInstrumentationInfo.java
index a562d0b..b3a0996 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidInstrumentationInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidInstrumentationInfo.java
@@ -16,8 +16,8 @@
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidInstrumentationInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.ApkInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/** Fake implementation of {@link AndroidInstrumentationInfoApi}. */
public class FakeAndroidInstrumentationInfo
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryAarInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryAarInfo.java
index 35866fc..154b7a0 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryAarInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryAarInfo.java
@@ -17,8 +17,8 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidLibraryAarInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
/** Fake implementation of {@link AndroidLibraryAarInfoApi}. */
public class FakeAndroidLibraryAarInfo implements AndroidLibraryAarInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryResourceClassJarProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryResourceClassJarProvider.java
index 19215a6..c3e1393 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryResourceClassJarProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryResourceClassJarProvider.java
@@ -17,7 +17,7 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidLibraryResourceClassJarProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** Fake implementation of AndroidLibraryResourceClassJarProvider. */
public class FakeAndroidLibraryResourceClassJarProvider
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidManifestInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidManifestInfo.java
index 92f97c5..aabe3e0 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidManifestInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidManifestInfo.java
@@ -16,7 +16,7 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidManifestInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** Fake implementation of AndroidManifestInfo. */
public class FakeAndroidManifestInfo implements AndroidManifestInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidNativeLibsInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidNativeLibsInfo.java
index 1db41c6..2b12a03 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidNativeLibsInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidNativeLibsInfo.java
@@ -17,8 +17,8 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidNativeLibsInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/**
* Fake implementation of {@link AndroidNativeLibsInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidPreDexJarProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidPreDexJarProvider.java
index 91dfd6f..cebdac0 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidPreDexJarProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidPreDexJarProvider.java
@@ -16,7 +16,7 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidPreDexJarProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** Fake implementation of AndroidPreDexJarProvider. */
public class FakeAndroidPreDexJarProvider implements AndroidPreDexJarProviderApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidProguardInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidProguardInfo.java
index 05cb379..85c985a 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidProguardInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidProguardInfo.java
@@ -17,8 +17,8 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidProguardInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
/** Fake implementation of AndroidProguardInfo. */
public class FakeAndroidProguardInfo implements AndroidProguardInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidResourcesInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidResourcesInfo.java
index 77b3a69..88acf4a 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidResourcesInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidResourcesInfo.java
@@ -20,9 +20,9 @@
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidManifestInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidResourcesInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.ValidatedAndroidDataApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
/** Fake implementation of {@link AndroidResourcesInfoApi}. */
public class FakeAndroidResourcesInfo
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSdkProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSdkProvider.java
index 21b5807..30a091d 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSdkProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSdkProvider.java
@@ -18,8 +18,8 @@
import com.google.devtools.build.lib.starlarkbuildapi.FilesToRunProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidSdkProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.TransitiveInfoCollectionApi;
-import com.google.devtools.build.lib.syntax.EvalException;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
/** Fake implementation of AndroidSdkProvider. */
public class FakeAndroidSdkProvider
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSplitTransitition.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSplitTransitition.java
index 9373bf2..b7d8b2f 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSplitTransitition.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSplitTransitition.java
@@ -15,7 +15,7 @@
package com.google.devtools.build.skydoc.fakebuildapi.android;
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidSplitTransititionApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/**
* Fake implementation of {@link AndroidSplitTransititionApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeApkInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeApkInfo.java
index 513cfb5..f9d2d30 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeApkInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeApkInfo.java
@@ -17,9 +17,9 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.ApkInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/**
* Fake implementation of {@link ApkInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeDataBindingV2Provider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeDataBindingV2Provider.java
index a363dae..ef77e17 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeDataBindingV2Provider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeDataBindingV2Provider.java
@@ -18,9 +18,9 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.DataBindingV2ProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
/** Fake implementation of {@link DataBindingV2Provider}. */
public class FakeDataBindingV2Provider implements DataBindingV2ProviderApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeProguardMappingProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeProguardMappingProvider.java
index 1ae4386..8c3b697 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeProguardMappingProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeProguardMappingProvider.java
@@ -16,7 +16,7 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.android.ProguardMappingProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** Fake implementation of ProguardMappingProvider. */
public class FakeProguardMappingProvider implements ProguardMappingProviderApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/BUILD
index 871f01b..4ffa5c3 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/BUILD
@@ -15,7 +15,6 @@
name = "apple",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple",
@@ -23,6 +22,8 @@
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
],
)
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleCommon.java
index 131bc12..a018487 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleCommon.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleCommon.java
@@ -30,14 +30,14 @@
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.skydoc.fakebuildapi.FakeProviderApi;
import com.google.devtools.build.skydoc.fakebuildapi.FakeSplitTransitionProvider;
import com.google.devtools.build.skydoc.fakebuildapi.FakeStarlarkAspect;
import com.google.devtools.build.skydoc.fakebuildapi.FakeStructApi;
import com.google.devtools.build.skydoc.fakebuildapi.apple.FakeAppleStaticLibraryInfo.FakeAppleStaticLibraryInfoProvider;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
/** Fake implementation of {@link AppleCommonApi}. */
public class FakeAppleCommon
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java
index 69c3095..7a3420d 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java
@@ -18,8 +18,8 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.apple.AppleDynamicFrameworkInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.apple.ObjcProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/** Fake implementation of {@link AppleDynamicFrameworkInfoApi}. */
public class FakeAppleDynamicFrameworkInfo implements AppleDynamicFrameworkInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleStaticLibraryInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleStaticLibraryInfo.java
index 9680513..4cd651d 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleStaticLibraryInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleStaticLibraryInfo.java
@@ -17,8 +17,8 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.apple.AppleStaticLibraryInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.apple.ObjcProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/**
* Fake implementation of {@link AppleStaticLibraryInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeDottedVersion.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeDottedVersion.java
index e889bd4..005fa47 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeDottedVersion.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeDottedVersion.java
@@ -15,7 +15,7 @@
package com.google.devtools.build.skydoc.fakebuildapi.apple;
import com.google.devtools.build.lib.starlarkbuildapi.apple.DottedVersionApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/**
* Fake implementation of {@link DottedVersionApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java
index 5a237c7..1712004 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java
@@ -18,8 +18,8 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.apple.ObjcProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcCompilationContextApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
/**
* Fake implementation of {@link ObjcProviderApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/BUILD
index e7214ca..85207b9 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/BUILD
@@ -15,10 +15,11 @@
name = "config",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
],
)
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigGlobalLibrary.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigGlobalLibrary.java
index 5ec5275..71fefc0 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigGlobalLibrary.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigGlobalLibrary.java
@@ -16,10 +16,10 @@
import com.google.devtools.build.lib.starlarkbuildapi.config.ConfigGlobalLibraryApi;
import com.google.devtools.build.lib.starlarkbuildapi.config.ConfigurationTransitionApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
/**
* Fake implementation of {@link ConfigGlobalLibraryApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigurationTransition.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigurationTransition.java
index 31a241e..ee497a4 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigurationTransition.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigurationTransition.java
@@ -15,7 +15,7 @@
package com.google.devtools.build.skydoc.fakebuildapi.config;
import com.google.devtools.build.lib.starlarkbuildapi.config.ConfigurationTransitionApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/**
* Fake implementation of {@link ConfigurationTransitionApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/BUILD
index 271a268..72c92d1 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/BUILD
@@ -15,7 +15,6 @@
name = "cpp",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/events",
@@ -25,6 +24,8 @@
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
],
)
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java
index c4a4e26..60b8dba 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java
@@ -18,8 +18,8 @@
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcCompilationContextApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcLinkingContextApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/** Fake implementation of {@link CcInfoApi}. */
public class FakeCcInfo implements CcInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java
index 917a80f..b21c1c5 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java
@@ -33,13 +33,13 @@
import com.google.devtools.build.lib.starlarkbuildapi.cpp.LibraryToLinkApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.LinkerInputApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Tuple;
import com.google.devtools.build.skydoc.fakebuildapi.FakeProviderApi;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
/** Fake implementation of {@link CcModuleApi}. */
public class FakeCcModule
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcToolchainConfigInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcToolchainConfigInfo.java
index 0847720..be32f26 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcToolchainConfigInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcToolchainConfigInfo.java
@@ -15,8 +15,8 @@
package com.google.devtools.build.skydoc.fakebuildapi.cpp;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcToolchainConfigInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/** Fake implementation of {@link CcToolchainConfigInfoApi}. */
public class FakeCcToolchainConfigInfo implements CcToolchainConfigInfoApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java
index bc5ba85..09cea24 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java
@@ -33,8 +33,8 @@
import com.google.devtools.build.lib.starlarkbuildapi.go.GoContextInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.go.GoPackageInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Tuple;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Tuple;
/** Fake implementation of {@link GoWrapCcHelperApi}. */
public class FakeGoWrapCcHelper
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java
index 5121f90..fa45d7e 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java
@@ -17,8 +17,8 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.PyCcLinkParamsProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/** Fake implementation of {@link PyCcLinkParamsProviderApi}. */
public class FakePyCcLinkParamsProvider implements PyCcLinkParamsProviderApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java
index 5d759bc..99bc274 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java
@@ -27,7 +27,7 @@
import com.google.devtools.build.lib.starlarkbuildapi.cpp.PyWrapCcInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.WrapCcIncludeProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.Sequence;
/** Fake implementation of {@link PyWrapCcHelperApi}. */
public class FakePyWrapCcHelper
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java
index 91ffee3..3d40dbe 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java
@@ -18,8 +18,8 @@
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.PyWrapCcHelperApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.PyWrapCcInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/** Fake implementation of {@link PyWrapCcHelperApi}. */
public class FakePyWrapCcInfo implements PyWrapCcInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/BUILD
index 3090c0b..89b4c3a 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/BUILD
@@ -15,7 +15,6 @@
name = "java",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/events",
@@ -25,6 +24,8 @@
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCcLinkParamsProvider.java
index 4145cb4..ee310a5 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCcLinkParamsProvider.java
@@ -17,8 +17,8 @@
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaCcLinkParamsProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/** Fake implementation of {@link JavaCcLinkParamsProvider}. */
public class FakeJavaCcLinkParamsProvider
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java
index 871f5511..59cb175 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java
@@ -24,10 +24,10 @@
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaCommonApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaToolchainStarlarkApiProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.skydoc.fakebuildapi.FakeProviderApi;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
/** Fake implementation of {@link JavaCommonApi}. */
public class FakeJavaCommon
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaInfo.java
index 7cb4110..3e72f02 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaInfo.java
@@ -20,10 +20,10 @@
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaCompilationInfoProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaRuleOutputJarsProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
/**
* Fake implementation of {@link JavaInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaProtoCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaProtoCommon.java
index a002c8b..2eb9a76 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaProtoCommon.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaProtoCommon.java
@@ -20,7 +20,7 @@
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaProtoCommonApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** Fake implementation of {@link JavaProtoCommonApi}. */
public class FakeJavaProtoCommon
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaRuntimeInfoApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaRuntimeInfoApi.java
index 70ec553..51d8c01 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaRuntimeInfoApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaRuntimeInfoApi.java
@@ -16,8 +16,8 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaRuntimeInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
final class FakeJavaRuntimeInfoApi implements JavaRuntimeInfoApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaToolchainStarlarkApiProviderApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaToolchainStarlarkApiProviderApi.java
index 0d7e47e..636188e 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaToolchainStarlarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaToolchainStarlarkApiProviderApi.java
@@ -17,9 +17,9 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaToolchainStarlarkApiProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
final class FakeJavaToolchainStarlarkApiProviderApi implements JavaToolchainStarlarkApiProviderApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeProguardSpecProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeProguardSpecProvider.java
index afe551e..c7db396 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeProguardSpecProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeProguardSpecProvider.java
@@ -16,7 +16,7 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.ProguardSpecProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
/** Fake implementation of {@link ProguardSpecProviderApi} */
public class FakeProguardSpecProvider implements ProguardSpecProviderApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/BUILD
index 470dc21..fff143f 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/BUILD
@@ -15,10 +15,11 @@
name = "proto",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/FakeProtoInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/FakeProtoInfo.java
index 6b6526a..0da6f16 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/FakeProtoInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/FakeProtoInfo.java
@@ -18,8 +18,8 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.ProtoInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/** Fake implementation of {@link ProtoInfoApi}. */
public class FakeProtoInfo implements ProtoInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/BUILD
index c457e66..e0d840c 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/BUILD
@@ -15,11 +15,12 @@
name = "python",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
],
)
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyInfo.java
index 059da20..a7245d2 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyInfo.java
@@ -17,9 +17,9 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.python.PyInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkThread;
/** Fake implementation of {@link PyInfoApi}. */
public class FakePyInfo implements PyInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyRuntimeInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyRuntimeInfo.java
index debab34..43b8446 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyRuntimeInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyRuntimeInfo.java
@@ -17,9 +17,9 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
import com.google.devtools.build.lib.starlarkbuildapi.python.PyRuntimeInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkThread;
/** Fake implementation of {@link PyRuntimeInfoApi}. */
public class FakePyRuntimeInfo implements PyRuntimeInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyStarlarkTransitions.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyStarlarkTransitions.java
index dedd9eb..313ec68 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyStarlarkTransitions.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyStarlarkTransitions.java
@@ -15,8 +15,8 @@
package com.google.devtools.build.skydoc.fakebuildapi.python;
import com.google.devtools.build.lib.starlarkbuildapi.python.PyStarlarkTransitionsApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigurationTransition;
+import net.starlark.java.eval.StarlarkValue;
/** Fake implementation of {@link PyStarlarkTransitionsApi}. */
public final class FakePyStarlarkTransitions implements PyStarlarkTransitionsApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/BUILD
index 424e2f3..f0b9960 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/BUILD
@@ -15,12 +15,13 @@
name = "repository",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
"//src/main/java/com/google/devtools/build/skydoc/rendering",
"//src/main/java/com/google/devtools/build/skydoc/rendering/proto:stardoc_output_java_proto",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java
index ddef972..8f9edc3 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java
@@ -17,13 +17,6 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.starlarkbuildapi.repository.RepositoryModuleApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.skydoc.fakebuildapi.FakeDescriptor;
import com.google.devtools.build.skydoc.fakebuildapi.FakeStarlarkRuleFunctionsApi.AttributeNameComparator;
import com.google.devtools.build.skydoc.rendering.RuleInfoWrapper;
@@ -32,6 +25,13 @@
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.RuleInfo;
import java.util.List;
import java.util.stream.Collectors;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
/**
* Fake implementation of {@link RepositoryModuleApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/BUILD
index 828e07f..e3b9720 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/BUILD
@@ -15,11 +15,12 @@
name = "test",
srcs = glob(["*.java"]),
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//third_party:guava",
],
)
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisFailureInfoProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisFailureInfoProvider.java
index 83870ad..60d6a8a 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisFailureInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisFailureInfoProvider.java
@@ -15,7 +15,7 @@
package com.google.devtools.build.skydoc.fakebuildapi.test;
import com.google.devtools.build.lib.starlarkbuildapi.test.AnalysisFailureInfoApi.AnalysisFailureInfoProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/**
* Fake implementation of {@link AnalysisFailureInfoProviderApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisTestResultInfoProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisTestResultInfoProvider.java
index 2d97f43..b177efc 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisTestResultInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisTestResultInfoProvider.java
@@ -16,7 +16,7 @@
import com.google.devtools.build.lib.starlarkbuildapi.test.AnalysisTestResultInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.test.AnalysisTestResultInfoApi.AnalysisTestResultInfoProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/**
* Fake implementation of {@link AnalysisTestResultInfoProviderApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeCoverageCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeCoverageCommon.java
index 806c699..cd1ebcc 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeCoverageCommon.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeCoverageCommon.java
@@ -18,8 +18,8 @@
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.test.CoverageCommonApi;
import com.google.devtools.build.lib.starlarkbuildapi.test.InstrumentedFilesInfoApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
/** Fake implementation of {@link CoverageCommonApi}. */
public class FakeCoverageCommon
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeExecutionInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeExecutionInfo.java
index 55001ce..e424f1c 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeExecutionInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeExecutionInfo.java
@@ -16,8 +16,8 @@
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.starlarkbuildapi.test.ExecutionInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/**
* Fake implementation of {@link ExecutionInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeInstrumentedFilesInfoProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeInstrumentedFilesInfoProvider.java
index 7502223..f58193a 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeInstrumentedFilesInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeInstrumentedFilesInfoProvider.java
@@ -15,7 +15,7 @@
package com.google.devtools.build.skydoc.fakebuildapi.test;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
/** Fake implementation of {@link InstrumentedFilesInfoProviderApi}. */
public class FakeInstrumentedFilesInfoProvider implements ProviderApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingEnvironmentInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingEnvironmentInfo.java
index 173f0c5..8b9e8a5 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingEnvironmentInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingEnvironmentInfo.java
@@ -16,9 +16,9 @@
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.starlarkbuildapi.test.TestEnvironmentInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
import java.util.Map;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
/**
* Fake implementation of {@link TestEnvironmentInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingModule.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingModule.java
index 73be8b4..b14f48c 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingModule.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingModule.java
@@ -17,7 +17,7 @@
import com.google.devtools.build.lib.starlarkbuildapi.test.ExecutionInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.test.TestEnvironmentInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.test.TestingModuleApi;
-import com.google.devtools.build.lib.syntax.Dict;
+import net.starlark.java.eval.Dict;
/**
* Fake implementation of {@link TestingModuleApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/AspectInfoWrapper.java b/src/main/java/com/google/devtools/build/skydoc/rendering/AspectInfoWrapper.java
index 7a76347..d553e02 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/AspectInfoWrapper.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/AspectInfoWrapper.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.skydoc.rendering;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AspectInfo;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.syntax.Location;
/** Stores information about a Starlark aspect definition. */
public class AspectInfoWrapper {
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/BUILD b/src/main/java/com/google/devtools/build/skydoc/rendering/BUILD
index 0da7b88..67793e9 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/BUILD
@@ -16,9 +16,10 @@
srcs = glob(["*.java"]),
resources = [":template_files"],
deps = [
- "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/skydoc/rendering/proto:stardoc_output_java_proto",
+ "//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/syntax",
"//src/tools/starlark/java/com/google/devtools/starlark/common",
"//third_party:apache_velocity",
"//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/DocstringParseException.java b/src/main/java/com/google/devtools/build/skydoc/rendering/DocstringParseException.java
index 2e78dc7..d198e9f 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/DocstringParseException.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/DocstringParseException.java
@@ -14,10 +14,10 @@
package com.google.devtools.build.skydoc.rendering;
-import com.google.devtools.build.lib.syntax.Location;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.StarlarkFunctionInfo;
import com.google.devtools.starlark.common.DocstringUtils.DocstringParseError;
import java.util.List;
+import net.starlark.java.syntax.Location;
/**
* An exception that may be thrown during construction of {@link StarlarkFunctionInfo} if the
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/FunctionUtil.java b/src/main/java/com/google/devtools/build/skydoc/rendering/FunctionUtil.java
index 874a3f5..c24e13e 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/FunctionUtil.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/FunctionUtil.java
@@ -17,8 +17,6 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.FunctionParamInfo;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.StarlarkFunctionInfo;
import com.google.devtools.starlark.common.DocstringUtils;
@@ -28,6 +26,8 @@
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkFunction;
/** Contains a number of utility methods for functions and parameters. */
public final class FunctionUtil {
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/ProtoRenderer.java b/src/main/java/com/google/devtools/build/skydoc/rendering/ProtoRenderer.java
index 728cf187..4b0e675 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/ProtoRenderer.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/ProtoRenderer.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.skydoc.rendering;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AspectInfo;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ModuleInfo;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderInfo;
@@ -24,6 +23,7 @@
import java.io.IOException;
import java.util.Collection;
import java.util.Map;
+import net.starlark.java.eval.StarlarkFunction;
/** Produces skydoc output in proto form. */
public class ProtoRenderer {
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfoWrapper.java b/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfoWrapper.java
index 26d0c48..8b569a8 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfoWrapper.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfoWrapper.java
@@ -14,10 +14,10 @@
package com.google.devtools.build.skydoc.rendering;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderFieldInfo;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderInfo;
import java.util.Collection;
+import net.starlark.java.eval.StarlarkCallable;
/**
* Stores information about a starlark provider definition, comprised of StarlarkCallable identifier
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/RuleInfoWrapper.java b/src/main/java/com/google/devtools/build/skydoc/rendering/RuleInfoWrapper.java
index 94dcd03..45ad633 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/RuleInfoWrapper.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/RuleInfoWrapper.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.skydoc.rendering;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.RuleInfo;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.syntax.Location;
/** Stores information about a Starlark rule definition. */
public class RuleInfoWrapper {