fixed #39
This commit is contained in:
parent
6e4f838d10
commit
65fcf85829
|
@ -86,7 +86,7 @@ public class ReflectionUtils {
|
|||
}
|
||||
|
||||
Class[] superClassMethodParameters = superclassMethod.getParameterTypes();
|
||||
Class[] subClassMethodParameters = superclassMethod.getParameterTypes();
|
||||
Class[] subClassMethodParameters = subclassMethod.getParameterTypes();
|
||||
// method must specify the same number of parameters
|
||||
//the parameters must occur in the exact same order
|
||||
for (int i = 0; i < subClassMethodParameters.length; i++) {
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
package net.engio.mbassy.listener;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
* @author bennidi
|
||||
|
@ -11,6 +8,7 @@ import java.lang.annotation.Target;
|
|||
*/
|
||||
@Retention(value = RetentionPolicy.RUNTIME)
|
||||
@Target(value = {ElementType.TYPE})
|
||||
@Inherited
|
||||
public @interface Listener {
|
||||
|
||||
/**
|
||||
|
|
|
@ -180,7 +180,21 @@ public class SubscriptionManagerTest extends AssertSupport {
|
|||
assertEquals(InstancesPerListener, sub.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOverloadedMessageHandlers(){
|
||||
ListenerFactory listeners = listeners(
|
||||
Overloading.ListenerBase.class,
|
||||
Overloading.ListenerSub.class);
|
||||
|
||||
SubscriptionManager subscriptionManager = new SubscriptionManager(new MetadataReader(), new SubscriptionFactory());
|
||||
ConcurrentExecutor.runConcurrent(TestUtil.subscriber(subscriptionManager, listeners), ConcurrentUnits);
|
||||
|
||||
SubscriptionValidator expectedSubscriptions = new SubscriptionValidator(listeners)
|
||||
.listener(Overloading.ListenerBase.class).handles(Overloading.TestMessageA.class, Overloading.TestMessageA.class)
|
||||
.listener(Overloading.ListenerSub.class).handles(Overloading.TestMessageA.class, Overloading.TestMessageA.class, Overloading.TestMessageB.class);
|
||||
|
||||
runTestWith(listeners, expectedSubscriptions);
|
||||
}
|
||||
|
||||
private ListenerFactory listeners(Class ...listeners){
|
||||
ListenerFactory factory = new ListenerFactory();
|
||||
|
|
|
@ -15,8 +15,7 @@ public class SubscriptionValidator extends AssertSupport{
|
|||
|
||||
private List<ValidationEntry> validations = new LinkedList<ValidationEntry>();
|
||||
private Set<Class> messageTypes = new HashSet<Class>();
|
||||
private Set<Class> subscribers = new HashSet<Class>();
|
||||
private ListenerFactory subscribedListener;
|
||||
private ListenerFactory subscribedListener; // the subscribed listeners are used to assert the size of the subscriptions
|
||||
|
||||
public SubscriptionValidator(ListenerFactory subscribedListener) {
|
||||
this.subscribedListener = subscribedListener;
|
||||
|
@ -29,7 +28,6 @@ public class SubscriptionValidator extends AssertSupport{
|
|||
private SubscriptionValidator expect(Class subscriber, Class messageType){
|
||||
validations.add(new ValidationEntry(messageType, subscriber));
|
||||
messageTypes.add(messageType);
|
||||
subscribers.add(subscriber);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -73,14 +71,7 @@ public class SubscriptionValidator extends AssertSupport{
|
|||
};
|
||||
}
|
||||
|
||||
private IPredicate<ValidationEntry> EntriesBySubscriberType(final Class subscriberType){
|
||||
return new IPredicate<ValidationEntry>() {
|
||||
@Override
|
||||
public boolean apply(ValidationEntry target) {
|
||||
return target.subscriber.equals(subscriberType);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public class Expectation{
|
||||
|
||||
|
|
49
src/test/java/net/engio/mbassy/listeners/Overloading.java
Normal file
49
src/test/java/net/engio/mbassy/listeners/Overloading.java
Normal file
|
@ -0,0 +1,49 @@
|
|||
package net.engio.mbassy.listeners;
|
||||
|
||||
import net.engio.mbassy.listener.Handler;
|
||||
import net.engio.mbassy.listener.Listener;
|
||||
import net.engio.mbassy.listener.References;
|
||||
import net.engio.mbassy.messages.AbstractMessage;
|
||||
|
||||
/**
|
||||
* Created with IntelliJ IDEA.
|
||||
* User: benjamin
|
||||
* Date: 7/11/13
|
||||
* Time: 10:11 AM
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
public class Overloading {
|
||||
|
||||
public static class TestMessageA extends AbstractMessage {}
|
||||
|
||||
public static class TestMessageB extends AbstractMessage {}
|
||||
|
||||
public static class ListenerSub extends ListenerBase {
|
||||
|
||||
@Handler
|
||||
public void handleEvent(TestMessageB event) {
|
||||
event.handled(this.getClass());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Listener(references = References.Strong)
|
||||
public static class ListenerBase {
|
||||
|
||||
|
||||
/**
|
||||
* (!) If this method is removed, NO event handler will be called.
|
||||
*/
|
||||
@Handler
|
||||
public void handleEventWithNonOverloadedMethodName(TestMessageA event) {
|
||||
event.handled(this.getClass());
|
||||
}
|
||||
|
||||
@Handler
|
||||
public void handleEvent(TestMessageA event) {
|
||||
event.handled(this.getClass());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
package net.engio.mbassy.messages;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author bennidi
|
||||
* Date: 11/22/12
|
||||
*/
|
||||
public class TestMessage2 {
|
||||
|
||||
public AtomicInteger counter = new AtomicInteger();
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user