| /* | |
| * @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<? extends HasFoo> 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"); | |
| } | |
| } | |
| } |