[ 
https://issues.apache.org/struts/browse/WW-1964?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dan Oxlade updated WW-1964:
---------------------------


the following seems more appropriate


        /**
         * For the given <code>Class</code> get a collection of the the [EMAIL 
PROTECTED] AnnotatedElement}s 
         * that match the given <code>annotation</code>s or if no 
<code>annotation</code>s are 
         * specified then return all of the annotated elements of the given 
<code>Class</code>. 
         * Includes only the method level annotations.
         * 
         * @param clazz The [EMAIL PROTECTED] Class} to inspect
         * @param annotation the [EMAIL PROTECTED] Annotation}s to find
         * @return A [EMAIL PROTECTED] Collection}&lt;[EMAIL PROTECTED] 
AnnotatedElement}&gt; containing all of the
         *  method [EMAIL PROTECTED] AnnotatedElement}s matching the specified 
[EMAIL PROTECTED] Annotation}s
         */
        public static final Collection<? extends AnnotatedElement> 
getAnnotatedMethods(Class clazz, Class<? extends Annotation>... annotation){
                Collection<AnnotatedElement> toReturn = new 
HashSet<AnnotatedElement>();
                
                for(Method m : clazz.getMethods()){
                        if( ArrayUtils.isNotEmpty(annotation) && 
isAnnotatedBy(m,annotation) ){
                                toReturn.add(m);
                        }else if( ArrayUtils.isEmpty(annotation) && 
ArrayUtils.isNotEmpty(m.getAnnotations())){
                                toReturn.add(m);
                        }
                }
                
                return toReturn;
        }

        /**
         * Varargs version of 
<code>AnnotatedElement.isAnnotationPresent()</code>
         * @see AnnotatedElement
         */
        public static final boolean isAnnotatedBy(AnnotatedElement 
annotatedElement, Class<? extends Annotation>... annotation) {
                if(ArrayUtils.isEmpty(annotation)) return false;
                
                for( Class<? extends Annotation> c : annotation ){
                        if( annotatedElement.isAnnotationPresent(c) ) return 
true;
                }
                
                return false;
        }

> AnnotationUtils.findRecursively should ignore annotated methods in the 
> superclass that have been overridden
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: WW-1964
>                 URL: https://issues.apache.org/struts/browse/WW-1964
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Actions
>    Affects Versions: 2.0.1
>         Environment: xp, Apache Tomcat/5.5.17, jvm 1.5.0_10-b03
>            Reporter: Dan Oxlade
>            Priority: Minor
>
> For a simple case I have written an action that has a method:
> @Overrides
> @BeforeResult
> addActionTargets(....
> Because this method is in the superclass and is also annotated BeforeResult 
> there, the method gets invoked twice.
> This does not seem appropriate. I've now removed the annotation from the 
> subclass but this is extremely counter intuitive IMO.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to