final Object application = invoke(applicationClass, "getApplication");
invoke(application, "addApplicationListener", Proxy.newProxyInstance(
getCallerClass().getClassLoader(),
array(listenerClass),
new AbstractInvocationHandler() {
@Override
public final Object invoke(final Object proxy,
final Method method, final Object[] proxyMethodArguments) throws Throwable {
if (method.getName().equals(listenerMethodName) &&