Remove incompatible_top_level_aspects_dependency flag

PiperOrigin-RevId: 403924623
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/BuildRequestOptions.java b/src/main/java/com/google/devtools/build/lib/buildtool/BuildRequestOptions.java
index db5a0fb..816c30a 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/BuildRequestOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/BuildRequestOptions.java
@@ -305,15 +305,13 @@
       effectTags = {OptionEffectTag.UNKNOWN},
       allowMultiple = true,
       help =
-          "Comma-separated list of aspects to be applied to top-level targets. All aspects are"
-              + " applied independently to all top-level targets except if"
-              + " <code>incompatible_top_level_aspects_dependency</code> is used. In this case, if"
+          "Comma-separated list of aspects to be applied to top-level targets. In the list, if"
               + " aspect <code>some_aspect</code> specifies required aspect providers via"
               + " <code>required_aspect_providers</code>, <code>some_aspect</code> will run after"
               + " every aspect that was mentioned before it in the aspects list whose advertised"
               + " providers satisfy <code>some_aspect</code> required aspect providers. Moreover,"
               + " <code>some_aspect</code> will run after all its required aspects specified by"
-              + " <code>requires</code> attribute which otherwise will be ignored."
+              + " <code>requires</code> attribute."
               + " <code>some_aspect</code> will then have access to the values of those aspects'"
               + " providers."
               + " <bzl-file-label>%<aspect_name>, for example '//tools:my_def.bzl%my_aspect', where"
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 8ac702a..b599d0e 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
@@ -557,19 +557,6 @@
               + " providers of the aspect.")
   public boolean incompatibleTopLevelAspectsRequireProviders;
 
