import other.Blort; public class Main { static public boolean VERBOSE = false; static public void main(String[] args) { if (args.length > 0) { if (args[0].equals("--verbose")) { VERBOSE = true; } } System.out.println("Setting SecurityManager."); System.setSecurityManager(Enforcer.THE_ONE); System.out.println("Running tests."); accessStuff(); System.out.println("\nDone!"); } static public void report(Throwable t) { if (VERBOSE) { t.printStackTrace(System.out); } else { System.out.println(t); } } static public void accessStuff() { Class c = other.Blort.class; /* * Note: We don't use reflection to factor out these tests, * becuase reflection also calls into the SecurityManager, and * we don't want to conflate the calls nor assume too much * in general about what calls reflection will cause. */ System.out.println("\ngetFields A"); try { c.getFields(); } catch (Exception ex) { report(ex); } System.out.println("getFields B"); Enforcer.THE_ONE.denyNext(); try { c.getFields(); } catch (Exception ex) { report(ex); } System.out.println("\ngetDeclaredFields A"); try { c.getDeclaredFields(); } catch (Exception ex) { report(ex); } System.out.println("getDeclaredFields B"); Enforcer.THE_ONE.denyNext(); try { c.getDeclaredFields(); } catch (Exception ex) { report(ex); } System.out.println("\ngetMethods A"); try { c.getMethods(); } catch (Exception ex) { report(ex); } System.out.println("getMethods B"); Enforcer.THE_ONE.denyNext(); try { c.getMethods(); } catch (Exception ex) { report(ex); } System.out.println("\ngetDeclaredMethods A"); try { c.getDeclaredMethods(); } catch (Exception ex) { report(ex); } System.out.println("getDeclaredMethods B"); Enforcer.THE_ONE.denyNext(); try { c.getDeclaredMethods(); } catch (Exception ex) { report(ex); } System.out.println("\ngetConstructors A"); try { c.getConstructors(); } catch (Exception ex) { report(ex); } System.out.println("getConstructors B"); Enforcer.THE_ONE.denyNext(); try { c.getConstructors(); } catch (Exception ex) { report(ex); } System.out.println("\ngetDeclaredConstructors A"); try { c.getDeclaredConstructors(); } catch (Exception ex) { report(ex); } System.out.println("getDeclaredConstructors B"); Enforcer.THE_ONE.denyNext(); try { c.getDeclaredConstructors(); } catch (Exception ex) { report(ex); } System.out.println("\ngetClasses A"); try { c.getClasses(); } catch (Exception ex) { report(ex); } System.out.println("getClasses B"); Enforcer.THE_ONE.denyNext(); try { c.getClasses(); } catch (Exception ex) { report(ex); } System.out.println("\ngetDeclaredClasses A"); try { c.getDeclaredClasses(); } catch (Exception ex) { report(ex); } System.out.println("getDeclaredClasses B"); Enforcer.THE_ONE.denyNext(); try { c.getDeclaredClasses(); } catch (Exception ex) { report(ex); } } }