Bug 532137 - Todays update produces compile error but javac compiles
fine

Change-Id: I027565881b29aac4d1593b694c6fd34c8deb49c8
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java
index 2d10431..2bb35cf 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java
@@ -6297,5 +6297,80 @@
 		"", "", null
 	);
 }
+public void testBug532137() {
+	runConformTest(
+		new String[] {
+			"subtypes/A.java",
+			"package subtypes;\n" +
+			"\n" +
+			"\n" +
+			"public abstract class A<R extends B> {\n" +
+			"\n" +
+			"	public A() {\n" +
+			"\n" +
+			"	}\n" +
+			"\n" +
+			"}\n" +
+			"",
+			"subtypes/B.java",
+			"package subtypes;\n" +
+			"\n" +
+			"public abstract class B  {\n" +
+			"\n" +
+			"	public B() {\n" +
+			"\n" +
+			"	}\n" +
+			"\n" +
+			"}\n" +
+			"",
+			"subtypes/GenericType.java",
+			"package subtypes;\n" +
+			"public abstract class GenericType<REQ extends A<RES>, RES extends B> {\n" +
+			"\n" +
+			"}\n" +
+			"",
+			"subtypes/TestBase.java",
+			"package subtypes;\n" +
+			"\n" +
+			"import java.util.Collections;\n" +
+			"import java.util.List;\n" +
+			"\n" +
+			"public abstract class TestBase {\n" +
+			"\n" +
+			"	@SuppressWarnings(\"rawtypes\")\n" +
+			"	protected List<Class<? extends GenericType>> giveMeAListOfTypes() {\n" +
+			"		return Collections.emptyList();\n" +
+			"	}\n" +
+			"\n" +
+			"}\n" +
+			"",
+		}
+	);
+	runNegativeTest(
+		new String[] {
+			"subtypes/TestImpl.java",
+			"package subtypes;\n" +
+			"\n" +
+			"import java.util.List;\n" +
+			"\n" +
+			"public class TestImpl extends TestBase{\n" +
+			"\n" +
+			"	@Override\n" +
+			"    protected List<Class<? extends GenericType>> giveMeAListOfTypes() {\n" +
+			"		return super.giveMeAListOfTypes();\n" +
+			"	}\n" +
+			"}\n" +
+			"",
+		},
+		"----------\n" + 
+		"1. WARNING in subtypes\\TestImpl.java (at line 8)\n" + 
+		"	protected List<Class<? extends GenericType>> giveMeAListOfTypes() {\n" + 
+		"	                               ^^^^^^^^^^^\n" + 
+		"GenericType is a raw type. References to generic type GenericType<REQ,RES> should be parameterized\n" + 
+		"----------\n",
+		null,
+		false
+	);
+}
 }
 
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/AnnotatableTypeSystem.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/AnnotatableTypeSystem.java
index f6dedd1..7cc939f 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/AnnotatableTypeSystem.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/AnnotatableTypeSystem.java
@@ -187,7 +187,7 @@
 			throw new IllegalStateException();
 		
 		WildcardBinding nakedType = null;
-		boolean useDerivedTypesOfBound = bound instanceof TypeVariableBinding || bound instanceof ParameterizedTypeBinding;
+		boolean useDerivedTypesOfBound = bound instanceof TypeVariableBinding || (bound instanceof ParameterizedTypeBinding && !(bound instanceof RawTypeBinding)) ;
 		TypeBinding[] derivedTypes = getDerivedTypes(useDerivedTypesOfBound ? bound : genericType);
 		for (int i = 0, length = derivedTypes.length; i < length; i++) {
 			TypeBinding derivedType = derivedTypes[i];
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java
index dbb4d49..cc1180e 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java
@@ -387,7 +387,7 @@
 		}
 		TypeBinding unannotatedBound = bound == null ? null : getUnannotatedType(bound);
 
-		boolean useDerivedTypesOfBound = unannotatedBound instanceof TypeVariableBinding || unannotatedBound instanceof ParameterizedTypeBinding;
+		boolean useDerivedTypesOfBound = unannotatedBound instanceof TypeVariableBinding || (unannotatedBound instanceof ParameterizedTypeBinding && !(unannotatedBound instanceof RawTypeBinding));
 		TypeBinding[] derivedTypes = this.types[useDerivedTypesOfBound ? unannotatedBound.id :unannotatedGenericType.id];  // by construction, cachedInfo != null now.
 
 		int i, length = derivedTypes.length;