diff options
author | Till Brychcy | 2018-03-08 20:34:25 +0000 |
---|---|---|
committer | Till Brychcy | 2018-03-15 20:39:58 +0000 |
commit | 13f8e0d6810326cbddc5c794a9027e0b0042f983 (patch) | |
tree | 93f4f04fd0d3ad5afd2e8da361fb834008037f01 | |
parent | b13fd6c177cd767abdb46e70f2a624a3ba8f1a78 (diff) | |
download | eclipse.jdt.core-13f8e0d6810326cbddc5c794a9027e0b0042f983.tar.gz eclipse.jdt.core-13f8e0d6810326cbddc5c794a9027e0b0042f983.tar.xz eclipse.jdt.core-13f8e0d6810326cbddc5c794a9027e0b0042f983.zip |
Bug 532137 - Todays update produces compile error but javac compilesI20180318-2000I20180317-1500I20180316-2000I20180316-0740I20180316-0730I20180316-0525I20180316-0510I20180316-0455I20180315-2000
fine
Change-Id: I027565881b29aac4d1593b694c6fd34c8deb49c8
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; |