Full update to intermediate version v_C06.
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/CompletionParserTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/CompletionParserTest.java
index fa12d01..149acbd 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/CompletionParserTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/CompletionParserTest.java
@@ -20,7 +20,7 @@
 	super(testName);
 }
 static {
-//	TESTS_NAMES = new String[] { "testXA_1FGGUQF_1FHSL8H_1" };
+//	TESTS_NAMES = new String[] { "testBug292087" };
 }
 public static Test suite() {
 	return buildAllCompliancesTestSuite(CompletionParserTest.class);
@@ -8997,4 +8997,120 @@
 		expectedReplacedSource,
 		testName);
 }
+
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=292087
+// To verify that the completion node is found inside a field initializer
+// that contains an anonymous class.
+public void testBug292087a(){
+	String str =
+			"package test;\n" +
+			"class MyClass{\n" +
+			"}\n" +
+			"public class Try extends Thread{\n" +
+			"	public static MyClass MyClassField;" +
+			"	public static MyClass MyClassMethod(){\n" +
+			"		return null;\n" +
+			"	}\n" +
+			"	public MyClass member[] = {\n" +
+			"		" +
+			"		new MyClass (){\n" +
+			"			public void abc() {}\n" +
+			"		},\n" +
+			"		/*Complete here*/\n" +
+			"	};\n" +
+			"}\n";
+
+	String testName = "";
+	String completeBehind = "/*Complete here*/";
+	String expectedCompletionNodeToString = "<CompleteOnName:>";
+	String expectedParentNodeToString = 
+		"public MyClass[] member = {<CompleteOnName:>};";
+	String completionIdentifier = "";
+	String expectedReplacedSource = "";
+	int cursorLocation = str.lastIndexOf("/*Complete here*/") + completeBehind.length() - 1;
+	String expectedUnitDisplayString =
+			"package test;\n" + 
+			"class MyClass {\n" + 
+			"  MyClass() {\n" + 
+			"  }\n" + 
+			"}\n" + 
+			"public class Try extends Thread {\n" + 
+			"  public static MyClass MyClassField;\n" + 
+			"  public MyClass[] member = {<CompleteOnName:>};\n" + 
+			"  public Try() {\n" + 
+			"  }\n" + 
+			"  <clinit>() {\n" + 
+			"  }\n" + 
+			"  public static MyClass MyClassMethod() {\n" + 
+			"  }\n" + 
+			"}\n";
+
+	checkDietParse(
+		str.toCharArray(),
+		cursorLocation,
+		expectedCompletionNodeToString,
+		expectedParentNodeToString,
+		expectedUnitDisplayString,
+		completionIdentifier,
+		expectedReplacedSource,
+		testName);
+}
+
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=292087
+// To verify that anonymous class inside an array initializer of a recovered field
+// doesn't end up at a bogus location.
+public void testBug292087b(){
+	String str =
+			"package test;\n" +
+			"class MyClass{\n" +
+			"}\n" +
+			"public class Try extends Thread{\n" +
+			"	public static MyClass MyClassField;" +
+			"	public static MyClass MyClassMethod(){\n" +
+			"		return null;\n" +
+			"	}\n" +
+			"	public MyClass member[] = {\n" +
+			"		/*Complete here*/\n" +
+			"		new MyClass (){\n" +
+			"			public void abc() {}\n" +
+			"		},\n" +
+			"		" +
+			"	};\n" +
+			"}\n";
+
+	String testName = "";
+	String completeBehind = "/*Complete here*/";
+	String expectedCompletionNodeToString = "<CompleteOnName:>";
+	String expectedParentNodeToString = 
+		"public MyClass[] member = {<CompleteOnName:>};";
+	String completionIdentifier = "";
+	String expectedReplacedSource = "";
+	int cursorLocation = str.lastIndexOf("/*Complete here*/") + completeBehind.length() - 1;
+	String expectedUnitDisplayString =
+			"package test;\n" + 
+			"class MyClass {\n" + 
+			"  MyClass() {\n" + 
+			"  }\n" + 
+			"}\n" + 
+			"public class Try extends Thread {\n" + 
+			"  public static MyClass MyClassField;\n" + 
+			"  public MyClass[] member = {<CompleteOnName:>};\n" + 
+			"  public Try() {\n" + 
+			"  }\n" + 
+			"  <clinit>() {\n" + 
+			"  }\n" + 
+			"  public static MyClass MyClassMethod() {\n" + 
+			"  }\n" + 
+			"}\n";
+
+	checkDietParse(
+		str.toCharArray(),
+		cursorLocation,
+		expectedCompletionNodeToString,
+		expectedParentNodeToString,
+		expectedUnitDisplayString,
+		completionIdentifier,
+		expectedReplacedSource,
+		testName);
+}
 }
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/DietRecoveryTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/DietRecoveryTest.java
index 919e189..5eb01c8 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/DietRecoveryTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/DietRecoveryTest.java
@@ -4661,15 +4661,23 @@
 
 	String expectedCompletionDietUnitToString =
 		"package ZKentTest;\n" +
-		"import java.awt.color.*;\n" +
-		"public class A {\n" +
-		"  int[] ii;\n" +
-		"  public A() {\n" +
-		"  }\n" +
-		"  A foo(int i) {\n" +
-		"  }\n" +
-		"  int bar() {\n" +
-		"  }\n" +
+		"import java.awt.color.*;\n" + 
+		"public class A {\n" + 
+		"  int[] ii;\n" + 
+		"  public A() {\n" + 
+		"  }\n" + 
+		"  A foo(int i) {\n" + 
+		"  }\n" + 
+		"}\n" + 
+		"class Local {\n" + 
+		"  Local() {\n" + 
+		"  }\n" + 
+		"  int hello() {\n" + 
+		"  }\n" + 
+		"  int world() {\n" + 
+		"  }\n" + 
+		"  void foo() {\n" + 
+		"  }\n" + 
 		"}\n";
 
 	String testName = "<bunch of syntax errors>";
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AmbiguousMethodTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AmbiguousMethodTest.java
index cd1e4ac..d247111 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AmbiguousMethodTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AmbiguousMethodTest.java
@@ -12,6 +12,7 @@
 
 import java.util.Map;
 
+import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
 
 import junit.framework.*;
