bazel syntax: improve error message

This change is part of a demonstration of the workflow of making
changes to Bazel.

RELNOTES: N/A
PiperOrigin-RevId: 302101199
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkType.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkType.java
index 4e9f449..9dd9b03 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkType.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkType.java
@@ -668,21 +668,19 @@
       return ImmutableMap.of();
     }
     if (!(obj instanceof Map<?, ?>)) {
-      throw Starlark.errorf(
-          "expected a dictionary for '%s' but got '%s' instead",
-          what, EvalUtils.getDataTypeName(obj));
+      throw Starlark.errorf("got '%s' for '%s', want 'dict'", EvalUtils.getDataTypeName(obj), what);
     }
 
     for (Map.Entry<?, ?> input : ((Map<?, ?>) obj).entrySet()) {
       if (!keyType.isAssignableFrom(input.getKey().getClass())
           || !valueType.isAssignableFrom(input.getValue().getClass())) {
         throw Starlark.errorf(
-            "expected <%s, %s> type for '%s' but got <%s, %s> instead",
-            keyType.getSimpleName(),
-            valueType.getSimpleName(),
+            "got dict<%s, %s> for '%s', want dict<%s, %s>",
+            Starlark.type(input.getKey()),
+            Starlark.type(input.getValue()),
             what,
-            EvalUtils.getDataTypeName(input.getKey()),
-            EvalUtils.getDataTypeName(input.getValue()));
+            EvalUtils.getDataTypeNameFromClass(keyType),
+            EvalUtils.getDataTypeNameFromClass(valueType));
       }
     }
 
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
index 232e18b..7728813 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
@@ -832,7 +832,7 @@
   public void testRuleBadTypeInAdd() throws Exception {
     registerDummyStarlarkFunction();
     checkEvalErrorContains(
-        "expected <String, Descriptor> type for 'attrs' but got <string, string> instead",
+        "got dict<string, string> for 'attrs', want dict<string, Attribute>",
         "rule(impl, attrs = {'a1': 'some text'})");
   }