Update jdt.core to b55af0d251839febd524bd542ba1eea20d1a7dc4 (13-04-02)
+ some repair / refresh from jdt-orig
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AbstractRegressionTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AbstractRegressionTest.java
index dfccffd..1f29759 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AbstractRegressionTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AbstractRegressionTest.java
@@ -15,6 +15,8 @@
  *     Stephan Herrmann - Contribution for
  *								bug 335093 - [compiler][null] minimal hook for future null annotation support
  *								bug 388800 - [1.8] adjust tests to 1.8 JRE
+ *								bug 402237 - [1.8][compiler] investigate differences between compilers re MethodVerifyTest
+ *								bug 391376 - [1.8] check interaction of default methods with bridge methods and generics
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.compiler.regression;
 
@@ -79,6 +81,8 @@
 	static final String COLLECTION_IMPL_JRE8;
 	static final String COLLECTION_RAW_IMPL_JRE8;
 	static final String LIST_IMPL_JRE8;
+	static final String COLLECTION_AND_LIST_IMPL_JRE8;
+	static final String COLLECTION_AND_LIST_RAW_IMPL_JRE8;
 	static final String LIST_RAW_IMPL_JRE8;
 	static final String ITERABLE_IMPL_JRE8;
 	static final String ITERABLE_RAW_IMPL_JRE8;
