+ private abstract static class DropMessages<T> {
+ private final Class<T> msgClass;
+
+ DropMessages(final Class<T> msgClass) {
+ this.msgClass = requireNonNull(msgClass);
+ }
+
+ final Class<T> getMsgClass() {
+ return msgClass;
+ }
+ }
+
+ public static class StartDropMessages<T> extends DropMessages<T> {
+ public StartDropMessages(final Class<T> msgClass) {
+ super(msgClass);
+ }
+ }
+
+ public static class StopDropMessages<T> extends DropMessages<T> {
+ public StopDropMessages(final Class<T> msgClass) {
+ super(msgClass);
+ }
+ }
+
+ private final Map<Class<?>, Predicate<?>> dropMessages = new ConcurrentHashMap<>();
+