Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTill Brychcy2018-03-08 20:34:25 +0000
committerTill Brychcy2018-03-15 20:39:58 +0000
commit13f8e0d6810326cbddc5c794a9027e0b0042f983 (patch)
tree93f4f04fd0d3ad5afd2e8da361fb834008037f01
parentb13fd6c177cd767abdb46e70f2a624a3ba8f1a78 (diff)
downloadeclipse.jdt.core-13f8e0d6810326cbddc5c794a9027e0b0042f983.tar.gz
eclipse.jdt.core-13f8e0d6810326cbddc5c794a9027e0b0042f983.tar.xz
eclipse.jdt.core-13f8e0d6810326cbddc5c794a9027e0b0042f983.zip
-rw-r--r--org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java75
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/AnnotatableTypeSystem.java2
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java2
3 files changed, 77 insertions, 2 deletions
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 2d10431d73..2bb35cfa37 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 @@ public void testBug520482() {
"", "", 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 f6dedd1cf8..7cc939fd01 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 @@ public class AnnotatableTypeSystem extends TypeSystem {
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 dbb4d4998f..cc1180e83a 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 @@ public class TypeSystem {
}
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;

Back to the top