Remove the ability for an aspect to propagate a different aspect.

This functionality is never used, have never been exposed to Skylark
and is a continuous pain to maintain and test.

--
PiperOrigin-RevId: 145079832
MOS_MIGRATED_REVID=145079832
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
index 2060e81..dc1f292 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
@@ -34,7 +34,6 @@
 import com.google.devtools.build.lib.packages.BuildType;
 import com.google.devtools.build.lib.packages.EnvironmentGroup;
 import com.google.devtools.build.lib.packages.InputFile;
-import com.google.devtools.build.lib.packages.NativeAspectClass;
 import com.google.devtools.build.lib.packages.NoSuchThingException;
 import com.google.devtools.build.lib.packages.OutputFile;
 import com.google.devtools.build.lib.packages.PackageGroup;
@@ -559,19 +558,8 @@
     ImmutableList.Builder<Aspect> aspectCandidates = ImmutableList.builder();
     aspectCandidates.addAll(attribute.getAspects(originalRule));
     for (Aspect aspect : aspects) {
-      for (AspectClass aspectClass :
-          aspect.getDefinition().getAttributeAspects(attribute)) {
-        if (aspectClass.equals(aspect.getAspectClass())) {
-          aspectCandidates.add(aspect);
-        } else if (aspectClass instanceof NativeAspectClass) {
-          aspectCandidates.add(
-              Aspect.forNative((NativeAspectClass) aspectClass, aspect.getParameters()));
-        } else {
-          // If we ever want to support this specifying arbitrary aspects for Skylark aspects,
-          // we will need to do a Skyframe call here to load an up-to-date definition.
-          throw new IllegalStateException(
-              "Skylark aspect classes sending different aspects along attributes is not supported");
-        }
+      if (aspect.getDefinition().propagateAlong(attribute)) {
+        aspectCandidates.add(aspect);
       }
     }
     return aspectCandidates.build();
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
index 4c2dc81..e1f31fa 100644
--- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
@@ -158,8 +158,8 @@
   public AspectDefinition getDefinition(AspectParameters aspectParameters) {
     AspectDefinition.Builder builder =
         new AspectDefinition.Builder(this)
-            .attributeAspect("runtime_deps", this)
-            .attributeAspect("resources", this)
+            .propagateAlongAttribute("runtime_deps")
+            .propagateAlongAttribute("resources")
             .add(
                 attr("$packageParser", LABEL)
                     .cfg(HOST)
@@ -176,7 +176,7 @@
                             toolsRepository + "//tools/android:JarFilter")));
 
     for (PrerequisiteAttr prerequisiteAttr : prerequisiteAttrs) {
-      builder.attributeAspect(prerequisiteAttr.name, this);
+      builder.propagateAlongAttribute(prerequisiteAttr.name);
     }
 
     return builder.build();
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
index 58b8fea..55b0616 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
@@ -14,12 +14,9 @@
 
 package com.google.devtools.build.lib.packages;
 
-import com.google.common.collect.ImmutableCollection;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableMultimap;
 import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSetMultimap;
 import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.SetMultimap;
@@ -30,6 +27,7 @@
 import com.google.devtools.build.lib.util.Preconditions;
 import java.util.Collection;
 import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
