Bug 251313 Failed assertion in API tooling build
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java
index 932f85f..67bc469 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java
@@ -1336,14 +1336,19 @@
 	/**
 	 * Collects details from the given delta listing for version problems
 	 * @param deltas
-	 * @return
+	 * @return a {@link String} of the details why the version number should be changed
 	 */
 	private String collectDetails(final IDelta[] deltas) {
 		StringWriter writer = new StringWriter();
 		PrintWriter printWriter = new PrintWriter(writer);
-		for (int i = 0, max = deltas.length; i < max ; i++) {
+		//TODO contrived default for https://bugs.eclipse.org/bugs/show_bug.cgi?id=251313
+		int max = Math.min(20, deltas.length);
+		for (int i = 0; i < max; i++) {
 			printWriter.print("- "); //$NON-NLS-1$
 			printWriter.println(deltas[i].getMessage());
+			if(i == max-1 && max < deltas.length) {
+				printWriter.println(NLS.bind(BuilderMessages.BaseApiAnalyzer_more_version_problems, new Integer(deltas.length - max)));
+			}
 		}
 		printWriter.flush();
 		printWriter.close();
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuildState.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuildState.java
index 2ff8815..360e852 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuildState.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuildState.java
@@ -157,38 +157,36 @@
 		}
 	}
 	
+	/**
+	 * @return the complete list of recorded breaking changes with duplicates removed, or 
+	 * an empty array, never <code>null</code>
+	 */
 	public IDelta[] getBreakingChanges() {
 		if (this.breakingChanges == null || this.breakingChanges.size() == 0) {
 			return EMPTY_DELTAS;
 		}
-		ArrayList collector = new ArrayList();
+		HashSet collector = new HashSet();
 		Collection values = this.breakingChanges.values();
 		for (Iterator iterator = values.iterator(); iterator.hasNext(); ) {
-			HashSet set = (HashSet) iterator.next();
-			for (Iterator iterator2 = set.iterator(); iterator2.hasNext(); ) {
-				collector.add(iterator2.next());
-			}
+			collector.addAll((HashSet) iterator.next());
 		}
-		IDelta[] result = new IDelta[collector.size()];
-		collector.toArray(result);
-		return result;
+		return (IDelta[]) collector.toArray(new IDelta[collector.size()]);
 	}
 
+	/**
+	 * @return the complete list of recorded compatible changes with duplicates removed,
+	 * or an empty array, never <code>null</code>
+	 */
 	public IDelta[] getCompatibleChanges() {
 		if (this.compatibleChanges == null || this.compatibleChanges.size() == 0) {
 			return EMPTY_DELTAS;
 		}
-		ArrayList collector = new ArrayList();
+		HashSet collector = new HashSet();
 		Collection values = this.compatibleChanges.values();
 		for (Iterator iterator = values.iterator(); iterator.hasNext(); ) {
-			HashSet set = (HashSet) iterator.next();
-			for (Iterator iterator2 = set.iterator(); iterator2.hasNext(); ) {
-				collector.add(iterator2.next());
-			}
+			collector.addAll((HashSet) iterator.next());
 		}
-		IDelta[] result = new IDelta[collector.size()];
-		collector.toArray(result);
-		return result;
+		return (IDelta[]) collector.toArray(new IDelta[collector.size()]);
 	}
 
 	/**
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuilderMessages.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuilderMessages.java
index dbfa74a..1bc348d 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuilderMessages.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuilderMessages.java
@@ -25,6 +25,7 @@
 	public static String CleaningAPIDescription;
 	public static String BaseApiAnalyzer_analyzing_api;
 	public static String BaseApiAnalyzer_comparing_api_profiles;
+	public static String BaseApiAnalyzer_more_version_problems;
 	public static String BaseApiAnalyzer_scanning_0;
 	public static String BaseApiAnalyzer_validating_javadoc_tags;
 	public static String build_wrongFileFormat;
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/buildermessages.properties b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/buildermessages.properties
index be32d48..d05bd4e 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/buildermessages.properties
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/buildermessages.properties
@@ -18,6 +18,7 @@
 CleaningAPIDescription=Cleaning API description for {0}
 BaseApiAnalyzer_analyzing_api=Analyzing API
 BaseApiAnalyzer_comparing_api_profiles=Comparing ''{0}'' to API baseline...
+BaseApiAnalyzer_more_version_problems={0} more change(s)...
 BaseApiAnalyzer_scanning_0=Scanning ''{0}'' for unsupported API Javadoc tags...
 BaseApiAnalyzer_validating_javadoc_tags=Validating API Javadoc tags
 build_saveStateComplete = Saved in {0} ms