diff options
| author | ssankaran | 2014-02-16 10:40:58 +0000 |
|---|---|---|
| committer | ssankaran | 2014-02-16 10:40:58 +0000 |
| commit | b1d084f45599e11d80665b306c9b3f617ba97f32 (patch) | |
| tree | 3f1d515f21d361928574be77358166120d48c1b6 | |
| parent | 0363c5b13c6d7bf3598bba760643aa0fb259248e (diff) | |
| download | eclipse.jdt.core-b1d084f45599e11d80665b306c9b3f617ba97f32.tar.gz eclipse.jdt.core-b1d084f45599e11d80665b306c9b3f617ba97f32.tar.xz eclipse.jdt.core-b1d084f45599e11d80665b306c9b3f617ba97f32.zip | |
Fixed Bug 428285 - [1.8][compiler] ECJ fails to recognize ? super Object
== { Object }
3 files changed, 26 insertions, 4 deletions
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 e8a8883b87..ba23d1f21e 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 @@ -11066,7 +11066,7 @@ public class GenericTypeTest extends AbstractComparableTest { "17. ERROR in X.java (at line 34)\n" + " target= value; // foo11 - wrong\n" + " ^^^^^\n" + - "Type mismatch: cannot convert from MX<capture#8-of ? super String> to MX<? super Object>\n" + + "Type mismatch: cannot convert from MX<capture#7-of ? super String> to MX<? super Object>\n" + "----------\n"); } // check param type equivalences 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 dedc6706cb..df74d965ae 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 @@ -4182,8 +4182,6 @@ public void test428071() { } // https://bugs.eclipse.org/bugs/show_bug.cgi?id=428019, [1.8][compiler] Type inference failures with nested generic invocation. public void test428019() { - if (this.complianceLevel == ClassFileConstants.JDK1_8) - return; runConformTest( new String[] { "X.java", @@ -4206,5 +4204,25 @@ public void test428019() { }, "put"); } +// https://bugs.eclipse.org/bugs/show_bug.cgi?id=428285, [1.8][compiler] ECJ fails to recognize ? super Object == { Object } +public void test428285() { + runConformTest( + new String[] { + "X.java", + "class Reference<T> {\n" + + " ReferenceQueue<? super T> queue;\n" + + "}\n" + + "class ReferenceQueue<T> {\n" + + "}\n" + + "public class X {\n" + + " public static void main(String args[]) {\n" + + " Reference<Object> r = new Reference<Object>();\n" + + " ReferenceQueue<Object> q = r.queue;\n" + + " System.out.println(\"OK\");\n" + + " }\n" + + "}\n" + }, + "OK"); +} } diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java index 4341f0706c..f78c127b09 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java @@ -133,7 +133,11 @@ public class ParameterizedTypeBinding extends ReferenceBinding implements Substi for (int i = 0; i < length; i++) { TypeBinding argument = originalArguments[i]; if (argument.kind() == Binding.WILDCARD_TYPE) { // no capture for intersection types - capturedArguments[i] = new CaptureBinding((WildcardBinding) argument, contextType, position, scope.compilationUnitScope().nextCaptureID()); + final WildcardBinding wildcard = (WildcardBinding) argument; + if (wildcard.boundKind == Wildcard.SUPER && wildcard.bound.id == TypeIds.T_JavaLangObject) + capturedArguments[i] = wildcard.bound; + else + capturedArguments[i] = new CaptureBinding(wildcard, contextType, position, scope.compilationUnitScope().nextCaptureID()); } else { capturedArguments[i] = argument; } |
