This commit is contained in:
benjamin 2013-07-11 15:39:38 +02:00
parent 6e4f838d10
commit 65fcf85829
6 changed files with 68 additions and 31 deletions

View File

@ -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++) {

View File

@ -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 {
/**

View File

@ -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();

View File

@ -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{

View 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());
}
}
}

View File

@ -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();
}