--- /dev/null 2011-04-24 02:13:47.147283599 -0700 +++ new/test/tools/javac/multicatch/Neg07.java 2011-04-26 18:43:37.000000000 -0700 @@ -0,0 +1,50 @@ +/* + * @test /nodynamiccopyright/ + * @bug 7039822 + * @summary Verify typing of lub of exception parameter w.r.t getClass + * @author Joseph D. Darcy + * @compile/fail/ref=Neg07.out -XDrawDiagnostics Neg07.java + */ + +public class Neg07 { + private static void test(int i) { + try { + thrower(i); + } catch (SonException | DaughterException e) { + Class clazz2 = e.getClass(); // Rejected! + HasFoo m = e; + e.foo(); + } + } + + private static interface HasFoo { + void foo(); + } + + static void thrower(int i) throws SonException, DaughterException { + if (i == 0) + throw new SonException(); + else + throw new DaughterException(); + } + + private static class ParentException extends RuntimeException {} + + private static class SonException + extends ParentException + implements HasFoo { + + public void foo() { + System.out.println("SonException.foo"); + } + } + + private static class DaughterException + extends ParentException + implements HasFoo { + + public void foo() { + System.out.println("DaughterException.foo"); + } + } +}