Make the Attribute.Builder.cloneBuilder() also copy aspects.

--
MOS_MIGRATED_REVID=118699141
diff --git a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
index 40a7aa6..b8a6f49 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
@@ -27,6 +27,7 @@
 import static org.junit.Assert.fail;
 
 import com.google.common.base.Predicates;
+import com.google.devtools.build.lib.analysis.util.TestAspects;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.syntax.Type;
 import com.google.devtools.build.lib.util.FileType;
@@ -209,27 +210,38 @@
     RuleClass.Builder.RuleClassNamePredicate ruleClasses =
         new RuleClass.Builder.RuleClassNamePredicate("mock_rule");
 
-    Attribute parentAttr = attr("x", LABEL_LIST)
-        .allowedFileTypes(txtFiles)
-        .mandatory()
-        .build();
+    Attribute parentAttr =
+        attr("x", LABEL_LIST)
+            .allowedFileTypes(txtFiles)
+            .mandatory()
+            .aspect(TestAspects.SimpleAspect.class)
+            .build();
 
-    Attribute childAttr1 = parentAttr.cloneBuilder().build();
-    assertEquals("x", childAttr1.getName());
-    assertEquals(txtFiles, childAttr1.getAllowedFileTypesPredicate());
-    assertEquals(Predicates.alwaysTrue(), childAttr1.getAllowedRuleClassesPredicate());
-    assertTrue(childAttr1.isMandatory());
-    assertFalse(childAttr1.isNonEmpty());
+    {
+      Attribute childAttr1 = parentAttr.cloneBuilder().build();
+      assertEquals("x", childAttr1.getName());
+      assertEquals(txtFiles, childAttr1.getAllowedFileTypesPredicate());
+      assertEquals(Predicates.alwaysTrue(), childAttr1.getAllowedRuleClassesPredicate());
+      assertTrue(childAttr1.isMandatory());
+      assertFalse(childAttr1.isNonEmpty());
+      assertThat(childAttr1.getAspects(null /* rule */)).hasSize(1);
+    }
 
-    Attribute childAttr2 = parentAttr.cloneBuilder()
-        .nonEmpty()
-        .allowedRuleClasses(ruleClasses)
-        .build();
-    assertEquals("x", childAttr2.getName());
-    assertEquals(txtFiles, childAttr2.getAllowedFileTypesPredicate());
-    assertEquals(ruleClasses, childAttr2.getAllowedRuleClassesPredicate());
-    assertTrue(childAttr2.isMandatory());
-    assertTrue(childAttr2.isNonEmpty());
+    {
+      Attribute childAttr2 =
+          parentAttr
+              .cloneBuilder()
+              .nonEmpty()
+              .allowedRuleClasses(ruleClasses)
+              .aspect(TestAspects.ErrorAspect.class)
+              .build();
+      assertEquals("x", childAttr2.getName());
+      assertEquals(txtFiles, childAttr2.getAllowedFileTypesPredicate());
+      assertEquals(ruleClasses, childAttr2.getAllowedRuleClassesPredicate());
+      assertTrue(childAttr2.isMandatory());
+      assertTrue(childAttr2.isNonEmpty());
+      assertThat(childAttr2.getAspects(null /* rule */)).hasSize(2);
+    }
 
     //Check if the parent attribute is unchanged
     assertFalse(parentAttr.isNonEmpty());