view test/tools/javac/multicatch/Neg07.java @ 1014:a8f5cad1e6bb

7039822: Project Coin: add explicit tests for the lub of an exception parameter Reviewed-by: mcimadamore, jjg
author darcy
date Wed, 27 Apr 2011 17:03:24 -0700
parents
children
line wrap: on
line source

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