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