Reduce parameters in `RuleContext` and its builder in favor of using enclosing objects `AnalysisEnvironment` and `ConfiguredRuleClassProvider`. Inspired by `TODO(bazel-team): I get the feeling we could delete much of the boilerplate by replacing some of these fields with a RuleClassProvider -- both in the builder and in the RuleContext itself.` (written by brandjon@). I'm working on a change that will need yet another `ConfiguredRuleClassProvider` field in `RuleContext`, so this will be helpful. Reduce `RuleContext.Builder` constructor parameters to only those that are needed up-front. PiperOrigin-RevId: 401338523
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 3289785..300fe53 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
@@ -147,7 +147,7 @@ * Returns the options that affect the Starlark interpreter used for evaluating Starlark rule * implementation functions. */ - StarlarkSemantics getStarlarkSemantics() throws InterruptedException; + StarlarkSemantics getStarlarkSemantics(); /** * Returns the {@code exported_to_java} map defined by the Starlark {@code @_builtins}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/CommonPrerequisiteValidator.java b/src/main/java/com/google/devtools/build/lib/analysis/CommonPrerequisiteValidator.java index 50aa16f..f3aa4ca 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/CommonPrerequisiteValidator.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/CommonPrerequisiteValidator.java
@@ -81,16 +81,11 @@ && !Attribute.isLateBound(attrName)) { // Determine if we should use the new visibility rules for tools. - boolean toolCheckAtDefinition = false; - try { - toolCheckAtDefinition = - context - .getStarlarkSemantics() - .getBool( - BuildLanguageOptions.INCOMPATIBLE_VISIBILITY_PRIVATE_ATTRIBUTES_AT_DEFINITION); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } + boolean toolCheckAtDefinition = + context + .getStarlarkSemantics() + .getBool( + BuildLanguageOptions.INCOMPATIBLE_VISIBILITY_PRIVATE_ATTRIBUTES_AT_DEFINITION); if (!toolCheckAtDefinition || !attribute.isImplicit()
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java index 0f53070..d11739a 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
@@ -288,25 +288,17 @@ ruleClass.getConfigurationFragmentPolicy(); // Visibility computation and checking is done for every rule. RuleContext ruleContext = - new RuleContext.Builder( - env, - rule, - ImmutableList.of(), - configuration, - hostConfiguration, - ruleClassProvider.getPrerequisiteValidator(), - configurationFragmentPolicy, - configuredTargetKey) - .setToolsRepository(ruleClassProvider.getToolsRepository()) - .setStarlarkSemantics(env.getStarlarkSemantics()) + new RuleContext.Builder(env, rule, /*aspects=*/ ImmutableList.of(), configuration) + .setRuleClassProvider(ruleClassProvider) + .setHostConfiguration(hostConfiguration) + .setConfigurationFragmentPolicy(configurationFragmentPolicy) + .setActionOwnerSymbol(configuredTargetKey) .setMutability(Mutability.create("configured target")) .setVisibility(convertVisibility(prerequisiteMap, env.getEventHandler(), rule)) .setPrerequisites(transformPrerequisiteMap(prerequisiteMap)) .setConfigConditions(configConditions) - .setUniversalFragments(ruleClassProvider.getFragmentRegistry().getUniversalFragments()) .setToolchainContexts(toolchainContexts) .setExecGroupCollectionBuilder(execGroupCollectionBuilder) - .setConstraintSemantics(ruleClassProvider.getConstraintSemantics()) .setRequiredConfigFragments( RequiredFragmentsUtil.getRuleRequiredFragmentsIfEnabled( rule, @@ -496,38 +488,24 @@ BuildConfiguration hostConfiguration, AspectKeyCreator.AspectKey aspectKey) throws InterruptedException, ActionConflictException, InvalidExecGroupException { - - RuleContext.Builder builder = - new RuleContext.Builder( - env, - associatedTarget.getTarget(), - aspectPath, - aspectConfiguration, - hostConfiguration, - ruleClassProvider.getPrerequisiteValidator(), - aspect.getDefinition().getConfigurationFragmentPolicy(), - aspectKey); - - Map<String, Attribute> aspectAttributes = mergeAspectAttributes(aspectPath); - RuleContext ruleContext = - builder - .setToolsRepository(ruleClassProvider.getToolsRepository()) - .setStarlarkSemantics(env.getStarlarkSemantics()) + new RuleContext.Builder(env, associatedTarget.getTarget(), aspectPath, aspectConfiguration) + .setRuleClassProvider(ruleClassProvider) + .setHostConfiguration(hostConfiguration) + .setConfigurationFragmentPolicy(aspect.getDefinition().getConfigurationFragmentPolicy()) + .setActionOwnerSymbol(aspectKey) .setMutability(Mutability.create("aspect")) .setVisibility( convertVisibility( prerequisiteMap, env.getEventHandler(), associatedTarget.getTarget())) .setPrerequisites(transformPrerequisiteMap(prerequisiteMap)) - .setAspectAttributes(aspectAttributes) + .setAspectAttributes(mergeAspectAttributes(aspectPath)) .setConfigConditions(configConditions) - .setUniversalFragments(ruleClassProvider.getFragmentRegistry().getUniversalFragments()) .setToolchainContext(toolchainContext) // TODO(b/161222568): Implement the exec_properties attr for aspects and read its value // here. .setExecGroupCollectionBuilder(ExecGroupCollection.emptyBuilder()) .setExecProperties(ImmutableMap.of()) - .setConstraintSemantics(ruleClassProvider.getConstraintSemantics()) .setRequiredConfigFragments( RequiredFragmentsUtil.getAspectRequiredFragmentsIfEnabled( aspect,
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 bb6ea41..accd209 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
@@ -428,7 +428,8 @@ if (!ruleContext.getRule().getRuleClassObject().supportsConstraintChecking()) { return; } - ConstraintSemantics<RuleContext> constraintSemantics = ruleContext.getConstraintSemantics(); + ConstraintSemantics<RuleContext> constraintSemantics = + ruleContext.getRuleClassProvider().getConstraintSemantics(); EnvironmentCollection supportedEnvironments = constraintSemantics.getSupportedEnvironments(ruleContext); if (supportedEnvironments != null) {
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 fe2e141..8f1baf4 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
@@ -14,7 +14,6 @@ package com.google.devtools.build.lib.analysis; -import static com.google.common.base.MoreObjects.firstNonNull; import static com.google.common.collect.ImmutableList.toImmutableList; import static com.google.devtools.build.lib.packages.ExecGroup.DEFAULT_EXEC_GROUP_NAME; @@ -51,11 +50,9 @@ import com.google.devtools.build.lib.analysis.config.ConfigConditions; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.analysis.config.Fragment; -import com.google.devtools.build.lib.analysis.config.FragmentClassSet; import com.google.devtools.build.lib.analysis.config.FragmentCollection; import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition; import com.google.devtools.build.lib.analysis.config.transitions.NoTransition; -import com.google.devtools.build.lib.analysis.constraints.ConstraintSemantics; import com.google.devtools.build.lib.analysis.constraints.RuleContextConstraintSemantics; import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo; import com.google.devtools.build.lib.analysis.platform.PlatformInfo; @@ -66,7 +63,6 @@ import com.google.devtools.build.lib.collect.ImmutableSortedKeyListMultimap; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.events.Event; -import com.google.devtools.build.lib.events.ExtendedEventHandler.Postable; import com.google.devtools.build.lib.packages.Aspect; import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.Attribute; @@ -131,10 +127,6 @@ public final class RuleContext extends TargetContext implements ActionConstructionContext, ActionRegistry, RuleErrorConsumer, AutoCloseable { - public boolean isAllowTagsPropagation() { - return starlarkSemantics.getBool(BuildLanguageOptions.EXPERIMENTAL_ALLOW_TAGS_PROPAGATION); - } - /** Custom dependency validation logic. */ public interface PrerequisiteValidator { /** @@ -168,11 +160,10 @@ private final String ruleClassNameForLogging; private final BuildConfiguration hostConfiguration; private final ConfigurationFragmentPolicy configurationFragmentPolicy; - private final FragmentClassSet universalFragments; + private final ConfiguredRuleClassProvider ruleClassProvider; private final RuleErrorConsumer reporter; @Nullable private final ToolchainCollection<ResolvedToolchainContext> toolchainContexts; private final ExecGroupCollection execGroupCollection; - private final ConstraintSemantics<RuleContext> constraintSemantics; @Nullable private final RequiredConfigFragmentsProvider requiredConfigFragments; private final List<Expander> makeVariableExpanders = new ArrayList<>(); @@ -185,13 +176,6 @@ private transient ConfigurationMakeVariableContext configurationMakeVariableContext = null; /** - * The StarlarkSemantics to use for rule analysis. Should be the same as what's reported by the - * AnalysisEnvironment, but saving it here is more convenient since {@link - * AnalysisEnvironment#getStarlarkSemantics()} can throw InterruptedException. - */ - private final StarlarkSemantics starlarkSemantics; - - /** * Thread used for any Starlark evaluation during analysis, e.g. rule implementation function for * a Starlark-defined rule, or Starlarkified helper logic for native rules that have been * partially migrated to {@code @_builtins}. @@ -211,18 +195,7 @@ Builder builder, AttributeMap attributes, ListMultimap<String, ConfiguredTargetAndData> targetMap, - ImmutableMap<Label, ConfigMatchingProvider> configConditions, - FragmentClassSet universalFragments, - String ruleClassNameForLogging, - ActionLookupKey actionLookupKey, - ImmutableMap<String, Attribute> aspectAttributes, - @Nullable ToolchainCollection<ResolvedToolchainContext> toolchainContexts, - ExecGroupCollection execGroupCollection, - ConstraintSemantics<RuleContext> constraintSemantics, - @Nullable RequiredConfigFragmentsProvider requiredConfigFragments, - String toolsRepository, - StarlarkSemantics starlarkSemantics, - Mutability mutability) { + ExecGroupCollection execGroupCollection) { super( builder.env, builder.target.getAssociatedRule(), @@ -231,28 +204,25 @@ builder.visibility); this.rule = builder.target.getAssociatedRule(); this.aspects = builder.aspects; - this.aspectDescriptors = - builder.aspects.stream().map(Aspect::getDescriptor).collect(toImmutableList()); + this.aspectDescriptors = aspects.stream().map(Aspect::getDescriptor).collect(toImmutableList()); this.configurationFragmentPolicy = builder.configurationFragmentPolicy; - this.universalFragments = universalFragments; + this.ruleClassProvider = builder.ruleClassProvider; this.targetMap = targetMap; - this.configConditions = configConditions; - this.attributes = new AspectAwareAttributeMapper(attributes, aspectAttributes); + this.configConditions = builder.configConditions.asProviders(); + this.attributes = new AspectAwareAttributeMapper(attributes, builder.aspectAttributes); Set<String> allEnabledFeatures = new HashSet<>(); Set<String> allDisabledFeatures = new HashSet<>(); getAllFeatures(allEnabledFeatures, allDisabledFeatures); this.enabledFeatures = ImmutableSortedSet.copyOf(allEnabledFeatures); this.disabledFeatures = ImmutableSortedSet.copyOf(allDisabledFeatures); - this.ruleClassNameForLogging = ruleClassNameForLogging; + this.ruleClassNameForLogging = builder.getRuleClassNameForLogging(); this.hostConfiguration = builder.hostConfiguration; - this.actionOwnerSymbolGenerator = new SymbolGenerator<>(actionLookupKey); - reporter = builder.reporter; - this.toolchainContexts = toolchainContexts; + this.actionOwnerSymbolGenerator = new SymbolGenerator<>(builder.actionOwnerSymbol); + this.reporter = builder.reporter; + this.toolchainContexts = builder.toolchainContexts; this.execGroupCollection = execGroupCollection; - this.constraintSemantics = constraintSemantics; - this.requiredConfigFragments = requiredConfigFragments; - this.starlarkSemantics = starlarkSemantics; - this.starlarkThread = createStarlarkThread(toolsRepository, mutability); // uses above state + this.requiredConfigFragments = builder.requiredConfigFragments; + this.starlarkThread = createStarlarkThread(builder.mutability); // uses above state } private void getAllFeatures(Set<String> allEnabledFeatures, Set<String> allDisabledFeatures) { @@ -294,6 +264,12 @@ } } + public boolean isAllowTagsPropagation() { + return getAnalysisEnvironment() + .getStarlarkSemantics() + .getBool(BuildLanguageOptions.EXPERIMENTAL_ALLOW_TAGS_PROPAGATION); + } + public RepositoryName getRepository() { return rule.getRepository(); } @@ -527,7 +503,7 @@ public <T extends Fragment> boolean isLegalFragment( Class<T> fragment, ConfigurationTransition transition) { - return universalFragments.contains(fragment) + return ruleClassProvider.getFragmentRegistry().getUniversalFragments().contains(fragment) || configurationFragmentPolicy.isLegalConfigurationFragment(fragment, transition); } @@ -1143,17 +1119,13 @@ return configurationMakeVariableContext; } - public StarlarkSemantics getStarlarkSemantics() { - return starlarkSemantics; - } - - private StarlarkThread createStarlarkThread(String toolsRepository, Mutability mutability) { + private StarlarkThread createStarlarkThread(Mutability mutability) { AnalysisEnvironment env = getAnalysisEnvironment(); - StarlarkThread thread = new StarlarkThread(mutability, starlarkSemantics); + StarlarkThread thread = new StarlarkThread(mutability, env.getStarlarkSemantics()); thread.setPrintHandler(Event.makeDebugPrintHandler(env.getEventHandler())); new BazelStarlarkContext( BazelStarlarkContext.Phase.ANALYSIS, - toolsRepository, + ruleClassProvider.getToolsRepository(), /*fragmentNameToClass=*/ null, getTarget().getPackage().getRepositoryMapping(), /*convertedLabelsInPackage=*/ new HashMap<>(), @@ -1265,8 +1237,8 @@ return toolchainContexts.getTargetPlatform().constraints().hasConstraintValue(constraintValue); } - public ConstraintSemantics<RuleContext> getConstraintSemantics() { - return constraintSemantics; + public ConfiguredRuleClassProvider getRuleClassProvider() { + return ruleClassProvider; } /** Returns the configuration fragments this rule uses. */ @@ -1643,30 +1615,24 @@ } /** Builder class for a RuleContext. */ - // TODO(bazel-team): I get the feeling we could delete much of the boilerplate by replacing some - // of these fields with a RuleClassProvider -- both in the builder and in the RuleContext itself. public static final class Builder implements RuleErrorConsumer { private final AnalysisEnvironment env; private final Target target; - private final ConfigurationFragmentPolicy configurationFragmentPolicy; - private FragmentClassSet universalFragments; + private final ImmutableList<Aspect> aspects; private final BuildConfiguration configuration; - private final BuildConfiguration hostConfiguration; - private final ActionLookupKey actionOwnerSymbol; - private final PrerequisiteValidator prerequisiteValidator; private final RuleErrorConsumer reporter; + private ConfiguredRuleClassProvider ruleClassProvider; + private BuildConfiguration hostConfiguration; + private ConfigurationFragmentPolicy configurationFragmentPolicy; + private ActionLookupKey actionOwnerSymbol; private OrderedSetMultimap<Attribute, ConfiguredTargetAndData> prerequisiteMap; private ConfigConditions configConditions; - private String toolsRepository; - private StarlarkSemantics starlarkSemantics; private Mutability mutability; private NestedSet<PackageGroupContents> visibility; - private ImmutableMap<String, Attribute> aspectAttributes; - private final ImmutableList<Aspect> aspects; + private ImmutableMap<String, Attribute> aspectAttributes = ImmutableMap.of(); private ToolchainCollection<ResolvedToolchainContext> toolchainContexts; private ExecGroupCollection.Builder execGroupCollectionBuilder; private ImmutableMap<String, String> rawExecProperties; - private ConstraintSemantics<RuleContext> constraintSemantics; @Nullable private RequiredConfigFragmentsProvider requiredConfigFragments; @VisibleForTesting @@ -1674,19 +1640,11 @@ AnalysisEnvironment env, Target target, ImmutableList<Aspect> aspects, - BuildConfiguration configuration, - BuildConfiguration hostConfiguration, - PrerequisiteValidator prerequisiteValidator, - ConfigurationFragmentPolicy configurationFragmentPolicy, - ActionLookupKey actionOwnerSymbol) { + BuildConfiguration configuration) { this.env = Preconditions.checkNotNull(env); this.target = Preconditions.checkNotNull(target); - this.aspects = aspects; - this.configurationFragmentPolicy = Preconditions.checkNotNull(configurationFragmentPolicy); + this.aspects = Preconditions.checkNotNull(aspects); this.configuration = Preconditions.checkNotNull(configuration); - this.hostConfiguration = Preconditions.checkNotNull(hostConfiguration); - this.prerequisiteValidator = prerequisiteValidator; - this.actionOwnerSymbol = Preconditions.checkNotNull(actionOwnerSymbol); if (configuration.allowAnalysisFailures()) { reporter = new SuppressingErrorReporter(); } else { @@ -1698,13 +1656,14 @@ @VisibleForTesting public RuleContext build() throws InvalidExecGroupException { + Preconditions.checkNotNull(ruleClassProvider); + Preconditions.checkNotNull(hostConfiguration); + Preconditions.checkNotNull(configurationFragmentPolicy); + Preconditions.checkNotNull(actionOwnerSymbol); Preconditions.checkNotNull(prerequisiteMap); Preconditions.checkNotNull(configConditions); - Preconditions.checkNotNull(toolsRepository); - Preconditions.checkNotNull(starlarkSemantics); Preconditions.checkNotNull(mutability); Preconditions.checkNotNull(visibility); - Preconditions.checkNotNull(constraintSemantics); AttributeMap attributes = ConfiguredAttributeMapper.of( target.getAssociatedRule(), configConditions.asProviders(), configuration.checksum()); @@ -1725,18 +1684,7 @@ this, attributes, targetMap, - configConditions.asProviders(), - universalFragments, - getRuleClassNameForLogging(), - actionOwnerSymbol, - firstNonNull(aspectAttributes, ImmutableMap.of()), - toolchainContexts, - createExecGroupCollection(execGroupCollectionBuilder, attributes), - constraintSemantics, - requiredConfigFragments, - toolsRepository, - starlarkSemantics, - mutability); + createExecGroupCollection(execGroupCollectionBuilder, attributes)); } private ExecGroupCollection createExecGroupCollection( @@ -1775,15 +1723,23 @@ } } - // TODO(bazel-team): This field is only used by BazelStarlarkContext. Investigate whether that's - // even needed in the analysis phase, and delete it if not. - public Builder setToolsRepository(String toolsRepository) { - this.toolsRepository = toolsRepository; + public Builder setRuleClassProvider(ConfiguredRuleClassProvider ruleClassProvider) { + this.ruleClassProvider = ruleClassProvider; return this; } - public Builder setStarlarkSemantics(StarlarkSemantics starlarkSemantics) { - this.starlarkSemantics = starlarkSemantics; + public Builder setHostConfiguration(BuildConfiguration hostConfiguration) { + this.hostConfiguration = hostConfiguration; + return this; + } + + public Builder setConfigurationFragmentPolicy(ConfigurationFragmentPolicy policy) { + this.configurationFragmentPolicy = policy; + return this; + } + + public Builder setActionOwnerSymbol(ActionLookupKey actionOwnerSymbol) { + this.actionOwnerSymbol = actionOwnerSymbol; return this; } @@ -1822,16 +1778,6 @@ return this; } - /** Sets the fragment that can be legally accessed even when not explicitly declared. */ - public Builder setUniversalFragments(FragmentClassSet fragments) { - // TODO(bazel-team): Add this directly to ConfigurationFragmentPolicy, so we - // don't need separate logic specifically for checking this fragment. The challenge is - // that we need RuleClassProvider to figure out what this fragment is, and not every - // call state that creates ConfigurationFragmentPolicy has access to that. - this.universalFragments = fragments; - return this; - } - /** Sets the {@link ResolvedToolchainContext} used to access toolchains used by this rule. */ public Builder setToolchainContext(ResolvedToolchainContext toolchainContext) { Preconditions.checkState( @@ -1870,11 +1816,6 @@ return this; } - public Builder setConstraintSemantics(ConstraintSemantics<RuleContext> constraintSemantics) { - this.constraintSemantics = constraintSemantics; - return this; - } - public Builder setRequiredConfigFragments( @Nullable RequiredConfigFragmentsProvider requiredConfigFragments) { this.requiredConfigFragments = requiredConfigFragments; @@ -1919,15 +1860,6 @@ return mapBuilder.build(); } - /** - * Post a raw event to the analysis environment's event handler. This circumvents normal error - * and warning reporting functionality to post events, and should only be used in rare cases - * where a custom event needs to be handled. - */ - public void post(Postable event) { - env.getEventHandler().post(event); - } - @Override public void ruleError(String message) { reporter.ruleError(message); @@ -2039,17 +1971,17 @@ } /** - * Expose the Starlark semantics that governs the building of this rule (and the rest of the - * build) + * Returns the {@link StarlarkSemantics} governs the building of this rule (and the rest of the + * build). */ - public StarlarkSemantics getStarlarkSemantics() throws InterruptedException { + public StarlarkSemantics getStarlarkSemantics() { return env.getStarlarkSemantics(); } /** * Returns a rule class name suitable for log messages, including an aspect name if applicable. */ - public String getRuleClassNameForLogging() { + private String getRuleClassNameForLogging() { if (aspects.isEmpty()) { return target.getAssociatedRule().getRuleClass(); } @@ -2240,7 +2172,7 @@ validateDirectPrerequisiteType(prerequisite, attribute); validateDirectPrerequisiteFileTypes(prerequisite, attribute); if (attribute.performPrereqValidatorCheck()) { - prerequisiteValidator.validate(this, prerequisite, attribute); + ruleClassProvider.getPrerequisiteValidator().validate(this, prerequisite, attribute); } } }
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 5266c39..f4d4e7d 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
@@ -1032,7 +1032,7 @@ } public StarlarkSemantics getStarlarkSemantics() { - return ruleContext.getStarlarkSemantics(); + return ruleContext.getAnalysisEnvironment().getStarlarkSemantics(); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java index 1880e2b..8eafba2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
@@ -678,7 +678,10 @@ coverageSupportFiles)) .addOutputGroup(OutputGroupInfo.FILES_TO_COMPILE, getFilesToCompile(classJar)); - if (ruleContext.getStarlarkSemantics().getBool(INCOMPATIBLE_ENABLE_EXPORTS_PROVIDER)) { + if (ruleContext + .getAnalysisEnvironment() + .getStarlarkSemantics() + .getBool(INCOMPATIBLE_ENABLE_EXPORTS_PROVIDER)) { JavaExportsProvider exportsProvider = collectTransitiveExports(); javaInfoBuilder.addProvider(JavaExportsProvider.class, exportsProvider); }
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 c39119f..b1340ef 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
@@ -185,7 +185,7 @@ } @Override - public StarlarkSemantics getStarlarkSemantics() throws InterruptedException { + public StarlarkSemantics getStarlarkSemantics() { return original.getStarlarkSemantics(); }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java index 5f8420b..eeea1aa 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java
@@ -659,20 +659,16 @@ resolvedToolchainContext.addContext(unloadedToolchainContext.getKey(), toolchainContext); } - return new RuleContext.Builder( - env, - target, - ImmutableList.of(), - targetConfig, - configurations.getHostConfiguration(), - ruleClassProvider.getPrerequisiteValidator(), - target.getAssociatedRule().getRuleClassObject().getConfigurationFragmentPolicy(), + return new RuleContext.Builder(env, target, /*aspects=*/ ImmutableList.of(), targetConfig) + .setRuleClassProvider(ruleClassProvider) + .setHostConfiguration(configurations.getHostConfiguration()) + .setConfigurationFragmentPolicy( + target.getAssociatedRule().getRuleClassObject().getConfigurationFragmentPolicy()) + .setActionOwnerSymbol( ConfiguredTargetKey.builder() .setConfiguredTarget(configuredTarget) .setConfigurationKey(configuredTarget.getConfigurationKey()) .build()) - .setToolsRepository(ruleClassProvider.getToolsRepository()) - .setStarlarkSemantics(env.getStarlarkSemantics()) .setMutability(Mutability.create("configured target")) .setVisibility( NestedSetBuilder.create( @@ -680,10 +676,8 @@ PackageGroupContents.create(ImmutableList.of(PackageSpecification.everything())))) .setPrerequisites(ConfiguredTargetFactory.transformPrerequisiteMap(prerequisiteMap)) .setConfigConditions(ConfigConditions.EMPTY) - .setUniversalFragments(ruleClassProvider.getFragmentRegistry().getUniversalFragments()) .setToolchainContexts(resolvedToolchainContext.build()) .setExecGroupCollectionBuilder(execGroupCollectionBuilder) - .setConstraintSemantics(ruleClassProvider.getConstraintSemantics()) .build(); }