Pass SkylarkSemantics through Skyframe instead of the options class
Also remove the use of the @UsesOnlyCoreTypes annotation on SkylarkSemanticsOptions. It was only there to help mark that the options class was safe to put in Skyframe.
RELNOTES: None
PiperOrigin-RevId: 171248504
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 f97f14a..a121e55 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
@@ -25,7 +25,7 @@
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory.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.SkylarkSemanticsOptions;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunction;
import java.util.List;
@@ -122,7 +122,7 @@
* Returns the options that affect the Skylark interpreter used for evaluating Skylark rule
* implementation functions.
*/
- SkylarkSemanticsOptions getSkylarkSemantics() throws InterruptedException;
+ SkylarkSemantics getSkylarkSemantics() throws InterruptedException;
/**
* Returns the Artifact that is used to hold the non-volatile workspace status for the current
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 4198e0c..3fa4c0f 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
@@ -33,7 +33,7 @@
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.SkylarkSemanticsOptions;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunction;
@@ -281,7 +281,7 @@
}
@Override
- public SkylarkSemanticsOptions getSkylarkSemantics() throws InterruptedException {
+ public SkylarkSemantics getSkylarkSemantics() throws InterruptedException {
return PrecomputedValue.SKYLARK_SEMANTICS.get(skyframeEnv);
}
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 ef01005..e8cb1b7 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
@@ -54,10 +54,9 @@
import com.google.devtools.build.lib.syntax.Environment.Extension;
import com.google.devtools.build.lib.syntax.Environment.Phase;
import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.SkylarkSemanticsOptions;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.syntax.SkylarkUtils;
import com.google.devtools.build.lib.syntax.Type;
-import com.google.devtools.common.options.Options;
import com.google.devtools.common.options.OptionsClassProvider;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
@@ -688,7 +687,7 @@
Environment env = createSkylarkRuleClassEnvironment(
mutability,
SkylarkModules.getGlobals(modules),
- Options.getDefaults(SkylarkSemanticsOptions.class),
+ SkylarkSemantics.DEFAULT_SEMANTICS,
/*eventHandler=*/ null,
/*astFileContentHashCode=*/ null,
/*importMap=*/ null);
@@ -702,7 +701,7 @@
private Environment createSkylarkRuleClassEnvironment(
Mutability mutability,
Environment.Frame globals,
- SkylarkSemanticsOptions skylarkSemantics,
+ SkylarkSemantics skylarkSemantics,
EventHandler eventHandler,
String astFileContentHashCode,
Map<String, Extension> importMap) {
@@ -723,7 +722,7 @@
public Environment createSkylarkRuleClassEnvironment(
Label extensionLabel,
Mutability mutability,
- SkylarkSemanticsOptions skylarkSemantics,
+ SkylarkSemantics skylarkSemantics,
EventHandler eventHandler,
String astFileContentHashCode,
Map<String, Extension> importMap) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java
index 077b499..d993620 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java
@@ -47,7 +47,7 @@
import com.google.devtools.build.lib.syntax.Runtime;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
-import com.google.devtools.build.lib.syntax.SkylarkSemanticsOptions;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.syntax.SkylarkType;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileType;
@@ -75,7 +75,7 @@
public static ConfiguredTarget buildRule(
RuleContext ruleContext,
BaseFunction ruleImplementation,
- SkylarkSemanticsOptions skylarkSemantics)
+ SkylarkSemantics skylarkSemantics)
throws InterruptedException {
String expectFailure = ruleContext.attributes().get("expect_failure", Type.STRING);
SkylarkRuleContext skylarkRuleContext = null;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java
index e242d46..13dd231 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java
@@ -69,7 +69,6 @@
import com.google.devtools.build.lib.syntax.SkylarkIndexable;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.SkylarkSemantics;
-import com.google.devtools.build.lib.syntax.SkylarkSemanticsOptions;
import com.google.devtools.build.lib.syntax.SkylarkType;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.syntax.Type.LabelClass;
@@ -199,19 +198,17 @@
* if it is for a rule.
* @throws InterruptedException
*/
- // TODO(brandjon): Take in SkylarkSemantics instead of SkylarkSemanticsOptions.
public SkylarkRuleContext(RuleContext ruleContext,
@Nullable AspectDescriptor aspectDescriptor,
- SkylarkSemanticsOptions skylarkSemantics)
+ SkylarkSemantics skylarkSemantics)
throws EvalException, InterruptedException {
- this.actionFactory = new SkylarkActionFactory(
- this, skylarkSemantics.toSkylarkSemantics(), ruleContext);
+ this.actionFactory = new SkylarkActionFactory(this, skylarkSemantics, ruleContext);
this.ruleContext = Preconditions.checkNotNull(ruleContext);
this.ruleLabelCanonicalName = ruleContext.getLabel().getCanonicalForm();
this.fragments = new FragmentCollection(ruleContext, ConfigurationTransition.NONE);
this.hostFragments = new FragmentCollection(ruleContext, ConfigurationTransition.HOST);
this.aspectDescriptor = aspectDescriptor;
- this.skylarkSemantics = skylarkSemantics.toSkylarkSemantics();
+ this.skylarkSemantics = skylarkSemantics;
if (aspectDescriptor == null) {
this.isForAspect = false;
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 ce3e1c0..df241d4 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
@@ -58,7 +58,7 @@
import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.SkylarkList.MutableList;
-import com.google.devtools.build.lib.syntax.SkylarkSemanticsOptions;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.syntax.SkylarkSignatureProcessor;
import com.google.devtools.build.lib.syntax.SkylarkUtils;
import com.google.devtools.build.lib.syntax.Statement;
@@ -69,7 +69,6 @@
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.UnixGlob;
-import com.google.devtools.common.options.Options;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
@@ -1287,7 +1286,7 @@
Map<String, Extension> imports,
ImmutableList<Label> skylarkFileDependencies,
RuleVisibility defaultVisibility,
- SkylarkSemanticsOptions skylarkSemantics,
+ SkylarkSemantics skylarkSemantics,
Globber globber)
throws InterruptedException {
StoredEventHandler localReporterForParsing = new StoredEventHandler();
@@ -1329,7 +1328,7 @@
Map<String, Extension> imports,
ImmutableList<Label> skylarkFileDependencies,
RuleVisibility defaultVisibility,
- SkylarkSemanticsOptions skylarkSemantics,
+ SkylarkSemantics skylarkSemantics,
Globber globber)
throws InterruptedException {
MakeEnvironment.Builder makeEnv = new MakeEnvironment.Builder();
@@ -1421,7 +1420,7 @@
/*imports=*/ ImmutableMap.<String, Extension>of(),
/*skylarkFileDependencies=*/ ImmutableList.<Label>of(),
/*defaultVisibility=*/ ConstantRuleVisibility.PUBLIC,
- Options.getDefaults(SkylarkSemanticsOptions.class),
+ SkylarkSemantics.DEFAULT_SEMANTICS,
globber)
.build();
for (Postable post : result.getPosts()) {
@@ -1631,7 +1630,7 @@
Iterable<Event> pastEvents,
Iterable<Postable> pastPosts,
RuleVisibility defaultVisibility,
- SkylarkSemanticsOptions skylarkSemantics,
+ SkylarkSemantics skylarkSemantics,
boolean containsError,
MakeEnvironment.Builder pkgMakeEnv,
Map<String, Extension> imports,
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 ba7fb2f..5235523 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,7 +19,7 @@
import com.google.devtools.build.lib.syntax.Environment;
import com.google.devtools.build.lib.syntax.Environment.Extension;
import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.SkylarkSemanticsOptions;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import java.util.Map;
import javax.annotation.Nullable;
@@ -58,7 +58,7 @@
Environment createSkylarkRuleClassEnvironment(
Label label,
Mutability mutability,
- SkylarkSemanticsOptions skylarkSemantics,
+ SkylarkSemantics skylarkSemantics,
EventHandler eventHandler,
@Nullable String astFileContentHashCode,
@Nullable Map<String, Extension> importMap);
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 f6385f2..976b56d 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,7 +20,7 @@
import com.google.devtools.build.lib.syntax.BuildFileAST;
import com.google.devtools.build.lib.syntax.Mutability;
import com.google.devtools.build.lib.syntax.Runtime;
-import com.google.devtools.build.lib.syntax.SkylarkSemanticsOptions;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.RootedPath;
@@ -100,7 +100,7 @@
if (!fileValue.isFile()) {
return ASTFileLookupValue.forBadFile(fileLabel);
}
- SkylarkSemanticsOptions skylarkSemantics = PrecomputedValue.SKYLARK_SEMANTICS.get(env);
+ SkylarkSemantics skylarkSemantics = PrecomputedValue.SKYLARK_SEMANTICS.get(env);
if (skylarkSemantics == null) {
return null;
}
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 562b2bf..c5d7232 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
@@ -53,7 +53,7 @@
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.ParserInputSource;
import com.google.devtools.build.lib.syntax.SkylarkImport;
-import com.google.devtools.build.lib.syntax.SkylarkSemanticsOptions;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.syntax.Statement;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.util.Preconditions;
@@ -532,7 +532,7 @@
return null;
}
- SkylarkSemanticsOptions skylarkSemantics = PrecomputedValue.SKYLARK_SEMANTICS.get(env);
+ SkylarkSemantics skylarkSemantics = PrecomputedValue.SKYLARK_SEMANTICS.get(env);
if (skylarkSemantics == null) {
return null;
}
@@ -1186,7 +1186,7 @@
Path buildFilePath,
@Nullable FileValue buildFileValue,
RuleVisibility defaultVisibility,
- SkylarkSemanticsOptions skylarkSemantics,
+ SkylarkSemantics skylarkSemantics,
List<Statement> preludeStatements,
Path packageRoot,
Environment env)
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 1b7ccc9..a506485 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
@@ -24,7 +24,7 @@
import com.google.devtools.build.lib.packages.RuleVisibility;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ConflictException;
-import com.google.devtools.build.lib.syntax.SkylarkSemanticsOptions;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.Injectable;
@@ -85,7 +85,7 @@
public static final Precomputed<RuleVisibility> DEFAULT_VISIBILITY =
new Precomputed<>(LegacySkyKey.create(SkyFunctions.PRECOMPUTED, "default_visibility"));
- public static final Precomputed<SkylarkSemanticsOptions> SKYLARK_SEMANTICS =
+ public static final Precomputed<SkylarkSemantics> SKYLARK_SEMANTICS =
new Precomputed<>(LegacySkyKey.create(SkyFunctions.PRECOMPUTED, "skylark_semantics"));
static final Precomputed<UUID> BUILD_ID =
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 b3159c9..1ca3360 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
@@ -713,7 +713,8 @@
}
private void setSkylarkSemantics(SkylarkSemanticsOptions skylarkSemanticsOptions) {
- PrecomputedValue.SKYLARK_SEMANTICS.set(injectable(), skylarkSemanticsOptions);
+ PrecomputedValue.SKYLARK_SEMANTICS.set(
+ injectable(), skylarkSemanticsOptions.toSkylarkSemantics());
}
public void injectExtraPrecomputedValues(
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
index e2d2a48..36f3a2a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
@@ -43,7 +43,7 @@
import com.google.devtools.build.lib.syntax.LoadStatement;
import com.google.devtools.build.lib.syntax.Mutability;
import com.google.devtools.build.lib.syntax.SkylarkImport;
-import com.google.devtools.build.lib.syntax.SkylarkSemanticsOptions;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.syntax.Statement;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -122,7 +122,7 @@
throws InconsistentFilesystemException, SkylarkImportFailedException, InterruptedException {
PathFragment filePath = fileLabel.toPathFragment();
- SkylarkSemanticsOptions skylarkSemantics = PrecomputedValue.SKYLARK_SEMANTICS.get(env);
+ SkylarkSemantics skylarkSemantics = PrecomputedValue.SKYLARK_SEMANTICS.get(env);
if (skylarkSemantics == null) {
return null;
}
@@ -369,7 +369,7 @@
BuildFileAST ast,
Label extensionLabel,
Map<String, Extension> importMap,
- SkylarkSemanticsOptions skylarkSemantics,
+ SkylarkSemantics skylarkSemantics,
Environment env,
boolean inWorkspace)
throws SkylarkImportFailedException, InterruptedException {
@@ -385,7 +385,7 @@
.createSkylarkRuleClassEnvironment(
extensionLabel, mutability, skylarkSemantics,
eventHandler, ast.getContentHashCode(), importMap);
- if (!skylarkSemantics.internalDoNotExportBuiltins) {
+ if (!skylarkSemantics.internalDoNotExportBuiltins()) {
extensionEnv.setupOverride("native", packageFactory.getNativeModule(inWorkspace));
}
execAndExport(ast, extensionLabel, eventHandler, extensionEnv);
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 f5b0690..e8a6086 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
@@ -65,7 +65,7 @@
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.SkylarkSemanticsOptions;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.lib.vfs.Path;
@@ -86,7 +86,6 @@
import com.google.devtools.build.skyframe.SkyValue;
import com.google.devtools.build.skyframe.Version;
import com.google.devtools.build.skyframe.WalkableGraph;
-import com.google.devtools.common.options.Options;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -238,9 +237,7 @@
}
PrecomputedValue.PATH_PACKAGE_LOCATOR.set(injectable, pkgLocator);
PrecomputedValue.DEFAULT_VISIBILITY.set(injectable, ConstantRuleVisibility.PRIVATE);
- PrecomputedValue.SKYLARK_SEMANTICS.set(
- injectable,
- Options.getDefaults(SkylarkSemanticsOptions.class));
+ PrecomputedValue.SKYLARK_SEMANTICS.set(injectable, SkylarkSemantics.DEFAULT_SEMANTICS);
PrecomputedValue.DEFAULTS_PACKAGE_CONTENTS.set(injectable, defaultsPackageContents);
PrecomputedValue.BLACKLISTED_PACKAGE_PREFIXES_FILE.set(injectable, PathFragment.EMPTY_FRAGMENT);
return new ImmutableDiff(ImmutableList.<SkyKey>of(), valuesToInject);
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Environment.java b/src/main/java/com/google/devtools/build/lib/syntax/Environment.java
index 967f4b5..fcd0b23 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Environment.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Environment.java
@@ -650,12 +650,6 @@
return this;
}
- // TODO(brandjon): Remove this overload.
- public Builder setSemantics(SkylarkSemanticsOptions semantics) {
- this.semantics = semantics.toSkylarkSemantics();
- return this;
- }
-
public Builder setSemantics(SkylarkSemantics semantics) {
this.semantics = semantics;
return this;
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
index 2273f7e..4041a5b 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
@@ -29,6 +29,15 @@
@AutoValue
public abstract class SkylarkSemantics {
+ /**
+ * The AutoValue-generated concrete class implementing this one.
+ *
+ * <p>AutoValue implementation classes are usually package-private. We expose it here for the
+ * benefit of code that relies on reflection.
+ */
+ public static final Class<? extends SkylarkSemantics> IMPL_CLASS =
+ AutoValue_SkylarkSemantics.class;
+
// <== Add new options here in alphabetic order ==>
public abstract boolean incompatibleBzlDisallowLoadAfterStatement();
public abstract boolean incompatibleCheckedArithmetic();
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemanticsOptions.java
index 74f6db4..5da7802 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemanticsOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemanticsOptions.java
@@ -19,21 +19,15 @@
import com.google.devtools.common.options.OptionEffectTag;
import com.google.devtools.common.options.OptionMetadataTag;
import com.google.devtools.common.options.OptionsBase;
-import com.google.devtools.common.options.UsesOnlyCoreTypes;
import java.io.Serializable;
/**
* Contains options that affect Skylark's semantics.
*
- * <p>These are injected into Skyframe when a new build invocation occurs. Changing these options
- * between builds will trigger a reevaluation of everything that depends on the Skylark interpreter
- * — in particular, processing BUILD and .bzl files.
- *
- * <p>Because these options are stored in Skyframe, they must be immutable and serializable, and so
- * are subject to the restrictions of {@link UsesOnlyCoreTypes}: No {@link Option#allowMultiple}
- * options, and no options with types not handled by the default converters. (Technically all
- * options classes are mutable because their fields are public and non-final, but we assume no one
- * is manipulating these fields by the time parsing is complete.)
+ * <p>These are injected into Skyframe (as an instance of {@link SkylarkSemantics}) when a new build
+ * invocation occurs. Changing these options between builds will therefore trigger a reevaluation of
+ * everything that depends on the Skylark interpreter — in particular, evaluation of all BUILD
+ * and .bzl files.
*
* <p><em>To add a new option, update the following:</em>
* <ul>
@@ -60,10 +54,6 @@
* must be kept consistent; to make it easy we use alphabetic order. The parts that need updating
* are marked with the comment "<== Add new options here in alphabetic order ==>".
*/
-// TODO(brandjon): Do not store these options in Skyframe. Instead store SkylarkSemantics objects.
-// Eliminate use of UsesOnlyCoreTypes, and then we can remove UsesOnlyCoreTypes from the options
-// parser entirely.
-@UsesOnlyCoreTypes
public class SkylarkSemanticsOptions extends OptionsBase implements Serializable {
// <== Add new options here in alphabetic order ==>
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java
index bae2bef..f065cfd 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java
@@ -46,7 +46,7 @@
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
-import com.google.devtools.build.lib.syntax.SkylarkSemanticsOptions;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.testutil.TestConstants;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -158,7 +158,7 @@
}
@Override
- public SkylarkSemanticsOptions getSkylarkSemantics() throws InterruptedException {
+ public SkylarkSemantics getSkylarkSemantics() throws InterruptedException {
return original.getSkylarkSemantics();
}
@@ -353,7 +353,7 @@
}
@Override
- public SkylarkSemanticsOptions getSkylarkSemantics() throws InterruptedException {
+ public SkylarkSemantics getSkylarkSemantics() throws InterruptedException {
return null;
}
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index d7af509..acd56aa 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -131,6 +131,7 @@
import com.google.devtools.build.lib.skyframe.SequencedSkyframeExecutor;
import com.google.devtools.build.lib.skyframe.SkyValueDirtinessChecker;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.syntax.SkylarkSemanticsOptions;
import com.google.devtools.build.lib.testutil.BlazeTestUtils;
import com.google.devtools.build.lib.testutil.FoundationTestCase;
@@ -284,8 +285,8 @@
return ImmutableList.<EnvironmentExtension>of();
}
- protected SkylarkSemanticsOptions getSkylarkSemantics() {
- return skylarkSemanticsOptions;
+ protected SkylarkSemantics getSkylarkSemantics() {
+ return skylarkSemanticsOptions.toSkylarkSemantics();
}
protected ResourceSet getStartingResources() {
@@ -1710,7 +1711,7 @@
}
@Override
- public SkylarkSemanticsOptions getSkylarkSemantics() {
+ public SkylarkSemantics getSkylarkSemantics() {
throw new UnsupportedOperationException();
}
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
index 9466ec3..e487f3f 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
@@ -34,12 +34,11 @@
import com.google.devtools.build.lib.syntax.BuildFileAST;
import com.google.devtools.build.lib.syntax.Environment.Extension;
import com.google.devtools.build.lib.syntax.ParserInputSource;
-import com.google.devtools.build.lib.syntax.SkylarkSemanticsOptions;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
import com.google.devtools.build.lib.testutil.TestUtils;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.Path;
-import com.google.devtools.common.options.Options;
import java.io.IOException;
/**
@@ -142,7 +141,7 @@
ImmutableList.<Event>of(),
ImmutableList.<Postable>of(),
ConstantRuleVisibility.PUBLIC,
- Options.getDefaults(SkylarkSemanticsOptions.class),
+ SkylarkSemantics.DEFAULT_SEMANTICS,
false,
new MakeEnvironment.Builder(),
ImmutableMap.<String, Extension>of(),
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/TestMode.java b/src/test/java/com/google/devtools/build/lib/testutil/TestMode.java
index 12b8e6b..b8c8947 100644
--- a/src/test/java/com/google/devtools/build/lib/testutil/TestMode.java
+++ b/src/test/java/com/google/devtools/build/lib/testutil/TestMode.java
@@ -17,6 +17,7 @@
import com.google.devtools.build.lib.syntax.BazelLibrary;
import com.google.devtools.build.lib.syntax.Environment;
import com.google.devtools.build.lib.syntax.Mutability;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.syntax.SkylarkSemanticsOptions;
import com.google.devtools.common.options.OptionsParser;
@@ -25,11 +26,11 @@
* appropriate {@code Environment} has to be created
*/
public abstract class TestMode {
- private static SkylarkSemanticsOptions parseSkylarkSemanticsOptions(String... skylarkOptions)
+ private static SkylarkSemantics parseSkylarkSemantics(String... skylarkOptions)
throws Exception {
OptionsParser parser = OptionsParser.newOptionsParser(SkylarkSemanticsOptions.class);
parser.parse(skylarkOptions);
- return parser.getOptions(SkylarkSemanticsOptions.class);
+ return parser.getOptions(SkylarkSemanticsOptions.class).toSkylarkSemantics();
}
public static final TestMode BUILD =
@@ -40,7 +41,7 @@
return Environment.builder(Mutability.create("build test"))
.setGlobals(BazelLibrary.GLOBALS)
.setEventHandler(eventHandler)
- .setSemantics(TestMode.parseSkylarkSemanticsOptions(skylarkOptions))
+ .setSemantics(TestMode.parseSkylarkSemantics(skylarkOptions))
.build();
}
};
@@ -53,7 +54,7 @@
return Environment.builder(Mutability.create("skylark test"))
.setGlobals(BazelLibrary.GLOBALS)
.setEventHandler(eventHandler)
- .setSemantics(TestMode.parseSkylarkSemanticsOptions(skylarkOptions))
+ .setSemantics(TestMode.parseSkylarkSemantics(skylarkOptions))
.build();
}
};