Skip to content

Commit 3b0d436

Browse files
Compilation disagreement between ECJ and javac with multiple generic
bounds + add test to DubiousOutcomeTest + let that suite opt-in to run.javac mode Relates to eclipse-jdt#4226
1 parent 71b9865 commit 3b0d436

2 files changed

Lines changed: 42 additions & 0 deletions

File tree

org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AbstractRegressionTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -848,6 +848,8 @@ public static class DubiousOutcome extends Excuse {
848848
JavacErrorsEclipseNone =
849849
new DubiousOutcome(MismatchType.JavacErrorsEclipseNone),
850850
JDK8319461 = // https://bugs.openjdk.org/browse/JDK-8319461
851+
new DubiousOutcome(MismatchType.JavacErrorsEclipseNone),
852+
JDK8364144 = // https://bugs.openjdk.org/browse/JDK-8364144
851853
new DubiousOutcome(MismatchType.JavacErrorsEclipseNone);
852854
}
853855
public static class EclipseHasABug extends Excuse {

org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/DubiousOutcomeTest.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,19 @@ public static Test suite() {
4444
return buildMinimalComplianceTestSuite(testClass(), F_1_8);
4545
}
4646

47+
// ========= OPT-IN to run.javac mode: ===========
48+
@Override
49+
protected void setUp() throws Exception {
50+
this.runJavacOptIn = true;
51+
super.setUp();
52+
}
53+
@Override
54+
protected void tearDown() throws Exception {
55+
super.tearDown();
56+
this.runJavacOptIn = false; // do it last, so super can still clean up
57+
}
58+
// =================================================
59+
4760
public void testGH1591() {
4861
// javac accepts
4962
Runner runner = new Runner();
@@ -253,4 +266,31 @@ public interface Factory<V, P extends WritableProperty<V>> { }
253266
runner.javacTestOptions = DubiousOutcome.JDK8319461;
254267
runner.runConformTest();
255268
}
269+
270+
public void testGH4226() {
271+
Runner runner = new Runner();
272+
runner.testFiles = new String[] {
273+
"NumberGenerator.java",
274+
"""
275+
interface Culprit {}
276+
277+
class EntityInfo<E extends NumberGenerator<?> & Culprit> {}
278+
279+
class NumberGenerator<N extends Number> implements NumberSupplier<N> {
280+
281+
@Override
282+
public N getNumber() {
283+
return null;
284+
}
285+
}
286+
287+
interface NumberSupplier<N extends Number> {
288+
289+
N getNumber();
290+
}
291+
"""
292+
};
293+
runner.javacTestOptions = DubiousOutcome.JDK8364144;
294+
runner.runConformTest();
295+
}
256296
}

0 commit comments

Comments
 (0)