@@ -53,31 +51,34 @@
  */
 @Immutable
 public final class AspectDefinition {
-
   private final AspectClass aspectClass;
   private final RequiredProviders requiredProviders;
   private final RequiredProviders requiredProvidersForAspects;
   private final ImmutableMap<String, Attribute> attributes;
-  private final PropagationFunction attributeAspects;
-  @Nullable private final ConfigurationFragmentPolicy configurationFragmentPolicy;
 
-  private interface PropagationFunction {
-    ImmutableCollection<AspectClass> propagate(Attribute attribute);
-  }
+  /**
+   * Which attributes aspect should propagate along:
+   * <ul>
+   *  <li>A {@code null} value means propagate along all attributes</li>
+   *  <li>A (possibly empty) set means to propagate only along the attributes in a set</li>
+   * </ul>
+   */
+  @Nullable private final ImmutableSet<String> restrictToAttributes;
+  @Nullable private final ConfigurationFragmentPolicy configurationFragmentPolicy;
 
   private AspectDefinition(
       AspectClass aspectClass,
       RequiredProviders requiredProviders,
       RequiredProviders requiredAspectProviders,
       ImmutableMap<String, Attribute> attributes,
-      PropagationFunction attributeAspects,
+      @Nullable ImmutableSet<String> restrictToAttributes,
       @Nullable ConfigurationFragmentPolicy configurationFragmentPolicy) {
     this.aspectClass = aspectClass;
     this.requiredProviders = requiredProviders;
     this.requiredProvidersForAspects = requiredAspectProviders;
 
     this.attributes = attributes;
-    this.attributeAspects = attributeAspects;
+    this.restrictToAttributes = restrictToAttributes;
     this.configurationFragmentPolicy = configurationFragmentPolicy;
   }
 
@@ -119,10 +120,13 @@
 
 
   /**
-   * Returns the set of required aspects for a given atribute.
+   * Returns the set of required aspects for a given attribute.
    */
-  public ImmutableCollection<AspectClass> getAttributeAspects(Attribute attribute) {
-    return attributeAspects.propagate(attribute);
+  public boolean propagateAlong(Attribute attribute) {
+    if (restrictToAttributes != null) {
+      return restrictToAttributes.contains(attribute.getName());
+    }
+    return true;
   }
 
   /**
@@ -216,8 +220,8 @@
     private RequiredProviders.Builder requiredProviders = RequiredProviders.acceptAnyBuilder();
     private RequiredProviders.Builder requiredAspectProviders =
         RequiredProviders.acceptNoneBuilder();
-    private final Multimap<String, AspectClass> attributeAspects = LinkedHashMultimap.create();
-    private ImmutableCollection<AspectClass> allAttributesAspects = null;
+    @Nullable
+    private LinkedHashSet<String> propagateAlongAttributes = new LinkedHashSet<>();
     private final ConfigurationFragmentPolicy.Builder configurationFragmentPolicy =
         new ConfigurationFragmentPolicy.Builder();
 
@@ -265,42 +269,38 @@
 
 
     /**
-     * Declares that this aspect depends on the given aspects in {@code aspectFactories} provided
-     * by direct dependencies through attribute {@code attribute} on the target associated with this
-     * aspect.
+     * Declares that this aspect propagates along an {@code attribute} on the target
+     * associated with this aspect.
      *
-     * <p>Note that {@code ConfiguredAspectFactory} instances are expected in the second argument,
-     * but we cannot reference that interface here.
+     * Specify multiple attributes by calling {@link #propagateAlongAttribute(String)}
+     * repeatedly.
+     *
+     * Aspect can also declare to propagate along all attributes with
+     * {@link #propagateAlongAttributes}.
      */
-    public final Builder attributeAspect(String attribute, NativeAspectClass... aspectClasses) {
+    public final Builder propagateAlongAttribute(String attribute) {
       Preconditions.checkNotNull(attribute);
-      for (NativeAspectClass aspectClass : aspectClasses) {
-        this.attributeAspect(attribute, Preconditions.checkNotNull(aspectClass));
-      }
+      Preconditions.checkState(this.propagateAlongAttributes != null,
+          "Either propagate along all attributes, or along specific attributes, not both");
+
+      this.propagateAlongAttributes.add(attribute);
+
       return this;
     }
 
     /**
-     * Declares that this aspect depends on the given {@link AspectClass} provided
-     * by direct dependencies through attribute {@code attribute} on the target associated with this
-     * aspect.
+     * Declares that this aspect propagates along all attributes on the target
+     * associated with this aspect.
+     *
+     * Specify either this or {@link #propagateAlongAttribute(String)}, not both.
      */
-    public final Builder attributeAspect(String attribute, AspectClass aspectClass) {
-      Preconditions.checkNotNull(attribute);
-      Preconditions.checkState(this.allAttributesAspects == null,
-          "Specify either aspects for all attributes, or for specific attributes, not both");
-
-      this.attributeAspects.put(attribute, Preconditions.checkNotNull(aspectClass));
-
-      return this;
-    }
-
-    public final Builder allAttributesAspect(AspectClass... aspectClasses) {
-      Preconditions.checkState(this.attributeAspects.isEmpty(),
-          "Specify either aspects for all attributes, or for specific attributes, not both");
-      Preconditions.checkState(this.allAttributesAspects == null,
+    public final Builder propagateAlongAllAttributes() {
+      Preconditions.checkState(this.propagateAlongAttributes != null,
           "Aspects for all attributes must only be specified once");
-      this.allAttributesAspects = ImmutableList.copyOf(aspectClasses);
+
+      Preconditions.checkState(this.propagateAlongAttributes.isEmpty(),
+          "Specify either aspects for all attributes, or for specific attributes, not both");
+      this.propagateAlongAttributes = null;
       return this;
     }
 
@@ -394,34 +394,6 @@
       return this;
     }
 
-    @Immutable
-    private static final class AllAttributesPropagationFunction implements PropagationFunction {
-      private final ImmutableCollection<AspectClass> aspects;
-
-      private AllAttributesPropagationFunction(ImmutableCollection<AspectClass> aspects) {
-        this.aspects = aspects;
-      }
-
-      @Override
-      public ImmutableCollection<AspectClass> propagate(Attribute attribute) {
-        return aspects;
-      }
-    }
-
-    @Immutable
-    private static final class PerAttributePropagationFunction implements PropagationFunction {
-      ImmutableSetMultimap<String, AspectClass> aspects;
-
-      public PerAttributePropagationFunction(
-          ImmutableSetMultimap<String, AspectClass> aspects) {
-        this.aspects = aspects;
-      }
-
-      @Override
-      public ImmutableCollection<AspectClass> propagate(Attribute attribute) {
-        return aspects.get(attribute.getName());
-      }
-    }
 
     /**
      * Builds the aspect definition.
@@ -433,9 +405,9 @@
           requiredProviders.build(),
           requiredAspectProviders.build(),
           ImmutableMap.copyOf(attributes),
-          allAttributesAspects != null
-              ? new AllAttributesPropagationFunction(allAttributesAspects)
-              : new PerAttributePropagationFunction(ImmutableSetMultimap.copyOf(attributeAspects)),
+          propagateAlongAttributes == null
+              ? null
+              : ImmutableSet.copyOf(propagateAlongAttributes),
           configurationFragmentPolicy.build());
     }
   }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkAspect.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkAspect.java
index 5d04a5c..6c393ae 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkAspect.java
@@ -121,10 +121,10 @@
   public AspectDefinition getDefinition(AspectParameters aspectParams) {
     AspectDefinition.Builder builder = new AspectDefinition.Builder(aspectClass);
     if (allAttrAspects.equals(attributeAspects)) {
-      builder.allAttributesAspect(aspectClass);
+      builder.propagateAlongAllAttributes();
     } else {
       for (String attributeAspect : attributeAspects) {
-        builder.attributeAspect(attributeAspect, aspectClass);
+        builder.propagateAlongAttribute(attributeAspect);
       }
     }
     
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java
index b7c6c59..68ee612 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java
@@ -79,7 +79,7 @@
   public AspectDefinition getDefinition(AspectParameters aspectParameters) {
     AspectDefinition.Builder builder = new AspectDefinition.Builder(this);
     for (String attribute : ATTRIBUTES) {
-      builder.attributeAspect(attribute, this);
+      builder.propagateAlongAttribute(attribute);
     }
 
     return builder
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
index 9904c66..3e9a2c8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
@@ -129,7 +129,7 @@
           .value(Label.parseAbsoluteUnchecked(toolsRepository + "//tools/android:dexbuilder")));
     }
     for (String attr : TRANSITIVE_ATTRIBUTES) {
-      result.attributeAspect(attr, this);
+      result.propagateAlongAttribute(attr);
     }
     return result.build();
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java
index c6a25ee..877da92 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java
@@ -65,9 +65,9 @@
         .add(attr(":android_sdk", LABEL)
               .allowedRuleClasses("android_sdk")
               .value(new AndroidSdkLabel(androidSdk)))
-        .attributeAspect("deps", this)
-        .attributeAspect("exports", this)
-        .attributeAspect("runtime_deps", this)
+        .propagateAlongAttribute("deps")
+        .propagateAlongAttribute("exports")
+        .propagateAlongAttribute("runtime_deps")
         .requiresConfigurationFragments(AndroidConfiguration.class)
         .build();
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
index da7e446..ea569e9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
@@ -108,7 +108,7 @@
   public AspectDefinition getDefinition(AspectParameters aspectParameters) {
     AspectDefinition.Builder result =
         new AspectDefinition.Builder(this)
-            .attributeAspect("deps", this)
+            .propagateAlongAttribute("deps")
             .requiresConfigurationFragments(CppConfiguration.class, ProtoConfiguration.class)
             .requireProviders(ProtoSupportDataProvider.class)
             .add(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
index f868407..a151b3d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
@@ -115,7 +115,7 @@
   public AspectDefinition getDefinition(AspectParameters aspectParameters) {
     AspectDefinition.Builder result =
         new AspectDefinition.Builder(this)
-            .attributeAspect("deps", this)
+            .propagateAlongAttribute("deps")
             .requiresConfigurationFragments(JavaConfiguration.class, ProtoConfiguration.class)
             .requireProviders(ProtoSourcesProvider.class)
             .add(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
index 5eba495..a248bbf 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
@@ -122,7 +122,7 @@
   public AspectDefinition getDefinition(AspectParameters aspectParameters) {
     AspectDefinition.Builder result =
         new AspectDefinition.Builder(this)
-            .attributeAspect("deps", this)
+            .propagateAlongAttribute("deps")
             .requiresConfigurationFragments(JavaConfiguration.class, ProtoConfiguration.class)
             .requireProviders(ProtoSourcesProvider.class)
             .add(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
index 73fdbe6..d25be99 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
@@ -136,9 +136,9 @@
   @Override
   public AspectDefinition getDefinition(AspectParameters aspectParameters) {
     return addAdditionalAttributes(new AspectDefinition.Builder(this))
-        .attributeAspect("deps", this)
-        .attributeAspect("exports", this)
-        .attributeAspect("runtime_deps", this)
+        .propagateAlongAttribute("deps")
+        .propagateAlongAttribute("exports")
+        .propagateAlongAttribute("runtime_deps")
         .requireProviderSets(
             ImmutableList.of(
                 ImmutableSet.<Class<?>>of(JavaCompilationArgsProvider.class),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java
index fa959e1..befd3d4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java
@@ -36,7 +36,7 @@
   @Override
   public AspectDefinition getDefinition(AspectParameters aspectParameters) {
     return new AspectDefinition.Builder(this)
-        .attributeAspect("deps", this)
+        .propagateAlongAttribute("deps")
         .build();
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
index f522433..924e3ba 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
@@ -120,26 +120,26 @@
   @Test
   public void testAttributeAspect_WrapsAndAddsToMap() throws Exception {
     AspectDefinition withAspects = new AspectDefinition.Builder(TEST_ASPECT_CLASS)
-        .attributeAspect("srcs", TEST_ASPECT_CLASS)
-        .attributeAspect("deps", TEST_ASPECT_CLASS)
+        .propagateAlongAttribute("srcs")
+        .propagateAlongAttribute("deps")
         .build();
 
-    assertThat(withAspects.getAttributeAspects(createLabelListAttribute("srcs")))
-        .containsExactly(TEST_ASPECT_CLASS);
-    assertThat(withAspects.getAttributeAspects(createLabelListAttribute("deps")))
-        .containsExactly(TEST_ASPECT_CLASS);
+    assertThat(withAspects.propagateAlong(createLabelListAttribute("srcs")))
+        .isTrue();
+    assertThat(withAspects.propagateAlong(createLabelListAttribute("deps")))
+        .isTrue();
   }
 
   @Test
   public void testAttributeAspect_AllAttributes() throws Exception {
     AspectDefinition withAspects = new AspectDefinition.Builder(TEST_ASPECT_CLASS)
-        .allAttributesAspect(TEST_ASPECT_CLASS)
+        .propagateAlongAllAttributes()
         .build();
 
-    assertThat(withAspects.getAttributeAspects(createLabelListAttribute("srcs")))
-        .containsExactly(TEST_ASPECT_CLASS);
-    assertThat(withAspects.getAttributeAspects(createLabelListAttribute("deps")))
-        .containsExactly(TEST_ASPECT_CLASS);
+    assertThat(withAspects.propagateAlong(createLabelListAttribute("srcs")))
+        .isTrue();
+    assertThat(withAspects.propagateAlong(createLabelListAttribute("deps")))
+        .isTrue();
   }
 
 
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java b/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java
index 724b1c5..2926564 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java
@@ -251,7 +251,7 @@
   public static final AttributeAspect ATTRIBUTE_ASPECT = new AttributeAspect();
   private static final AspectDefinition ATTRIBUTE_ASPECT_DEFINITION =
       new AspectDefinition.Builder(ATTRIBUTE_ASPECT)
-      .attributeAspect("foo", ATTRIBUTE_ASPECT)
+      .propagateAlongAttribute("foo")
       .build();
 
   /**
@@ -267,7 +267,7 @@
   public static final NativeAspectClass ALL_ATTRIBUTES_ASPECT = new AllAttributesAspect();
   private static final AspectDefinition ALL_ATTRIBUTES_ASPECT_DEFINITION =
       new AspectDefinition.Builder(ALL_ATTRIBUTES_ASPECT)
-          .allAttributesAspect(ALL_ATTRIBUTES_ASPECT)
+          .propagateAlongAllAttributes()
           .build();
 
   /** An aspect that propagates along all attributes and has a tool dependency. */
@@ -283,7 +283,7 @@
       new AllAttributesWithToolAspect();
   private static final AspectDefinition ALL_ATTRIBUTES_WITH_TOOL_ASPECT_DEFINITION =
       new AspectDefinition.Builder(ALL_ATTRIBUTES_WITH_TOOL_ASPECT)
-          .allAttributesAspect(ALL_ATTRIBUTES_WITH_TOOL_ASPECT)
+          .propagateAlongAllAttributes()
           .add(
               attr("$tool", BuildType.LABEL)
                   .allowedFileTypes(FileTypeSet.ANY_FILE)
@@ -338,7 +338,7 @@
     public AspectDefinition getDefinition(AspectParameters aspectParameters) {
       AspectDefinition.Builder builder =
           new AspectDefinition.Builder(PARAMETRIZED_DEFINITION_ASPECT)
-              .attributeAspect("foo", this);
+              .propagateAlongAttribute("foo");
       ImmutableCollection<String> baz = aspectParameters.getAttribute("baz");
       if (baz != null) {
         try {
@@ -413,7 +413,7 @@
   public static final WarningAspect WARNING_ASPECT = new WarningAspect();
   private static final AspectDefinition WARNING_ASPECT_DEFINITION =
       new AspectDefinition.Builder(WARNING_ASPECT)
-      .attributeAspect("bar", WARNING_ASPECT)
+      .propagateAlongAttribute("bar")
       .build();
 
   /**
@@ -438,7 +438,7 @@
   public static final ErrorAspect ERROR_ASPECT = new ErrorAspect();
   private static final AspectDefinition ERROR_ASPECT_DEFINITION =
       new AspectDefinition.Builder(ERROR_ASPECT)
-      .attributeAspect("bar", ERROR_ASPECT)
+      .propagateAlongAttribute("bar")
       .build();
 
   /**
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
index 0575203..37d4cea 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
@@ -1134,9 +1134,9 @@
         "my_aspect = aspect(_impl, attr_aspects=['*'])");
 
     SkylarkAspect myAspect = (SkylarkAspect) lookup("my_aspect");
-    assertThat(myAspect.getDefinition(AspectParameters.EMPTY).getAttributeAspects(
+    assertThat(myAspect.getDefinition(AspectParameters.EMPTY).propagateAlong(
         Attribute.attr("foo", BuildType.LABEL).allowedFileTypes().build()
-    )).containsExactly(myAspect.getAspectClass());
+    )).isTrue();
   }
 
   @Test