public class CompilerBug {

   public <T> T newInstance( Class<T> c ) throws InstantiationException, IllegalAccessException {
      return c.newInstance();
   }

   protected void protectedMethod() {}

   void packagePrivateMethod() {}

   private void isThisBuggy() throws InstantiationException, IllegalAccessException {
      CompilerBug c = getClass().newInstance();
      c.privateMethod();
      c.packagePrivateMethod();
      c.protectedMethod();

      getClass().newInstance().privateMethod();
      getClass().newInstance().packagePrivateMethod();
      getClass().newInstance().protectedMethod();
   }

   private void privateMethod() {}
}
