diff options
2 files changed, 18 insertions, 1 deletions
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java index 120b628ff5..8e40010f9d 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java @@ -9455,4 +9455,21 @@ public void testBug508834_comment0() { }; runner.runConformTest(); } + public void testBug543128() { + Runner runner = new Runner(); + runner.testFiles = new String[] { + "Bug543128.java", + "public class Bug543128 {\n" + + " static class A {}\n" + + " static class B<F, S extends A> extends A {}\n" + + " static class C<G extends A> {}\n" + + " \n" + + " public static <H extends A, T> void test(C<? super B<? super T, ? super H>> test)\n" + + " {\n" + + " test(test); // fails compilation (incorrect)\n" + + " }\n" + + "}\n" + }; + runner.runConformTest(); + } } diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ConstraintTypeFormula.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ConstraintTypeFormula.java index 63cfb33a63..830ca76692 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ConstraintTypeFormula.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ConstraintTypeFormula.java @@ -335,7 +335,7 @@ class ConstraintTypeFormula extends ConstraintFormula { } if (superCandidate instanceof CaptureBinding) { CaptureBinding capture = (CaptureBinding) superCandidate; - if (capture.lowerBound != null && (capture.firstBound == null || capture.firstBound.id == TypeIds.T_JavaLangObject)) + if (capture.lowerBound != null) return ConstraintTypeFormula.create(subCandidate, capture.lowerBound, SUBTYPE, this.isSoft); } return FALSE; |