Skylark, JS: nicer error message when a source file has an unknown type.

--
MOS_MIGRATED_REVID=112766003
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AnalysisIssues.java b/src/main/java/com/google/devtools/build/lib/packages/AnalysisIssues.java
index 8ccdf64..fe5ac87 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AnalysisIssues.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AnalysisIssues.java
@@ -13,7 +13,6 @@
 // limitations under the License.
 package com.google.devtools.build.lib.packages;
 
-import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.util.Preconditions;
 
@@ -57,6 +56,15 @@
       }
     }
 
+    private void reportTo(StringBuilder sb) {
+      String msg = String.format(messageTemplate, arguments);
+      if (attribute == null) {
+        sb.append("ERROR: ").append(msg);
+      } else {
+        sb.append("ERROR: in attribute \"").append(attribute).append("\": ").append(msg);
+      }
+    }
+
     @Override
     public String toString() {
       if (attribute == null) {
@@ -102,8 +110,27 @@
     }
   }
 
+  @Nullable
+  private String asString() {
+    if (entries == null) {
+      return null;
+    }
+
+    StringBuilder sb = new StringBuilder();
+    for (Entry e : entries) {
+      e.reportTo(sb);
+    }
+    return sb.toString();
+  }
+
+  @Override
+  public String getMessage() {
+    return asString();
+  }
+
   @Override
   public String toString() {
-    return "Errors during analysis:\n" + Joiner.on("\n").join(entries);
+    String s = asString();
+    return s == null ? "" : s;
   }
 }