bazel syntax: remove EvalUtils.getDataTypeName special case for 'select'

This change removes the special case for SelectorList in getDataTypeName
that caused it to return "select of T". Although informative, the element
type is rarely important in the actual errors in which it appears.
To compensate, we work harder to generate good errors when reporting
the wrong kind of select, as in 'select of A + select of B'.

With CL 291262809, this change removes the last obstacle to moving
Selector{List,Value} into lib.packages where they belong.

PiperOrigin-RevId: 291715802
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
index 5c0c5f0..4e1b680 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
@@ -217,10 +217,6 @@
         Depset set = (Depset) object;
         return "depset of " + set.getContentType() + "s";
       }
-      if (object instanceof SelectorList) {
-        SelectorList list = (SelectorList) object;
-        return "select of " + getDataTypeNameFromClass(list.getType());
-      }
     }
     return getDataTypeNameFromClass(object.getClass());
   }
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SelectorList.java b/src/main/java/com/google/devtools/build/lib/syntax/SelectorList.java
index 251bf00..52d464c 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SelectorList.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SelectorList.java
@@ -125,8 +125,7 @@
             location,
             String.format(
                 "'+' operator applied to incompatible types (%s, %s)",
-                EvalUtils.getDataTypeName(firstValue, true),
-                EvalUtils.getDataTypeName(value, true)));
+                getTypeName(firstValue), getTypeName(value)));
       }
     }
 
@@ -135,6 +134,16 @@
 
   private static final Class<?> NATIVE_LIST_TYPE = List.class;
 
+  private static String getTypeName(Object x) {
+    if (x instanceof SelectorList) {
+      return "select of " + EvalUtils.getDataTypeNameFromClass(((SelectorList) x).getType());
+    } else if (x instanceof SelectorValue) {
+      return "select of " + EvalUtils.getDataTypeNameFromClass(((SelectorValue) x).getType());
+    } else {
+      return Starlark.type(x);
+    }
+  }
+
   private static Class<?> getNativeType(Object value) {
     if (value instanceof SelectorList) {
       return ((SelectorList) value).getType();