@@ -19,7 +20,7 @@
 public class AmbiguousMethodTest extends AbstractComparableTest {
 
 	static {
-//		TESTS_NAMES = new String [] { "test087" };
+//		TESTS_NAMES = new String [] { "test010a" };
 	}
 	public AmbiguousMethodTest(String name) {
 		super(name);
@@ -241,6 +242,34 @@
 	}
 	public void test005() {
 		// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6182950
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X.java (at line 2)\n" + 
+				"	<S extends A> void foo() { }\n" + 
+				"	                   ^^^^^\n" + 
+				"Duplicate method foo() in type X\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 3)\n" + 
+				"	<N extends B> N foo() { return null; }\n" + 
+				"	                ^^^^^\n" + 
+				"Duplicate method foo() in type X\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 5)\n" + 
+				"	new X().foo();\n" + 
+				"	        ^^^\n" + 
+				"The method foo() is ambiguous for the type X\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X.java (at line 2)\n" + 
+					"	<S extends A> void foo() { }\n" + 
+					"	                   ^^^^^\n" + 
+					"Duplicate method foo() in type X\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 3)\n" + 
+					"	<N extends B> N foo() { return null; }\n" + 
+					"	                ^^^^^\n" + 
+					"Duplicate method foo() in type X\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -254,18 +283,7 @@
 				"class A {}\n" +
 				"class B {}\n"
 			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 2)\n" + 
-			"	<S extends A> void foo() { }\n" + 
-			"	                   ^^^^^\n" + 
-			"Duplicate method foo() in type X\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 3)\n" + 
-			"	<N extends B> N foo() { return null; }\n" + 
-			"	                ^^^^^\n" + 
-			"Duplicate method foo() in type X\n" + 
-			"----------\n"
-		);
+			expectedCompilerLog);
 /* javac 7
 X.java:3: name clash: <N>foo() and <S>foo() have the same erasure
                  <N extends B> N foo() { return null; }
@@ -278,23 +296,29 @@
 	}
 	public void test006() {
 		// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6182950
-		this.runNegativeTest(
-			new String[] {
-				"X.java",
-				"public class X<T> {\n" +
-				"   void test() {\n" +
-				"   	new Y<Object>().foo(\"X\");\n" +
-				"   	new Y<Object>().foo2(\"X\");\n" +
-				"   }\n" +
-				"	<U1> U1 foo(U1 t) {return null;}\n" +
-				"	<U2> U2 foo2(U2 t) {return null;}\n" +
-				"}\n" +
-				"class Y<T2> extends X<T2> {\n" +
-				"	void foo(T2 t) {}\n" +
-				"	<U3> void foo2(T2 t) {}\n" +
-				"}\n"
-			},
-			"----------\n" +
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+		"----------\n" + 
+		"1. ERROR in X.java (at line 3)\n" + 
+		"	new Y<Object>().foo(\"X\");\n" + 
+		"	                ^^^\n" + 
+		"The method foo(Object) is ambiguous for the type Y<Object>\n" + 
+		"----------\n" + 
+		"2. ERROR in X.java (at line 4)\n" + 
+		"	new Y<Object>().foo2(\"X\");\n" + 
+		"	                ^^^^\n" + 
+		"The method foo2(Object) is ambiguous for the type Y<Object>\n" + 
+		"----------\n" + 
+		"3. WARNING in X.java (at line 10)\n" + 
+		"	void foo(T2 t) {}\n" + 
+		"	     ^^^^^^^^^\n" + 
+		"Name clash: The method foo(T2) of type Y<T2> has the same erasure as foo(U1) of type X<T> but does not override it\n" + 
+		"----------\n" + 
+		"4. WARNING in X.java (at line 11)\n" + 
+		"	<U3> void foo2(T2 t) {}\n" + 
+		"	          ^^^^^^^^^^\n" + 
+		"Name clash: The method foo2(T2) of type Y<T2> has the same erasure as foo2(U2) of type X<T> but does not override it\n" + 
+		"----------\n":
+			"----------\n" + 
 			"1. ERROR in X.java (at line 3)\n" + 
 			"	new Y<Object>().foo(\"X\");\n" + 
 			"	                ^^^\n" + 
@@ -314,7 +338,24 @@
 			"	<U3> void foo2(T2 t) {}\n" + 
 			"	          ^^^^^^^^^^\n" + 
 			"Name clash: The method foo2(T2) of type Y<T2> has the same erasure as foo2(U2) of type X<T> but does not override it\n" + 
-			"----------\n"
+			"----------\n";
+		this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X<T> {\n" +
+				"   void test() {\n" +
+				"   	new Y<Object>().foo(\"X\");\n" +
+				"   	new Y<Object>().foo2(\"X\");\n" +
+				"   }\n" +
+				"	<U1> U1 foo(U1 t) {return null;}\n" +
+				"	<U2> U2 foo2(U2 t) {return null;}\n" +
+				"}\n" +
+				"class Y<T2> extends X<T2> {\n" +
+				"	void foo(T2 t) {}\n" +
+				"	<U3> void foo2(T2 t) {}\n" +
+				"}\n"
+			},
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:3: reference to foo is ambiguous, both method <U1>foo(U1) in X and method
@@ -541,6 +582,29 @@
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=106090
 	public void test011a() {
 		// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6182950
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+		"----------\n" + 
+		"1. WARNING in Combined.java (at line 2)\n" + 
+		"	<T extends Comparable<T>> void pickOne(T value) throws ExOne {}\n" + 
+		"	                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+		"Method pickOne(T) has the same erasure pickOne(Comparable<T>) as another method in type Combined<A,B>\n" + 
+		"----------\n" + 
+		"2. WARNING in Combined.java (at line 3)\n" + 
+		"	<T> T pickOne(Comparable<T> value) throws ExTwo { return null;}\n" + 
+		"	      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+		"Method pickOne(Comparable<T>) has the same erasure pickOne(Comparable<T>) as another method in type Combined<A,B>\n" + 
+		"----------\n":
+			"----------\n" + 
+			"1. ERROR in Combined.java (at line 2)\n" + 
+			"	<T extends Comparable<T>> void pickOne(T value) throws ExOne {}\n" + 
+			"	                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method pickOne(T) has the same erasure pickOne(Comparable<T>) as another method in type Combined<A,B>\n" + 
+			"----------\n" + 
+			"2. ERROR in Combined.java (at line 3)\n" + 
+			"	<T> T pickOne(Comparable<T> value) throws ExTwo { return null;}\n" + 
+			"	      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method pickOne(Comparable<T>) has the same erasure pickOne(Comparable<T>) as another method in type Combined<A,B>\n" + 
+			"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"Combined.java",
@@ -555,17 +619,7 @@
 				"class ExOne extends Exception {static final long serialVersionUID = 1;}\n" +
 				"class ExTwo extends Exception {static final long serialVersionUID = 2;}"
 			},
-			"----------\n" + 
-			"1. ERROR in Combined.java (at line 2)\n" + 
-			"	<T extends Comparable<T>> void pickOne(T value) throws ExOne {}\n" + 
-			"	                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
-			"Method pickOne(T) has the same erasure pickOne(Comparable<T>) as another method in type Combined<A,B>\n" + 
-			"----------\n" + 
-			"2. ERROR in Combined.java (at line 3)\n" + 
-			"	<T> T pickOne(Comparable<T> value) throws ExTwo { return null;}\n" + 
-			"	      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
-			"Method pickOne(Comparable<T>) has the same erasure pickOne(Comparable<T>) as another method in type Combined<A,B>\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:3: name clash: <T#1>pickOne(Comparable<T#1>) and <T#2>pickOne(T#2) have the same erasure
@@ -580,17 +634,28 @@
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=106090
 	public void test011b() {
 		// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6182950
-		this.runNegativeTest(
-			new String[] {
-				"Test1.java",
-				"public class Test1<AA, BB> {\n" +
-				"	<T extends Comparable<T>> void pickOne(T value) throws ExOne {}\n" +
-				"	<T> T pickOne(Comparable<T> value) throws ExTwo { return null;}\n" +
-				"	void pickOne2(Test1<Integer,Integer> c) throws ExOne { c.pickOne((Comparable) \"test\"); }\n" +
-				"}\n" +
-				"class ExOne extends Exception {static final long serialVersionUID = 1;}\n" +
-				"class ExTwo extends Exception {static final long serialVersionUID = 2;}"
-			},
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+		"----------\n" + 
+		"1. WARNING in Test1.java (at line 2)\n" + 
+		"	<T extends Comparable<T>> void pickOne(T value) throws ExOne {}\n" + 
+		"	                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+		"Method pickOne(T) has the same erasure pickOne(Comparable<T>) as another method in type Test1<AA,BB>\n" + 
+		"----------\n" + 
+		"2. WARNING in Test1.java (at line 3)\n" + 
+		"	<T> T pickOne(Comparable<T> value) throws ExTwo { return null;}\n" + 
+		"	      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+		"Method pickOne(Comparable<T>) has the same erasure pickOne(Comparable<T>) as another method in type Test1<AA,BB>\n" + 
+		"----------\n" + 
+		"3. WARNING in Test1.java (at line 4)\n" + 
+		"	void pickOne2(Test1<Integer,Integer> c) throws ExOne { c.pickOne((Comparable) \"test\"); }\n" + 
+		"	                                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+		"Type safety: Unchecked invocation pickOne(Comparable) of the generic method pickOne(T) of type Test1<Integer,Integer>\n" + 
+		"----------\n" + 
+		"4. WARNING in Test1.java (at line 4)\n" + 
+		"	void pickOne2(Test1<Integer,Integer> c) throws ExOne { c.pickOne((Comparable) \"test\"); }\n" + 
+		"	                                                                  ^^^^^^^^^^\n" + 
+		"Comparable is a raw type. References to generic type Comparable<T> should be parameterized\n" + 
+		"----------\n":
 			"----------\n" + 
 			"1. ERROR in Test1.java (at line 2)\n" + 
 			"	<T extends Comparable<T>> void pickOne(T value) throws ExOne {}\n" + 
@@ -611,7 +676,19 @@
 			"	void pickOne2(Test1<Integer,Integer> c) throws ExOne { c.pickOne((Comparable) \"test\"); }\n" + 
 			"	                                                                  ^^^^^^^^^^\n" + 
 			"Comparable is a raw type. References to generic type Comparable<T> should be parameterized\n" + 
-			"----------\n"
+			"----------\n";
+		this.runNegativeTest(
+			new String[] {
+				"Test1.java",
+				"public class Test1<AA, BB> {\n" +
+				"	<T extends Comparable<T>> void pickOne(T value) throws ExOne {}\n" +
+				"	<T> T pickOne(Comparable<T> value) throws ExTwo { return null;}\n" +
+				"	void pickOne2(Test1<Integer,Integer> c) throws ExOne { c.pickOne((Comparable) \"test\"); }\n" +
+				"}\n" +
+				"class ExOne extends Exception {static final long serialVersionUID = 1;}\n" +
+				"class ExTwo extends Exception {static final long serialVersionUID = 2;}"
+			},
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:3: name clash: <T#1>pickOne(Comparable<T#1>) and <T#2>pickOne(T#2) have the same erasure
@@ -1491,6 +1568,8 @@
 	}
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=147647
 	public void test018() {
+	if (this.complianceLevel >= ClassFileConstants.JDK1_7)
+			return;
 	this.runConformTest(
 		new String[] {
 			"Y.java",
@@ -1516,6 +1595,9 @@
 	// in fact, <W extends String> Y<W> make(Class<W> clazz) is the most
 	// specific method according to JLS 15.12.2.5
 	public void test019() {
+	if (this.complianceLevel >= ClassFileConstants.JDK1_7)
+		return;
+
 	this.runConformTest(
 		new String[] {
 			"Y.java",
@@ -1542,6 +1624,8 @@
 	}
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=147647
 	public void test020() {
+	if (this.complianceLevel >= ClassFileConstants.JDK1_7)
+		return;
 	this.runConformTest(
 		new String[] {
 			"Y.java",
@@ -1570,28 +1654,43 @@
 	// variant: having both methods in the same class should not change anything
 	public void test021() {
 		// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6182950
-		this.runNegativeTest(
-			new String[] {
-				"Y.java",
-				"class X<T extends Object> {\n" +
-				"}\n" +
-				"public class Y<V extends String> extends X<V> {\n" +
-				"  public static <W extends String> Y<W> make(Class<W> clazz) {\n" +
-				"    System.out.print(true);\n" +
-				"    return new Y<W>();\n" +
-				"  }\n" +
-				"  public static <U extends Object> X<U> make(Class<U> clazz) {\n" +
-				"    System.out.print(false);\n" +
-				"    return new X<U>();\n" +
-				"  }\n" +
-				"  public static void main(String[] args) throws Exception {\n" +
-				"    Y.make(getClazz());\n" +
-				"  }\n" +
-				"  public static Class getClazz() {\n" +
-				"    return String.class;\n" +
-				"  }\n" +
-				"}"
-			},
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+		"----------\n" + 
+		"1. WARNING in Y.java (at line 3)\n" + 
+		"	public class Y<V extends String> extends X<V> {\n" + 
+		"	                         ^^^^^^\n" + 
+		"The type parameter V should not be bounded by the final type String. Final types cannot be further extended\n" + 
+		"----------\n" + 
+		"2. WARNING in Y.java (at line 4)\n" + 
+		"	public static <W extends String> Y<W> make(Class<W> clazz) {\n" + 
+		"	                         ^^^^^^\n" + 
+		"The type parameter W should not be bounded by the final type String. Final types cannot be further extended\n" + 
+		"----------\n" + 
+		"3. WARNING in Y.java (at line 4)\n" + 
+		"	public static <W extends String> Y<W> make(Class<W> clazz) {\n" + 
+		"	                                      ^^^^^^^^^^^^^^^^^^^^\n" + 
+		"Method make(Class<W>) has the same erasure make(Class<T>) as another method in type Y<V>\n" + 
+		"----------\n" + 
+		"4. WARNING in Y.java (at line 8)\n" + 
+		"	public static <U extends Object> X<U> make(Class<U> clazz) {\n" + 
+		"	                                      ^^^^^^^^^^^^^^^^^^^^\n" + 
+		"Method make(Class<U>) has the same erasure make(Class<T>) as another method in type Y<V>\n" + 
+		"----------\n" + 
+		"5. WARNING in Y.java (at line 13)\n" + 
+		"	Y.make(getClazz());\n" + 
+		"	^^^^^^^^^^^^^^^^^^\n" + 
+		"Type safety: Unchecked invocation make(Class) of the generic method make(Class<W>) of type Y\n" + 
+		"----------\n" + 
+		"6. WARNING in Y.java (at line 13)\n" + 
+		"	Y.make(getClazz());\n" + 
+		"	       ^^^^^^^^^^\n" + 
+		"Type safety: The expression of type Class needs unchecked conversion to conform to Class<String>\n" + 
+		"----------\n" + 
+		"7. WARNING in Y.java (at line 15)\n" + 
+		"	public static Class getClazz() {\n" + 
+		"	              ^^^^^\n" + 
+		"Class is a raw type. References to generic type Class<T> should be parameterized\n" + 
+		"----------\n":
 			"----------\n" + 
 			"1. WARNING in Y.java (at line 3)\n" + 
 			"	public class Y<V extends String> extends X<V> {\n" + 
@@ -1627,7 +1726,30 @@
 			"	public static Class getClazz() {\n" + 
 			"	              ^^^^^\n" + 
 			"Class is a raw type. References to generic type Class<T> should be parameterized\n" + 
-			"----------\n"
+			"----------\n";
+		this.runNegativeTest(
+			new String[] {
+				"Y.java",
+				"class X<T extends Object> {\n" +
+				"}\n" +
+				"public class Y<V extends String> extends X<V> {\n" +
+				"  public static <W extends String> Y<W> make(Class<W> clazz) {\n" +
+				"    System.out.print(true);\n" +
+				"    return new Y<W>();\n" +
+				"  }\n" +
+				"  public static <U extends Object> X<U> make(Class<U> clazz) {\n" +
+				"    System.out.print(false);\n" +
+				"    return new X<U>();\n" +
+				"  }\n" +
+				"  public static void main(String[] args) throws Exception {\n" +
+				"    Y.make(getClazz());\n" +
+				"  }\n" +
+				"  public static Class getClazz() {\n" +
+				"    return String.class;\n" +
+				"  }\n" +
+				"}"
+			},
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:8: name clash: <U>make(Class<U>) and <W>make(Class<W>) have the same erasure
@@ -1659,29 +1781,58 @@
 	// variant: using instances triggers raw methods, which are ambiguous
 	public void test022() {
 		// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6182950
-		this.runNegativeTest(
-			new String[] {
-				"X.java",
-				"public class X<T extends Object> {\n" +
-				"}\n" +
-				"class Y<V extends String> extends X<V> {\n" +
-				"  public <W extends String> Y<W> make(Class<W> clazz) {\n" +
-				"    return new Y<W>();\n" +
-				"  }\n" +
-				"  public <U extends Object> X<U> make(Class<U> clazz) {\n" +
-				"    return new X<U>();\n" +
-				"  }\n" +
-				"  public static void main(String[] args) throws Exception {\n" +
-				"    Y y = new Y();\n" +
-				"    y.make(String.class);\n" +
-				"    y.make(getClazz());\n" +
-				"    y.make(getClazz().newInstance().getClass());\n" +
-				"  }\n" +
-				"  public static Class getClazz() {\n" +
-				"    return String.class;\n" +
-				"  }\n" +
-				"}"
-			},
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+		"----------\n" + 
+		"1. WARNING in X.java (at line 3)\n" + 
+		"	class Y<V extends String> extends X<V> {\n" + 
+		"	                  ^^^^^^\n" + 
+		"The type parameter V should not be bounded by the final type String. Final types cannot be further extended\n" + 
+		"----------\n" + 
+		"2. WARNING in X.java (at line 4)\n" + 
+		"	public <W extends String> Y<W> make(Class<W> clazz) {\n" + 
+		"	                  ^^^^^^\n" + 
+		"The type parameter W should not be bounded by the final type String. Final types cannot be further extended\n" + 
+		"----------\n" + 
+		"3. WARNING in X.java (at line 4)\n" + 
+		"	public <W extends String> Y<W> make(Class<W> clazz) {\n" + 
+		"	                               ^^^^^^^^^^^^^^^^^^^^\n" + 
+		"Method make(Class<W>) has the same erasure make(Class<T>) as another method in type Y<V>\n" + 
+		"----------\n" + 
+		"4. WARNING in X.java (at line 7)\n" + 
+		"	public <U extends Object> X<U> make(Class<U> clazz) {\n" + 
+		"	                               ^^^^^^^^^^^^^^^^^^^^\n" + 
+		"Method make(Class<U>) has the same erasure make(Class<T>) as another method in type Y<V>\n" + 
+		"----------\n" + 
+		"5. WARNING in X.java (at line 11)\n" + 
+		"	Y y = new Y();\n" + 
+		"	^\n" + 
+		"Y is a raw type. References to generic type Y<V> should be parameterized\n" + 
+		"----------\n" + 
+		"6. WARNING in X.java (at line 11)\n" + 
+		"	Y y = new Y();\n" + 
+		"	          ^\n" + 
+		"Y is a raw type. References to generic type Y<V> should be parameterized\n" + 
+		"----------\n" + 
+		"7. ERROR in X.java (at line 12)\n" + 
+		"	y.make(String.class);\n" + 
+		"	  ^^^^\n" + 
+		"The method make(Class) is ambiguous for the type Y\n" + 
+		"----------\n" + 
+		"8. ERROR in X.java (at line 13)\n" + 
+		"	y.make(getClazz());\n" + 
+		"	  ^^^^\n" + 
+		"The method make(Class) is ambiguous for the type Y\n" + 
+		"----------\n" + 
+		"9. ERROR in X.java (at line 14)\n" + 
+		"	y.make(getClazz().newInstance().getClass());\n" + 
+		"	  ^^^^\n" + 
+		"The method make(Class) is ambiguous for the type Y\n" + 
+		"----------\n" + 
+		"10. WARNING in X.java (at line 16)\n" + 
+		"	public static Class getClazz() {\n" + 
+		"	              ^^^^^\n" + 
+		"Class is a raw type. References to generic type Class<T> should be parameterized\n" + 
+		"----------\n":
 			"----------\n" + 
 			"1. WARNING in X.java (at line 3)\n" + 
 			"	class Y<V extends String> extends X<V> {\n" + 
@@ -1732,7 +1883,31 @@
 			"	public static Class getClazz() {\n" + 
 			"	              ^^^^^\n" + 
 			"Class is a raw type. References to generic type Class<T> should be parameterized\n" + 
-			"----------\n"
+			"----------\n";
+		this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X<T extends Object> {\n" +
+				"}\n" +
+				"class Y<V extends String> extends X<V> {\n" +
+				"  public <W extends String> Y<W> make(Class<W> clazz) {\n" +
+				"    return new Y<W>();\n" +
+				"  }\n" +
+				"  public <U extends Object> X<U> make(Class<U> clazz) {\n" +
+				"    return new X<U>();\n" +
+				"  }\n" +
+				"  public static void main(String[] args) throws Exception {\n" +
+				"    Y y = new Y();\n" +
+				"    y.make(String.class);\n" +
+				"    y.make(getClazz());\n" +
+				"    y.make(getClazz().newInstance().getClass());\n" +
+				"  }\n" +
+				"  public static Class getClazz() {\n" +
+				"    return String.class;\n" +
+				"  }\n" +
+				"}"
+			},
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:7: name clash: <U>make(Class<U>) and <W>make(Class<W>) have the same erasure
@@ -2512,6 +2687,8 @@
 }
 // https://bugs.eclipse.org/bugs/show_bug.cgi?id=184190
 public void test056() {
+	if (this.complianceLevel >= ClassFileConstants.JDK1_7)
+		return;
 	this.runConformTest(
 		new String[] {
 			"X.java",
@@ -3274,6 +3451,209 @@
 //https://bugs.eclipse.org/bugs/show_bug.cgi?id=268837
 // See that this test case exhibits the bug 345947
 public void test076() {
+	String output = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+			"----------\n" + 
+			"1. WARNING in X.java (at line 8)\n" + 
+			"	<U> J<String> b();\n" + 
+			"	              ^^^\n" + 
+			"Name clash: The method b() of type J<E> has the same erasure as b() of type I<E> but does not override it\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 15)\n" + 
+			"	J<Integer> b = ints.a();\n" + 
+			"	               ^^^^^^^^\n" + 
+			"Type mismatch: cannot convert from J<String> to J<Integer>\n" + 
+			"----------\n" + 
+			"3. ERROR in X.java (at line 16)\n" + 
+			"	J<Object> c = ints.a();\n" + 
+			"	              ^^^^^^^^\n" + 
+			"Type mismatch: cannot convert from J<String> to J<Object>\n" + 
+			"----------\n" + 
+			"4. WARNING in X.java (at line 17)\n" + 
+			"	J d = ints.a();\n" + 
+			"	^\n" + 
+			"J is a raw type. References to generic type J<E> should be parameterized\n" + 
+			"----------\n" + 
+			"5. ERROR in X.java (at line 19)\n" + 
+			"	I<Integer> f = ints.a();\n" + 
+			"	               ^^^^^^^^\n" + 
+			"Type mismatch: cannot convert from J<String> to I<Integer>\n" + 
+			"----------\n" + 
+			"6. ERROR in X.java (at line 20)\n" + 
+			"	I<Object> g = ints.a();\n" + 
+			"	              ^^^^^^^^\n" + 
+			"Type mismatch: cannot convert from J<String> to I<Object>\n" + 
+			"----------\n" + 
+			"7. WARNING in X.java (at line 21)\n" + 
+			"	I h = ints.a();\n" + 
+			"	^\n" + 
+			"I is a raw type. References to generic type I<E> should be parameterized\n" + 
+			"----------\n" + 
+			"8. ERROR in X.java (at line 24)\n" + 
+			"	ints.b();\n" + 
+			"	     ^\n" + 
+			"The method b() is ambiguous for the type J<Integer>\n" + 
+			"----------\n" + 
+			"9. ERROR in X.java (at line 25)\n" + 
+			"	J<String> a = ints.b();\n" + 
+			"	                   ^\n" + 
+			"The method b() is ambiguous for the type J<Integer>\n" + 
+			"----------\n" + 
+			"10. ERROR in X.java (at line 26)\n" + 
+			"	J<Integer> b = ints.b();\n" + 
+			"	                    ^\n" + 
+			"The method b() is ambiguous for the type J<Integer>\n" + 
+			"----------\n" + 
+			"11. ERROR in X.java (at line 27)\n" + 
+			"	J<Object> c = ints.b();\n" + 
+			"	                   ^\n" + 
+			"The method b() is ambiguous for the type J<Integer>\n" + 
+			"----------\n" + 
+			"12. WARNING in X.java (at line 28)\n" + 
+			"	J d = ints.b();\n" + 
+			"	^\n" + 
+			"J is a raw type. References to generic type J<E> should be parameterized\n" + 
+			"----------\n" + 
+			"13. ERROR in X.java (at line 28)\n" + 
+			"	J d = ints.b();\n" + 
+			"	           ^\n" + 
+			"The method b() is ambiguous for the type J<Integer>\n" + 
+			"----------\n" + 
+			"14. ERROR in X.java (at line 29)\n" + 
+			"	I<String> e = ints.b();\n" + 
+			"	                   ^\n" + 
+			"The method b() is ambiguous for the type J<Integer>\n" + 
+			"----------\n" + 
+			"15. ERROR in X.java (at line 30)\n" + 
+			"	I<Integer> f = ints.b();\n" + 
+			"	                    ^\n" + 
+			"The method b() is ambiguous for the type J<Integer>\n" + 
+			"----------\n" + 
+			"16. ERROR in X.java (at line 31)\n" + 
+			"	I<Object> g = ints.b();\n" + 
+			"	                   ^\n" + 
+			"The method b() is ambiguous for the type J<Integer>\n" + 
+			"----------\n" + 
+			"17. WARNING in X.java (at line 32)\n" + 
+			"	I h = ints.b();\n" + 
+			"	^\n" + 
+			"I is a raw type. References to generic type I<E> should be parameterized\n" + 
+			"----------\n" + 
+			"18. ERROR in X.java (at line 32)\n" + 
+			"	I h = ints.b();\n" + 
+			"	           ^\n" + 
+			"The method b() is ambiguous for the type J<Integer>\n" + 
+			"----------\n" + 
+			"19. WARNING in X.java (at line 39)\n" + 
+			"	J d = ints.c();\n" + 
+			"	^\n" + 
+			"J is a raw type. References to generic type J<E> should be parameterized\n" + 
+			"----------\n" + 
+			"20. WARNING in X.java (at line 43)\n" + 
+			"	I h = ints.c();\n" + 
+			"	^\n" + 
+			"I is a raw type. References to generic type I<E> should be parameterized\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. ERROR in X.java (at line 8)\n" + 
+				"	<U> J<String> b();\n" + 
+				"	              ^^^\n" + 
+				"Name clash: The method b() of type J<E> has the same erasure as b() of type I<E> but does not override it\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 15)\n" + 
+				"	J<Integer> b = ints.a();\n" + 
+				"	               ^^^^^^^^\n" + 
+				"Type mismatch: cannot convert from J<String> to J<Integer>\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 16)\n" + 
+				"	J<Object> c = ints.a();\n" + 
+				"	              ^^^^^^^^\n" + 
+				"Type mismatch: cannot convert from J<String> to J<Object>\n" + 
+				"----------\n" + 
+				"4. WARNING in X.java (at line 17)\n" + 
+				"	J d = ints.a();\n" + 
+				"	^\n" + 
+				"J is a raw type. References to generic type J<E> should be parameterized\n" + 
+				"----------\n" + 
+				"5. ERROR in X.java (at line 19)\n" + 
+				"	I<Integer> f = ints.a();\n" + 
+				"	               ^^^^^^^^\n" + 
+				"Type mismatch: cannot convert from J<String> to I<Integer>\n" + 
+				"----------\n" + 
+				"6. ERROR in X.java (at line 20)\n" + 
+				"	I<Object> g = ints.a();\n" + 
+				"	              ^^^^^^^^\n" + 
+				"Type mismatch: cannot convert from J<String> to I<Object>\n" + 
+				"----------\n" + 
+				"7. WARNING in X.java (at line 21)\n" + 
+				"	I h = ints.a();\n" + 
+				"	^\n" + 
+				"I is a raw type. References to generic type I<E> should be parameterized\n" + 
+				"----------\n" + 
+				"8. ERROR in X.java (at line 24)\n" + 
+				"	ints.b();\n" + 
+				"	     ^\n" + 
+				"The method b() is ambiguous for the type J<Integer>\n" + 
+				"----------\n" + 
+				"9. ERROR in X.java (at line 25)\n" + 
+				"	J<String> a = ints.b();\n" + 
+				"	                   ^\n" + 
+				"The method b() is ambiguous for the type J<Integer>\n" + 
+				"----------\n" + 
+				"10. ERROR in X.java (at line 26)\n" + 
+				"	J<Integer> b = ints.b();\n" + 
+				"	                    ^\n" + 
+				"The method b() is ambiguous for the type J<Integer>\n" + 
+				"----------\n" + 
+				"11. ERROR in X.java (at line 27)\n" + 
+				"	J<Object> c = ints.b();\n" + 
+				"	                   ^\n" + 
+				"The method b() is ambiguous for the type J<Integer>\n" + 
+				"----------\n" + 
+				"12. WARNING in X.java (at line 28)\n" + 
+				"	J d = ints.b();\n" + 
+				"	^\n" + 
+				"J is a raw type. References to generic type J<E> should be parameterized\n" + 
+				"----------\n" + 
+				"13. ERROR in X.java (at line 28)\n" + 
+				"	J d = ints.b();\n" + 
+				"	           ^\n" + 
+				"The method b() is ambiguous for the type J<Integer>\n" + 
+				"----------\n" + 
+				"14. ERROR in X.java (at line 29)\n" + 
+				"	I<String> e = ints.b();\n" + 
+				"	                   ^\n" + 
+				"The method b() is ambiguous for the type J<Integer>\n" + 
+				"----------\n" + 
+				"15. ERROR in X.java (at line 30)\n" + 
+				"	I<Integer> f = ints.b();\n" + 
+				"	                    ^\n" + 
+				"The method b() is ambiguous for the type J<Integer>\n" + 
+				"----------\n" + 
+				"16. ERROR in X.java (at line 31)\n" + 
+				"	I<Object> g = ints.b();\n" + 
+				"	                   ^\n" + 
+				"The method b() is ambiguous for the type J<Integer>\n" + 
+				"----------\n" + 
+				"17. WARNING in X.java (at line 32)\n" + 
+				"	I h = ints.b();\n" + 
+				"	^\n" + 
+				"I is a raw type. References to generic type I<E> should be parameterized\n" + 
+				"----------\n" + 
+				"18. ERROR in X.java (at line 32)\n" + 
+				"	I h = ints.b();\n" + 
+				"	           ^\n" + 
+				"The method b() is ambiguous for the type J<Integer>\n" + 
+				"----------\n" + 
+				"19. WARNING in X.java (at line 39)\n" + 
+				"	J d = ints.c();\n" + 
+				"	^\n" + 
+				"J is a raw type. References to generic type J<E> should be parameterized\n" + 
+				"----------\n" + 
+				"20. WARNING in X.java (at line 43)\n" + 
+				"	I h = ints.c();\n" + 
+				"	^\n" + 
+				"I is a raw type. References to generic type I<E> should be parameterized\n" + 
+				"----------\n";
 	this.runNegativeTest(
 		new String[] {
 			"X.java",
@@ -3323,107 +3703,7 @@
 			"	}\n" +
 			"}"
 		},
-		"----------\n" + 
-		"1. ERROR in X.java (at line 8)\n" + 
-		"	<U> J<String> b();\n" + 
-		"	              ^^^\n" + 
-		"Name clash: The method b() of type J<E> has the same erasure as b() of type I<E> but does not override it\n" + 
-		"----------\n" + 
-		"2. ERROR in X.java (at line 15)\n" + 
-		"	J<Integer> b = ints.a();\n" + 
-		"	               ^^^^^^^^\n" + 
-		"Type mismatch: cannot convert from J<String> to J<Integer>\n" + 
-		"----------\n" + 
-		"3. ERROR in X.java (at line 16)\n" + 
-		"	J<Object> c = ints.a();\n" + 
-		"	              ^^^^^^^^\n" + 
-		"Type mismatch: cannot convert from J<String> to J<Object>\n" + 
-		"----------\n" + 
-		"4. WARNING in X.java (at line 17)\n" + 
-		"	J d = ints.a();\n" + 
-		"	^\n" + 
-		"J is a raw type. References to generic type J<E> should be parameterized\n" + 
-		"----------\n" + 
-		"5. ERROR in X.java (at line 19)\n" + 
-		"	I<Integer> f = ints.a();\n" + 
-		"	               ^^^^^^^^\n" + 
-		"Type mismatch: cannot convert from J<String> to I<Integer>\n" + 
-		"----------\n" + 
-		"6. ERROR in X.java (at line 20)\n" + 
-		"	I<Object> g = ints.a();\n" + 
-		"	              ^^^^^^^^\n" + 
-		"Type mismatch: cannot convert from J<String> to I<Object>\n" + 
-		"----------\n" + 
-		"7. WARNING in X.java (at line 21)\n" + 
-		"	I h = ints.a();\n" + 
-		"	^\n" + 
-		"I is a raw type. References to generic type I<E> should be parameterized\n" + 
-		"----------\n" + 
-		"8. ERROR in X.java (at line 24)\n" + 
-		"	ints.b();\n" + 
-		"	     ^\n" + 
-		"The method b() is ambiguous for the type J<Integer>\n" + 
-		"----------\n" + 
-		"9. ERROR in X.java (at line 25)\n" + 
-		"	J<String> a = ints.b();\n" + 
-		"	                   ^\n" + 
-		"The method b() is ambiguous for the type J<Integer>\n" + 
-		"----------\n" + 
-		"10. ERROR in X.java (at line 26)\n" + 
-		"	J<Integer> b = ints.b();\n" + 
-		"	                    ^\n" + 
-		"The method b() is ambiguous for the type J<Integer>\n" + 
-		"----------\n" + 
-		"11. ERROR in X.java (at line 27)\n" + 
-		"	J<Object> c = ints.b();\n" + 
-		"	                   ^\n" + 
-		"The method b() is ambiguous for the type J<Integer>\n" + 
-		"----------\n" + 
-		"12. WARNING in X.java (at line 28)\n" + 
-		"	J d = ints.b();\n" + 
-		"	^\n" + 
-		"J is a raw type. References to generic type J<E> should be parameterized\n" + 
-		"----------\n" + 
-		"13. ERROR in X.java (at line 28)\n" + 
-		"	J d = ints.b();\n" + 
-		"	           ^\n" + 
-		"The method b() is ambiguous for the type J<Integer>\n" + 
-		"----------\n" + 
-		"14. ERROR in X.java (at line 29)\n" + 
-		"	I<String> e = ints.b();\n" + 
-		"	                   ^\n" + 
-		"The method b() is ambiguous for the type J<Integer>\n" + 
-		"----------\n" + 
-		"15. ERROR in X.java (at line 30)\n" + 
-		"	I<Integer> f = ints.b();\n" + 
-		"	                    ^\n" + 
-		"The method b() is ambiguous for the type J<Integer>\n" + 
-		"----------\n" + 
-		"16. ERROR in X.java (at line 31)\n" + 
-		"	I<Object> g = ints.b();\n" + 
-		"	                   ^\n" + 
-		"The method b() is ambiguous for the type J<Integer>\n" + 
-		"----------\n" + 
-		"17. WARNING in X.java (at line 32)\n" + 
-		"	I h = ints.b();\n" + 
-		"	^\n" + 
-		"I is a raw type. References to generic type I<E> should be parameterized\n" + 
-		"----------\n" + 
-		"18. ERROR in X.java (at line 32)\n" + 
-		"	I h = ints.b();\n" + 
-		"	           ^\n" + 
-		"The method b() is ambiguous for the type J<Integer>\n" + 
-		"----------\n" + 
-		"19. WARNING in X.java (at line 39)\n" + 
-		"	J d = ints.c();\n" + 
-		"	^\n" + 
-		"J is a raw type. References to generic type J<E> should be parameterized\n" + 
-		"----------\n" + 
-		"20. WARNING in X.java (at line 43)\n" + 
-		"	I h = ints.c();\n" + 
-		"	^\n" + 
-		"I is a raw type. References to generic type I<E> should be parameterized\n" + 
-		"----------\n"
+		output
 	);
 }
 
@@ -3887,4 +4167,74 @@
 		"----------\n"
 	);
 }
+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=354579
+public void test088a() {
+	this.runNegativeTest(
+		new String[] {
+			"X.java",
+			"public class X {\n" +
+			"    int foo () { return 0; } \n" +
+			"    double foo() { return 0.0; }\n" +
+			"} \n"
+		},
+		"----------\n" + 
+		"1. ERROR in X.java (at line 2)\n" + 
+		"	int foo () { return 0; } \n" + 
+		"	    ^^^^^^\n" + 
+		"Duplicate method foo() in type X\n" + 
+		"----------\n" + 
+		"2. ERROR in X.java (at line 3)\n" + 
+		"	double foo() { return 0.0; }\n" + 
+		"	       ^^^^^\n" + 
+		"Duplicate method foo() in type X\n" + 
+		"----------\n"
+	);
+}
+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=354579
+public void test088b() {
+	this.runNegativeTest(
+		new String[] {
+			"X.java",
+			"public interface X {\n" +
+			"    int foo (); \n" +
+			"    double foo();\n" +
+			"} \n"
+		},
+		"----------\n" + 
+		"1. ERROR in X.java (at line 2)\n" + 
+		"	int foo (); \n" + 
+		"	    ^^^^^^\n" + 
+		"Duplicate method foo() in type X\n" + 
+		"----------\n" + 
+		"2. ERROR in X.java (at line 3)\n" + 
+		"	double foo();\n" + 
+		"	       ^^^^^\n" + 
+		"Duplicate method foo() in type X\n" + 
+		"----------\n"
+	);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=354579
+public void test089() {
+	this.runNegativeTest(
+		new String[] {
+			"X.java",
+			"import java.util.List;\n" +
+			"public class X {\n" +
+			"    int m2(List<Integer> a) {return 0;} \n" +
+			"    double m2(List<Integer> b) {return 0.0;}\n" +
+			"} \n"
+		},
+		"----------\n" + 
+		"1. ERROR in X.java (at line 3)\n" + 
+		"	int m2(List<Integer> a) {return 0;} \n" + 
+		"	    ^^^^^^^^^^^^^^^^^^^\n" + 
+		"Duplicate method m2(List<Integer>) in type X\n" + 
+		"----------\n" + 
+		"2. ERROR in X.java (at line 4)\n" + 
+		"	double m2(List<Integer> b) {return 0.0;}\n" + 
+		"	       ^^^^^^^^^^^^^^^^^^^\n" + 
+		"Duplicate method m2(List<Integer>) in type X\n" + 
+		"----------\n"
+	);
+}
 }
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/CompilerInvocationTests.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/CompilerInvocationTests.java
index 8d90a2f..e433381 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/CompilerInvocationTests.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/CompilerInvocationTests.java
@@ -681,6 +681,7 @@
 		expectedProblemAttributes.put("MethodMustOverride", new ProblemAttributes(CategorizedProblem.CAT_MEMBER));
 		expectedProblemAttributes.put("MethodMustOverrideOrImplement", new ProblemAttributes(CategorizedProblem.CAT_MEMBER));
 		expectedProblemAttributes.put("MethodNameClash", new ProblemAttributes(CategorizedProblem.CAT_MEMBER));
+		expectedProblemAttributes.put("MethodNameClashHidden", new ProblemAttributes(CategorizedProblem.CAT_MEMBER));
 		expectedProblemAttributes.put("MethodReducesVisibility", new ProblemAttributes(CategorizedProblem.CAT_MEMBER));
 		expectedProblemAttributes.put("MethodRequiresBody", new ProblemAttributes(CategorizedProblem.CAT_MEMBER));
 		expectedProblemAttributes.put("MethodReturnsVoid", new ProblemAttributes(CategorizedProblem.CAT_MEMBER));
@@ -1429,6 +1430,7 @@
 		expectedProblemAttributes.put("MethodMustOverride", SKIP);
 		expectedProblemAttributes.put("MethodMustOverrideOrImplement", SKIP);
 		expectedProblemAttributes.put("MethodNameClash", SKIP);
+		expectedProblemAttributes.put("MethodNameClashHidden", SKIP);
 		expectedProblemAttributes.put("MethodReducesVisibility", SKIP);
 		expectedProblemAttributes.put("MethodRequiresBody", SKIP);
 		expectedProblemAttributes.put("MethodReturnsVoid", SKIP);
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/Deprecated15Test.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/Deprecated15Test.java
index 9f20e9e..f503888 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/Deprecated15Test.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/Deprecated15Test.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan@cs.tu-berlin.de> - Contribution for Bug 354536 - compiling package-info.java still depends on the order of compilation units
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.compiler.regression;
 
@@ -221,6 +222,50 @@
 		"----------\n",
 		JavacTestOptions.Excuse.EclipseWarningConfiguredAsError);
 }
+// Bug 354536 - compiling package-info.java still depends on the order of compilation units
+public void test005() {
+	Map customOptions = new HashMap();
+	customOptions.put(CompilerOptions.OPTION_ReportDeprecation, CompilerOptions.ERROR);
+	this.runNegativeTest(
+		true,
+		new String[] {
+			"p1/X.java",
+			"package p1;\n" +
+			"public class X {\n" +
+			"    public static class Inner {" +
+			"        public void foo() {}\n" +
+			"    }\n" +
+			"}\n",
+			"p1/package-info.java",
+			"@java.lang.Deprecated\n" +
+			"package p1;\n",
+			"p2/C.java",
+			"package p2;\n" +
+			"public class C {\n" +
+			"    void bar(p1.X.Inner a) {\n" +
+			"        a.foo();\n" +
+			"    }\n" +
+			"}\n",
+		},
+		null, customOptions,
+		"----------\n" +
+		"1. ERROR in p2\\C.java (at line 3)\n" + 
+		"	void bar(p1.X.Inner a) {\n" + 
+		"	            ^\n" + 
+		"The type X is deprecated\n" + 
+		"----------\n" + 
+		"2. ERROR in p2\\C.java (at line 3)\n" + 
+		"	void bar(p1.X.Inner a) {\n" + 
+		"	              ^^^^^\n" + 
+		"The type X.Inner is deprecated\n" + 
+		"----------\n" + 
+		"3. ERROR in p2\\C.java (at line 4)\n" + 
+		"	a.foo();\n" + 
+		"	  ^^^^^\n" + 
+		"The method foo() from the type X.Inner is deprecated\n" + 
+		"----------\n",
+		JavacTestOptions.Excuse.EclipseWarningConfiguredAsError);
+}
 public static Class testClass() {
 	return Deprecated15Test.class;
 }
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java
index 4ec47be..a4721ce 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java
@@ -7323,21 +7323,21 @@
 				"    @Override public X foo() { return new X(); }\n" +
 				"}\n"
 			},
-			"----------\n" +
-			"1. ERROR in SubTypes.java (at line 5)\n" +
-			"	@Override public X foo() { return new X(); }\n" +
-			"	                   ^^^^^\n" +
-			"Duplicate method foo() in type B\n" +
-			"----------\n" +
-			"2. ERROR in SubTypes.java (at line 6)\n" +
-			"	@Override public B foo() { return this; }\n" +
-			"	                   ^^^^^\n" +
-			"Duplicate method foo() in type B\n" +
-			"----------\n" +
-			"3. ERROR in SubTypes.java (at line 9)\n" +
-			"	@Override public X foo() { return new X(); }\n" +
-			"	                 ^\n" +
-			"The return type is incompatible with A.foo()\n" +
+			"----------\n" + 
+			"1. ERROR in SubTypes.java (at line 5)\n" + 
+			"	@Override public X foo() { return new X(); }\n" + 
+			"	                   ^^^^^\n" + 
+			"Duplicate method foo() in type B\n" + 
+			"----------\n" + 
+			"2. ERROR in SubTypes.java (at line 6)\n" + 
+			"	@Override public B foo() { return this; }\n" + 
+			"	                   ^^^^^\n" + 
+			"Duplicate method foo() in type B\n" + 
+			"----------\n" + 
+			"3. ERROR in SubTypes.java (at line 9)\n" + 
+			"	@Override public X foo() { return new X(); }\n" + 
+			"	                 ^\n" + 
+			"The return type is incompatible with A.foo()\n" + 
 			"----------\n");
 	}
 	// generic method of raw type
@@ -17667,6 +17667,34 @@
 	//https://bugs.eclipse.org/bugs/show_bug.cgi?id=87956
 	public void test0561() {
 		// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6182950
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X.java (at line 2)\n" + 
+				"	void foo(A<String> a) {}\n" + 
+				"	     ^^^^^^^^^^^^^^^^\n" + 
+				"Method foo(A<String>) has the same erasure foo(A<T>) as another method in type X\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 3)\n" + 
+				"	Object foo(A<Integer> a) { return null; }\n" + 
+				"	       ^^^^^^^^^^^^^^^^^\n" + 
+				"Method foo(A<Integer>) has the same erasure foo(A<T>) as another method in type X\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X.java (at line 2)\n" + 
+					"	void foo(A<String> a) {}\n" + 
+					"	     ^^^^^^^^^^^^^^^^\n" + 
+					"Method foo(A<String>) has the same erasure foo(A<T>) as another method in type X\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 3)\n" + 
+					"	Object foo(A<Integer> a) { return null; }\n" + 
+					"	       ^^^^^^^^^^^^^^^^^\n" + 
+					"Method foo(A<Integer>) has the same erasure foo(A<T>) as another method in type X\n" + 
+					"----------\n" + 
+					"3. ERROR in X.java (at line 4)\n" + 
+					"	void test(A<Integer> a) { foo(a); }\n" + 
+					"	                          ^^^\n" + 
+					"The method foo(A<String>) in the type X is not applicable for the arguments (A<Integer>)\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -17677,22 +17705,7 @@
 				"}\n" +
 				"class A<T> {}\n",
 			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 2)\n" + 
-			"	void foo(A<String> a) {}\n" + 
-			"	     ^^^^^^^^^^^^^^^^\n" + 
-			"Method foo(A<String>) has the same erasure foo(A<T>) as another method in type X\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 3)\n" + 
-			"	Object foo(A<Integer> a) { return null; }\n" + 
-			"	       ^^^^^^^^^^^^^^^^^\n" + 
-			"Method foo(A<Integer>) has the same erasure foo(A<T>) as another method in type X\n" + 
-			"----------\n" + 
-			"3. ERROR in X.java (at line 4)\n" + 
-			"	void test(A<Integer> a) { foo(a); }\n" + 
-			"	                          ^^^\n" + 
-			"The method foo(A<String>) in the type X is not applicable for the arguments (A<Integer>)\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:3: name clash: foo(A<Integer>) and foo(A<String>) have the same erasure
@@ -17705,6 +17718,34 @@
   found: A<Integer>
 2 errors
  */