-  @Option(
-      name = "incompatible_top_level_aspects_dependency",
-      defaultValue = "true",
-      documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS,
-      metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE},
-      effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS},
-      help =
-          "If set to true, a dependency between the top level aspects will be built based on their"
-              + " required aspect providers, advertised providers and required aspects. Otherwise,"
-              + " each aspect in the list will run independently and its required aspects will be"
-              + " ignored.")
-  public boolean incompatibleTopLevelAspectsDependOnAspects;
-
   /**
    * An interner to reduce the number of StarlarkSemantics instances. A single Blaze instance should
    * never accumulate a large number of these and being able to shortcut on object identity makes a
@@ -639,9 +626,6 @@
             .setBool(
                 INCOMPATIBLE_TOP_LEVEL_ASPECTS_REQUIRE_PROVIDERS,
                 incompatibleTopLevelAspectsRequireProviders)
-            .setBool(
-                INCOMPATIBLE_TOP_LEVEL_ASPECTS_DEPENDENCY,
-                incompatibleTopLevelAspectsDependOnAspects)
             .build();
     return INTERNER.intern(semantics);
   }
@@ -714,8 +698,6 @@
       "-incompatible_visibility_private_attributes_at_definition";
   public static final String INCOMPATIBLE_TOP_LEVEL_ASPECTS_REQUIRE_PROVIDERS =
       "-incompatible_top_level_aspects_require_providers";
-  public static final String INCOMPATIBLE_TOP_LEVEL_ASPECTS_DEPENDENCY =
-      "+incompatible_top_level_aspects_dependency";
 
   // non-booleans
   public static final StarlarkSemantics.Key<String> EXPERIMENTAL_BUILTINS_BZL_PATH =
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java
index 0cec99f..4ef1e56 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java
@@ -16,7 +16,6 @@
 
 import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Interner;
 import com.google.devtools.build.lib.analysis.AspectCollection;
 import com.google.devtools.build.lib.analysis.AspectCollection.AspectCycleOnPathException;
@@ -30,7 +29,6 @@
 import com.google.devtools.build.lib.packages.StarlarkAspect;
 import com.google.devtools.build.lib.packages.StarlarkAspectClass;
 import com.google.devtools.build.lib.packages.StarlarkDefinedAspect;
-import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.server.FailureDetails.Analysis;
 import com.google.devtools.build.lib.server.FailureDetails.Analysis.Code;
 import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
@@ -47,7 +45,6 @@
 import java.util.Map;
 import javax.annotation.Nullable;
 import net.starlark.java.eval.EvalException;
-import net.starlark.java.eval.StarlarkSemantics;
 
 /**
  * SkyFunction to load top level aspects, build the dependency relation between them based on the
@@ -73,30 +70,9 @@
 
     BuildTopLevelAspectsDetailsKey topLevelAspectsDetailsKey =
         (BuildTopLevelAspectsDetailsKey) skyKey.argument();
-    ImmutableList<AspectClass> topLevelAspectsClasses =
-        topLevelAspectsDetailsKey.getTopLevelAspectsClasses();
 
-    StarlarkSemantics starlarkSemantics = PrecomputedValue.STARLARK_SEMANTICS.get(env);
-    if (starlarkSemantics == null) {
-      return null;
-    }
-    boolean buildTopLevelAspectsDependency =
-        starlarkSemantics.getBool(BuildLanguageOptions.INCOMPATIBLE_TOP_LEVEL_ASPECTS_DEPENDENCY);
-    if (!buildTopLevelAspectsDependency) {
-      // If building a relation between top-level aspects is not required, then we can remove
-      // duplicate aspects by keeping the first occurrence of each aspect.
-      topLevelAspectsClasses = ImmutableSet.copyOf(topLevelAspectsClasses).asList();
-
-      // Then return a list of indenpendent aspects to be applied on the top-level targets
-      ImmutableList<AspectDetails> aspectsDetailsList =
-          getIndependentTopLevelAspects(env, topLevelAspectsClasses);
-      if (aspectsDetailsList == null) {
-        return null; // some aspects are not loaded
-      }
-      return new BuildTopLevelAspectsDetailsValue(aspectsDetailsList);
-    }
-
-    ImmutableList<Aspect> topLevelAspects = getTopLevelAspects(env, topLevelAspectsClasses);
+    ImmutableList<Aspect> topLevelAspects =
+        getTopLevelAspects(env, topLevelAspectsDetailsKey.getTopLevelAspectsClasses());
 
     if (topLevelAspects == null) {
       return null; // some aspects are not loaded
@@ -155,31 +131,6 @@
   }
 
   @Nullable
-  private static ImmutableList<AspectDetails> getIndependentTopLevelAspects(
-      Environment env, ImmutableList<AspectClass> topLevelAspectsClasses)
-      throws InterruptedException, BuildTopLevelAspectsDetailsFunctionException {
-
-    ImmutableList.Builder<AspectDetails> aspectDetailsList = ImmutableList.builder();
-
-    for (AspectClass aspectClass : topLevelAspectsClasses) {
-      if (aspectClass instanceof StarlarkAspectClass) {
-        StarlarkAspect starlarkAspect = loadStarlarkAspect(env, (StarlarkAspectClass) aspectClass);
-        if (starlarkAspect == null) {
-          return null;
-        }
-        aspectDetailsList.add(
-            new AspectDetails(
-                ImmutableList.of(), new AspectDescriptor(starlarkAspect.getAspectClass())));
-      } else {
-        aspectDetailsList.add(
-            new AspectDetails(ImmutableList.of(), new AspectDescriptor(aspectClass)));
-      }
-    }
-
-    return aspectDetailsList.build();
-  }
-
-  @Nullable
   private static ImmutableList<Aspect> getTopLevelAspects(
       Environment env, ImmutableList<AspectClass> topLevelAspectsClasses)
       throws InterruptedException, BuildTopLevelAspectsDetailsFunctionException {
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
index 9a15bc4..28bfbb2 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
@@ -881,26 +881,6 @@
   }
 
   @Test
-  public void duplicateTopLevelAspects_duplicateAspectsIgnored() throws Exception {
-    AspectApplyingToFiles aspectApplyingToFiles = new AspectApplyingToFiles();
-    setRulesAndAspectsAvailableInTests(ImmutableList.of(aspectApplyingToFiles), ImmutableList.of());
-    pkg("a", "java_binary(name = 'x', main_class = 'x.FooBar', srcs = ['x.java'])");
-    useConfiguration("--noincompatible_top_level_aspects_dependency");
-
-    AnalysisResult analysisResult =
-        update(
-            new EventBus(),
-            defaultFlags(),
-            ImmutableList.of(aspectApplyingToFiles.getName(), aspectApplyingToFiles.getName()),
-            "//a:x_deploy.jar");
-
-    ConfiguredAspect aspect = Iterables.getOnlyElement(analysisResult.getAspectsMap().values());
-    AspectApplyingToFiles.Provider provider =
-        aspect.getProvider(AspectApplyingToFiles.Provider.class);
-    assertThat(provider.getLabel()).isEqualTo(Label.parseAbsoluteUnchecked("//a:x_deploy.jar"));
-  }
-
-  @Test
   public void duplicateTopLevelAspects_duplicateAspectsNotAllowed() throws Exception {
     AspectApplyingToFiles aspectApplyingToFiles = new AspectApplyingToFiles();
     setRulesAndAspectsAvailableInTests(ImmutableList.of(aspectApplyingToFiles), ImmutableList.of());
diff --git a/src/test/java/com/google/devtools/build/lib/packages/semantics/ConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/semantics/ConsistencyTest.java
index d83c731..9fe547e 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/semantics/ConsistencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/semantics/ConsistencyTest.java
@@ -146,7 +146,6 @@
         "--incompatible_no_rule_outputs_param=" + rand.nextBoolean(),
         "--incompatible_run_shell_command_string=" + rand.nextBoolean(),
         "--incompatible_struct_has_no_methods=" + rand.nextBoolean(),
-        "--incompatible_top_level_aspects_dependency=" + rand.nextBoolean(),
         "--incompatible_visibility_private_attributes_at_definition=" + rand.nextBoolean(),
         "--incompatible_require_linker_input_cc_api=" + rand.nextBoolean(),
         "--incompatible_restrict_string_escapes=" + rand.nextBoolean(),
@@ -196,7 +195,6 @@
         .setBool(BuildLanguageOptions.INCOMPATIBLE_NO_RULE_OUTPUTS_PARAM, rand.nextBoolean())
         .setBool(BuildLanguageOptions.INCOMPATIBLE_RUN_SHELL_COMMAND_STRING, rand.nextBoolean())
         .setBool(BuildLanguageOptions.INCOMPATIBLE_STRUCT_HAS_NO_METHODS, rand.nextBoolean())
-        .setBool(BuildLanguageOptions.INCOMPATIBLE_TOP_LEVEL_ASPECTS_DEPENDENCY, rand.nextBoolean())
         .setBool(
             BuildLanguageOptions.INCOMPATIBLE_VISIBILITY_PRIVATE_ATTRIBUTES_AT_DEFINITION,
             rand.nextBoolean())
diff --git a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkDefinedAspectsTest.java b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkDefinedAspectsTest.java
index 6a4921f..5bf954d 100644
--- a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkDefinedAspectsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkDefinedAspectsTest.java
@@ -5411,83 +5411,6 @@
             "aspect a3 on target //test:main sees a1p = a1p_val and sees a2p = a2p_val");
   }
 
-  /**
-   * --aspects = a1, a2, a1: aspect a1 requires a2p, a2 provides a2p.
-   *
-   * <p>top level aspects list is deduplicated when --incompatible_top_level_aspects_dependency is
-   * disabled and only the first occurrence of a1 will be there so a1 won't get the value of a2p.
-   */
-  @Test
-  public void testTopLevelAspectOnAspect_duplicateAspectsIgnored() throws Exception {
-    scratch.file(
-        "test/defs.bzl",
-        "a2p = provider()",
-        "a1_result = provider()",
-        "",
-        "def _a1_impl(target, ctx):",
-        "  result = 'aspect a1 on target {}'.format(target.label)",
-        "  if a2p in target:",
-        "    result += ' sees a2p = {}'.format(target[a2p].value)",
-        "  else:",
-        "    result += ' cannot see a2p'",
-        "  complete_result = []",
-        "  if ctx.rule.attr.deps:",
-        "    for dep in ctx.rule.attr.deps:",
-        "      complete_result.extend(dep[a1_result].value)",
-        "  complete_result.append(result)",
-        "  return [a1_result(value = complete_result)]",
-        "a1 = aspect(",
-        "  implementation = _a1_impl,",
-        "  attr_aspects = ['deps'],",
-        "  required_aspect_providers = [a2p]",
-        ")",
-        "",
-        "def _a2_impl(target, ctx):",
-        "  return [a2p(value = 'a2p_val')]",
-        "a2 = aspect(",
-        "  implementation = _a2_impl,",
-        "  attr_aspects = ['deps'],",
-        "  provides = [a2p]",
-        ")",
-        "",
-        "def _simple_rule_impl(ctx):",
-        "  pass",
-        "simple_rule = rule(",
-        "  implementation = _simple_rule_impl,",
-        "  attrs = {",
-        "    'deps': attr.label_list(),",
-        "  },",
-        ")");
-    scratch.file(
-        "test/BUILD",
-        "load('//test:defs.bzl', 'simple_rule')",
-        "simple_rule(",
-        "  name = 'main',",
-        "  deps = [':dep_target'],",
-        ")",
-        "simple_rule(",
-        "  name = 'dep_target',",
-        ")");
-    useConfiguration("--noincompatible_top_level_aspects_dependency");
-
-    AnalysisResult analysisResult =
-        update(
-            ImmutableList.of("test/defs.bzl%a1", "test/defs.bzl%a2", "test/defs.bzl%a1"),
-            "//test:main");
-
-    Map<AspectKey, ConfiguredAspect> configuredAspects = analysisResult.getAspectsMap();
-    ConfiguredAspect a1 = getConfiguredAspect(configuredAspects, "a1");
-    assertThat(a1).isNotNull();
-    StarlarkProvider.Key a1Result =
-        new StarlarkProvider.Key(
-            Label.parseAbsolute("//test:defs.bzl", ImmutableMap.of()), "a1_result");
-    StructImpl a1ResultProvider = (StructImpl) a1.get(a1Result);
-    assertThat((Sequence<?>) a1ResultProvider.getValue("value"))
-        .containsExactly(
-            "aspect a1 on target //test:main cannot see a2p",
-            "aspect a1 on target //test:dep_target cannot see a2p");
-  }
-
   @Test
   public void testTopLevelAspectOnAspect_duplicateAspectsNotAllowed() throws Exception {
     scratch.file(
@@ -5949,63 +5872,6 @@
     assertContainsEvent("Provider a1p provided twice");
   }
 
-  /**
-   * aspects = a1, a2; aspect a1 provides a1p provider and aspect a2 requires a1p provider. These
-   * top-level aspects are applied on top-level target `main` whose rule also provides a1p.
-   *
-   * <p>If the incompatible_top_level_aspects_dependency flag is disabled, aspects a1 and a2 will
-   * run independently and the build will succeed. a2 will only see the value of a1p provided by
-   * my_rule.
-   */
-  @Test
-  public void testTopLevelAspects_duplicateRuleProviderPassed() throws Exception {
-    scratch.file(
-        "test/defs.bzl",
-        "a1p = provider()",
-        "a2p = provider()",
-        "",
-        "def _a1_impl(target, ctx):",
-        "  return [a1p(value = 'aspect_a1p_val')]",
-        "a1 = aspect(",
-        "  implementation = _a1_impl,",
-        "  provides = [a1p],",
-        ")",
-        "",
-        "def _a2_impl(target, ctx):",
-        "  result = 'aspect a2 on target {}'.format(target.label)",
-        "  if a1p in target:",
-        "    result += ' sees a1p = {}'.format(target[a1p].value)",
-        "  else:",
-        "    result += ' cannot see a1p'",
-        "  return [a2p(value = result)]",
-        "a2 = aspect(",
-        "  implementation = _a2_impl,",
-        "  provides = [a2p],",
-        "  required_aspect_providers = [a1p]",
-        ")",
-        "",
-        "def _my_rule_impl(ctx):",
-        "  return [a1p(value = 'rule_a1p_val')]",
-        "my_rule = rule(",
-        "  implementation = _my_rule_impl,",
-        ")");
-    scratch.file("test/BUILD", "load('//test:defs.bzl', 'my_rule')", "my_rule(name = 'main')");
-    useConfiguration("--noincompatible_top_level_aspects_dependency");
-    reporter.removeHandler(failFastHandler);
-
-    AnalysisResult analysisResult =
-        update(ImmutableList.of("test/defs.bzl%a1", "test/defs.bzl%a2"), "//test:main");
-
-    Map<AspectKey, ConfiguredAspect> configuredAspects = analysisResult.getAspectsMap();
-    ConfiguredAspect a2 = getConfiguredAspect(configuredAspects, "a2");
-    assertThat(a2).isNotNull();
-    StarlarkProvider.Key a2Result =
-        new StarlarkProvider.Key(Label.parseAbsolute("//test:defs.bzl", ImmutableMap.of()), "a2p");
-    StructImpl a2ResultProvider = (StructImpl) a2.get(a2Result);
-    assertThat((String) a2ResultProvider.getValue("value"))
-        .isEqualTo("aspect a2 on target //test:main sees a1p = rule_a1p_val");
-  }
-
   @Test
   public void testTopLevelAspectRequiresAspect_stackOfRequiredAspects() throws Exception {
     scratch.file(