Implement aspect attributes and expose them to aspect implementation function.

--
MOS_MIGRATED_REVID=110356954
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 b75c6b9..cc99514 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
@@ -136,7 +136,7 @@
   private final Set<ConfigMatchingProvider> configConditions;
   private final AttributeMap attributes;
   private final ImmutableSet<String> features;
-  private final Map<String, Attribute> aspectAttributes;
+  private final ImmutableMap<String, Attribute> aspectAttributes;
   private final BuildConfiguration hostConfiguration;
   private final ConfigurationFragmentPolicy configurationFragmentPolicy;
   private final Class<? extends BuildConfiguration.Fragment> universalFragment;
@@ -147,11 +147,13 @@
   /* lazily computed cache for Make variables, computed from the above. See get... method */
   private transient ConfigurationMakeVariableContext configurationMakeVariableContext = null;
 
-  private RuleContext(Builder builder, ListMultimap<String, ConfiguredTarget> targetMap,
+  private RuleContext(
+      Builder builder,
+      ListMultimap<String, ConfiguredTarget> targetMap,
       ListMultimap<String, ConfiguredFilesetEntry> filesetEntryMap,
       Set<ConfigMatchingProvider> configConditions,
       Class<? extends BuildConfiguration.Fragment> universalFragment,
-      Map<String, Attribute> aspectAttributes) {
+      ImmutableMap<String, Attribute> aspectAttributes) {
     super(builder.env, builder.rule, builder.configuration, builder.prerequisiteMap.get(null),
         builder.visibility);
     this.rule = builder.rule;
@@ -234,6 +236,13 @@
   }
 
   /**
+   * Attributes from aspects.
+   */
+  public ImmutableMap<String, Attribute> getAspectAttributes() {
+    return aspectAttributes;
+  }
+
+  /**
    * Accessor for the Rule's attribute values.
    */
   public AttributeMap attributes() {
@@ -1241,7 +1250,7 @@
     private ListMultimap<Attribute, ConfiguredTarget> prerequisiteMap;
     private Set<ConfigMatchingProvider> configConditions;
     private NestedSet<PackageSpecification> visibility;
-    private Map<String, Attribute> aspectAttributes;
+    private ImmutableMap<String, Attribute> aspectAttributes;
 
     Builder(AnalysisEnvironment env, Rule rule, BuildConfiguration configuration,
         BuildConfiguration hostConfiguration,
@@ -1284,7 +1293,7 @@
      * Adds attributes which are defined by an Aspect (and not by RuleClass).
      */
     Builder setAspectAttributes(Map<String, Attribute> aspectAttributes) {
-      this.aspectAttributes = aspectAttributes;
+      this.aspectAttributes = ImmutableMap.copyOf(aspectAttributes);
       return this;
     }