@@ -91,47 +95,69 @@
 		String javaVersion = System.getProperty("java.specification.version");
 		IS_JRE_8 = "1.8".equals(javaVersion);
 		if (IS_JRE_8) { // TODO(stephan) accommodate future versions ...
-			COMPARATOR_IMPL_JRE8 = // replace '*' with T, '%' with U
+			COMPARATOR_IMPL_JRE8 = // replace '*' with T, '%' with U, $ with S
 				"	public java.util.Comparator<*> reverseOrder() { return null;}\n" +
-				"	public java.util.Comparator<*> thenComparing(java.util.Comparator<? super *> other) { return null;}\n" +
-				"	public <% extends java.lang.Comparable<? super %>> java.util.Comparator<*> thenComparing(java.util.function.Function<? super *, ? extends %> keyExtractor) { return null;}\n" +
-				"	public java.util.Comparator<*> thenComparing(java.util.function.IntFunction<? super *> keyExtractor) { return null;}\n" +
-				"	public java.util.Comparator<*> thenComparing(java.util.function.LongFunction<? super *> keyExtractor) { return null;}\n" +
-				"	public java.util.Comparator<*> thenComparing(java.util.function.DoubleFunction<? super *> keyExtractor) { return null;}\n";
+				"	public <% extends *> java.util.Comparator<%> thenComparing(java.util.Comparator<? super *> other) { return null;}\n" +
+				"	public <$ extends *, % extends java.lang.Comparable<? super %>> java.util.Comparator<$> thenComparing(java.util.function.Function<? super *, ? extends %> keyExtractor) { return null;}\n" +
+			    "   public <$ extends *, %> java.util.Comparator<$> thenComparing(java.util.function.Function<? super *, ? extends %> keyExtractor, java.util.Comparator<? super %> cmp) { return null; }\n" +
+				"	public <% extends *> java.util.Comparator<%> thenComparing(java.util.function.ToIntFunction<? super *> keyExtractor) { return null;}\n" +
+				"	public <% extends *> java.util.Comparator<%> thenComparing(java.util.function.ToLongFunction<? super *> keyExtractor) { return null;}\n" +
+				"	public <% extends *> java.util.Comparator<%> thenComparing(java.util.function.ToDoubleFunction<? super *> keyExtractor) { return null;}\n";
 			COMPARATOR_RAW_IMPL_JRE8 =
 				"	public java.util.Comparator reverseOrder() { return null;}\n" +
 				"	public java.util.Comparator thenComparing(java.util.Comparator other) { return null;}\n" +
 				"	public java.util.Comparator thenComparing(java.util.function.Function keyExtractor) { return null;}\n" +
-				"	public java.util.Comparator thenComparing(java.util.function.IntFunction keyExtractor) { return null;}\n" +
-				"	public java.util.Comparator thenComparing(java.util.function.LongFunction keyExtractor) { return null;}\n" +
-				"	public java.util.Comparator thenComparing(java.util.function.DoubleFunction keyExtractor) { return null;}\n";
+				"	public java.util.Comparator thenComparing(java.util.function.Function keyExtractor, java.util.Comparator comparator) { return null;}\n" +
+				"	public java.util.Comparator thenComparing(java.util.function.ToIntFunction keyExtractor) { return null;}\n" +
+				"	public java.util.Comparator thenComparing(java.util.function.ToLongFunction keyExtractor) { return null;}\n" +
+				"	public java.util.Comparator thenComparing(java.util.function.ToDoubleFunction keyExtractor) { return null;}\n";
 			COLLECTION_IMPL_JRE8 = 
 				"	public  boolean removeAll(java.util.function.Predicate<? super *> filter) { return false;}\n" +
 				"	public java.util.stream.Stream<*> stream() { return null;}\n" +
-				"	public java.util.stream.Stream<*> parallelStream() { return null;}\n";
+				"	public java.util.stream.Stream<*> parallelStream() { return null;}\n" +
+				"   public java.util.Spliterator<*> spliterator() { return null; }\n";
+			COLLECTION_AND_LIST_IMPL_JRE8 = 
+				"	public  boolean removeAll(java.util.function.Predicate<? super *> filter) { return false;}\n" +
+				"	public java.util.stream.Stream<*> stream() { return null;}\n" +
+				"	public java.util.stream.Stream<*> parallelStream() { return null;}\n" +
+				"   public java.util.Spliterator<*> spliterator() { return null; }\n" +
+				"	public void sort(java.util.Comparator<? super *> comparator) {}\n" +
+				"	public void parallelSort(java.util.Comparator<? super *> comparator) {}\n" +
+				"	public void replaceAll(java.util.function.UnaryOperator<*> operator) {}\n";
 			COLLECTION_RAW_IMPL_JRE8 = 
 				"	public @SuppressWarnings(\"rawtypes\") boolean removeAll(java.util.function.Predicate filter) { return false;}\n" +
 				"	public @SuppressWarnings(\"rawtypes\") java.util.stream.Stream stream() { return null;}\n" +
-				"	public @SuppressWarnings(\"rawtypes\") java.util.stream.Stream parallelStream() { return null;}\n";			
+				"	public @SuppressWarnings(\"rawtypes\") java.util.stream.Stream parallelStream() { return null;}\n" +
+				"   public @SuppressWarnings(\"rawtypes\") java.util.Spliterator spliterator() { return null; }\n";
 			LIST_IMPL_JRE8 =// replace '*' with your concrete type argument
                 "	public void sort(java.util.Comparator<? super *> comparator) {}\n" +
 				"	public void parallelSort(java.util.Comparator<? super *> comparator) {}\n" +
-				"	public void replaceAll(java.util.function.UnaryOperator<*> operator) {}\n";
+				"	public void replaceAll(java.util.function.UnaryOperator<*> operator) {}\n" +
+				"   public java.util.Spliterator<*> spliterator() { return null; }\n";
 			LIST_RAW_IMPL_JRE8 =
 				"	public @SuppressWarnings(\"rawtypes\") void sort(java.util.Comparator comparator) {}\n" +
 				"	public @SuppressWarnings(\"rawtypes\") void parallelSort(java.util.Comparator comparator) {}\n" +
+				"	public @SuppressWarnings(\"rawtypes\") void replaceAll(java.util.function.UnaryOperator operator) {}\n" +
+			    "   public @SuppressWarnings(\"rawtypes\") java.util.Spliterator spliterator() { return null; }\n";
+			COLLECTION_AND_LIST_RAW_IMPL_JRE8 = 
+				"	public @SuppressWarnings(\"rawtypes\") boolean removeAll(java.util.function.Predicate filter) { return false;}\n" +
+				"	public @SuppressWarnings(\"rawtypes\") java.util.stream.Stream stream() { return null;}\n" +
+				"	public @SuppressWarnings(\"rawtypes\") java.util.stream.Stream parallelStream() { return null;}\n" +
+				"   public @SuppressWarnings(\"rawtypes\") java.util.Spliterator spliterator() { return null; }\n" +
+				"	public @SuppressWarnings(\"rawtypes\") void sort(java.util.Comparator comparator) {}\n" +
+				"	public @SuppressWarnings(\"rawtypes\") void parallelSort(java.util.Comparator comparator) {}\n" +
 				"	public @SuppressWarnings(\"rawtypes\") void replaceAll(java.util.function.UnaryOperator operator) {}\n";
 			ITERABLE_IMPL_JRE8 = // replace '*' with your concrete type argument
-				"	public void forEach(java.util.function.Block<? super *> block){}\n";
+				"	public void forEach(java.util.function.Consumer<? super *> block){}\n";
 			ITERABLE_RAW_IMPL_JRE8 =
-				"	public @SuppressWarnings(\"rawtypes\") void forEach(java.util.function.Block block) {}\n";
+				"   public @SuppressWarnings(\"rawtypes\") void forEach(java.util.function.Consumer action) {}\n";
 			ITERATOR_IMPL_JRE8 = // replace '*' with your concrete type argument
-				"	public void forEach(java.util.function.Block<? super *> block){}\n";			
+					"public void forEach(java.util.function.Consumer<? super *> action) {}\n";		
 			ITERATOR_RAW_IMPL_JRE8 = 
-				"	public void forEach(java.util.function.Block block){}\n";			
+				"	public void forEach(java.util.function.Consumer block){}\n";			
 			MAP_IMPL_JRE8 = // '*' for 'K', '%' for 'V'
 				"	public boolean remove(Object key, Object value) { return false;}\n" +
-				"	public void forEach(java.util.function.BiBlock<? super *, ? super %> block) {}\n" +
+				"	public void forEach(java.util.function.BiConsumer<? super *, ? super %> block) {}\n" +
 				"	public void replaceAll(java.util.function.BiFunction<*, %, %> function) {}\n" +
 				"	public % putIfAbsent(* key, % value) { return null;}\n" +
 				" 	public boolean replace(* key, % oldValue, % newValue) { return false;}\n" +
@@ -142,7 +168,7 @@
 				"	public % merge(* key, % value, java.util.function.BiFunction<? super %, ? super %, ? extends %> remappingFunction) { return null;}\n";
 			MAP_RAW_IMPL_JRE8 =
 				"	public boolean remove(Object key, Object value) { return false;}\n" +
-				"	public @SuppressWarnings(\"rawtypes\") void forEach(java.util.function.BiBlock block) {}\n" +
+				"	public @SuppressWarnings(\"rawtypes\") void forEach(java.util.function.BiConsumer block) {}\n" +
 				"	public @SuppressWarnings(\"rawtypes\") void replaceAll(java.util.function.BiFunction function) {}\n" +
 				"	public Object putIfAbsent(Object key, Object value) { return null;}\n" +
 				" 	public boolean replace(Object key, Object oldValue, Object newValue) { return false;}\n" +
@@ -157,6 +183,8 @@
 			COLLECTION_IMPL_JRE8 = "";
 			COLLECTION_RAW_IMPL_JRE8 = "";
 			LIST_IMPL_JRE8 = "";
+			COLLECTION_AND_LIST_IMPL_JRE8 = "";
+			COLLECTION_AND_LIST_RAW_IMPL_JRE8 = "";
 			LIST_RAW_IMPL_JRE8 = "";
 			ITERABLE_IMPL_JRE8 = "";
 			ITERABLE_RAW_IMPL_JRE8 = "";
@@ -166,6 +194,11 @@
 			MAP_RAW_IMPL_JRE8 = "";
 		}
 	}
