You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Dan Oxlade (JIRA)" <ji...@apache.org> on 2007/06/04 17:58:31 UTC

[jira] Updated: (WW-1964) AnnotationUtils.findRecursively should ignore annotated methods in the superclass that have been overridden

     [ 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 {@link 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 {@link Class} to inspect
	 * @param annotation the {@link Annotation}s to find
	 * @return A {@link Collection}&lt;{@link AnnotatedElement}&gt; containing all of the
	 *  method {@link AnnotatedElement}s matching the specified {@link 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.