Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorssankaran2014-02-16 10:40:58 +0000
committerssankaran2014-02-16 10:40:58 +0000
commitb1d084f45599e11d80665b306c9b3f617ba97f32 (patch)
tree3f1d515f21d361928574be77358166120d48c1b6
parent0363c5b13c6d7bf3598bba760643aa0fb259248e (diff)
downloadeclipse.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 }
-rw-r--r--org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java2
-rw-r--r--org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java22
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java6
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;
}

Back to the top