+		String expectedCompilerLog2 = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X.java (at line 2)\n" + 
+				"	Number foo(A<String> a) { return null; }\n" + 
+				"	       ^^^^^^^^^^^^^^^^\n" + 
+				"Method foo(A<String>) has the same erasure foo(A<T>) as another method in type X\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 3)\n" + 
+				"	Integer foo(A<Integer> a) { return null; }\n" + 
+				"	        ^^^^^^^^^^^^^^^^^\n" + 
+				"Method foo(A<Integer>) has the same erasure foo(A<T>) as another method in type X\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X.java (at line 2)\n" + 
+					"	Number foo(A<String> a) { return null; }\n" + 
+					"	       ^^^^^^^^^^^^^^^^\n" + 
+					"Method foo(A<String>) has the same erasure foo(A<T>) as another method in type X\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 3)\n" + 
+					"	Integer foo(A<Integer> a) { return null; }\n" + 
+					"	        ^^^^^^^^^^^^^^^^^\n" + 
+					"Method foo(A<Integer>) has the same erasure foo(A<T>) as another method in type X\n" + 
+					"----------\n" + 
+					"3. ERROR in X.java (at line 4)\n" + 
+					"	void test(A<Integer> a) { foo(a); }\n" + 
+					"	                          ^^^\n" + 
+					"The method foo(A<String>) in the type X is not applicable for the arguments (A<Integer>)\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -17715,22 +17756,7 @@
 				"}\n" +
 				"class A<T> {}\n",
 			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 2)\n" + 