+	String getCollectionAndListRawImplJRE8() {
+		if (this.complianceLevel < ClassFileConstants.JDK1_5)
+			return COLLECTION_AND_LIST_RAW_IMPL_JRE8.replaceAll("@SuppressWarnings\\(\"rawtypes\"\\)", "");
+		return COLLECTION_AND_LIST_RAW_IMPL_JRE8;
+	} 
 	String getListRawImplJRE8() {
 		if (this.complianceLevel < ClassFileConstants.JDK1_5)
 			return LIST_RAW_IMPL_JRE8.replaceAll("@SuppressWarnings\\(\"rawtypes\"\\)", "");
@@ -244,6 +277,8 @@
 			this.version = JavaCore.VERSION_1_6;
 		} else if (rawVersion.indexOf("1.7") != -1) {
 			this.version = JavaCore.VERSION_1_7;
+		} else if (rawVersion.indexOf("1.8") != -1) {
+			this.version = JavaCore.VERSION_1_8;
 		} else {
 			throw new RuntimeException("unknown javac version: " + rawVersion);
 		}
@@ -283,6 +318,14 @@
 			if ("1.7.0-ea".equals(rawVersion)) {
 				return 0000;
 			}
+			if ("1.7.0_10".equals(rawVersion)) {
+				return 1000;
+			}
+		}
+		if (version == JavaCore.VERSION_1_8) {
+			if ("1.8.0-ea".equals(rawVersion)) {
+				return 0000;
+			}
 		}
 		throw new RuntimeException("unknown raw javac version: " + rawVersion);
 	}
@@ -720,7 +763,15 @@
 								return compiler.compliance != ClassFileConstants.JDK1_5 ||
 										compiler.minor != 1600 ? null : this;
 							}
-					}: null;
+					}: null,
+			Javac8AcceptsDefaultMethodInAnnotationType = RUN_JAVAC ?
+				new JavacHasABug(
+					MismatchType.EclipseErrorsJavacNone,
+					ClassFileConstants.JDK1_8, 23 /* TODO: insert minor when fixed */) : null,
+			Javac8ProducesIllegalAccessError = RUN_JAVAC ? 
+				new JavacHasABug(
+					MismatchType.StandardOutputMismatch,
+					ClassFileConstants.JDK1_8, 23 /* TODO: insert minor when fixed */) : null;
 	}
 }
 
@@ -1150,6 +1201,9 @@
 			public boolean proceedOnErrors() {
 				return true;
 			}
+			public boolean ignoreAllErrors() {
+				return false;
+			}
 		};
 	}
 	/*
@@ -2690,7 +2744,8 @@
 		false /* do not perform statements recovery */,
 		null /* no custom requestor */,
 		// compiler results
-		true /* expecting compiler errors */,
+		expectedCompilerLog == null || /* expecting compiler errors */
+		expectedCompilerLog.indexOf("ERROR") != -1,
 		expectedCompilerLog /* expected compiler log */,
 		// runtime options
 		false /* do not force execution */,