import com.google.common.reflect.AbstractInvocationHandler;
import com.google.common.reflect.Reflection;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import io.netty.util.concurrent.EventExecutor;
import io.netty.util.concurrent.GlobalEventExecutor;
import io.netty.util.concurrent.ImmediateEventExecutor;
public interface AutoCloseableEventExecutor extends EventExecutor, AutoCloseable {
+ static AutoCloseableEventExecutor globalEventExecutor() {
+ return CloseableEventExecutorMixin.createCloseableProxy(GlobalEventExecutor.INSTANCE);
+ }
+
+ static AutoCloseableEventExecutor immediateEventExecutor() {
+ return CloseableEventExecutorMixin.createCloseableProxy(ImmediateEventExecutor.INSTANCE);
+ }
- public static class CloseableEventExecutorMixin implements AutoCloseable {
+ class CloseableEventExecutorMixin implements AutoCloseable {
public static final int DEFAULT_SHUTDOWN_SECONDS = 1;
private final EventExecutor eventExecutor;
- public CloseableEventExecutorMixin(EventExecutor eventExecutor) {
+ public CloseableEventExecutorMixin(final EventExecutor eventExecutor) {
this.eventExecutor = eventExecutor;
}
@Override
+ @SuppressFBWarnings(value = "UC_USELESS_VOID_METHOD", justification = "False positive")
public void close() {
eventExecutor.shutdownGracefully(0, DEFAULT_SHUTDOWN_SECONDS, TimeUnit.SECONDS);
}
-
- private static AutoCloseableEventExecutor createCloseableProxy(final EventExecutor eventExecutor) {
- final CloseableEventExecutorMixin closeableGlobalEventExecutorMixin =
- new CloseableEventExecutorMixin(eventExecutor);
+ static AutoCloseableEventExecutor createCloseableProxy(final EventExecutor eventExecutor) {
+ final CloseableEventExecutorMixin closeableEventExecutor = new CloseableEventExecutorMixin(eventExecutor);
return Reflection.newProxy(AutoCloseableEventExecutor.class, new AbstractInvocationHandler() {
@Override
- protected Object handleInvocation(Object proxy, Method method, Object[] args) throws Throwable {
+ protected Object handleInvocation(final Object proxy, final Method method, final Object[] args)
+ throws Throwable {
if (method.getName().equals("close")) {
- closeableGlobalEventExecutorMixin.close();
+ closeableEventExecutor.close();
return null;
} else {
- return method.invoke(eventExecutor, args);
+ return method.invoke(closeableEventExecutor.eventExecutor, args);
}
}
});
}
-
- public static AutoCloseableEventExecutor globalEventExecutor() {
- return createCloseableProxy(GlobalEventExecutor.INSTANCE);
- }
-
- public static AutoCloseableEventExecutor immediateEventExecutor() {
- return createCloseableProxy(ImmediateEventExecutor.INSTANCE);
- }
}
-}
\ No newline at end of file
+}