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 b3159c91..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(); } };