Configurable attributes: support embeddable selects. With this
change, the following syntax:

  deps = [':always'] + select({':a': [':adep'], ':b': [':bdep']})

or

  deps = select({':a': [':adep'], ':b': [':bdep']})
       + select({':c': [':cdep'], ':d': [':ddep']})

works.

--
MOS_MIGRATED_REVID=91016337
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index d265a44..4521b33 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -1278,13 +1278,9 @@
 
     Set<Label> configLabels = new LinkedHashSet<>();
     for (Attribute attr : rule.getAttributes()) {
-      Type.Selector<?> selector = attributes.getSelector(attr.getName(), attr.getType());
-      if (selector != null) {
-        for (Label label : selector.getEntries().keySet()) {
-          if (!Type.Selector.isReservedLabel(label)) {
-            configLabels.add(label);
-          }
-        }
+      Type.SelectorList<?> selectors = attributes.getSelectorList(attr.getName(), attr.getType());
+      if (selectors != null) {
+        configLabels.addAll(selectors.getKeyLabels());
       }
     }
 
@@ -1444,7 +1440,7 @@
       String what = "attribute '" + attrName + "' in '" + name + "' rule";
       converted = attr.getType().selectableConvert(attrVal, what, rule.getLabel());
 
-      if ((converted instanceof Type.Selector<?>) && !attr.isConfigurable()) {
+      if ((converted instanceof Type.SelectorList<?>) && !attr.isConfigurable()) {
         rule.reportError(rule.getLabel() + ": attribute \"" + attr.getName()
             + "\" is not configurable", eventHandler);
         return null;