Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package br.com.arbo.swinginsulation;
  
 
 final class InsulatedInvocationHandler implements InvocationHandler {
 
 	InsulatedInvocationHandler(final Object decoratedfinal Executor executor) {
 		this. = decorated;
 		this. = executor;
 	}
 
 	public Object invoke(final Object proxyfinal Method method,
 			final Object[] argsthrows Throwable {
 		if (..equals(method.getReturnType())
 				&& method.getExceptionTypes().length == 0) {
 			invokeLater(methodargs);
 			return null;
 		}
 		return invokeAndWait(methodargs);
 	}
 
 	}
 
 	private void invokeLater(final Method methodfinal Object[] args) {
 		final Runnable runnable = new Runnable() {
 
 			public void run() {
 				try {
 					invokeOnDecorated(methodargs);
 				} catch (final IllegalAccessException e) {
 				} catch (final InvocationTargetException e) {
 					final Throwable targetException = e.getTargetException();
 					dispatchUncaughtException(targetException);
 				}
 			}
 
 		};
 		execute(runnable);
 	}
 
 	private Object invokeAndWait(final Method methodfinal Object[] args)
 			throws Throwable {
 		final FutureTask<ObjectfutureTask = new FutureTask<Object>(
 				new Callable<Object>() {
 
 					public Object call() throws Exception {
 						return invokeOnDecorated(methodargs);
 					}
 
 				});
 		execute(futureTask);
 		try {
 			return futureTask.get();
 		} catch (final ExecutionException e) {
 			final Throwable cause = e.getCause();
 			if (cause instanceof InvocationTargetException) {
 				throw cause.getCause();
 			}
 			throw cause;
 		}
 	}
 
 	Object invokeOnDecorated(final Method methodfinal Object[] args)
 		return method.invoke(args);
 	}
 
 	void dispatchUncaughtException(final Throwable e) {
 		if ( != null) {
 					e);
 			return;
 		}
 		if (e instanceof RuntimeException) {
 			throw (RuntimeExceptione;
 		}
 		throw new RuntimeException(e);
 	}
 
 	private void execute(final Runnable runnable) {
 		.execute(runnable);
 	}
 
 	private final Object decorated;
 	private final Executor executor;
New to GrepCode? Check out our FAQ X