diff --git a/src/main/java/net/engio/mbassy/bus/AbstractMessageBus.java b/src/main/java/net/engio/mbassy/bus/AbstractMessageBus.java index d6e7267..7a0e439 100644 --- a/src/main/java/net/engio/mbassy/bus/AbstractMessageBus.java +++ b/src/main/java/net/engio/mbassy/bus/AbstractMessageBus.java @@ -43,15 +43,17 @@ public abstract class AbstractMessageBus // all subscriptions per message type // this is the primary list for dispatching a specific message // write access is synchronized and happens very infrequently - private final Map> subscriptionsPerMessage = new HashMap(50); + private final Map> subscriptionsPerMessage + = new HashMap>(50); // all subscriptions per messageHandler type // this list provides fast access for subscribing and unsubscribing // write access is synchronized and happens very infrequently - private final Map> subscriptionsPerListener = new HashMap(50); + private final Map> subscriptionsPerListener + = new HashMap>(50); // remember already processed classes that do not contain any listeners - private final Collection nonListeners = new HashSet(); + private final Collection nonListeners = new HashSet(); // this handler will receive all errors that occur during message dispatch or message handling private final List errorHandlers = new CopyOnWriteArrayList(); diff --git a/src/main/java/net/engio/mbassy/bus/MessagePublication.java b/src/main/java/net/engio/mbassy/bus/MessagePublication.java index 6f4819a..d126e87 100644 --- a/src/main/java/net/engio/mbassy/bus/MessagePublication.java +++ b/src/main/java/net/engio/mbassy/bus/MessagePublication.java @@ -103,7 +103,7 @@ public class MessagePublication { } private enum State { - Initial, Scheduled, Running, Finished, Error; + Initial, Scheduled, Running, Finished, Error } } diff --git a/src/main/java/net/engio/mbassy/common/ConcurrentSet.java b/src/main/java/net/engio/mbassy/common/ConcurrentSet.java index 7288d35..c696751 100644 --- a/src/main/java/net/engio/mbassy/common/ConcurrentSet.java +++ b/src/main/java/net/engio/mbassy/common/ConcurrentSet.java @@ -22,15 +22,16 @@ import java.util.WeakHashMap; */ public class ConcurrentSet implements Iterable { + // Internal state + private final Object lock = new Object(); private WeakHashMap> entries = new WeakHashMap>(); // maintain a map of entries for O(log n) lookup - private Entry head; // reference to the first element public ConcurrentSet add(T element) { if (element == null || entries.containsKey(element)) { return this; } - synchronized (this) { + synchronized (lock) { insert(element); } return this; @@ -58,7 +59,7 @@ public class ConcurrentSet implements Iterable { } public ConcurrentSet addAll(Iterable elements) { - synchronized (this) { + synchronized (lock) { for (T element : elements) { if (element == null || entries.containsKey(element)) { return this; @@ -74,7 +75,7 @@ public class ConcurrentSet implements Iterable { if (!entries.containsKey(element)) { return false; } - synchronized (this) { + synchronized (lock) { Entry listelement = entries.get(element); if (listelement == null) { return false; //removed by other thread diff --git a/src/main/java/net/engio/mbassy/common/ReflectionUtils.java b/src/main/java/net/engio/mbassy/common/ReflectionUtils.java index 6a48008..bf242c2 100644 --- a/src/main/java/net/engio/mbassy/common/ReflectionUtils.java +++ b/src/main/java/net/engio/mbassy/common/ReflectionUtils.java @@ -91,9 +91,6 @@ public class ReflectionUtils { Class[] superClassMethodParameters = superclassMethod.getParameterTypes(); Class[] subClassMethodParameters = superclassMethod.getParameterTypes(); // method must specify the same number of parameters - if (subClassMethodParameters.length != subClassMethodParameters.length) { - return false; - } //the parameters must occur in the exact same order for (int i = 0; i < subClassMethodParameters.length; i++) { if (!superClassMethodParameters[i].equals(subClassMethodParameters[i])) { diff --git a/src/main/java/net/engio/mbassy/dispatch/FilteredMessageDispatcher.java b/src/main/java/net/engio/mbassy/dispatch/FilteredMessageDispatcher.java index e47e50e..40fe10a 100644 --- a/src/main/java/net/engio/mbassy/dispatch/FilteredMessageDispatcher.java +++ b/src/main/java/net/engio/mbassy/dispatch/FilteredMessageDispatcher.java @@ -26,8 +26,8 @@ public class FilteredMessageDispatcher extends DelegatingMessageDispatcher { if (filter == null) { return true; } else { - for (int i = 0; i < filter.length; i++) { - if (!filter[i].accepts(message, getContext().getHandlerMetadata())) { + for (IMessageFilter aFilter : filter) { + if (!aFilter.accepts(message, getContext().getHandlerMetadata())) { return false; } } diff --git a/src/main/java/net/engio/mbassy/listener/MessageHandlerMetadata.java b/src/main/java/net/engio/mbassy/listener/MessageHandlerMetadata.java index 8871fcc..2614b03 100644 --- a/src/main/java/net/engio/mbassy/listener/MessageHandlerMetadata.java +++ b/src/main/java/net/engio/mbassy/listener/MessageHandlerMetadata.java @@ -1,6 +1,7 @@ package net.engio.mbassy.listener; import java.lang.reflect.Method; +import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -33,8 +34,7 @@ public class MessageHandlerMetadata { this.envelope = handler.getAnnotation(Enveloped.class); this.acceptsSubtypes = !handlerConfig.rejectSubtypes(); if (this.envelope != null) { - for (Class messageType : envelope.messages()) - handledMessages.add(messageType); + Collections.addAll(handledMessages, envelope.messages()); } else { handledMessages.add(handler.getParameterTypes()[0]); } diff --git a/src/main/java/net/engio/mbassy/listener/MessageListenerMetadata.java b/src/main/java/net/engio/mbassy/listener/MessageListenerMetadata.java index b00c647..bb026a7 100644 --- a/src/main/java/net/engio/mbassy/listener/MessageListenerMetadata.java +++ b/src/main/java/net/engio/mbassy/listener/MessageListenerMetadata.java @@ -15,7 +15,7 @@ import java.util.List; public class MessageListenerMetadata { - public static final IPredicate ForMessage(final Class messageType) { + public static IPredicate ForMessage(final Class messageType) { return new IPredicate() { @Override public boolean apply(MessageHandlerMetadata target) { diff --git a/src/main/java/net/engio/mbassy/subscription/MessageEnvelope.java b/src/main/java/net/engio/mbassy/subscription/MessageEnvelope.java index 6f09c43..cf48928 100644 --- a/src/main/java/net/engio/mbassy/subscription/MessageEnvelope.java +++ b/src/main/java/net/engio/mbassy/subscription/MessageEnvelope.java @@ -1,7 +1,5 @@ package net.engio.mbassy.subscription; -import java.sql.Timestamp; - /** * A message envelope is used to wrap messages of arbitrary type such that a handler * my receive messages of different types. diff --git a/src/test/java/net/engio/mbassy/ConcurrentSetTest.java b/src/test/java/net/engio/mbassy/ConcurrentSetTest.java index 408c409..ae1cb97 100644 --- a/src/test/java/net/engio/mbassy/ConcurrentSetTest.java +++ b/src/test/java/net/engio/mbassy/ConcurrentSetTest.java @@ -32,9 +32,11 @@ public class ConcurrentSetTest extends UnitTest { @Ignore("Currently fails when building as a suite with JDK 1.7.0_15 and Maven 3.0.5 on a Mac") @Test public void testIteratorCleanup() { + + // Assemble final HashSet persistingCandidates = new HashSet(); final ConcurrentSet testSet = new ConcurrentSet(); - Random rand = new Random(); + final Random rand = new Random(); for (int i = 0; i < numberOfElements; i++) { Object candidate = new Object(); @@ -100,8 +102,6 @@ public class ConcurrentSetTest extends UnitTest { for (Object uniqueObject : distinct) { assertTrue(testSet.contains(uniqueObject)); } - - } @Test diff --git a/src/test/java/net/engio/mbassy/bus/ListenerSubscriptionTest.java b/src/test/java/net/engio/mbassy/bus/ListenerSubscriptionTest.java index 7b7830c..842a39a 100644 --- a/src/test/java/net/engio/mbassy/bus/ListenerSubscriptionTest.java +++ b/src/test/java/net/engio/mbassy/bus/ListenerSubscriptionTest.java @@ -1,14 +1,16 @@ package net.engio.mbassy.bus; -import net.engio.mbassy.bus.BusConfiguration; -import net.engio.mbassy.bus.MBassador; import net.engio.mbassy.common.MessageBusTest; -import net.engio.mbassy.events.SubTestMessage; -import org.junit.Test; import net.engio.mbassy.common.TestUtil; +import net.engio.mbassy.events.SubTestMessage; import net.engio.mbassy.events.TestMessage; -import net.engio.mbassy.listeners.*; +import net.engio.mbassy.listeners.EventingTestBean; +import net.engio.mbassy.listeners.EventingTestBean2; +import net.engio.mbassy.listeners.EventingTestBean3; +import net.engio.mbassy.listeners.ListenerFactory; +import net.engio.mbassy.listeners.NonListeningBean; import net.engio.mbassy.subscription.Subscription; +import org.junit.Test; import java.util.Collection; import java.util.LinkedList;