-			"	Number foo(A<String> a) { return null; }\n" + 
-			"	       ^^^^^^^^^^^^^^^^\n" + 
-			"Method foo(A<String>) has the same erasure foo(A<T>) as another method in type X\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 3)\n" + 
-			"	Integer foo(A<Integer> a) { return null; }\n" + 
-			"	        ^^^^^^^^^^^^^^^^^\n" + 
-			"Method foo(A<Integer>) has the same erasure foo(A<T>) as another method in type X\n" + 
-			"----------\n" + 
-			"3. ERROR in X.java (at line 4)\n" + 
-			"	void test(A<Integer> a) { foo(a); }\n" + 
-			"	                          ^^^\n" + 
-			"The method foo(A<String>) in the type X is not applicable for the arguments (A<Integer>)\n" + 
-			"----------\n"
+			expectedCompilerLog2
 /* javac 7
 X.java:3: name clash: foo(A<Integer>) and foo(A<String>) have the same erasure
         Integer foo(A<Integer> a) { return null; }
@@ -18052,6 +18078,54 @@
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=90423 - variation
 	public void test0574() {
 		// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6182950
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X.java (at line 6)\n" + 
+				"	<T extends Integer> T foo(Object o) {  return null; } // ok\n" + 
+				"	           ^^^^^^^\n" + 
+				"The type parameter T should not be bounded by the final type Integer. Final types cannot be further extended\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 6)\n" + 
+				"	<T extends Integer> T foo(Object o) {  return null; } // ok\n" + 
+				"	                      ^^^^^^^^^^^^^\n" + 
+				"Duplicate method foo(Object) in type X.C2\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 7)\n" + 
+				"	<T extends String> T foo(Object o) {  return null; } // ok\n" + 
+				"	           ^^^^^^\n" + 
+				"The type parameter T should not be bounded by the final type String. Final types cannot be further extended\n" + 
+				"----------\n" + 
+				"4. WARNING in X.java (at line 7)\n" + 
+				"	<T extends String> T foo(Object o) {  return null; } // ok\n" + 
+				"	                     ^^^^^^^^^^^^^\n" + 
+				"Duplicate method foo(Object) in type X.C2\n" + 
+				"----------\n" + 
+				"5. ERROR in X.java (at line 10)\n" + 
+				"	new X().new C2().foo((List<String>) null);\n" + 
+				"	                 ^^^\n" + 
+				"The method foo(Object) is ambiguous for the type X.C2\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. WARNING in X.java (at line 6)\n" + 
+					"	<T extends Integer> T foo(Object o) {  return null; } // ok\n" + 
+					"	           ^^^^^^^\n" + 
+					"The type parameter T should not be bounded by the final type Integer. Final types cannot be further extended\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 6)\n" + 
+					"	<T extends Integer> T foo(Object o) {  return null; } // ok\n" + 
+					"	                      ^^^^^^^^^^^^^\n" + 
+					"Duplicate method foo(Object) in type X.C2\n" + 
+					"----------\n" + 
+					"3. WARNING in X.java (at line 7)\n" + 
+					"	<T extends String> T foo(Object o) {  return null; } // ok\n" + 
+					"	           ^^^^^^\n" + 
+					"The type parameter T should not be bounded by the final type String. Final types cannot be further extended\n" + 
+					"----------\n" + 
+					"4. ERROR in X.java (at line 7)\n" + 
+					"	<T extends String> T foo(Object o) {  return null; } // ok\n" + 
+					"	                     ^^^^^^^^^^^^^\n" + 
+					"Duplicate method foo(Object) in type X.C2\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -18068,27 +18142,7 @@
 				"	}\n" +
 				"}\n"
 			},
-			"----------\n" + 
-			"1. WARNING in X.java (at line 6)\n" + 
-			"	<T extends Integer> T foo(Object o) {  return null; } // ok\n" + 
-			"	           ^^^^^^^\n" + 
-			"The type parameter T should not be bounded by the final type Integer. Final types cannot be further extended\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 6)\n" + 
-			"	<T extends Integer> T foo(Object o) {  return null; } // ok\n" + 
-			"	                      ^^^^^^^^^^^^^\n" + 
-			"Duplicate method foo(Object) in type X.C2\n" + 
-			"----------\n" + 
-			"3. WARNING in X.java (at line 7)\n" + 
-			"	<T extends String> T foo(Object o) {  return null; } // ok\n" + 
-			"	           ^^^^^^\n" + 
-			"The type parameter T should not be bounded by the final type String. Final types cannot be further extended\n" + 
-			"----------\n" + 
-			"4. ERROR in X.java (at line 7)\n" + 
-			"	<T extends String> T foo(Object o) {  return null; } // ok\n" + 
-			"	                     ^^^^^^^^^^^^^\n" + 
-			"Duplicate method foo(Object) in type X.C2\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /*
 X.java:6: name clash: <T#1>foo(Object) and <T#2>foo(Object) have the same erasure
@@ -22444,6 +22498,19 @@
 }
 //https://bugs.eclipse.org/bugs/show_bug.cgi?id=97219
 public void test0706() {
+	String outputExpectedBelow17 = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+			"----------\n" + 
+			"1. WARNING in X.java (at line 9)\n" + 
+			"	class BB extends AA<CC> { <U> BB test() {return null;} }\n" + 
+			"	                                 ^^^^^^\n" + 
+			"Name clash: The method test() of type BB has the same erasure as test() of type AA<T> but does not override it\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. ERROR in X.java (at line 9)\n" + 
+				"	class BB extends AA<CC> { <U> BB test() {return null;} }\n" + 
+				"	                                 ^^^^^^\n" + 
+				"Name clash: The method test() of type BB has the same erasure as test() of type AA<T> but does not override it\n" + 
+				"----------\n";
 	this.runNegativeTest(
 		new String[] {
 			"X.java",
@@ -22459,12 +22526,7 @@
 			"class CC {}\n",
 		},
 		(this.complianceLevel < ClassFileConstants.JDK1_7)
-		? "----------\n" + 
-		"1. ERROR in X.java (at line 9)\n" + 
-		"	class BB extends AA<CC> { <U> BB test() {return null;} }\n" + 
-		"	                                 ^^^^^^\n" + 
-		"Name clash: The method test() of type BB has the same erasure as test() of type AA<T> but does not override it\n" + 
-		"----------\n"
+		? outputExpectedBelow17
 		: "----------\n" + 
 		"1. ERROR in X.java (at line 4)\n" + 
 		"	bb.<Object>test();\n" + 
@@ -22494,6 +22556,49 @@
 //https://bugs.eclipse.org/bugs/show_bug.cgi?id=97219
 public void test0706a() {
 	// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6182950
+	String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+			"----------\n" + 
+			"1. ERROR in X.java (at line 4)\n" + 
+			"	AA<Object> res1 = bb.test();\n" + 
+			"	                     ^^^^\n" + 
+			"The method test() is ambiguous for the type BB\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 5)\n" + 
+			"	AA res3 = bb.test();\n" + 
+			"	^^\n" + 
+			"AA is a raw type. References to generic type AA<T> should be parameterized\n" + 
+			"----------\n" + 
+			"3. ERROR in X.java (at line 5)\n" + 
+			"	AA res3 = bb.test();\n" + 
+			"	             ^^^^\n" + 
+			"The method test() is ambiguous for the type BB\n" + 
+			"----------\n" + 
+			"4. WARNING in X.java (at line 9)\n" + 
+			"	class BB extends AA<CC> { <U> BB test() {return null;} }\n" + 
+			"	                                 ^^^^^^\n" + 
+			"Name clash: The method test() of type BB has the same erasure as test() of type AA<T> but does not override it\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. ERROR in X.java (at line 4)\n" + 
+				"	AA<Object> res1 = bb.test();\n" + 
+				"	                     ^^^^\n" + 
+				"The method test() is ambiguous for the type BB\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 5)\n" + 
+				"	AA res3 = bb.test();\n" + 
+				"	^^\n" + 
+				"AA is a raw type. References to generic type AA<T> should be parameterized\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 5)\n" + 
+				"	AA res3 = bb.test();\n" + 
+				"	             ^^^^\n" + 
+				"The method test() is ambiguous for the type BB\n" + 
+				"----------\n" + 
+				"4. ERROR in X.java (at line 9)\n" + 
+				"	class BB extends AA<CC> { <U> BB test() {return null;} }\n" + 
+				"	                                 ^^^^^^\n" + 
+				"Name clash: The method test() of type BB has the same erasure as test() of type AA<T> but does not override it\n" + 
+				"----------\n";
 	this.runNegativeTest(
 		new String[] {
 			"X.java",
@@ -22508,27 +22613,7 @@
 			"class BB extends AA<CC> { <U> BB test() {return null;} }\n" +
 			"class CC {}\n",
 		},
-		"----------\n" + 
-		"1. ERROR in X.java (at line 4)\n" + 
-		"	AA<Object> res1 = bb.test();\n" + 
-		"	                     ^^^^\n" + 
-		"The method test() is ambiguous for the type BB\n" + 
-		"----------\n" + 
-		"2. WARNING in X.java (at line 5)\n" + 
-		"	AA res3 = bb.test();\n" + 
-		"	^^\n" + 
-		"AA is a raw type. References to generic type AA<T> should be parameterized\n" + 
-		"----------\n" + 
-		"3. ERROR in X.java (at line 5)\n" + 
-		"	AA res3 = bb.test();\n" + 
-		"	             ^^^^\n" + 
-		"The method test() is ambiguous for the type BB\n" + 
-		"----------\n" + 
-		"4. ERROR in X.java (at line 9)\n" + 
-		"	class BB extends AA<CC> { <U> BB test() {return null;} }\n" + 
-		"	                                 ^^^^^^\n" + 
-		"Name clash: The method test() of type BB has the same erasure as test() of type AA<T> but does not override it\n" + 
-		"----------\n"
+		expectedCompilerLog
 	);
 /*
 X.java:4: reference to test is ambiguous, both method test() in AA and method <U>test() in BB match
@@ -22552,6 +22637,39 @@
 //https://bugs.eclipse.org/bugs/show_bug.cgi?id=97219
 public void test0706b() {
 	// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6182950
+	String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+			"----------\n" + 
+			"1. ERROR in X.java (at line 4)\n" + 
+			"	AA<CC> res = bb.test();\n" + 
+			"	                ^^^^\n" + 
+			"The method test() is ambiguous for the type BB\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 5)\n" + 
+			"	BB res2 = bb.test();\n" + 
+			"	             ^^^^\n" + 
+			"The method test() is ambiguous for the type BB\n" + 
+			"----------\n" + 
+			"3. WARNING in X.java (at line 9)\n" + 
+			"	class BB extends AA<CC> { <U> BB test() {return null;} }\n" + 
+			"	                                 ^^^^^^\n" + 
+			"Name clash: The method test() of type BB has the same erasure as test() of type AA<T> but does not override it\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. ERROR in X.java (at line 4)\n" + 
+				"	AA<CC> res = bb.test();\n" + 
+				"	                ^^^^\n" + 
+				"The method test() is ambiguous for the type BB\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 5)\n" + 
+				"	BB res2 = bb.test();\n" + 
+				"	             ^^^^\n" + 
+				"The method test() is ambiguous for the type BB\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 9)\n" + 
+				"	class BB extends AA<CC> { <U> BB test() {return null;} }\n" + 
+				"	                                 ^^^^^^\n" + 
+				"Name clash: The method test() of type BB has the same erasure as test() of type AA<T> but does not override it\n" + 
+				"----------\n";
 	this.runNegativeTest(
 		new String[] {
 			"X.java",
@@ -22566,22 +22684,7 @@
 			"class BB extends AA<CC> { <U> BB test() {return null;} }\n" +
 			"class CC {}\n",
 		},
-		"----------\n" + 
-		"1. ERROR in X.java (at line 4)\n" + 
-		"	AA<CC> res = bb.test();\n" + 
-		"	                ^^^^\n" + 
-		"The method test() is ambiguous for the type BB\n" + 
-		"----------\n" + 
-		"2. ERROR in X.java (at line 5)\n" + 
-		"	BB res2 = bb.test();\n" + 
-		"	             ^^^^\n" + 
-		"The method test() is ambiguous for the type BB\n" + 
-		"----------\n" + 
-		"3. ERROR in X.java (at line 9)\n" + 
-		"	class BB extends AA<CC> { <U> BB test() {return null;} }\n" + 
-		"	                                 ^^^^^^\n" + 
-		"Name clash: The method test() of type BB has the same erasure as test() of type AA<T> but does not override it\n" + 
-		"----------\n"
+		expectedCompilerLog
 	);
 /*
 X.java:4: reference to test is ambiguous, both method test() in AA and method <U>test() in BB match
@@ -23779,6 +23882,19 @@
 //https://bugs.eclipse.org/bugs/show_bug.cgi?id=100007
 public void test0748() {
 	// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6182950
+	String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+			"----------\n" + 
+			"1. WARNING in X.java (at line 5)\n" + 
+			"	public byte[] create(Class<byte[]> cl) { return null; }\n" + 
+			"	              ^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Name clash: The method create(Class<byte[]>) of type X has the same erasure as create(Class<U>) of type Factory<T> but does not override it\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. ERROR in X.java (at line 5)\n" + 
+				"	public byte[] create(Class<byte[]> cl) { return null; }\n" + 
+				"	              ^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Name clash: The method create(Class<byte[]>) of type X has the same erasure as create(Class<U>) of type Factory<T> but does not override it\n" + 
+				"----------\n";
 	this.runNegativeTest(
 		new String[] {
 			"X.java",
@@ -23789,12 +23905,7 @@
 			"	public byte[] create(Class<byte[]> cl) { return null; }\n" +
 			"}\n",
 		},
-		"----------\n" + 
-		"1. ERROR in X.java (at line 5)\n" + 
-		"	public byte[] create(Class<byte[]> cl) { return null; }\n" + 
-		"	              ^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
-		"Name clash: The method create(Class<byte[]>) of type X has the same erasure as create(Class<U>) of type Factory<T> but does not override it\n" + 
-		"----------\n"
+		expectedCompilerLog
 	);
 // javac 7 reports the name clash when X subclasses another class or is a concrete type
 }
@@ -40375,6 +40486,89 @@
 //https://bugs.eclipse.org/bugs/show_bug.cgi?id=204534
 public void test1181() {
 	// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6182950
+	String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+			"----------\n" + 
+			"1. ERROR in X.java (at line 2)\n" + 
+			"	public static <S, T extends Comparable<S>, R extends S & T> R max(T arg1, S arg2) {\n" + 
+			"	                                                         ^\n" + 
+			"Cannot specify any additional bound T when first bound is a type parameter\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 2)\n" + 
+			"	public static <S, T extends Comparable<S>, R extends S & T> R max(T arg1, S arg2) {\n" + 
+			"	                                                              ^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method max(T, S) has the same erasure max(Comparable<T>, Object) as another method in type X\n" + 
+			"----------\n" + 
+			"3. WARNING in X.java (at line 3)\n" + 
+			"	return (R) ((arg1.compareTo(arg2) > 0) ? arg1 : arg2);\n" + 
+			"	       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Type safety: Unchecked cast from Object to R\n" + 
+			"----------\n" + 
+			"4. ERROR in X.java (at line 5)\n" + 
+			"	public static <T extends Comparable<S>, S, R extends S & Comparable<S>> R max(T arg1, S arg2) {\n" + 
+			"	                                                         ^^^^^^^^^^\n" + 
+			"Cannot specify any additional bound Comparable<S> when first bound is a type parameter\n" + 
+			"----------\n" + 
+			"5. ERROR in X.java (at line 5)\n" + 
+			"	public static <T extends Comparable<S>, S, R extends S & Comparable<S>> R max(T arg1, S arg2) {\n" + 
+			"	                                                                          ^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method max(T, S) has the same erasure max(Comparable<T>, Object) as another method in type X\n" + 
+			"----------\n" + 
+			"6. WARNING in X.java (at line 6)\n" + 
+			"	return (R) ((arg1.compareTo(arg2) > 0) ? arg1 : arg2);\n" + 
+			"	       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Type safety: Unchecked cast from Object to R\n" + 
+			"----------\n" + 
+			"7. WARNING in X.java (at line 8)\n" + 
+			"	public static <T extends Comparable<S>, S, R extends Comparable<S>> R max(T arg1, S arg2) {\n" + 
+			"	                                                                      ^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method max(T, S) has the same erasure max(Comparable<T>, Object) as another method in type X\n" + 
+			"----------\n" + 
+			"8. WARNING in X.java (at line 9)\n" + 
+			"	return (R) ((arg1.compareTo(arg2) > 0) ? arg1 : arg2);\n" + 
+			"	       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Type safety: Unchecked cast from Object to R\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. ERROR in X.java (at line 2)\n" + 
+				"	public static <S, T extends Comparable<S>, R extends S & T> R max(T arg1, S arg2) {\n" + 
+				"	                                                         ^\n" + 
+				"Cannot specify any additional bound T when first bound is a type parameter\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 2)\n" + 
+				"	public static <S, T extends Comparable<S>, R extends S & T> R max(T arg1, S arg2) {\n" + 
+				"	                                                              ^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method max(T, S) has the same erasure max(Comparable<T>, Object) as another method in type X\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 3)\n" + 
+				"	return (R) ((arg1.compareTo(arg2) > 0) ? arg1 : arg2);\n" + 
+				"	       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Type safety: Unchecked cast from Object to R\n" + 
+				"----------\n" + 
+				"4. ERROR in X.java (at line 5)\n" + 
+				"	public static <T extends Comparable<S>, S, R extends S & Comparable<S>> R max(T arg1, S arg2) {\n" + 
+				"	                                                         ^^^^^^^^^^\n" + 
+				"Cannot specify any additional bound Comparable<S> when first bound is a type parameter\n" + 
+				"----------\n" + 
+				"5. ERROR in X.java (at line 5)\n" + 
+				"	public static <T extends Comparable<S>, S, R extends S & Comparable<S>> R max(T arg1, S arg2) {\n" + 
+				"	                                                                          ^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method max(T, S) has the same erasure max(Comparable<T>, Object) as another method in type X\n" + 
+				"----------\n" + 
+				"6. WARNING in X.java (at line 6)\n" + 
+				"	return (R) ((arg1.compareTo(arg2) > 0) ? arg1 : arg2);\n" + 
+				"	       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Type safety: Unchecked cast from Object to R\n" + 
+				"----------\n" + 
+				"7. ERROR in X.java (at line 8)\n" + 
+				"	public static <T extends Comparable<S>, S, R extends Comparable<S>> R max(T arg1, S arg2) {\n" + 
+				"	                                                                      ^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method max(T, S) has the same erasure max(Comparable<T>, Object) as another method in type X\n" + 
+				"----------\n" + 
+				"8. WARNING in X.java (at line 9)\n" + 
+				"	return (R) ((arg1.compareTo(arg2) > 0) ? arg1 : arg2);\n" + 
+				"	       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Type safety: Unchecked cast from Object to R\n" + 
+				"----------\n";
 	this.runNegativeTest(
 		new String[] {
 			"X.java",
@@ -40391,47 +40585,7 @@
 			"	public static void main(String[] args) {}\n" +
 			"}\n", // =================
 		},
-		"----------\n" + 
-		"1. ERROR in X.java (at line 2)\n" + 
-		"	public static <S, T extends Comparable<S>, R extends S & T> R max(T arg1, S arg2) {\n" + 
-		"	                                                         ^\n" + 
-		"Cannot specify any additional bound T when first bound is a type parameter\n" + 
-		"----------\n" + 
-		"2. ERROR in X.java (at line 2)\n" + 
-		"	public static <S, T extends Comparable<S>, R extends S & T> R max(T arg1, S arg2) {\n" + 
-		"	                                                              ^^^^^^^^^^^^^^^^^^^\n" + 
-		"Method max(T, S) has the same erasure max(Comparable<T>, Object) as another method in type X\n" + 
-		"----------\n" + 
-		"3. WARNING in X.java (at line 3)\n" + 
-		"	return (R) ((arg1.compareTo(arg2) > 0) ? arg1 : arg2);\n" + 
-		"	       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
-		"Type safety: Unchecked cast from Object to R\n" + 
-		"----------\n" + 
-		"4. ERROR in X.java (at line 5)\n" + 
-		"	public static <T extends Comparable<S>, S, R extends S & Comparable<S>> R max(T arg1, S arg2) {\n" + 
-		"	                                                         ^^^^^^^^^^\n" + 
-		"Cannot specify any additional bound Comparable<S> when first bound is a type parameter\n" + 
-		"----------\n" + 
-		"5. ERROR in X.java (at line 5)\n" + 
-		"	public static <T extends Comparable<S>, S, R extends S & Comparable<S>> R max(T arg1, S arg2) {\n" + 
-		"	                                                                          ^^^^^^^^^^^^^^^^^^^\n" + 
-		"Method max(T, S) has the same erasure max(Comparable<T>, Object) as another method in type X\n" + 
-		"----------\n" + 
-		"6. WARNING in X.java (at line 6)\n" + 
-		"	return (R) ((arg1.compareTo(arg2) > 0) ? arg1 : arg2);\n" + 
-		"	       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
-		"Type safety: Unchecked cast from Object to R\n" + 
-		"----------\n" + 
-		"7. ERROR in X.java (at line 8)\n" + 
-		"	public static <T extends Comparable<S>, S, R extends Comparable<S>> R max(T arg1, S arg2) {\n" + 
-		"	                                                                      ^^^^^^^^^^^^^^^^^^^\n" + 
-		"Method max(T, S) has the same erasure max(Comparable<T>, Object) as another method in type X\n" + 
-		"----------\n" + 
-		"8. WARNING in X.java (at line 9)\n" + 
-		"	return (R) ((arg1.compareTo(arg2) > 0) ? arg1 : arg2);\n" + 
-		"	       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
-		"Type safety: Unchecked cast from Object to R\n" + 
-		"----------\n"
+		expectedCompilerLog
 	);
 /*
 X.java:2: a type variable may not be followed by other bounds
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java
index 0c2d97e..56c50ae 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java
@@ -27,7 +27,7 @@
 
 public class MethodVerifyTest extends AbstractComparableTest {
 	static {
-//		TESTS_NAMES = new String[] { "test339447" };
+//		TESTS_NAMES = new String[] { "testBug317719" };
 //		TESTS_NUMBERS = new int[] { 213 };
 //		TESTS_RANGE = new int[] { 190, -1};
 	}
@@ -3333,6 +3333,29 @@
 
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=85900
 	public void test048() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X1.java (at line 2)\n" + 
+				"	public class X1 extends LinkedHashMap<String, String> {\n" + 
+				"	             ^^\n" + 
+				"The serializable class X1 does not declare a static final serialVersionUID field of type long\n" + 
+				"----------\n" + 
+				"2. WARNING in X1.java (at line 3)\n" + 
+				"	public Object putAll(Map<String,String> a) { return null; }\n" + 
+				"	              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Name clash: The method putAll(Map<String,String>) of type X1 has the same erasure as putAll(Map<? extends K,? extends V>) of type HashMap<K,V> but does not override it\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. WARNING in X1.java (at line 2)\n" + 
+					"	public class X1 extends LinkedHashMap<String, String> {\n" + 
+					"	             ^^\n" + 
+					"The serializable class X1 does not declare a static final serialVersionUID field of type long\n" + 
+					"----------\n" + 
+					"2. ERROR in X1.java (at line 3)\n" + 
+					"	public Object putAll(Map<String,String> a) { return null; }\n" + 
+					"	              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+					"Name clash: The method putAll(Map<String,String>) of type X1 has the same erasure as putAll(Map<? extends K,? extends V>) of type HashMap<K,V> but does not override it\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X1.java",
@@ -3341,17 +3364,7 @@
 				"    public Object putAll(Map<String,String> a) { return null; }\n" +
 				"}\n"
 			},
-			"----------\n" + 
-			"1. WARNING in X1.java (at line 2)\n" + 
-			"	public class X1 extends LinkedHashMap<String, String> {\n" + 
-			"	             ^^\n" + 
-			"The serializable class X1 does not declare a static final serialVersionUID field of type long\n" + 
-			"----------\n" + 
-			"2. ERROR in X1.java (at line 3)\n" + 
-			"	public Object putAll(Map<String,String> a) { return null; }\n" + 
-			"	              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
-			"Name clash: The method putAll(Map<String,String>) of type X1 has the same erasure as putAll(Map<? extends K,? extends V>) of type HashMap<K,V> but does not override it\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:4: name clash: putAll(Map<String,String>) in X1 and putAll(Map<? extends K,? extends V>) in HashMap have the same erasure, yet neither overrides the other
@@ -3365,6 +3378,19 @@
 	}
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=85900
 	public void test048a() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X2.java (at line 2)\n" + 
+				"	public Object foo(I<String> z) { return null; }\n" + 
+				"	              ^^^^^^^^^^^^^^^^\n" + 
+				"Name clash: The method foo(I<String>) of type X2 has the same erasure as foo(I<? extends T>) of type Y<T> but does not override it\n" + 
+				"----------\n":		
+					"----------\n" + 
+					"1. ERROR in X2.java (at line 2)\n" + 
+					"	public Object foo(I<String> z) { return null; }\n" + 
+					"	              ^^^^^^^^^^^^^^^^\n" + 
+					"Name clash: The method foo(I<String>) of type X2 has the same erasure as foo(I<? extends T>) of type Y<T> but does not override it\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X2.java",
@@ -3378,12 +3404,7 @@
 				"    public void foo(I<? extends T> a);\n" +
 				"}\n"
 			},
-			"----------\n" + 
-			"1. ERROR in X2.java (at line 2)\n" + 
-			"	public Object foo(I<String> z) { return null; }\n" + 
-			"	              ^^^^^^^^^^^^^^^^\n" + 
-			"Name clash: The method foo(I<String>) of type X2 has the same erasure as foo(I<? extends T>) of type Y<T> but does not override it\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:2: name clash: foo(I<String>) in X2 and foo(I<? extends T>) in Y have the same erasure, yet neither overrides the other
@@ -3427,6 +3448,19 @@
 	}
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=85900
 	public void test048c() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X4.java (at line 2)\n" + 
+				"	public String foo(I<String> z) { return null; }\n" + 
+				"	              ^^^^^^^^^^^^^^^^\n" + 
+				"Name clash: The method foo(I<String>) of type X4 has the same erasure as foo(I<? extends T>) of type Y<T> but does not override it\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X4.java (at line 2)\n" + 
+					"	public String foo(I<String> z) { return null; }\n" + 
+					"	              ^^^^^^^^^^^^^^^^\n" + 
+					"Name clash: The method foo(I<String>) of type X4 has the same erasure as foo(I<? extends T>) of type Y<T> but does not override it\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X4.java",
@@ -3440,12 +3474,7 @@
 				"    public Object foo(I<? extends T> a);\n" +
 				"}\n"
 			},
-			"----------\n" + 
-			"1. ERROR in X4.java (at line 2)\n" + 
-			"	public String foo(I<String> z) { return null; }\n" + 
-			"	              ^^^^^^^^^^^^^^^^\n" + 
-			"Name clash: The method foo(I<String>) of type X4 has the same erasure as foo(I<? extends T>) of type Y<T> but does not override it\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:2: name clash: foo(I<String>) in X4 and foo(I<? extends T>) in Y have the same erasure, yet neither overrides the other
@@ -3458,6 +3487,19 @@
 	}
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=85900
 	public void test048d() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X5.java (at line 2)\n" + 
+				"	public Object foo(I<String> z) { return null; }\n" + 
+				"	              ^^^^^^^^^^^^^^^^\n" + 
+				"Name clash: The method foo(I<String>) of type X5 has the same erasure as foo(I<? extends T>) of type Y<T> but does not override it\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X5.java (at line 2)\n" + 
+					"	public Object foo(I<String> z) { return null; }\n" + 
+					"	              ^^^^^^^^^^^^^^^^\n" + 
+					"Name clash: The method foo(I<String>) of type X5 has the same erasure as foo(I<? extends T>) of type Y<T> but does not override it\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X5.java",
@@ -3471,12 +3513,7 @@
 				"    public String foo(I<? extends T> a);\n" +
 				"}\n"
 			},
-			"----------\n" + 
-			"1. ERROR in X5.java (at line 2)\n" + 
-			"	public Object foo(I<String> z) { return null; }\n" + 
-			"	              ^^^^^^^^^^^^^^^^\n" + 
-			"Name clash: The method foo(I<String>) of type X5 has the same erasure as foo(I<? extends T>) of type Y<T> but does not override it\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:2: name clash: foo(I<String>) in X5 and foo(I<? extends T>) in Y have the
@@ -3490,6 +3527,19 @@
 	}
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=85900
 	public void test048e() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X6.java (at line 2)\n" + 
+				"	public void foo(I<String> z) {}\n" + 
+				"	            ^^^^^^^^^^^^^^^^\n" + 
+				"Name clash: The method foo(I<String>) of type X6 has the same erasure as foo(I<? extends T>) of type Y<T> but does not override it\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X6.java (at line 2)\n" + 
+					"	public void foo(I<String> z) {}\n" + 
+					"	            ^^^^^^^^^^^^^^^^\n" + 
+					"Name clash: The method foo(I<String>) of type X6 has the same erasure as foo(I<? extends T>) of type Y<T> but does not override it\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X6.java",
@@ -3503,12 +3553,7 @@
 				"    public Object foo(I<? extends T> a);\n" +
 				"}\n"
 			},
-			"----------\n" + 
-			"1. ERROR in X6.java (at line 2)\n" + 
-			"	public void foo(I<String> z) {}\n" + 
-			"	            ^^^^^^^^^^^^^^^^\n" + 
-			"Name clash: The method foo(I<String>) of type X6 has the same erasure as foo(I<? extends T>) of type Y<T> but does not override it\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:2: name clash: foo(I<String>) in X6 and foo(I<? extends T>) in Y have the same erasure, yet neither overrides the other
@@ -3521,6 +3566,19 @@
 	}
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=85900
 	public void test048f() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X7.java (at line 2)\n" + 
+				"	public String foo(I<String> z) { return null; }\n" + 
+				"	              ^^^^^^^^^^^^^^^^\n" + 
+				"Name clash: The method foo(I<String>) of type X7 has the same erasure as foo(I<? extends T>) of type Y<T> but does not override it\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X7.java (at line 2)\n" + 
+					"	public String foo(I<String> z) { return null; }\n" + 
+					"	              ^^^^^^^^^^^^^^^^\n" + 
+					"Name clash: The method foo(I<String>) of type X7 has the same erasure as foo(I<? extends T>) of type Y<T> but does not override it\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X7.java",
@@ -3534,12 +3592,7 @@
 				"    public T foo(I<? extends T> a);\n" +
 				"}\n"
 			},
-			"----------\n" + 
-			"1. ERROR in X7.java (at line 2)\n" + 
-			"	public String foo(I<String> z) { return null; }\n" + 
-			"	              ^^^^^^^^^^^^^^^^\n" + 
-			"Name clash: The method foo(I<String>) of type X7 has the same erasure as foo(I<? extends T>) of type Y<T> but does not override it\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:2: name clash: foo(I<String>) in X7 and foo(I<? extends T>) in Y have the same erasure, yet neither overrides the other
@@ -3642,6 +3695,44 @@
 
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=94754
 	public void test050() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X.java (at line 2)\n" + 
+				"	public static <S extends A> S foo() { System.out.print(\"A\"); return null; }\n" + 
+				"	                              ^^^^^\n" + 
+				"Duplicate method foo() in type X\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 3)\n" + 
+				"	public static <N extends B> N foo() { System.out.print(\"B\"); return null; }\n" + 
+				"	                              ^^^^^\n" + 
+				"Duplicate method foo() in type X\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 7)\n" + 
+				"	new X().<B>foo();\n" + 
+				"	^^^^^^^^^^^^^^^^\n" + 
+				"The static method foo() from the type X should be accessed in a static way\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X.java (at line 2)\n" + 
+					"	public static <S extends A> S foo() { System.out.print(\"A\"); return null; }\n" + 
+					"	                              ^^^^^\n" + 
+					"Duplicate method foo() in type X\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 3)\n" + 
+					"	public static <N extends B> N foo() { System.out.print(\"B\"); return null; }\n" + 
+					"	                              ^^^^^\n" + 
+					"Duplicate method foo() in type X\n" + 
+					"----------\n" + 
+					"3. ERROR in X.java (at line 6)\n" + 
+					"	X.<B>foo();\n" + 
+					"	     ^^^\n" + 
+					"Bound mismatch: The generic method foo() of type X is not applicable for the arguments (). The inferred type B is not a valid substitute for the bounded parameter <S extends A>\n" + 
+					"----------\n" + 
+					"4. ERROR in X.java (at line 7)\n" + 
+					"	new X().<B>foo();\n" + 
+					"	           ^^^\n" + 
+					"Bound mismatch: The generic method foo() of type X is not applicable for the arguments (). The inferred type B is not a valid substitute for the bounded parameter <S extends A>\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -3657,27 +3748,7 @@
 				"class A {}\n" +
 				"class B {}"
 			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 2)\n" + 
-			"	public static <S extends A> S foo() { System.out.print(\"A\"); return null; }\n" + 
-			"	                              ^^^^^\n" + 
-			"Duplicate method foo() in type X\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 3)\n" + 
-			"	public static <N extends B> N foo() { System.out.print(\"B\"); return null; }\n" + 
-			"	                              ^^^^^\n" + 
-			"Duplicate method foo() in type X\n" + 
-			"----------\n" + 
-			"3. ERROR in X.java (at line 6)\n" + 
-			"	X.<B>foo();\n" + 
-			"	     ^^^\n" + 
-			"Bound mismatch: The generic method foo() of type X is not applicable for the arguments (). The inferred type B is not a valid substitute for the bounded parameter <S extends A>\n" + 
-			"----------\n" + 
-			"4. ERROR in X.java (at line 7)\n" + 
-			"	new X().<B>foo();\n" + 
-			"	           ^^^\n" + 
-			"Bound mismatch: The generic method foo() of type X is not applicable for the arguments (). The inferred type B is not a valid substitute for the bounded parameter <S extends A>\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:3: name clash: <N>foo() and <S>foo() have the same erasure
@@ -3701,6 +3772,39 @@
 	}
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=94754
 	public void test050a() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X.java (at line 2)\n" + 
+				"	public static <S extends A> void foo() { System.out.print(\"A\"); }\n" + 
+				"	                                 ^^^^^\n" + 
+				"Duplicate method foo() in type X\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 3)\n" + 
+				"	public static <N extends B> N foo() { System.out.print(\"B\"); return null; }\n" + 
+				"	                              ^^^^^\n" + 
+				"Duplicate method foo() in type X\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 5)\n" + 
+				"	X.foo();\n" + 
+				"	  ^^^\n" + 
+				"The method foo() is ambiguous for the type X\n" + 
+				"----------\n" + 
+				"4. ERROR in X.java (at line 6)\n" + 
+				"	foo();\n" + 
+				"	^^^\n" + 
+				"The method foo() is ambiguous for the type X\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X.java (at line 2)\n" + 
+					"	public static <S extends A> void foo() { System.out.print(\"A\"); }\n" + 
+					"	                                 ^^^^^\n" + 
+					"Duplicate method foo() in type X\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 3)\n" + 
+					"	public static <N extends B> N foo() { System.out.print(\"B\"); return null; }\n" + 
+					"	                              ^^^^^\n" + 
+					"Duplicate method foo() in type X\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -3715,17 +3819,7 @@
 				"class A {}\n" +
 				"class B {}"
 			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 2)\n" + 
-			"	public static <S extends A> void foo() { System.out.print(\"A\"); }\n" + 
-			"	                                 ^^^^^\n" + 
-			"Duplicate method foo() in type X\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 3)\n" + 
-			"	public static <N extends B> N foo() { System.out.print(\"B\"); return null; }\n" + 
-			"	                              ^^^^^\n" + 
-			"Duplicate method foo() in type X\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:3: name clash: <N>foo() and <S>foo() have the same erasure
@@ -3740,6 +3834,89 @@
 
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=90423 - variation
 	public void test050b() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	Y foo(Object o) {  return null; } // duplicate\n" + 
+				"	  ^^^^^^^^^^^^^\n" + 
+				"Duplicate method foo(Object) in type X.C1\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	Z foo(Object o) {  return null; } // duplicate\n" + 
+				"	  ^^^^^^^^^^^^^\n" + 
+				"Duplicate method foo(Object) in type X.C1\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 7)\n" + 
+				"	<T extends Y> T foo(Object o) {  return null; } // duplicate\n" + 
+				"	                ^^^^^^^^^^^^^\n" + 
+				"Duplicate method foo(Object) in type X.C2\n" + 
+				"----------\n" + 
+				"4. WARNING in X.java (at line 8)\n" + 
+				"	<T extends Z> T foo(Object o) {  return null; } // duplicate\n" + 
+				"	                ^^^^^^^^^^^^^\n" + 
+				"Duplicate method foo(Object) in type X.C2\n" + 
+				"----------\n" + 
+				"5. ERROR in X.java (at line 11)\n" + 
+				"	A<Y> foo(Object o) {  return null; } // duplicate\n" + 
+				"	     ^^^^^^^^^^^^^\n" + 
+				"Duplicate method foo(Object) in type X.C3\n" + 
+				"----------\n" + 
+				"6. ERROR in X.java (at line 12)\n" + 
+				"	A<Z> foo(Object o) {  return null; } // duplicate\n" + 
+				"	     ^^^^^^^^^^^^^\n" + 
+				"Duplicate method foo(Object) in type X.C3\n" + 
+				"----------\n" + 
+				"7. ERROR in X.java (at line 15)\n" + 
+				"	Y foo(Object o) {  return null; } // duplicate\n" + 
+				"	  ^^^^^^^^^^^^^\n" + 
+				"Duplicate method foo(Object) in type X.C4\n" + 
+				"----------\n" + 
+				"8. ERROR in X.java (at line 16)\n" + 
+				"	<T extends Z> T foo(Object o) {  return null; } // duplicate\n" + 
+				"	                ^^^^^^^^^^^^^\n" + 
+				"Duplicate method foo(Object) in type X.C4\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X.java (at line 3)\n" + 
+					"	Y foo(Object o) {  return null; } // duplicate\n" + 
+					"	  ^^^^^^^^^^^^^\n" + 
+					"Duplicate method foo(Object) in type X.C1\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 4)\n" + 
+					"	Z foo(Object o) {  return null; } // duplicate\n" + 
+					"	  ^^^^^^^^^^^^^\n" + 
+					"Duplicate method foo(Object) in type X.C1\n" + 
+					"----------\n" + 
+					"3. ERROR in X.java (at line 7)\n" + 
+					"	<T extends Y> T foo(Object o) {  return null; } // duplicate\n" + 
+					"	                ^^^^^^^^^^^^^\n" + 
+					"Duplicate method foo(Object) in type X.C2\n" + 
+					"----------\n" + 
+					"4. ERROR in X.java (at line 8)\n" + 
+					"	<T extends Z> T foo(Object o) {  return null; } // duplicate\n" + 
+					"	                ^^^^^^^^^^^^^\n" + 
+					"Duplicate method foo(Object) in type X.C2\n" + 
+					"----------\n" + 
+					"5. ERROR in X.java (at line 11)\n" + 
+					"	A<Y> foo(Object o) {  return null; } // duplicate\n" + 
+					"	     ^^^^^^^^^^^^^\n" + 
+					"Duplicate method foo(Object) in type X.C3\n" + 
+					"----------\n" + 
+					"6. ERROR in X.java (at line 12)\n" + 
+					"	A<Z> foo(Object o) {  return null; } // duplicate\n" + 
+					"	     ^^^^^^^^^^^^^\n" + 
+					"Duplicate method foo(Object) in type X.C3\n" + 
+					"----------\n" + 
+					"7. ERROR in X.java (at line 15)\n" + 
+					"	Y foo(Object o) {  return null; } // duplicate\n" + 
+					"	  ^^^^^^^^^^^^^\n" + 
+					"Duplicate method foo(Object) in type X.C4\n" + 
+					"----------\n" + 
+					"8. ERROR in X.java (at line 16)\n" + 
+					"	<T extends Z> T foo(Object o) {  return null; } // duplicate\n" + 
+					"	                ^^^^^^^^^^^^^\n" + 
+					"Duplicate method foo(Object) in type X.C4\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -3765,47 +3942,7 @@
 				"class Y {}\n" +
 				"class Z {}"
 			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 3)\n" + 
-			"	Y foo(Object o) {  return null; } // duplicate\n" + 
-			"	  ^^^^^^^^^^^^^\n" + 
-			"Duplicate method foo(Object) in type X.C1\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 4)\n" + 
-			"	Z foo(Object o) {  return null; } // duplicate\n" + 
-			"	  ^^^^^^^^^^^^^\n" + 
-			"Duplicate method foo(Object) in type X.C1\n" + 
-			"----------\n" + 
-			"3. ERROR in X.java (at line 7)\n" + 
-			"	<T extends Y> T foo(Object o) {  return null; } // duplicate\n" + 
-			"	                ^^^^^^^^^^^^^\n" + 
-			"Duplicate method foo(Object) in type X.C2\n" + 
-			"----------\n" + 
-			"4. ERROR in X.java (at line 8)\n" + 
-			"	<T extends Z> T foo(Object o) {  return null; } // duplicate\n" + 
-			"	                ^^^^^^^^^^^^^\n" + 
-			"Duplicate method foo(Object) in type X.C2\n" + 
-			"----------\n" + 
-			"5. ERROR in X.java (at line 11)\n" + 
-			"	A<Y> foo(Object o) {  return null; } // duplicate\n" + 
-			"	     ^^^^^^^^^^^^^\n" + 
-			"Duplicate method foo(Object) in type X.C3\n" + 
-			"----------\n" + 
-			"6. ERROR in X.java (at line 12)\n" + 
-			"	A<Z> foo(Object o) {  return null; } // duplicate\n" + 
-			"	     ^^^^^^^^^^^^^\n" + 
-			"Duplicate method foo(Object) in type X.C3\n" + 
-			"----------\n" + 
-			"7. ERROR in X.java (at line 15)\n" + 
-			"	Y foo(Object o) {  return null; } // duplicate\n" + 
-			"	  ^^^^^^^^^^^^^\n" + 
-			"Duplicate method foo(Object) in type X.C4\n" + 
-			"----------\n" + 
-			"8. ERROR in X.java (at line 16)\n" + 
-			"	<T extends Z> T foo(Object o) {  return null; } // duplicate\n" + 
-			"	                ^^^^^^^^^^^^^\n" + 
-			"Duplicate method foo(Object) in type X.C4\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:4: foo(Object) is already defined in X.C1
@@ -3828,6 +3965,49 @@
 	}
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=90423 - variation
 	public void test050c() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	A<Y> foo(A<Y> o) {  return null; } // duplicate\n" + 
+				"	     ^^^^^^^^^^^\n" + 
+				"Method foo(A<Y>) has the same erasure foo(A<T>) as another method in type X.C5\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	A<Z> foo(A<Z> o) {  return null; } // duplicate\n" + 
+				"	     ^^^^^^^^^^^\n" + 
+				"Method foo(A<Z>) has the same erasure foo(A<T>) as another method in type X.C5\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 7)\n" + 
+				"	<T extends Y> T foo(A<Y> o) {  return null; } // ok\n" + 
+				"	                ^^^^^^^^^^^\n" + 
+				"Method foo(A<Y>) has the same erasure foo(A<T>) as another method in type X.C6\n" + 
+				"----------\n" + 
+				"4. WARNING in X.java (at line 8)\n" + 
+				"	<T extends Z> T foo(A<Z> o) {  return null; } // ok\n" + 
+				"	                ^^^^^^^^^^^\n" + 
+				"Method foo(A<Z>) has the same erasure foo(A<T>) as another method in type X.C6\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X.java (at line 3)\n" + 
+					"	A<Y> foo(A<Y> o) {  return null; } // duplicate\n" + 
+					"	     ^^^^^^^^^^^\n" + 
+					"Method foo(A<Y>) has the same erasure foo(A<T>) as another method in type X.C5\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 4)\n" + 
+					"	A<Z> foo(A<Z> o) {  return null; } // duplicate\n" + 
+					"	     ^^^^^^^^^^^\n" + 
+					"Method foo(A<Z>) has the same erasure foo(A<T>) as another method in type X.C5\n" + 
+					"----------\n" + 
+					"3. ERROR in X.java (at line 7)\n" + 
+					"	<T extends Y> T foo(A<Y> o) {  return null; } // ok\n" + 
+					"	                ^^^^^^^^^^^\n" + 
+					"Method foo(A<Y>) has the same erasure foo(A<T>) as another method in type X.C6\n" + 
+					"----------\n" + 
+					"4. ERROR in X.java (at line 8)\n" + 
+					"	<T extends Z> T foo(A<Z> o) {  return null; } // ok\n" + 
+					"	                ^^^^^^^^^^^\n" + 
+					"Method foo(A<Z>) has the same erasure foo(A<T>) as another method in type X.C6\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -3845,27 +4025,7 @@
 				"class Y {}\n" +
 				"class Z {}"
 			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 3)\n" + 
-			"	A<Y> foo(A<Y> o) {  return null; } // duplicate\n" + 
-			"	     ^^^^^^^^^^^\n" + 
-			"Method foo(A<Y>) has the same erasure foo(A<T>) as another method in type X.C5\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 4)\n" + 
-			"	A<Z> foo(A<Z> o) {  return null; } // duplicate\n" + 
-			"	     ^^^^^^^^^^^\n" + 
-			"Method foo(A<Z>) has the same erasure foo(A<T>) as another method in type X.C5\n" + 
-			"----------\n" + 
-			"3. ERROR in X.java (at line 7)\n" + 
-			"	<T extends Y> T foo(A<Y> o) {  return null; } // ok\n" + 
-			"	                ^^^^^^^^^^^\n" + 
-			"Method foo(A<Y>) has the same erasure foo(A<T>) as another method in type X.C6\n" + 
-			"----------\n" + 
-			"4. ERROR in X.java (at line 8)\n" + 
-			"	<T extends Z> T foo(A<Z> o) {  return null; } // ok\n" + 
-			"	                ^^^^^^^^^^^\n" + 
-			"Method foo(A<Z>) has the same erasure foo(A<T>) as another method in type X.C6\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:4: name clash: foo(A<Z>) and foo(A<Y>) have the same erasure
@@ -3882,6 +4042,29 @@
 	}
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=90423 - variation
 	public void test050d() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X.java (at line 3)\n" + 
+				"	<T extends Y, U> T foo(Object o) {  return null; } // ok\n" + 
+				"	                   ^^^^^^^^^^^^^\n" + 
+				"Duplicate method foo(Object) in type X.C7\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 4)\n" + 
+				"	<T extends Z> T foo(Object o) {  return null; } // ok\n" + 
+				"	                ^^^^^^^^^^^^^\n" + 
+				"Duplicate method foo(Object) in type X.C7\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X.java (at line 3)\n" + 
+					"	<T extends Y, U> T foo(Object o) {  return null; } // ok\n" + 
+					"	                   ^^^^^^^^^^^^^\n" + 
+					"Duplicate method foo(Object) in type X.C7\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 4)\n" + 
+					"	<T extends Z> T foo(Object o) {  return null; } // ok\n" + 
+					"	                ^^^^^^^^^^^^^\n" + 
+					"Duplicate method foo(Object) in type X.C7\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -3895,17 +4078,7 @@
 				"class Y {}\n" +
 				"class Z {}"
 			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 3)\n" + 
-			"	<T extends Y, U> T foo(Object o) {  return null; } // ok\n" + 
-			"	                   ^^^^^^^^^^^^^\n" + 
-			"Duplicate method foo(Object) in type X.C7\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 4)\n" + 
-			"	<T extends Z> T foo(Object o) {  return null; } // ok\n" + 
-			"	                ^^^^^^^^^^^^^\n" + 
-			"Duplicate method foo(Object) in type X.C7\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:4: name clash: <T#1>foo(Object) and <T#2,U>foo(Object) have the same erasure
@@ -3921,6 +4094,69 @@
 
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=90423
 	public void test050e() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X.java (at line 2)\n" + 
+				"	<N extends B> N a(A<String> s) { return null; }\n" + 
+				"	                ^^^^^^^^^^^^^^\n" + 
+				"Method a(A<String>) has the same erasure a(A<T>) as another method in type X\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 3)\n" + 
+				"	<N> Object a(A<Number> n) { return null; }\n" + 
+				"	           ^^^^^^^^^^^^^^\n" + 
+				"Method a(A<Number>) has the same erasure a(A<T>) as another method in type X\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 4)\n" + 
+				"	<N extends B> void b(A<String> s) {}\n" + 
+				"	                   ^^^^^^^^^^^^^^\n" + 
+				"Method b(A<String>) has the same erasure b(A<T>) as another method in type X\n" + 
+				"----------\n" + 
+				"4. WARNING in X.java (at line 5)\n" + 
+				"	<N extends B> B b(A<Number> n) { return null; }\n" + 
+				"	                ^^^^^^^^^^^^^^\n" + 
+				"Method b(A<Number>) has the same erasure b(A<T>) as another method in type X\n" + 
+				"----------\n" + 
+				"5. WARNING in X.java (at line 6)\n" + 
+				"	void c(A<String> s) {}\n" + 
+				"	     ^^^^^^^^^^^^^^\n" + 
+				"Method c(A<String>) has the same erasure c(A<T>) as another method in type X\n" + 
+				"----------\n" + 
+				"6. WARNING in X.java (at line 7)\n" + 
+				"	B c(A<Number> n) { return null; }\n" + 
+				"	  ^^^^^^^^^^^^^^\n" + 
+				"Method c(A<Number>) has the same erasure c(A<T>) as another method in type X\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X.java (at line 2)\n" + 
+					"	<N extends B> N a(A<String> s) { return null; }\n" + 
+					"	                ^^^^^^^^^^^^^^\n" + 
+					"Method a(A<String>) has the same erasure a(A<T>) as another method in type X\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 3)\n" + 
+					"	<N> Object a(A<Number> n) { return null; }\n" + 
+					"	           ^^^^^^^^^^^^^^\n" + 
+					"Method a(A<Number>) has the same erasure a(A<T>) as another method in type X\n" + 
+					"----------\n" + 
+					"3. ERROR in X.java (at line 4)\n" + 
+					"	<N extends B> void b(A<String> s) {}\n" + 
+					"	                   ^^^^^^^^^^^^^^\n" + 
+					"Method b(A<String>) has the same erasure b(A<T>) as another method in type X\n" + 
+					"----------\n" + 
+					"4. ERROR in X.java (at line 5)\n" + 
+					"	<N extends B> B b(A<Number> n) { return null; }\n" + 
+					"	                ^^^^^^^^^^^^^^\n" + 
+					"Method b(A<Number>) has the same erasure b(A<T>) as another method in type X\n" + 
+					"----------\n" + 
+					"5. ERROR in X.java (at line 6)\n" + 
+					"	void c(A<String> s) {}\n" + 
+					"	     ^^^^^^^^^^^^^^\n" + 
+					"Method c(A<String>) has the same erasure c(A<T>) as another method in type X\n" + 
+					"----------\n" + 
+					"6. ERROR in X.java (at line 7)\n" + 
+					"	B c(A<Number> n) { return null; }\n" + 
+					"	  ^^^^^^^^^^^^^^\n" + 
+					"Method c(A<Number>) has the same erasure c(A<T>) as another method in type X\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -3935,37 +4171,7 @@
 				"class A<T> {}\n" +
 				"class B {}\n"
 			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 2)\n" + 
-			"	<N extends B> N a(A<String> s) { return null; }\n" + 
-			"	                ^^^^^^^^^^^^^^\n" + 
-			"Method a(A<String>) has the same erasure a(A<T>) as another method in type X\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 3)\n" + 
-			"	<N> Object a(A<Number> n) { return null; }\n" + 
-			"	           ^^^^^^^^^^^^^^\n" + 
-			"Method a(A<Number>) has the same erasure a(A<T>) as another method in type X\n" + 
-			"----------\n" + 
-			"3. ERROR in X.java (at line 4)\n" + 
-			"	<N extends B> void b(A<String> s) {}\n" + 
-			"	                   ^^^^^^^^^^^^^^\n" + 
-			"Method b(A<String>) has the same erasure b(A<T>) as another method in type X\n" + 
-			"----------\n" + 
-			"4. ERROR in X.java (at line 5)\n" + 
-			"	<N extends B> B b(A<Number> n) { return null; }\n" + 
-			"	                ^^^^^^^^^^^^^^\n" + 
-			"Method b(A<Number>) has the same erasure b(A<T>) as another method in type X\n" + 
-			"----------\n" + 
-			"5. ERROR in X.java (at line 6)\n" + 
-			"	void c(A<String> s) {}\n" + 
-			"	     ^^^^^^^^^^^^^^\n" + 
-			"Method c(A<String>) has the same erasure c(A<T>) as another method in type X\n" + 
-			"----------\n" + 
-			"6. ERROR in X.java (at line 7)\n" + 
-			"	B c(A<Number> n) { return null; }\n" + 
-			"	  ^^^^^^^^^^^^^^\n" + 
-			"Method c(A<Number>) has the same erasure c(A<T>) as another method in type X\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:3: name clash: <N#1>a(A<Number>) and <N#2>a(A<String>) have the same erasure
@@ -4088,6 +4294,49 @@
 
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=90423
 	public void test050i() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X.java (at line 2)\n" + 
+				"	<N extends B> N a(A<Number> s) { return null; }\n" + 
+				"	                ^^^^^^^^^^^^^^\n" + 
+				"Duplicate method a(A<Number>) in type X\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 3)\n" + 
+				"	<N> Object a(A<Number> n) { return null; }\n" + 
+				"	           ^^^^^^^^^^^^^^\n" + 
+				"Duplicate method a(A<Number>) in type X\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 4)\n" + 
+				"	<N extends B> N b(A<Number> s) { return null; }\n" + 
+				"	                ^^^^^^^^^^^^^^\n" + 
+				"Method b(A<Number>) has the same erasure b(A<T>) as another method in type X\n" + 
+				"----------\n" + 
+				"4. WARNING in X.java (at line 5)\n" + 
+				"	<N> Object b(A<String> n) { return null; }\n" + 
+				"	           ^^^^^^^^^^^^^^\n" + 
+				"Method b(A<String>) has the same erasure b(A<T>) as another method in type X\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X.java (at line 2)\n" + 
+					"	<N extends B> N a(A<Number> s) { return null; }\n" + 
+					"	                ^^^^^^^^^^^^^^\n" + 
+					"Duplicate method a(A<Number>) in type X\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 3)\n" + 
+					"	<N> Object a(A<Number> n) { return null; }\n" + 
+					"	           ^^^^^^^^^^^^^^\n" + 
+					"Duplicate method a(A<Number>) in type X\n" + 
+					"----------\n" + 
+					"3. ERROR in X.java (at line 4)\n" + 
+					"	<N extends B> N b(A<Number> s) { return null; }\n" + 
+					"	                ^^^^^^^^^^^^^^\n" + 
+					"Method b(A<Number>) has the same erasure b(A<T>) as another method in type X\n" + 
+					"----------\n" + 
+					"4. ERROR in X.java (at line 5)\n" + 
+					"	<N> Object b(A<String> n) { return null; }\n" + 
+					"	           ^^^^^^^^^^^^^^\n" + 
+					"Method b(A<String>) has the same erasure b(A<T>) as another method in type X\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -4100,27 +4349,7 @@
 				"class A<T> {}\n" +
 				"class B {}\n"
 			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 2)\n" + 
-			"	<N extends B> N a(A<Number> s) { return null; }\n" + 
-			"	                ^^^^^^^^^^^^^^\n" + 
-			"Duplicate method a(A<Number>) in type X\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 3)\n" + 
-			"	<N> Object a(A<Number> n) { return null; }\n" + 
-			"	           ^^^^^^^^^^^^^^\n" + 
-			"Duplicate method a(A<Number>) in type X\n" + 
-			"----------\n" + 
-			"3. ERROR in X.java (at line 4)\n" + 
-			"	<N extends B> N b(A<Number> s) { return null; }\n" + 
-			"	                ^^^^^^^^^^^^^^\n" + 
-			"Method b(A<Number>) has the same erasure b(A<T>) as another method in type X\n" + 
-			"----------\n" + 
-			"4. ERROR in X.java (at line 5)\n" + 
-			"	<N> Object b(A<String> n) { return null; }\n" + 
-			"	           ^^^^^^^^^^^^^^\n" + 
-			"Method b(A<String>) has the same erasure b(A<T>) as another method in type X\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:3: name clash: <N#1>a(A<Number>) and <N#2>a(A<Number>) have the same erasure
@@ -4254,26 +4483,31 @@
 				"class A<T> {}\n" +
 				"class B {}\n"
 			},
-			"----------\n" +
-			"1. ERROR in X.java (at line 2)\n" +
-			"	void a(A<Number> s) {}\n" +
-			"	     ^^^^^^^^^^^^^^\n" +
-			"Duplicate method a(A<Number>) in type X\n" +
-			"----------\n" +
-			"2. ERROR in X.java (at line 3)\n" +
-			"	B a(A<Number> n) { return null; }\n" +
-			"	  ^^^^^^^^^^^^^^\n" +
-			"Duplicate method a(A<Number>) in type X\n" +
-			"----------\n" +
-			"3. ERROR in X.java (at line 4)\n" +
-			"	Object b(A<Number> s) {}\n" +
-			"	       ^^^^^^^^^^^^^^\n" +
-			"Duplicate method b(A<Number>) in type X\n" +
-			"----------\n" +
-			"4. ERROR in X.java (at line 5)\n" +
-			"	B b(A<Number> n) { return null; }\n" +
-			"	  ^^^^^^^^^^^^^^\n" +
-			"Duplicate method b(A<Number>) in type X\n" +
+			"----------\n" + 
+			"1. ERROR in X.java (at line 2)\n" + 
+			"	void a(A<Number> s) {}\n" + 
+			"	     ^^^^^^^^^^^^^^\n" + 
+			"Duplicate method a(A<Number>) in type X\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 3)\n" + 
+			"	B a(A<Number> n) { return null; }\n" + 
+			"	  ^^^^^^^^^^^^^^\n" + 
+			"Duplicate method a(A<Number>) in type X\n" + 
+			"----------\n" + 
+			"3. ERROR in X.java (at line 4)\n" + 
+			"	Object b(A<Number> s) {}\n" + 
+			"	       ^^^^^^^^^^^^^^\n" + 
+			"Duplicate method b(A<Number>) in type X\n" + 
+			"----------\n" + 
+			"4. ERROR in X.java (at line 4)\n" + 
+			"	Object b(A<Number> s) {}\n" + 
+			"	       ^^^^^^^^^^^^^^\n" + 
+			"This method must return a result of type Object\n" + 
+			"----------\n" + 
+			"5. ERROR in X.java (at line 5)\n" + 
+			"	B b(A<Number> n) { return null; }\n" + 
+			"	  ^^^^^^^^^^^^^^\n" + 
+			"Duplicate method b(A<Number>) in type X\n" + 
 			"----------\n"
 		);
 /* javac 7
@@ -4347,6 +4581,29 @@
 	}
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=89470
 	public void test051b() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X.java (at line 2)\n" + 
+				"	void foo(A<String> a) {}\n" + 
+				"	     ^^^^^^^^^^^^^^^^\n" + 
+				"Method foo(A<String>) has the same erasure foo(A<T>) as another method in type X\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 3)\n" + 
+				"	Object foo(A<Integer> a) { return null; }\n" + 
+				"	       ^^^^^^^^^^^^^^^^^\n" + 
+				"Method foo(A<Integer>) has the same erasure foo(A<T>) as another method in type X\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X.java (at line 2)\n" + 
+					"	void foo(A<String> a) {}\n" + 
+					"	     ^^^^^^^^^^^^^^^^\n" + 
+					"Method foo(A<String>) has the same erasure foo(A<T>) as another method in type X\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 3)\n" + 
+					"	Object foo(A<Integer> a) { return null; }\n" + 
+					"	       ^^^^^^^^^^^^^^^^^\n" + 
+					"Method foo(A<Integer>) has the same erasure foo(A<T>) as another method in type X\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -4356,17 +4613,7 @@
 				"}\n" +
 				"class A<T> {}\n",
 			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 2)\n" + 
-			"	void foo(A<String> a) {}\n" + 
-			"	     ^^^^^^^^^^^^^^^^\n" + 
-			"Method foo(A<String>) has the same erasure foo(A<T>) as another method in type X\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 3)\n" + 
-			"	Object foo(A<Integer> a) { return null; }\n" + 
-			"	       ^^^^^^^^^^^^^^^^^\n" + 
-			"Method foo(A<Integer>) has the same erasure foo(A<T>) as another method in type X\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:3: name clash: foo(A<Integer>) and foo(A<String>) have the same erasure
@@ -4518,6 +4765,89 @@
 	}
 	// more duplicate tests, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=94897
 	public void test054a() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X.java (at line 2)\n" + 
+				"	<T1, T2> String aaa(X x) {  return null; }\n" + 
+				"	                ^^^^^^^^\n" + 
+				"Method aaa(X) has the same erasure aaa(X) as another method in type X\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 3)\n" + 
+				"	<T extends X> T aaa(T x) {  return null; }\n" + 
+				"	                ^^^^^^^^\n" + 
+				"Method aaa(T) has the same erasure aaa(X) as another method in type X\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 4)\n" + 
+				"	<T> String aa(X x) {  return null; }\n" + 
+				"	           ^^^^^^^\n" + 
+				"Method aa(X) has the same erasure aa(X) as another method in type X\n" + 
+				"----------\n" + 
+				"4. WARNING in X.java (at line 5)\n" + 
+				"	<T extends X> T aa(T x) {  return null; }\n" + 
+				"	                ^^^^^^^\n" + 
+				"Method aa(T) has the same erasure aa(X) as another method in type X\n" + 
+				"----------\n" + 
+				"5. ERROR in X.java (at line 6)\n" + 
+				"	String a(X x) {  return null; }\n" + 
+				"	       ^^^^^^\n" + 
+				"Method a(X) has the same erasure a(X) as another method in type X\n" + 
+				"----------\n" + 
+				"6. ERROR in X.java (at line 7)\n" + 
+				"	<T extends X> T a(T x) {  return null; }\n" + 
+				"	                ^^^^^^\n" + 
+				"Method a(T) has the same erasure a(X) as another method in type X\n" + 
+				"----------\n" + 
+				"7. WARNING in X.java (at line 8)\n" + 
+				"	<T> String z(X x) { return null; }\n" + 
+				"	           ^^^^^^\n" + 
+				"Duplicate method z(X) in type X\n" + 
+				"----------\n" + 
+				"8. WARNING in X.java (at line 9)\n" + 
+				"	<T, S> Object z(X x) { return null; }\n" + 
+				"	              ^^^^^^\n" + 
+				"Duplicate method z(X) in type X\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X.java (at line 2)\n" + 
+					"	<T1, T2> String aaa(X x) {  return null; }\n" + 
+					"	                ^^^^^^^^\n" + 
+					"Method aaa(X) has the same erasure aaa(X) as another method in type X\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 3)\n" + 
+					"	<T extends X> T aaa(T x) {  return null; }\n" + 
+					"	                ^^^^^^^^\n" + 
+					"Method aaa(T) has the same erasure aaa(X) as another method in type X\n" + 
+					"----------\n" + 
+					"3. ERROR in X.java (at line 4)\n" + 
+					"	<T> String aa(X x) {  return null; }\n" + 
+					"	           ^^^^^^^\n" + 
+					"Method aa(X) has the same erasure aa(X) as another method in type X\n" + 
+					"----------\n" + 
+					"4. ERROR in X.java (at line 5)\n" + 
+					"	<T extends X> T aa(T x) {  return null; }\n" + 
+					"	                ^^^^^^^\n" + 
+					"Method aa(T) has the same erasure aa(X) as another method in type X\n" + 
+					"----------\n" + 
+					"5. ERROR in X.java (at line 6)\n" + 
+					"	String a(X x) {  return null; }\n" + 
+					"	       ^^^^^^\n" + 
+					"Method a(X) has the same erasure a(X) as another method in type X\n" + 
+					"----------\n" + 
+					"6. ERROR in X.java (at line 7)\n" + 
+					"	<T extends X> T a(T x) {  return null; }\n" + 
+					"	                ^^^^^^\n" + 
+					"Method a(T) has the same erasure a(X) as another method in type X\n" + 
+					"----------\n" + 
+					"7. ERROR in X.java (at line 8)\n" + 
+					"	<T> String z(X x) { return null; }\n" + 
+					"	           ^^^^^^\n" + 
+					"Duplicate method z(X) in type X\n" + 
+					"----------\n" + 
+					"8. ERROR in X.java (at line 9)\n" + 
+					"	<T, S> Object z(X x) { return null; }\n" + 
+					"	              ^^^^^^\n" + 
+					"Duplicate method z(X) in type X\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -4532,47 +4862,7 @@
 				"	<T, S> Object z(X x) { return null; }\n" +
 				"}\n"
 			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 2)\n" + 
-			"	<T1, T2> String aaa(X x) {  return null; }\n" + 
-			"	                ^^^^^^^^\n" + 
-			"Method aaa(X) has the same erasure aaa(X) as another method in type X\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 3)\n" + 
-			"	<T extends X> T aaa(T x) {  return null; }\n" + 
-			"	                ^^^^^^^^\n" + 
-			"Method aaa(T) has the same erasure aaa(X) as another method in type X\n" + 
-			"----------\n" + 
-			"3. ERROR in X.java (at line 4)\n" + 
-			"	<T> String aa(X x) {  return null; }\n" + 
-			"	           ^^^^^^^\n" + 
-			"Method aa(X) has the same erasure aa(X) as another method in type X\n" + 
-			"----------\n" + 
-			"4. ERROR in X.java (at line 5)\n" + 
-			"	<T extends X> T aa(T x) {  return null; }\n" + 
-			"	                ^^^^^^^\n" + 
-			"Method aa(T) has the same erasure aa(X) as another method in type X\n" + 
-			"----------\n" + 
-			"5. ERROR in X.java (at line 6)\n" + 
-			"	String a(X x) {  return null; }\n" + 
-			"	       ^^^^^^\n" + 
-			"Method a(X) has the same erasure a(X) as another method in type X\n" + 
-			"----------\n" + 
-			"6. ERROR in X.java (at line 7)\n" + 
-			"	<T extends X> T a(T x) {  return null; }\n" + 
-			"	                ^^^^^^\n" + 
-			"Method a(T) has the same erasure a(X) as another method in type X\n" + 
-			"----------\n" + 
-			"7. ERROR in X.java (at line 8)\n" + 
-			"	<T> String z(X x) { return null; }\n" + 
-			"	           ^^^^^^\n" + 
-			"Duplicate method z(X) in type X\n" + 
-			"----------\n" + 
-			"8. ERROR in X.java (at line 9)\n" + 
-			"	<T, S> Object z(X x) { return null; }\n" + 
-			"	              ^^^^^^\n" + 
-			"Duplicate method z(X) in type X\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:3: name clash: <T>aaa(T) and <T1,T2>aaa(X) have the same erasure
@@ -4603,6 +4893,29 @@
 	}
 	// more duplicate tests, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=94897
 	public void test054b() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X.java (at line 2)\n" + 
+				"	Object foo(X<T> t) { return null; }\n" + 
+				"	       ^^^^^^^^^^^\n" + 
+				"Duplicate method foo(X<T>) in type X<T>\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 3)\n" + 
+				"	<S> String foo(X<T> s) { return null; }\n" + 
+				"	           ^^^^^^^^^^^\n" + 
+				"Duplicate method foo(X<T>) in type X<T>\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X.java (at line 2)\n" + 
+					"	Object foo(X<T> t) { return null; }\n" + 
+					"	       ^^^^^^^^^^^\n" + 
+					"Duplicate method foo(X<T>) in type X<T>\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 3)\n" + 
+					"	<S> String foo(X<T> s) { return null; }\n" + 
+					"	           ^^^^^^^^^^^\n" + 
+					"Duplicate method foo(X<T>) in type X<T>\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -4611,17 +4924,7 @@
 				"		 <S> String foo(X<T> s) { return null; }\n" +
 				"}\n"
 			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 2)\n" + 
-			"	Object foo(X<T> t) { return null; }\n" + 
-			"	       ^^^^^^^^^^^\n" + 
-			"Duplicate method foo(X<T>) in type X<T>\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 3)\n" + 
-			"	<S> String foo(X<T> s) { return null; }\n" + 
-			"	           ^^^^^^^^^^^\n" + 
-			"Duplicate method foo(X<T>) in type X<T>\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:3: name clash: <S>foo(X<T>) and foo(X<T>) have the same erasure
@@ -4666,6 +4969,49 @@
 	}
 	// more duplicate tests, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=94897
 	public void test054d() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X.java (at line 2)\n" + 
+				"	<T> T a(A<T> t) {return null;}\n" + 
+				"	      ^^^^^^^^^\n" + 
+				"Method a(A<T>) has the same erasure a(A<T>) as another method in type X\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 3)\n" + 
+				"	<T> String a(A<Object> o) {return null;}\n" + 
+				"	           ^^^^^^^^^^^^^^\n" + 
+				"Method a(A<Object>) has the same erasure a(A<T>) as another method in type X\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 4)\n" + 
+				"	<T> T aa(A<T> t) {return null;}\n" + 
+				"	      ^^^^^^^^^^\n" + 
+				"Method aa(A<T>) has the same erasure aa(A<T>) as another method in type X\n" + 
+				"----------\n" + 
+				"4. WARNING in X.java (at line 5)\n" + 
+				"	String aa(A<Object> o) {return null;}\n" + 
+				"	       ^^^^^^^^^^^^^^^\n" + 
+				"Method aa(A<Object>) has the same erasure aa(A<T>) as another method in type X\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X.java (at line 2)\n" + 
+					"	<T> T a(A<T> t) {return null;}\n" + 
+					"	      ^^^^^^^^^\n" + 
+					"Method a(A<T>) has the same erasure a(A<T>) as another method in type X\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 3)\n" + 
+					"	<T> String a(A<Object> o) {return null;}\n" + 
+					"	           ^^^^^^^^^^^^^^\n" + 
+					"Method a(A<Object>) has the same erasure a(A<T>) as another method in type X\n" + 
+					"----------\n" + 
+					"3. ERROR in X.java (at line 4)\n" + 
+					"	<T> T aa(A<T> t) {return null;}\n" + 
+					"	      ^^^^^^^^^^\n" + 
+					"Method aa(A<T>) has the same erasure aa(A<T>) as another method in type X\n" + 
+					"----------\n" + 
+					"4. ERROR in X.java (at line 5)\n" + 
+					"	String aa(A<Object> o) {return null;}\n" + 
+					"	       ^^^^^^^^^^^^^^^\n" + 
+					"Method aa(A<Object>) has the same erasure aa(A<T>) as another method in type X\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -4677,27 +5023,7 @@
 				"}\n" +
 				"class A<T> {}\n",
 			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 2)\n" + 
-			"	<T> T a(A<T> t) {return null;}\n" + 
-			"	      ^^^^^^^^^\n" + 
-			"Method a(A<T>) has the same erasure a(A<T>) as another method in type X\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 3)\n" + 
-			"	<T> String a(A<Object> o) {return null;}\n" + 
-			"	           ^^^^^^^^^^^^^^\n" + 
-			"Method a(A<Object>) has the same erasure a(A<T>) as another method in type X\n" + 
-			"----------\n" + 
-			"3. ERROR in X.java (at line 4)\n" + 
-			"	<T> T aa(A<T> t) {return null;}\n" + 
-			"	      ^^^^^^^^^^\n" + 
-			"Method aa(A<T>) has the same erasure aa(A<T>) as another method in type X\n" + 
-			"----------\n" + 
-			"4. ERROR in X.java (at line 5)\n" + 
-			"	String aa(A<Object> o) {return null;}\n" + 
-			"	       ^^^^^^^^^^^^^^^\n" + 
-			"Method aa(A<Object>) has the same erasure aa(A<T>) as another method in type X\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:3: name clash: <T#1>a(A<Object>) and <T#2>a(A<T#2>) have the same erasure
@@ -4821,6 +5147,59 @@
 	}
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=94898
 	public void test058a() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	new X<Object>().foo(\"X\");\n" + 
+				"	                ^^^\n" + 
+				"The method foo(String) is ambiguous for the type X<Object>\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	new X<Object>().foo2(\"X\");\n" + 
+				"	                ^^^^\n" + 
+				"The method foo2(String) is ambiguous for the type X<Object>\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 6)\n" + 
+				"	<T> T foo(T t) {return null;}\n" + 
+				"	      ^^^^^^^^\n" + 
+				"Method foo(T) has the same erasure foo(Object) as another method in type X<A>\n" + 
+				"----------\n" + 
+				"4. WARNING in X.java (at line 7)\n" + 
+				"	void foo(A a) {}\n" + 
+				"	     ^^^^^^^^\n" + 
+				"Method foo(A) has the same erasure foo(Object) as another method in type X<A>\n" + 
+				"----------\n" + 
+				"5. WARNING in X.java (at line 8)\n" + 
+				"	<T> T foo2(T t) {return null;}\n" + 
+				"	      ^^^^^^^^^\n" + 
+				"Method foo2(T) has the same erasure foo2(Object) as another method in type X<A>\n" + 
+				"----------\n" + 
+				"6. WARNING in X.java (at line 9)\n" + 
+				"	<T> void foo2(A a) {}\n" + 
+				"	         ^^^^^^^^^\n" + 
+				"Method foo2(A) has the same erasure foo2(Object) as another method in type X<A>\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. ERROR in X.java (at line 6)\n" + 
+					"	<T> T foo(T t) {return null;}\n" + 
+					"	      ^^^^^^^^\n" + 
+					"Method foo(T) has the same erasure foo(Object) as another method in type X<A>\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 7)\n" + 
+					"	void foo(A a) {}\n" + 
+					"	     ^^^^^^^^\n" + 
+					"Method foo(A) has the same erasure foo(Object) as another method in type X<A>\n" + 
+					"----------\n" + 
+					"3. ERROR in X.java (at line 8)\n" + 
+					"	<T> T foo2(T t) {return null;}\n" + 
+					"	      ^^^^^^^^^\n" + 
+					"Method foo2(T) has the same erasure foo2(Object) as another method in type X<A>\n" + 
+					"----------\n" + 
+					"4. ERROR in X.java (at line 9)\n" + 
+					"	<T> void foo2(A a) {}\n" + 
+					"	         ^^^^^^^^^\n" + 
+					"Method foo2(A) has the same erasure foo2(Object) as another method in type X<A>\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -4835,27 +5214,7 @@
 				"	<T> void foo2(A a) {}\n" +
 				"}\n"
 			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 6)\n" + 
-			"	<T> T foo(T t) {return null;}\n" + 
-			"	      ^^^^^^^^\n" + 
-			"Method foo(T) has the same erasure foo(Object) as another method in type X<A>\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 7)\n" + 
-			"	void foo(A a) {}\n" + 
-			"	     ^^^^^^^^\n" + 
-			"Method foo(A) has the same erasure foo(Object) as another method in type X<A>\n" + 
-			"----------\n" + 
-			"3. ERROR in X.java (at line 8)\n" + 
-			"	<T> T foo2(T t) {return null;}\n" + 
-			"	      ^^^^^^^^^\n" + 
-			"Method foo2(T) has the same erasure foo2(Object) as another method in type X<A>\n" + 
-			"----------\n" + 
-			"4. ERROR in X.java (at line 9)\n" + 
-			"	<T> void foo2(A a) {}\n" + 
-			"	         ^^^^^^^^^\n" + 
-			"Method foo2(A) has the same erasure foo2(Object) as another method in type X<A>\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:7: name clash: foo(A) and <T>foo(T) have the same erasure
@@ -4876,6 +5235,49 @@
 	}
 	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=94898
 	public void test058b() {
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	new X<Object>().foo(\"X\");\n" + 
+				"	                ^^^\n" + 
+				"The method foo(String) is ambiguous for the type X<Object>\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	new X<Object>().foo2(\"X\");\n" + 
+				"	                ^^^^\n" + 
+				"The method foo2(String) is ambiguous for the type X<Object>\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 6)\n" + 
+				"	<T> T foo(T t) {return null;}\n" + 
+				"	      ^^^^^^^^\n" + 
+				"Name clash: The method foo(T) of type X<A> has the same erasure as foo(A) of type Y<A> but does not override it\n" + 
+				"----------\n" + 
+				"4. WARNING in X.java (at line 7)\n" + 
+				"	<T> T foo2(T t) {return null;}\n" + 
+				"	      ^^^^^^^^^\n" + 
+				"Name clash: The method foo2(T) of type X<A> has the same erasure as foo2(A) of type Y<A> but does not override it\n" + 
+				"----------\n":
+					"----------\n" +
+					"1. ERROR in X.java (at line 3)\n" + 
+					"	new X<Object>().foo(\"X\");\n" + 
+					"	                ^^^\n" + 
+					"The method foo(String) is ambiguous for the type X<Object>\n" + 
+					"----------\n" + 
+					"2. ERROR in X.java (at line 4)\n" + 
+					"	new X<Object>().foo2(\"X\");\n" + 
+					"	                ^^^^\n" + 
+					"The method foo2(String) is ambiguous for the type X<Object>\n" + 
+					"----------\n" + 
+					"3. ERROR in X.java (at line 6)\n" + 
+					"	<T> T foo(T t) {return null;}\n" + 
+					"	      ^^^^^^^^\n" + 
+					"Name clash: The method foo(T) of type X<A> has the same erasure as foo(A) of type Y<A> but does not override it\n" + 
+					"----------\n" + 
+					"4. ERROR in X.java (at line 7)\n" + 
+					"	<T> T foo2(T t) {return null;}\n" + 
+					"	      ^^^^^^^^^\n" + 
+					"Name clash: The method foo2(T) of type X<A> has the same erasure as foo2(A) of type Y<A> but does not override it\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -4892,27 +5294,7 @@
 				"	<T> void foo2(A a) {}\n" +
 				"}"
 			},
-			"----------\n" +
-			"1. ERROR in X.java (at line 3)\n" + 
-			"	new X<Object>().foo(\"X\");\n" + 
-			"	                ^^^\n" + 
-			"The method foo(String) is ambiguous for the type X<Object>\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 4)\n" + 
-			"	new X<Object>().foo2(\"X\");\n" + 
-			"	                ^^^^\n" + 
-			"The method foo2(String) is ambiguous for the type X<Object>\n" + 
-			"----------\n" + 
-			"3. ERROR in X.java (at line 6)\n" + 
-			"	<T> T foo(T t) {return null;}\n" + 
-			"	      ^^^^^^^^\n" + 
-			"Name clash: The method foo(T) of type X<A> has the same erasure as foo(A) of type Y<A> but does not override it\n" + 
-			"----------\n" + 
-			"4. ERROR in X.java (at line 7)\n" + 
-			"	<T> T foo2(T t) {return null;}\n" + 
-			"	      ^^^^^^^^^\n" + 
-			"Name clash: The method foo2(T) of type X<A> has the same erasure as foo2(A) of type Y<A> but does not override it\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 /* javac 7
 X.java:3: reference to foo is ambiguous, both method foo(A) in Y and method <T>foo(T) in X match
@@ -6055,6 +6437,7 @@
 				"	@Override void instanceCase2(Collection c) {}\n" +
 				"}"
 			},
+			this.complianceLevel < ClassFileConstants.JDK1_7 ?
 			"----------\n" +
 			"1. WARNING in Parent.java (at line 3)\n" +
 			"	static void staticCase1(Collection c) {}\n" +
@@ -6080,7 +6463,38 @@
 			"	@Override void instanceCase2(Collection c) {}\n" +
 			"	                             ^^^^^^^^^^\n" +
 			"Collection is a raw type. References to generic type Collection<E> should be parameterized\n" +
-			"----------\n"
+			"----------\n":
+				"----------\n" + 
+				"1. WARNING in Parent.java (at line 3)\n" + 
+				"	static void staticCase1(Collection c) {}\n" + 
+				"	                        ^^^^^^^^^^\n" + 
+				"Collection is a raw type. References to generic type Collection<E> should be parameterized\n" + 
+				"----------\n" + 
+				"2. WARNING in Parent.java (at line 5)\n" + 
+				"	void instanceCase1(Collection c) {}\n" + 
+				"	                   ^^^^^^^^^^\n" + 
+				"Collection is a raw type. References to generic type Collection<E> should be parameterized\n" + 
+				"----------\n" + 
+				"3. ERROR in Parent.java (at line 9)\n" + 
+				"	static void staticCase1(Collection<String> c) {}\n" + 
+				"	            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Name clash: The method staticCase1(Collection<String>) of type Child has the same erasure as staticCase1(Collection) of type Parent but does not hide it\n" + 
+				"----------\n" + 
+				"4. WARNING in Parent.java (at line 10)\n" + 
+				"	static void staticCase2(Collection c) {}\n" + 
+				"	                        ^^^^^^^^^^\n" + 
+				"Collection is a raw type. References to generic type Collection<E> should be parameterized\n" + 
+				"----------\n" + 
+				"5. ERROR in Parent.java (at line 11)\n" + 
+				"	void instanceCase1(Collection<String> c) {}\n" + 
+				"	     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Name clash: The method instanceCase1(Collection<String>) of type Child has the same erasure as instanceCase1(Collection) of type Parent but does not override it\n" + 
+				"----------\n" + 
+				"6. WARNING in Parent.java (at line 12)\n" + 
+				"	@Override void instanceCase2(Collection c) {}\n" + 
+				"	                             ^^^^^^^^^^\n" + 
+				"Collection is a raw type. References to generic type Collection<E> should be parameterized\n" + 
+				"----------\n"
 			// @Override is an error for instanceCase1
 			// name clash: instanceCase1(Collection<String>) in Child and instanceCase1(Collection) in Parent have the same erasure, yet neither overrides the other
 		);
@@ -6877,6 +7291,49 @@
 
 // name conflict
 public void test101() {
+	String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+			"----------\n" + 
+			"1. WARNING in X.java (at line 3)\n" + 
+			"	Integer getX(List<Integer> l) {\n" + 
+			"	        ^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method getX(List<Integer>) has the same erasure getX(List<E>) as another method in type X\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 6)\n" + 
+			"	String getX(List<String> l) {\n" + 
+			"	       ^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method getX(List<String>) has the same erasure getX(List<E>) as another method in type X\n" + 
+			"----------\n" + 
+			"3. ERROR in X.java (at line 11)\n" + 
+			"	Integer getX(List<Integer> l) {\n" + 
+			"	        ^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Duplicate method getX(List<Integer>) in type Y\n" + 
+			"----------\n" + 
+			"4. ERROR in X.java (at line 14)\n" + 
+			"	String getX(List<Integer> l) {\n" + 
+			"	       ^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Duplicate method getX(List<Integer>) in type Y\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	Integer getX(List<Integer> l) {\n" + 
+				"	        ^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method getX(List<Integer>) has the same erasure getX(List<E>) as another method in type X\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 6)\n" + 
+				"	String getX(List<String> l) {\n" + 
+				"	       ^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method getX(List<String>) has the same erasure getX(List<E>) as another method in type X\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 11)\n" + 
+				"	Integer getX(List<Integer> l) {\n" + 
+				"	        ^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Duplicate method getX(List<Integer>) in type Y\n" + 
+				"----------\n" + 
+				"4. ERROR in X.java (at line 14)\n" + 
+				"	String getX(List<Integer> l) {\n" + 
+				"	       ^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Duplicate method getX(List<Integer>) in type Y\n" + 
+				"----------\n";
 	this.runNegativeTest(
 		new String[] {
 			"X.java",
@@ -6898,27 +7355,7 @@
 			"    }\n" +
 			"}"
 		},
-		"----------\n" + 
-		"1. ERROR in X.java (at line 3)\n" + 
-		"	Integer getX(List<Integer> l) {\n" + 
-		"	        ^^^^^^^^^^^^^^^^^^^^^\n" + 
-		"Method getX(List<Integer>) has the same erasure getX(List<E>) as another method in type X\n" + 
-		"----------\n" + 
-		"2. ERROR in X.java (at line 6)\n" + 
-		"	String getX(List<String> l) {\n" + 
-		"	       ^^^^^^^^^^^^^^^^^^^^\n" + 
-		"Method getX(List<String>) has the same erasure getX(List<E>) as another method in type X\n" + 
-		"----------\n" + 
-		"3. ERROR in X.java (at line 11)\n" + 
-		"	Integer getX(List<Integer> l) {\n" + 
-		"	        ^^^^^^^^^^^^^^^^^^^^^\n" + 
-		"Duplicate method getX(List<Integer>) in type Y\n" + 
-		"----------\n" + 
-		"4. ERROR in X.java (at line 14)\n" + 
-		"	String getX(List<Integer> l) {\n" + 
-		"	       ^^^^^^^^^^^^^^^^^^^^^\n" + 
-		"Duplicate method getX(List<Integer>) in type Y\n" + 
-		"----------\n"
+		expectedCompilerLog
 	);
 }
 // https://bugs.eclipse.org/bugs/show_bug.cgi?id=159973
@@ -7971,6 +8408,29 @@
 }
 //https://bugs.eclipse.org/bugs/show_bug.cgi?id=202830
 public void test120a() {
+	String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+			"----------\n" + 
+			"1. WARNING in Bar.java (at line 2)\n" + 
+			"	int getThing(V v) { return 1; }\n" + 
+			"	    ^^^^^^^^^^^^^\n" + 
+			"Method getThing(V) has the same erasure getThing(Object) as another method in type Foo<V,E>\n" + 
+			"----------\n" + 
+			"2. WARNING in Bar.java (at line 3)\n" + 
+			"	boolean getThing(E e) { return true; }\n" + 
+			"	        ^^^^^^^^^^^^^\n" + 
+			"Method getThing(E) has the same erasure getThing(Object) as another method in type Foo<V,E>\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. ERROR in Bar.java (at line 2)\n" + 
+				"	int getThing(V v) { return 1; }\n" + 
+				"	    ^^^^^^^^^^^^^\n" + 
+				"Method getThing(V) has the same erasure getThing(Object) as another method in type Foo<V,E>\n" + 
+				"----------\n" + 
+				"2. ERROR in Bar.java (at line 3)\n" + 
+				"	boolean getThing(E e) { return true; }\n" + 
+				"	        ^^^^^^^^^^^^^\n" + 
+				"Method getThing(E) has the same erasure getThing(Object) as another method in type Foo<V,E>\n" + 
+				"----------\n";
 	this.runNegativeTest(
 		new String[] {
 			"Bar.java",
@@ -7980,17 +8440,7 @@
 			"}\n" +
 			"public class Bar<V,E> extends Foo<V,E> {}"
 		},
-		"----------\n" + 
-		"1. ERROR in Bar.java (at line 2)\n" + 
-		"	int getThing(V v) { return 1; }\n" + 
-		"	    ^^^^^^^^^^^^^\n" + 
-		"Method getThing(V) has the same erasure getThing(Object) as another method in type Foo<V,E>\n" + 
-		"----------\n" + 
-		"2. ERROR in Bar.java (at line 3)\n" + 
-		"	boolean getThing(E e) { return true; }\n" + 
-		"	        ^^^^^^^^^^^^^\n" + 
-		"Method getThing(E) has the same erasure getThing(Object) as another method in type Foo<V,E>\n" + 
-		"----------\n"
+		expectedCompilerLog
 	);
 }
 //https://bugs.eclipse.org/bugs/show_bug.cgi?id=173477
@@ -8828,40 +9278,80 @@
 			"class X {}\n" +
 			"class Y<T> {}"
 		},
-		"----------\n" +
-		"1. ERROR in B.java (at line 2)\n" +
-		"	static void a(X x) {}\n" +
-		"	            ^^^^^^\n" +
-		"This static method cannot hide the instance method from A\n" +
-		"----------\n" +
-		"2. ERROR in B.java (at line 3)\n" +
-		"	static void b(Y<String> y) {}\n" +
-		"	            ^^^^^^^^^^^^^^\n" +
-		"Name clash: The method b(Y<String>) of type B has the same erasure as b(Y<Integer>) of type A but does not override it\n" +
-		"----------\n" +
-		"----------\n" +
-		"1. ERROR in B2.java (at line 2)\n" +
-		"	static void b(Y<Integer> y) {}\n" +
-		"	            ^^^^^^^^^^^^^^^\n" +
-		"This static method cannot hide the instance method from A\n" +
-		"----------\n" +
-		"----------\n" +
-		"1. ERROR in C.java (at line 3)\n" +
-		"	void b(Y<String> y) {}\n" +
-		"	     ^^^^^^^^^^^^^^\n" +
-		"Name clash: The method b(Y<String>) of type C has the same erasure as b(Y<Integer>) of type A but does not override it\n" +
-		"----------\n" +
-		"2. ERROR in C.java (at line 4)\n" +
-		"	void c(X x) {}\n" +
-		"	     ^^^^^^\n" +
-		"This instance method cannot override the static method from A\n" +
-		"----------\n" +
-		"----------\n" +
-		"1. ERROR in C2.java (at line 3)\n" +
-		"	void d(Y<Integer> y) {}\n" +
-		"	     ^^^^^^^^^^^^^^^\n" +
-		"This instance method cannot override the static method from A\n" +
-		"----------\n"
+		this.complianceLevel < ClassFileConstants.JDK1_7 ?
+		"----------\n" + 
+		"1. ERROR in B.java (at line 2)\n" + 
+		"	static void a(X x) {}\n" + 
+		"	            ^^^^^^\n" + 
+		"This static method cannot hide the instance method from A\n" + 
+		"----------\n" + 
+		"----------\n" + 
+		"1. ERROR in B2.java (at line 2)\n" + 
+		"	static void b(Y<Integer> y) {}\n" + 
+		"	            ^^^^^^^^^^^^^^^\n" + 
+		"This static method cannot hide the instance method from A\n" + 
+		"----------\n" + 
+		"----------\n" + 
+		"1. ERROR in C.java (at line 3)\n" + 
+		"	void b(Y<String> y) {}\n" + 
+		"	     ^^^^^^^^^^^^^^\n" + 
+		"Name clash: The method b(Y<String>) of type C has the same erasure as b(Y<Integer>) of type A but does not override it\n" + 
+		"----------\n" + 
+		"2. ERROR in C.java (at line 4)\n" + 
+		"	void c(X x) {}\n" + 
+		"	     ^^^^^^\n" + 
+		"This instance method cannot override the static method from A\n" + 
+		"----------\n" + 
+		"----------\n" + 
+		"1. ERROR in C2.java (at line 3)\n" + 
+		"	void d(Y<Integer> y) {}\n" + 
+		"	     ^^^^^^^^^^^^^^^\n" + 
+		"This instance method cannot override the static method from A\n" + 
+		"----------\n" :
+			"----------\n" + 
+			"1. ERROR in B.java (at line 2)\n" + 
+			"	static void a(X x) {}\n" + 
+			"	            ^^^^^^\n" + 
+			"This static method cannot hide the instance method from A\n" + 
+			"----------\n" + 
+			"2. ERROR in B.java (at line 3)\n" + 
+			"	static void b(Y<String> y) {}\n" + 
+			"	            ^^^^^^^^^^^^^^\n" + 
+			"Name clash: The method b(Y<String>) of type B has the same erasure as b(Y<Integer>) of type A but does not hide it\n" + 
+			"----------\n" + 
+			"3. ERROR in B.java (at line 5)\n" + 
+			"	static void d(Y<String> y) {}\n" + 
+			"	            ^^^^^^^^^^^^^^\n" + 
+			"Name clash: The method d(Y<String>) of type B has the same erasure as d(Y<Integer>) of type A but does not hide it\n" + 
+			"----------\n" + 
+			"----------\n" + 
+			"1. ERROR in B2.java (at line 2)\n" + 
+			"	static void b(Y<Integer> y) {}\n" + 
+			"	            ^^^^^^^^^^^^^^^\n" + 
+			"This static method cannot hide the instance method from A\n" + 
+			"----------\n" + 
+			"----------\n" + 
+			"1. ERROR in C.java (at line 3)\n" + 
+			"	void b(Y<String> y) {}\n" + 
+			"	     ^^^^^^^^^^^^^^\n" + 
+			"Name clash: The method b(Y<String>) of type C has the same erasure as b(Y<Integer>) of type A but does not override it\n" + 
+			"----------\n" + 
+			"2. ERROR in C.java (at line 4)\n" + 
+			"	void c(X x) {}\n" + 
+			"	     ^^^^^^\n" + 
+			"This instance method cannot override the static method from A\n" + 
+			"----------\n" + 
+			"3. ERROR in C.java (at line 5)\n" + 
+			"	void d(Y<String> y) {}\n" + 
+			"	     ^^^^^^^^^^^^^^\n" + 
+			"Name clash: The method d(Y<String>) of type C has the same erasure as d(Y<Integer>) of type A but does not hide it\n" + 
+			"----------\n" + 
+			"----------\n" + 
+			"1. ERROR in C2.java (at line 3)\n" + 
+			"	void d(Y<Integer> y) {}\n" + 
+			"	     ^^^^^^^^^^^^^^^\n" + 
+			"This instance method cannot override the static method from A\n" + 
+			"----------\n"
 	);
 }
 public void test150() {
@@ -9700,6 +10190,59 @@
 // JDK7 (7b100) behavior. (earlier we would issue an extra name clash)
 public void test177() {
 	if (new CompilerOptions(getCompilerOptions()).complianceLevel >= ClassFileConstants.JDK1_6) { // see test187()
+		String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6)?
+				"----------\n" + 
+				"1. WARNING in X.java (at line 3)\n" + 
+				"	class A extends LinkedHashMap {\n" + 
+				"	      ^\n" + 
+				"The serializable class A does not declare a static final serialVersionUID field of type long\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 3)\n" + 
+				"	class A extends LinkedHashMap {\n" + 
+				"	                ^^^^^^^^^^^^^\n" + 
+				"LinkedHashMap is a raw type. References to generic type LinkedHashMap<K,V> should be parameterized\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 4)\n" + 
+				"	public A foo(Collection c) { return this; }\n" + 
+				"	             ^^^^^^^^^^\n" + 
+				"Collection is a raw type. References to generic type Collection<E> should be parameterized\n" + 
+				"----------\n" + 
+				"4. WARNING in X.java (at line 6)\n" + 
+				"	class X extends A implements I {\n" + 
+				"	      ^\n" + 
+				"The serializable class X does not declare a static final serialVersionUID field of type long\n" + 
+				"----------\n" + 
+				"5. WARNING in X.java (at line 7)\n" + 
+				"	@Override public X foo(Collection<?> c) { return this; }\n" + 
+				"	                   ^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Name clash: The method foo(Collection<?>) of type X has the same erasure as foo(Collection) of type A but does not override it\n" + 
+				"----------\n":
+					"----------\n" + 
+					"1. WARNING in X.java (at line 3)\n" + 
+					"	class A extends LinkedHashMap {\n" + 
+					"	      ^\n" + 
+					"The serializable class A does not declare a static final serialVersionUID field of type long\n" + 
+					"----------\n" + 
+					"2. WARNING in X.java (at line 3)\n" + 
+					"	class A extends LinkedHashMap {\n" + 
+					"	                ^^^^^^^^^^^^^\n" + 
+					"LinkedHashMap is a raw type. References to generic type LinkedHashMap<K,V> should be parameterized\n" + 
+					"----------\n" + 
+					"3. WARNING in X.java (at line 4)\n" + 
+					"	public A foo(Collection c) { return this; }\n" + 
+					"	             ^^^^^^^^^^\n" + 
+					"Collection is a raw type. References to generic type Collection<E> should be parameterized\n" + 
+					"----------\n" + 
+					"4. WARNING in X.java (at line 6)\n" + 
+					"	class X extends A implements I {\n" + 
+					"	      ^\n" + 
+					"The serializable class X does not declare a static final serialVersionUID field of type long\n" + 
+					"----------\n" + 
+					"5. ERROR in X.java (at line 7)\n" + 
+					"	@Override public X foo(Collection<?> c) { return this; }\n" + 
+					"	                   ^^^^^^^^^^^^^^^^^^^^\n" + 
+					"Name clash: The method foo(Collection<?>) of type X has the same erasure as foo(Collection) of type A but does not override it\n" + 
+					"----------\n";
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -9712,32 +10255,7 @@
 				"	@Override public X foo(Collection<?> c) { return this; }\n" +
 				"}"
 			},
-			"----------\n" + 
-			"1. WARNING in X.java (at line 3)\n" + 
-			"	class A extends LinkedHashMap {\n" + 
-			"	      ^\n" + 
-			"The serializable class A does not declare a static final serialVersionUID field of type long\n" + 
-			"----------\n" + 
-			"2. WARNING in X.java (at line 3)\n" + 
-			"	class A extends LinkedHashMap {\n" + 
-			"	                ^^^^^^^^^^^^^\n" + 
-			"LinkedHashMap is a raw type. References to generic type LinkedHashMap<K,V> should be parameterized\n" + 
-			"----------\n" + 
-			"3. WARNING in X.java (at line 4)\n" + 
-			"	public A foo(Collection c) { return this; }\n" + 
-			"	             ^^^^^^^^^^\n" + 
-			"Collection is a raw type. References to generic type Collection<E> should be parameterized\n" + 
-			"----------\n" + 
-			"4. WARNING in X.java (at line 6)\n" + 
-			"	class X extends A implements I {\n" + 
-			"	      ^\n" + 
-			"The serializable class X does not declare a static final serialVersionUID field of type long\n" + 
-			"----------\n" + 
-			"5. ERROR in X.java (at line 7)\n" + 
-			"	@Override public X foo(Collection<?> c) { return this; }\n" + 
-			"	                   ^^^^^^^^^^^^^^^^^^^^\n" + 
-			"Name clash: The method foo(Collection<?>) of type X has the same erasure as foo(Collection) of type A but does not override it\n" + 
-			"----------\n"
+			expectedCompilerLog
 		);
 	} else {
 		this.runNegativeTest(
@@ -9777,7 +10295,7 @@
 			"	@Override public X foo(Collection<?> c) { return this; }\n" + 
 			"	                   ^^^^^^^^^^^^^^^^^^^^\n" + 
 			"Name clash: The method foo(Collection<?>) of type X has the same erasure as foo(Collection) of type A but does not override it\n" + 
-			"----------\n" + 
+			"----------\n" +
 			"6. ERROR in X.java (at line 7)\n" + 
 			"	@Override public X foo(Collection<?> c) { return this; }\n" + 
 			"	                   ^^^^^^^^^^^^^^^^^^^^\n" + 
@@ -10246,6 +10764,39 @@
 // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6182950
 //https://bugs.eclipse.org/bugs/show_bug.cgi?id=?
 public void test187() {
+	String expectedCompilerLog = (this.complianceLevel == ClassFileConstants.JDK1_6 )?
+			"----------\n" + 
+			"1. WARNING in X.java (at line 6)\n" + 
+			"	double f(List<Integer> l) {return 0;}\n" + 
+			"	       ^^^^^^^^^^^^^^^^^^\n" + 
+			"Name clash: The method f(List<Integer>) of type Y has the same erasure as f(List<String>) of type X but does not override it\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 13)\n" + 
+			"	int f(List<String> l) {return 0;}\n" + 
+			"	    ^^^^^^^^^^^^^^^^^\n" + 
+			"Method f(List<String>) has the same erasure f(List<E>) as another method in type XX\n" + 
+			"----------\n" + 
+			"3. WARNING in X.java (at line 14)\n" + 
+			"	double f(List<Integer> l) {return 0;}\n" + 
+			"	       ^^^^^^^^^^^^^^^^^^\n" + 
+			"Method f(List<Integer>) has the same erasure f(List<E>) as another method in type XX\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. ERROR in X.java (at line 6)\n" + 
+				"	double f(List<Integer> l) {return 0;}\n" + 
+				"	       ^^^^^^^^^^^^^^^^^^\n" + 
+				"Name clash: The method f(List<Integer>) of type Y has the same erasure as f(List<String>) of type X but does not override it\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 13)\n" + 
+				"	int f(List<String> l) {return 0;}\n" + 
+				"	    ^^^^^^^^^^^^^^^^^\n" + 
+				"Method f(List<String>) has the same erasure f(List<E>) as another method in type XX\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 14)\n" + 
+				"	double f(List<Integer> l) {return 0;}\n" + 
+				"	       ^^^^^^^^^^^^^^^^^^\n" + 
+				"Method f(List<Integer>) has the same erasure f(List<E>) as another method in type XX\n" + 
+				"----------\n";
 	this.runNegativeTest(
 		new String[] {
 			"X.java",
@@ -10265,22 +10816,7 @@
     			"double f(List<Integer> l) {return 0;}\n" +// name clash in 1.5 & 7
 			"}"
 		},
-		"----------\n" + 
-		"1. ERROR in X.java (at line 6)\n" + 
-		"	double f(List<Integer> l) {return 0;}\n" + 
-		"	       ^^^^^^^^^^^^^^^^^^\n" + 
-		"Name clash: The method f(List<Integer>) of type Y has the same erasure as f(List<String>) of type X but does not override it\n" + 
-		"----------\n" + 
-		"2. ERROR in X.java (at line 13)\n" + 
-		"	int f(List<String> l) {return 0;}\n" + 
-		"	    ^^^^^^^^^^^^^^^^^\n" + 
-		"Method f(List<String>) has the same erasure f(List<E>) as another method in type XX\n" + 
-		"----------\n" + 
-		"3. ERROR in X.java (at line 14)\n" + 
-		"	double f(List<Integer> l) {return 0;}\n" + 
-		"	       ^^^^^^^^^^^^^^^^^^\n" + 
-		"Method f(List<Integer>) has the same erasure f(List<E>) as another method in type XX\n" + 
-		"----------\n"
+		expectedCompilerLog
 	);
 }
 //https://bugs.eclipse.org/bugs/show_bug.cgi?id=279836
@@ -10702,6 +11238,41 @@
 }
 //https://bugs.eclipse.org/bugs/show_bug.cgi?id=285088
 public void test200() {
+	Map options = getCompilerOptions();
+	String compliance = (String) options.get(JavaCore.COMPILER_COMPLIANCE);
+	String errorMessage = compliance == JavaCore.VERSION_1_6 ?
+			"----------\n" + 
+			"1. WARNING in X.java (at line 3)\n" + 
+			"	int foo(Collection bar) { return 0; }\n" + 
+			"	    ^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method foo(Collection) has the same erasure foo(Collection<E>) as another method in type X\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 3)\n" + 
+			"	int foo(Collection bar) { return 0; }\n" + 
+			"	        ^^^^^^^^^^\n" + 
+			"Collection is a raw type. References to generic type Collection<E> should be parameterized\n" + 
+			"----------\n" + 
+			"3. WARNING in X.java (at line 4)\n" + 
+			"	double foo(Collection<String> bar) {return 0; }\n" + 
+			"	       ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method foo(Collection<String>) has the same erasure foo(Collection<E>) as another method in type X\n" + 
+			"----------\n" :
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	int foo(Collection bar) { return 0; }\n" + 
+				"	    ^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method foo(Collection) has the same erasure foo(Collection<E>) as another method in type X\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 3)\n" + 
+				"	int foo(Collection bar) { return 0; }\n" + 
+				"	        ^^^^^^^^^^\n" + 
+				"Collection is a raw type. References to generic type Collection<E> should be parameterized\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 4)\n" + 
+				"	double foo(Collection<String> bar) {return 0; }\n" + 
+				"	       ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method foo(Collection<String>) has the same erasure foo(Collection<E>) as another method in type X\n" + 
+				"----------\n";
 	this.runNegativeTest(
 		new String[] {
 			"X.java",
@@ -10711,22 +11282,7 @@
 			"	double foo(Collection<String> bar) {return 0; }\n" +
 			"}"
 		},
-		"----------\n" + 
-		"1. ERROR in X.java (at line 3)\n" + 
-		"	int foo(Collection bar) { return 0; }\n" + 
-		"	    ^^^^^^^^^^^^^^^^^^^\n" + 
-		"Method foo(Collection) has the same erasure foo(Collection<E>) as another method in type X\n" + 
-		"----------\n" + 
-		"2. WARNING in X.java (at line 3)\n" + 
-		"	int foo(Collection bar) { return 0; }\n" + 
-		"	        ^^^^^^^^^^\n" + 
-		"Collection is a raw type. References to generic type Collection<E> should be parameterized\n" + 
-		"----------\n" + 
-		"3. ERROR in X.java (at line 4)\n" + 
-		"	double foo(Collection<String> bar) {return 0; }\n" + 
-		"	       ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
-		"Method foo(Collection<String>) has the same erasure foo(Collection<E>) as another method in type X\n" + 
-		"----------\n"
+		errorMessage
 	);
 /* javac 7
 X.java:4: foo(Collection) is already defined in X
@@ -12342,16 +12898,16 @@
 			"}\n" +
 			"interface C  extends A, B { \n" +
 			"int get(List l);      // name clash error here\n" +
-            "}\n" +
+         "}\n" +
 			"public class X {\n" +
-            "    public static void main(String [] args) {\n" +
+         "    public static void main(String [] args) {\n" +
 			"        System.out.println(\"Built OK\");\n" +
-            "    }\n" +
+         "    }\n" +
 			"}"
 		},
 		"Built OK");
 }
-// https://bugs.eclipse.org/bugs/show_bug.cgi?id=353089
+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=353089
 public void test353089b() throws Exception {
 	this.runNegativeTest(
 		new String[] {
@@ -12411,7 +12967,7 @@
 		"Zork cannot be resolved to a type\n" + 
 		"----------\n");
 }
-// https://bugs.eclipse.org/bugs/show_bug.cgi?id=353089
+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=353089
 public void test353089c() throws Exception {
 	this.runNegativeTest(
 		new String[] {
@@ -12436,4 +12992,524 @@
 		"List is a raw type. References to generic type List<E> should be parameterized\n" + 
 		"----------\n");
 }
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=317719
+public void testBug317719() throws Exception {
+	String output = this.complianceLevel == ClassFileConstants.JDK1_6 ?
+			"----------\n" + 
+			"1. WARNING in X.java (at line 4)\n" + 
+			"	public <T extends List> T foo() { return null; }\n" + 
+			"	                  ^^^^\n" + 
+			"List is a raw type. References to generic type List<E> should be parameterized\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 4)\n" + 
+			"	public <T extends List> T foo() { return null; }\n" + 
+			"	                          ^^^^^\n" + 
+			"Duplicate method foo() in type X\n" + 
+			"----------\n" + 
+			"3. WARNING in X.java (at line 5)\n" + 
+			"	public <T extends Set> T foo() { return null; }\n" + 
+			"	                  ^^^\n" + 
+			"Set is a raw type. References to generic type Set<E> should be parameterized\n" + 
+			"----------\n" + 
+			"4. WARNING in X.java (at line 5)\n" + 
+			"	public <T extends Set> T foo() { return null; }\n" + 
+			"	                         ^^^^^\n" + 
+			"Duplicate method foo() in type X\n" + 
+			"----------\n" + 
+			"5. ERROR in X.java (at line 6)\n" + 
+			"	Zork z;\n" + 
+			"	^^^^\n" + 
+			"Zork cannot be resolved to a type\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. WARNING in X.java (at line 4)\n" + 
+				"	public <T extends List> T foo() { return null; }\n" + 
+				"	                  ^^^^\n" + 
+				"List is a raw type. References to generic type List<E> should be parameterized\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	public <T extends List> T foo() { return null; }\n" + 
+				"	                          ^^^^^\n" + 
+				"Duplicate method foo() in type X\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 5)\n" + 
+				"	public <T extends Set> T foo() { return null; }\n" + 
+				"	                  ^^^\n" + 
+				"Set is a raw type. References to generic type Set<E> should be parameterized\n" + 
+				"----------\n" + 
+				"4. ERROR in X.java (at line 5)\n" + 
+				"	public <T extends Set> T foo() { return null; }\n" + 
+				"	                         ^^^^^\n" + 
+				"Duplicate method foo() in type X\n" + 
+				"----------\n" + 
+				"5. ERROR in X.java (at line 6)\n" + 
+				"	Zork z;\n" + 
+				"	^^^^\n" + 
+				"Zork cannot be resolved to a type\n" + 
+				"----------\n";
+	this.runNegativeTest(
+		new String[] {
+			"X.java",
+			"import java.util.List;\n" +
+			"import java.util.Set;\n" +
+			"class X {\n" +
+			"    public <T extends List> T foo() { return null; }\n" +
+			"	 public <T extends Set> T foo() { return null; }\n" +
+			"	 Zork z;\n" +
+			"}\n"
+		},
+		output);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=317719
+public void testBug317719a() throws Exception {
+	String output = this.complianceLevel == ClassFileConstants.JDK1_6 ?
+			"----------\n" + 
+			"1. WARNING in X.java (at line 4)\n" + 
+			"	public Integer same(List<Integer> a) { return null; }\n" + 
+			"	               ^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method same(List<Integer>) has the same erasure same(List<E>) as another method in type X\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 5)\n" + 
+			"	public String same(List<String> b) { return null; }\n" + 
+			"	              ^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method same(List<String>) has the same erasure same(List<E>) as another method in type X\n" + 
+			"----------\n" + 
+			"3. ERROR in X.java (at line 6)\n" + 
+			"	Zork z;\n" + 
+			"	^^^^\n" + 
+			"Zork cannot be resolved to a type\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. ERROR in X.java (at line 4)\n" + 
+				"	public Integer same(List<Integer> a) { return null; }\n" + 
+				"	               ^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method same(List<Integer>) has the same erasure same(List<E>) as another method in type X\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 5)\n" + 
+				"	public String same(List<String> b) { return null; }\n" + 
+				"	              ^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method same(List<String>) has the same erasure same(List<E>) as another method in type X\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 6)\n" + 
+				"	Zork z;\n" + 
+				"	^^^^\n" + 
+				"Zork cannot be resolved to a type\n" + 
+				"----------\n";
+	this.runNegativeTest(
+		new String[] {
+			"X.java",
+			"import java.util.List;\n" +
+			"import java.util.Set;\n" +
+			"class X {\n" +
+			"    public Integer same(List<Integer> a) { return null; }\n" +
+			"	 public String same(List<String> b) { return null; }\n" +
+			"	 Zork z;\n" +
+			"}\n"
+		},
+		output);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=317719
+public void testBug317719b() throws Exception {
+	String output = this.complianceLevel == ClassFileConstants.JDK1_6 ?
+			"----------\n" + 
+			"1. WARNING in X.java (at line 3)\n" + 
+			"	public static String doIt(final List<String> arg) { return null; }\n" + 
+			"	                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method doIt(List<String>) has the same erasure doIt(List<E>) as another method in type X\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 4)\n" + 
+			"	public static CharSequence doIt(final List<CharSequence> arg) { return null; }\n" + 
+			"	                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method doIt(List<CharSequence>) has the same erasure doIt(List<E>) as another method in type X\n" + 
+			"----------\n" + 
+			"3. ERROR in X.java (at line 5)\n" + 
+			"	Zork z;\n" + 
+			"	^^^^\n" + 
+			"Zork cannot be resolved to a type\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	public static String doIt(final List<String> arg) { return null; }\n" + 
+				"	                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method doIt(List<String>) has the same erasure doIt(List<E>) as another method in type X\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	public static CharSequence doIt(final List<CharSequence> arg) { return null; }\n" + 
+				"	                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method doIt(List<CharSequence>) has the same erasure doIt(List<E>) as another method in type X\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 5)\n" + 
+				"	Zork z;\n" + 
+				"	^^^^\n" + 
+				"Zork cannot be resolved to a type\n" + 
+				"----------\n";
+	this.runNegativeTest(
+		new String[] {
+			"X.java",
+			"import java.util.List;\n" +
+			"class X {\n" +
+			"    public static String doIt(final List<String> arg) { return null; }\n" +
+			"	 public static CharSequence doIt(final List<CharSequence> arg) { return null; }\n" +
+			"	 Zork z;\n" +
+			"}\n"
+		},
+		output);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=317719
+public void testBug317719c() throws Exception {
+	String output = this.complianceLevel == ClassFileConstants.JDK1_6 ?
+			"----------\n" + 
+			"1. WARNING in X.java (at line 3)\n" + 
+			"	protected static <T extends String> T same(Collection<? extends T> p_col) { return null; }\n" + 
+			"	                            ^^^^^^\n" + 
+			"The type parameter T should not be bounded by the final type String. Final types cannot be further extended\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 3)\n" + 
+			"	protected static <T extends String> T same(Collection<? extends T> p_col) { return null; }\n" + 
+			"	                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method same(Collection<? extends T>) has the same erasure same(Collection<E>) as another method in type X\n" + 
+			"----------\n" + 
+			"3. WARNING in X.java (at line 4)\n" + 
+			"	protected static <T extends Number> T same(Collection<? extends T> p_col) { return null; }\n" + 
+			"	                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method same(Collection<? extends T>) has the same erasure same(Collection<E>) as another method in type X\n" + 
+			"----------\n" + 
+			"4. ERROR in X.java (at line 5)\n" + 
+			"	Zork z;\n" + 
+			"	^^^^\n" + 
+			"Zork cannot be resolved to a type\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. WARNING in X.java (at line 3)\n" + 
+				"	protected static <T extends String> T same(Collection<? extends T> p_col) { return null; }\n" + 
+				"	                            ^^^^^^\n" + 
+				"The type parameter T should not be bounded by the final type String. Final types cannot be further extended\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 3)\n" + 
+				"	protected static <T extends String> T same(Collection<? extends T> p_col) { return null; }\n" + 
+				"	                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method same(Collection<? extends T>) has the same erasure same(Collection<E>) as another method in type X\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 4)\n" + 
+				"	protected static <T extends Number> T same(Collection<? extends T> p_col) { return null; }\n" + 
+				"	                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method same(Collection<? extends T>) has the same erasure same(Collection<E>) as another method in type X\n" + 
+				"----------\n" + 
+				"4. ERROR in X.java (at line 5)\n" + 
+				"	Zork z;\n" + 
+				"	^^^^\n" + 
+				"Zork cannot be resolved to a type\n" + 
+				"----------\n";
+	this.runNegativeTest(
+		new String[] {
+			"X.java",
+			"import java.util.Collection;\n" +
+			"class X {\n" +
+			"    protected static <T extends String> T same(Collection<? extends T> p_col) { return null; }\n" +
+			"	 protected static <T extends Number> T same(Collection<? extends T> p_col) { return null; }\n" +
+			"	 Zork z;\n" +
+			"}\n"
+		},
+		output);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=317719
+public void testBug317719d() throws Exception {
+	String output = this.complianceLevel == ClassFileConstants.JDK1_6 ?
+			"----------\n" + 
+			"1. WARNING in X.java (at line 3)\n" + 
+			"	public static boolean foo(List<String> x) { return true; }\n" + 
+			"	                      ^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method foo(List<String>) has the same erasure foo(List<E>) as another method in type X\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 4)\n" + 
+			"	public static int foo(List<Integer> x) { return 2; }\n" + 
+			"	                  ^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method foo(List<Integer>) has the same erasure foo(List<E>) as another method in type X\n" + 
+			"----------\n" + 
+			"3. ERROR in X.java (at line 5)\n" + 
+			"	Zork z;\n" + 
+			"	^^^^\n" + 
+			"Zork cannot be resolved to a type\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	public static boolean foo(List<String> x) { return true; }\n" + 
+				"	                      ^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method foo(List<String>) has the same erasure foo(List<E>) as another method in type X\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	public static int foo(List<Integer> x) { return 2; }\n" + 
+				"	                  ^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method foo(List<Integer>) has the same erasure foo(List<E>) as another method in type X\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 5)\n" + 
+				"	Zork z;\n" + 
+				"	^^^^\n" + 
+				"Zork cannot be resolved to a type\n" + 
+				"----------\n";
+	this.runNegativeTest(
+		new String[] {
+			"X.java",
+			"import java.util.List;\n" +
+			"class X {\n" +
+			"    public static boolean foo(List<String> x) { return true; }\n" +
+			"	 public static int foo(List<Integer> x) { return 2; }\n" +
+			"	 Zork z;\n" +
+			"}\n"
+		},
+		output);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=317719
+public void testBug317719e() throws Exception {
+	String output = this.complianceLevel == ClassFileConstants.JDK1_6 ?
+			"----------\n" + 
+			"1. WARNING in X.java (at line 3)\n" + 
+			"	public String getFirst (ArrayList<String> ss) { return ss.get(0); }\n" + 
+			"	              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method getFirst(ArrayList<String>) has the same erasure getFirst(ArrayList<E>) as another method in type X\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 4)\n" + 
+			"	public Integer getFirst (ArrayList<Integer> ss) { return ss.get(0); }\n" + 
+			"	               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method getFirst(ArrayList<Integer>) has the same erasure getFirst(ArrayList<E>) as another method in type X\n" + 
+			"----------\n" + 
+			"3. ERROR in X.java (at line 5)\n" + 
+			"	Zork z;\n" + 
+			"	^^^^\n" + 
+			"Zork cannot be resolved to a type\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	public String getFirst (ArrayList<String> ss) { return ss.get(0); }\n" + 
+				"	              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method getFirst(ArrayList<String>) has the same erasure getFirst(ArrayList<E>) as another method in type X\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	public Integer getFirst (ArrayList<Integer> ss) { return ss.get(0); }\n" + 
+				"	               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method getFirst(ArrayList<Integer>) has the same erasure getFirst(ArrayList<E>) as another method in type X\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 5)\n" + 
+				"	Zork z;\n" + 
+				"	^^^^\n" + 
+				"Zork cannot be resolved to a type\n" + 
+				"----------\n";
+	this.runNegativeTest(
+		new String[] {
+			"X.java",
+			"import java.util.ArrayList;\n" +
+			"class X {\n" +
+			"    public String getFirst (ArrayList<String> ss) { return ss.get(0); }\n" +
+			"	 public Integer getFirst (ArrayList<Integer> ss) { return ss.get(0); }\n" +
+			"	 Zork z;\n" +
+			"}\n"
+		},
+		output);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=317719
+public void testBug317719f() throws Exception {
+	String output = this.complianceLevel == ClassFileConstants.JDK1_6 ?
+			"----------\n" + 
+			"1. WARNING in X.java (at line 3)\n" + 
+			"	public static <R extends Object> X<R> forAccountSet(List list) { return null; }\n" + 
+			"	                                      ^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method forAccountSet(List) has the same erasure forAccountSet(List<E>) as another method in type X<Z>\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 3)\n" + 
+			"	public static <R extends Object> X<R> forAccountSet(List list) { return null; }\n" + 
+			"	                                                    ^^^^\n" + 
+			"List is a raw type. References to generic type List<E> should be parameterized\n" + 
+			"----------\n" + 
+			"3. WARNING in X.java (at line 4)\n" + 
+			"	public static <R extends Object> ChildX<R> forAccountSet(List<R> list) { return null; }\n" + 
+			"	                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method forAccountSet(List<R>) has the same erasure forAccountSet(List<E>) as another method in type X<Z>\n" + 
+			"----------\n" + 
+			"4. ERROR in X.java (at line 5)\n" + 
+			"	Zork z;\n" + 
+			"	^^^^\n" + 
+			"Zork cannot be resolved to a type\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	public static <R extends Object> X<R> forAccountSet(List list) { return null; }\n" + 
+				"	                                      ^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method forAccountSet(List) has the same erasure forAccountSet(List<E>) as another method in type X<Z>\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 3)\n" + 
+				"	public static <R extends Object> X<R> forAccountSet(List list) { return null; }\n" + 
+				"	                                                    ^^^^\n" + 
+				"List is a raw type. References to generic type List<E> should be parameterized\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 4)\n" + 
+				"	public static <R extends Object> ChildX<R> forAccountSet(List<R> list) { return null; }\n" + 
+				"	                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method forAccountSet(List<R>) has the same erasure forAccountSet(List<E>) as another method in type X<Z>\n" + 
+				"----------\n" + 
+				"4. ERROR in X.java (at line 5)\n" + 
+				"	Zork z;\n" + 
+				"	^^^^\n" + 
+				"Zork cannot be resolved to a type\n" + 
+				"----------\n";
+	this.runNegativeTest(
+		new String[] {
+			"X.java",
+			"import java.util.List;\n" +
+			"class X<Z> {\n" +
+			"    public static <R extends Object> X<R> forAccountSet(List list) { return null; }\n" +
+			"	 public static <R extends Object> ChildX<R> forAccountSet(List<R> list) { return null; }\n" +
+			"	 Zork z;\n" +
+			"}\n" +
+			"class ChildX<Z> extends X<Z>{}\n"
+		},
+		output);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=317719
+public void testBug317719g() throws Exception {
+	String output = this.complianceLevel == ClassFileConstants.JDK1_6 ?
+			"----------\n" + 
+			"1. WARNING in X.java (at line 3)\n" + 
+			"	public static int[] doIt(Collection<int[]> col) { return new int[1]; }\n" + 
+			"	                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method doIt(Collection<int[]>) has the same erasure doIt(Collection<E>) as another method in type X<Z>\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 4)\n" + 
+			"	public static int[][] doIt(Collection<int[][]> col) { return new int[0][0]; }\n" + 
+			"	                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method doIt(Collection<int[][]>) has the same erasure doIt(Collection<E>) as another method in type X<Z>\n" + 
+			"----------\n" + 
+			"3. WARNING in X.java (at line 5)\n" + 
+			"	public int[] doIt2(Collection<int[]> col) { return new int[0]; }\n" + 
+			"	             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method doIt2(Collection<int[]>) has the same erasure doIt2(Collection<E>) as another method in type X<Z>\n" + 
+			"----------\n" + 
+			"4. WARNING in X.java (at line 6)\n" + 
+			"	public int[][] doIt2(Collection<int[][]> col) { return new int[0][0]; }\n" + 
+			"	               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Method doIt2(Collection<int[][]>) has the same erasure doIt2(Collection<E>) as another method in type X<Z>\n" + 
+			"----------\n" + 
+			"5. ERROR in X.java (at line 7)\n" + 
+			"	Zork z;\n" + 
+			"	^^^^\n" + 
+			"Zork cannot be resolved to a type\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	public static int[] doIt(Collection<int[]> col) { return new int[1]; }\n" + 
+				"	                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method doIt(Collection<int[]>) has the same erasure doIt(Collection<E>) as another method in type X<Z>\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	public static int[][] doIt(Collection<int[][]> col) { return new int[0][0]; }\n" + 
+				"	                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method doIt(Collection<int[][]>) has the same erasure doIt(Collection<E>) as another method in type X<Z>\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 5)\n" + 
+				"	public int[] doIt2(Collection<int[]> col) { return new int[0]; }\n" + 
+				"	             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method doIt2(Collection<int[]>) has the same erasure doIt2(Collection<E>) as another method in type X<Z>\n" + 
+				"----------\n" + 
+				"4. ERROR in X.java (at line 6)\n" + 
+				"	public int[][] doIt2(Collection<int[][]> col) { return new int[0][0]; }\n" + 
+				"	               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Method doIt2(Collection<int[][]>) has the same erasure doIt2(Collection<E>) as another method in type X<Z>\n" + 
+				"----------\n" + 
+				"5. ERROR in X.java (at line 7)\n" + 
+				"	Zork z;\n" + 
+				"	^^^^\n" + 
+				"Zork cannot be resolved to a type\n" + 
+				"----------\n";
+	this.runNegativeTest(
+		new String[] {
+			"X.java",
+			"import java.util.Collection;\n" +
+			"class X<Z> {\n" +
+			"    public static int[] doIt(Collection<int[]> col) { return new int[1]; }\n" +
+			"	 public static int[][] doIt(Collection<int[][]> col) { return new int[0][0]; }\n" +
+			"	 public int[] doIt2(Collection<int[]> col) { return new int[0]; }\n" +
+			"	 public int[][] doIt2(Collection<int[][]> col) { return new int[0][0]; }\n" +
+			"	 Zork z;\n" +
+			"}\n" +
+			"class ChildX<Z> extends X<Z>{}\n"
+		},
+		output);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=317719
+public void testBug317719h() throws Exception {
+	String output = this.complianceLevel == ClassFileConstants.JDK1_6 ?
+			"----------\n" + 
+			"1. WARNING in Test.java (at line 3)\n" + 
+			"	public class Test<Key, Value> extends LinkedHashMap<Key, Collection<Value>> {\n" + 
+			"	             ^^^^\n" + 
+			"The serializable class Test does not declare a static final serialVersionUID field of type long\n" + 
+			"----------\n" + 
+			"2. WARNING in Test.java (at line 4)\n" + 
+			"	public Collection<Value> put(Key k, Value v) { return null; }\n" + 
+			"	                         ^^^^^^^^^^^^^^^^^^^\n" + 
+			"Name clash: The method put(Key, Value) of type Test<Key,Value> has the same erasure as put(K, V) of type HashMap<K,V> but does not override it\n" + 
+			"----------\n" + 
+			"3. WARNING in Test.java (at line 5)\n" + 
+			"	public Collection<Value> get(Key k) { return null; }\n" + 
+			"	                         ^^^^^^^^^^\n" + 
+			"Name clash: The method get(Key) of type Test<Key,Value> has the same erasure as get(Object) of type LinkedHashMap<K,V> but does not override it\n" + 
+			"----------\n" + 
+			"4. ERROR in Test.java (at line 6)\n" + 
+			"	Zork z;\n" + 
+			"	^^^^\n" + 
+			"Zork cannot be resolved to a type\n" + 
+			"----------\n":
+				"----------\n" + 
+				"1. WARNING in Test.java (at line 3)\n" + 
+				"	public class Test<Key, Value> extends LinkedHashMap<Key, Collection<Value>> {\n" + 
+				"	             ^^^^\n" + 
+				"The serializable class Test does not declare a static final serialVersionUID field of type long\n" + 
+				"----------\n" + 
+				"2. ERROR in Test.java (at line 4)\n" + 
+				"	public Collection<Value> put(Key k, Value v) { return null; }\n" + 
+				"	                         ^^^^^^^^^^^^^^^^^^^\n" + 
+				"Name clash: The method put(Key, Value) of type Test<Key,Value> has the same erasure as put(K, V) of type HashMap<K,V> but does not override it\n" + 
+				"----------\n" + 
+				"3. ERROR in Test.java (at line 5)\n" + 
+				"	public Collection<Value> get(Key k) { return null; }\n" + 
+				"	                         ^^^^^^^^^^\n" + 
+				"Name clash: The method get(Key) of type Test<Key,Value> has the same erasure as get(Object) of type LinkedHashMap<K,V> but does not override it\n" + 
+				"----------\n" + 
+				"4. ERROR in Test.java (at line 6)\n" + 
+				"	Zork z;\n" + 
+				"	^^^^\n" + 
+				"Zork cannot be resolved to a type\n" + 
+				"----------\n";
+	this.runNegativeTest(
+		new String[] {
+			"Test.java",
+			"import java.util.Collection;\n" +
+			"import java.util.LinkedHashMap;\n" +
+			"public class Test<Key, Value> extends LinkedHashMap<Key, Collection<Value>> {\n" +
+			"    public Collection<Value> put(Key k, Value v) { return null; }\n" +
+			"	 public Collection<Value> get(Key k) { return null; }\n" +
+			"	 Zork z;\n" +
+			"}\n"
+		},
+		output);
+}
+public void test345949a() throws Exception {
+	if (new CompilerOptions(getCompilerOptions()).sourceLevel < ClassFileConstants.JDK1_7) return;
+	this.runNegativeTest(
+		new String[] {
+			"Sub.java",
+			"class A<T> {}\n" +
+			"class Super {\n" +
+			"    public static void foo(A<Number> p) {}\n" +
+			"}\n" +
+			"public class Sub extends Super {\n" +
+			"	 public static void foo(A<Integer> p) {}\n" +
+			"}\n"
+		},
+		"----------\n" + 
+		"1. ERROR in Sub.java (at line 6)\n" + 
+		"	public static void foo(A<Integer> p) {}\n" + 
+		"	                   ^^^^^^^^^^^^^^^^^\n" + 
+		"Name clash: The method foo(A<Integer>) of type Sub has the same erasure as foo(A<Number>) of type Super but does not hide it\n" + 
+		"----------\n");
+}
 }
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullReferenceTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullReferenceTest.java
index bcef1ea..f3355b4 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullReferenceTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullReferenceTest.java
@@ -17,6 +17,7 @@
  *     						bug 338303 - Warning about Redundant assignment conflicts with definite assignment
  *     						bug 336428 - [compiler][null] bogus warning "redundant null check" in condition of do {} while() loop
  * 							bug 324178 - [null] ConditionalExpression.nullStatus(..) doesn't take into account the analysis of condition itself
+ * 							bug 354554 - [null] conditional with redundant condition yields weak error message
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.compiler.regression;
 
@@ -14900,4 +14901,49 @@
 			"----------\n");
 	}
 }
+// Bug 354554 - [null] conditional with redundant condition yields weak error message
+public void testBug354554() {
+	this.runNegativeTest(
+		new String[] {
+			"Bug354554.java",
+			"public class Bug354554{\n" +
+			"    void foo() {\n" +
+			"        Object u = new Object();\n" +
+			"        Object r = (u == null ? u : null);\n" + // condition is always false - should not spoil subsequent null-analysis
+			"        System.out.println(r.toString());\n" +  // should strongly complain: r is definitely null
+			"    }\n" +
+			"}\n"
+		},
+		"----------\n" + 
+		"1. ERROR in Bug354554.java (at line 4)\n" + 
+		"	Object r = (u == null ? u : null);\n" + 
+		"	            ^\n" + 
+		"Null comparison always yields false: The variable u cannot be null at this location\n" + 
+		"----------\n" + 
+		"2. ERROR in Bug354554.java (at line 5)\n" + 
+		"	System.out.println(r.toString());\n" + 
+		"	                   ^\n" + 
+		"Null pointer access: The variable r can only be null at this location\n" + 
+		"----------\n");
+}
+//Bug 354554 - [null] conditional with redundant condition yields weak error message
+public void testBug354554b() {
+	this.runNegativeTest(
+		new String[] {
+			"Bug354554.java",
+			"public class Bug354554{\n" +
+			"    void foo() {\n" +
+			"        Object u = new Object();\n" +
+			"        Object r = (u != null ? u : null);\n" + // condition is always true - should not spoil subsequent null-analysis
+			"        System.out.println(r.toString());\n" +  // don't complain: r is definitely non-null
+			"    }\n" +
+			"}\n"
+		},
+		"----------\n" + 
+		"1. ERROR in Bug354554.java (at line 4)\n" + 
+		"	Object r = (u != null ? u : null);\n" + 
+		"	            ^\n" + 
+		"Redundant null check: The variable u cannot be null at this location\n" + 
+		"----------\n");
+}
 }
\ No newline at end of file
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchTest.java
index fdc89a0..86eb169 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchTest.java
@@ -230,7 +230,7 @@
 			"1. ERROR in X.java (at line 4)\n" +
 			"	switch(this){\n" +
 			"	       ^^^^\n" +
-			"Cannot switch on a value of type X. Only convertible int values, strings or enum constants are permitted\n" +
+			"Cannot switch on a value of type X. Only convertible int values, strings or enum variables are permitted\n" +
 			"----------\n" +
 			"2. ERROR in X.java (at line 6)\n" +
 			"	Zork z;\n" +
@@ -252,7 +252,7 @@
 			"1. ERROR in X.java (at line 4)\n" +
 			"	switch(this){\n" +
 			"	       ^^^^\n" +
-			"Cannot switch on a value of type X. Only convertible int values or enum constants are permitted\n" +
+			"Cannot switch on a value of type X. Only convertible int values or enum variables are permitted\n" +
 			"----------\n" +
 			"2. ERROR in X.java (at line 6)\n" +
 			"	Zork z;\n" +
@@ -872,7 +872,7 @@
 			"1. ERROR in X.java (at line 3)\n" + 
 			"	switch(args[0]) {\n" + 
 			"	       ^^^^^^^\n" + 
-			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 			"----------\n" + 
 			"2. ERROR in X.java (at line 4)\n" + 
 			"	default: return args;\n" + 
@@ -952,7 +952,7 @@
 			"1. ERROR in X.java (at line 3)\n" + 
 			"	switch(args[0]) {\n" + 
 			"	       ^^^^^^^\n" + 
-			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 			"----------\n" + 
 			"2. ERROR in X.java (at line 12)\n" + 
 			"	case (boolean) 8: break;\n" + 
@@ -997,7 +997,7 @@
 			"1. ERROR in X.java (at line 6)\n" + 
 			"	switch (\"Sunday\") {\n" + 
 			"	        ^^^^^^^^\n" + 
-			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 			"----------\n";
 				
 		this.runNegativeTest(new String[] {
@@ -1084,7 +1084,7 @@
 			"1. ERROR in X.java (at line 3)\n" + 
 			"	switch(args[0]) {\n" + 
 			"	       ^^^^^^^\n" + 
-			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 			"----------\n" + 
 			"2. ERROR in X.java (at line 6)\n" + 
 			"	default: return args;\n" + 
@@ -1157,7 +1157,7 @@
 			"1. ERROR in X.java (at line 8)\n" + 
 			"	switch(args[0]) {\n" + 
 			"	       ^^^^^^^\n" + 
-			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 			"----------\n" + 
 			"2. ERROR in X.java (at line 15)\n" + 
 			"	case ifield: break;\n" + 
@@ -1237,7 +1237,7 @@
 			"1. ERROR in X.java (at line 6)\n" + 
 			"	switch(args[0]) {\n" + 
 			"	       ^^^^^^^\n" + 
-			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 			"----------\n";
 				
 		this.runNegativeTest(new String[] {
@@ -1279,7 +1279,7 @@
 			"1. ERROR in X.java (at line 6)\n" + 
 			"	switch(args[0]) {\n" + 
 			"	       ^^^^^^^\n" + 
-			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 			"----------\n";
 				
 		this.runNegativeTest(new String[] {
@@ -1346,7 +1346,7 @@
 			"1. ERROR in X.java (at line 6)\n" + 
 			"	switch(args[0]) {\n" + 
 			"	       ^^^^^^^\n" + 
-			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 			"----------\n";
 				
 		this.runNegativeTest(new String[] {
@@ -1409,7 +1409,7 @@
 			"1. ERROR in X.java (at line 8)\n" + 
 			"	switch(args[0]) {\n" + 
 			"	       ^^^^^^^\n" + 
-			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+			"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 			"----------\n" + 
 			"2. ERROR in X.java (at line 18)\n" + 
 			"	default: break;\n" + 
@@ -1450,7 +1450,7 @@
 		"1. ERROR in testDuplicateHashCode.java (at line 5)\n" + 
 		"	switch (dispatcher) {\n" + 
 		"	        ^^^^^^^^^^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n";
 	
 	String [] sourceFiles = 
@@ -1506,7 +1506,7 @@
 		"1. ERROR in testDuplicateHashCode.java (at line 5)\n" + 
 		"	switch (dispatcher) {\n" + 
 		"	        ^^^^^^^^^^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n";
 	
 	String [] sourceFiles = 
@@ -1569,27 +1569,27 @@
 		"1. ERROR in testSwitchOnNull.java (at line 13)\n" + 
 		"	switch (s) {\n" + 
 		"	        ^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n" + 
 		"2. ERROR in testSwitchOnNull.java (at line 23)\n" + 
 		"	switch ((String) null) {\n" + 
 		"	        ^^^^^^^^^^^^^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n" + 
 		"3. ERROR in testSwitchOnNull.java (at line 33)\n" + 
 		"	switch (someMethod()) {\n" + 
 		"	        ^^^^^^^^^^^^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n" + 
 		"4. ERROR in testSwitchOnNull.java (at line 40)\n" + 
 		"	switch (nullString) {\n" + 
 		"	        ^^^^^^^^^^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n" + 
 		"5. ERROR in testSwitchOnNull.java (at line 47)\n" + 
 		"	switch (someMethod()) {\n" + 
 		"	        ^^^^^^^^^^^^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n";
 	
 	String [] sourceFiles = 
@@ -1665,7 +1665,7 @@
 		"1. ERROR in testSideEffect.java (at line 11)\n" + 
 		"	switch(dispatcher()) {\n" + 
 		"	       ^^^^^^^^^^^^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n";
 	
 	String [] sourceFiles = 
@@ -1703,7 +1703,7 @@
 		"1. ERROR in testFallThrough.java (at line 11)\n" + 
 		"	switch(s = dispatcher()) {\n" + 
 		"	       ^^^^^^^^^^^^^^^^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n";
 	
 	String [] sourceFiles = 
@@ -1753,7 +1753,7 @@
 		"1. ERROR in testFallThrough.java (at line 11)\n" + 
 		"	switch(s = dispatcher()) {\n" + 
 		"	       ^^^^^^^^^^^^^^^^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n";
 	
 	String [] sourceFiles = 
@@ -1798,7 +1798,7 @@
 		"1. ERROR in testMarysLamb.java (at line 4)\n" + 
 		"	switch(s) {\n" + 
 		"	       ^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n";
 	
 	String [] sourceFiles = 
@@ -1826,7 +1826,7 @@
 		"1. ERROR in testBreakOut.java (at line 5)\n" + 
 		"	switch(s) {\n" + 
 		"	       ^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n";
 	
 	String [] sourceFiles = 
@@ -1864,17 +1864,17 @@
 		"1. ERROR in X.java (at line 6)\n" + 
 		"	switch (s) {\n" + 
 		"	        ^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n" + 
 		"2. ERROR in X.java (at line 35)\n" + 
 		"	switch (s) {\n" + 
 		"	        ^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n" + 
 		"3. ERROR in X.java (at line 51)\n" + 
 		"	switch (s) {\n" + 
 		"	        ^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n";
 	
 	String [] sourceFiles = 
@@ -1966,17 +1966,17 @@
 		"1. ERROR in X.java (at line 4)\n" + 
 		"	switch (s) {\n" + 
 		"	        ^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n" + 
 		"2. ERROR in X.java (at line 7)\n" + 
 		"	switch (s) {\n" + 
 		"	        ^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n" + 
 		"3. ERROR in X.java (at line 18)\n" + 
 		"	switch (s) {\n" + 
 		"	        ^\n" + 
-		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted\n" + 
+		"Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted\n" + 
 		"----------\n";
 	
 	String [] sourceFiles = 
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TryWithResourcesStatementTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TryWithResourcesStatementTest.java
index 98cc062..e178b04 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TryWithResourcesStatementTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TryWithResourcesStatementTest.java
@@ -18,7 +18,7 @@
 public class TryWithResourcesStatementTest extends AbstractRegressionTest {
 
 static {
-//	TESTS_NAMES = new String[] { "test053" };
+//	TESTS_NAMES = new String[] { "test055", "test055a" };
 //	TESTS_NUMBERS = new int[] { 50 };
 //	TESTS_RANGE = new int[] { 11, -1 };
 }
@@ -3337,6 +3337,49 @@
 		"Object.Integer cannot be resolved to a type\n" + 
 		"----------\n");
 }
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=353535 (verify error with try with resources)
+public void test055() {
+	this.runConformTest(
+		new String[] {
+			"X.java",
+			"import java.io.ByteArrayInputStream;\n" +
+			"import java.io.InputStream;\n" +
+			"public class X {\n" +
+			"public static void main(String[] args) throws Exception {\n" +
+			"  int b;\n" +
+			"  try (final InputStream in = new ByteArrayInputStream(new byte[] { 42 })) {\n" +
+			"    b = in.read();\n" +
+			"  }\n" +
+			"  System.out.println(\"Done\");\n" +
+			"}\n" +
+			"}\n",
+		},
+		"Done");
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=353535 (verify error with try with resources)
+public void test055a() {
+	this.runConformTest(
+		new String[] {
+			"X.java",
+			"public class X {\n" +
+			"    public static void main(String[] args) throws Throwable {\n" +
+			"        int tmp;\n" +
+			"        try (A a = null) {\n" +
+			"            try (A b = null) {\n" +
+			"                tmp = 0;\n" +
+			"            }\n" +
+			"        }\n" +
+			"        System.out.println(\"Done\");\n" +
+			"    }\n" +
+			"}\n" +
+			"class A implements AutoCloseable {\n" +
+			"    @Override\n" +
+			"    public void close() {\n" +
+			"    }\n" +
+			"}\n",
+		},
+		"Done");
+}
 public static Class testClass() {
 	return TryWithResourcesStatementTest.class;
 }