struts-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dan Oxlade (JIRA)" <j...@apache.org>
Subject [jira] Updated: (WW-1964) AnnotationUtils.findRecursively should ignore annotated methods in the superclass that have been overridden
Date Mon, 04 Jun 2007 15:58:31 GMT

     [ 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.


Mime
View raw message