Author: kylem Date: Tue Jan 4 15:02:10 2005 New Revision: 124168 URL: http://svn.apache.org/viewcvs?view=rev&rev=124168 Log: Fix for BEEHIVE-152, related to @EventHandler annotation validation. There were two basic issues:
- Validation of the 'eventSet' attribute needs to search up the interface extension hierarchy. - Validation of the 'eventMethod' attribute needs to search up the EventSet interface extension hierarchy. Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlClient.java incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlClient.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlClient.java?view=diff&rev=124168&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlClient.java&r1=124167&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlClient.java&r2=124168 ============================================================================== --- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlClient.java (original) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlClient.java Tue Jan 4 15:02:10 2005 @@ -277,29 +277,44 @@ boolean found = false; String eventName = (String)handlerAnnot.getObjectValue("eventName"); AptMethod handlerMethod = new AptMethod(clientMethod, _env); - for (AptEvent controlEvent : eventSet.getEvents()) + + // + // Will start at the currrent event set and look up through any ones it + // extends to try and find a matching event + // + while (eventSet != null) { - if (controlEvent == null || - controlEvent.getName() == null || - !controlEvent.getName().equals(eventName)) - continue; + for (AptEvent controlEvent : eventSet.getEvents()) + { + if (controlEvent == null || + controlEvent.getName() == null || + !controlEvent.getName().equals(eventName)) + continue; - if ( controlEvent.getArgTypes() == null ) - continue; + if ( controlEvent.getArgTypes() == null ) + continue; - // - // BUGBUG: If the arguments are parameterized, then the event handler - // might declare a specific bound version of the type, so a direct - // comparison will fail. If parameterized, we don't validate. - // - if (controlEvent.hasParameterizedArguments() || - controlEvent.getArgTypes().equals(handlerMethod.getArgTypes())) - { - adaptor.addHandler(controlEvent, + // + // BUGBUG: If the arguments are parameterized, then the event handler + // might declare a specific bound version of the type, so a direct + // comparison will fail. If parameterized, we don't validate. + // + if (controlEvent.hasParameterizedArguments() || + controlEvent.getArgTypes().equals(handlerMethod.getArgTypes())) + { + adaptor.addHandler(controlEvent, new AptEventHandler(controlEvent, clientMethod, _env)); - found = true; - break; + found = true; + break; + } } + if (found) // outer loop too + break; + + // + // Look up on the super event set if not found at the current level + // + eventSet = eventSet.getSuperEventSet(); } if (!found) { Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java?view=diff&rev=124168&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java&r1=124167&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java&r2=124168 ============================================================================== --- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java (original) +++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java Tue Jan 4 15:02:10 2005 @@ -465,6 +465,10 @@ for (AptEventSet eventSet: getEventSets()) if (eventSet.getClassName().equals(name)) return eventSet; + + if (_superClass != null) + return _superClass.getEventSet(name); + return null; }
