Do not put OutputGroupProvider into SkylarkProviders.

Almost every target has an OutputGroupProvider. Putting an
("output_groups", value) pair into SkylarkProviders creates an
unneccessary map. This CL removes it.

RELNOTES: None.
PiperOrigin-RevId: 154940624
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
index 18c00f9..116df61 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
@@ -33,6 +33,7 @@
 import com.google.devtools.build.lib.packages.ClassObjectConstructor.Key;
 import com.google.devtools.build.lib.packages.SkylarkClassObject;
 import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
+import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.util.Preconditions;
 import java.util.Arrays;
@@ -92,6 +93,33 @@
     return providers.getProvider(providerClass);
   }
 
+  public Object getProvider(SkylarkProviderIdentifier id) {
+    if (id.isLegacy()) {
+      return get(id.getLegacyId());
+    } else {
+      return get(id.getKey());
+    }
+  }
+
+  public SkylarkClassObject get(ClassObjectConstructor.Key key) {
+    if (OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey().equals(key)) {
+      return getProvider(OutputGroupProvider.class);
+    }
+    SkylarkProviders skylarkProviders = getProvider(SkylarkProviders.class);
+    return skylarkProviders != null ? skylarkProviders.getDeclaredProvider(key) : null;
+  }
+
+  public Object get(String legacyKey) {
+    if (OutputGroupProvider.SKYLARK_NAME.equals(legacyKey)) {
+      return getProvider(OutputGroupProvider.class);
+    }
+    SkylarkProviders skylarkProviders = getProvider(SkylarkProviders.class);
+    return skylarkProviders != null
+        ? skylarkProviders.get(SkylarkProviderIdentifier.forLegacy(legacyKey))
+        : null;
+  }
+
+
   @Override
   public UnmodifiableIterator<TransitiveInfoProvider> iterator() {
     return providers.values().iterator();
@@ -210,14 +238,23 @@
         throw new EvalException(
             constructor.getLocation(), "All providers must be top level values");
       }
-      skylarkDeclaredProvidersBuilder.put(constructor.getKey(), declaredProvider);
+      ClassObjectConstructor.Key key = constructor.getKey();
+      addDeclaredProvider(key, declaredProvider);
       return this;
     }
 
+    private void addDeclaredProvider(Key key, SkylarkClassObject declaredProvider) {
+      if (OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey().equals(key)) {
+        addProvider(OutputGroupProvider.class, (OutputGroupProvider) declaredProvider);
+      } else {
+        skylarkDeclaredProvidersBuilder.put(key, declaredProvider);
+      }
+    }
+
     public Builder addNativeDeclaredProvider(SkylarkClassObject declaredProvider) {
       ClassObjectConstructor constructor = declaredProvider.getConstructor();
       Preconditions.checkState(constructor.isExported());
-      skylarkDeclaredProvidersBuilder.put(constructor.getKey(), declaredProvider);
+      addDeclaredProvider(constructor.getKey(), declaredProvider);
       return this;
     }
 
@@ -234,8 +271,7 @@
           throw new IllegalStateException(
               "OutputGroupProvider was provided explicitly; do not use addOutputGroup");
         }
-        skylarkDeclaredProvidersBuilder.put(
-            OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey(),
+        addDeclaredProvider(OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey(),
             new OutputGroupProvider(outputGroups.build()));
       }