Return-Path: X-Original-To: apmail-struts-commits-archive@minotaur.apache.org Delivered-To: apmail-struts-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 06E08DD42 for ; Thu, 6 Sep 2012 11:26:20 +0000 (UTC) Received: (qmail 30664 invoked by uid 500); 6 Sep 2012 11:26:19 -0000 Delivered-To: apmail-struts-commits-archive@struts.apache.org Received: (qmail 30228 invoked by uid 500); 6 Sep 2012 11:26:14 -0000 Mailing-List: contact commits-help@struts.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@struts.apache.org Delivered-To: mailing list commits@struts.apache.org Received: (qmail 30193 invoked by uid 99); 6 Sep 2012 11:26:13 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 06 Sep 2012 11:26:13 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,URIBL_PH_SURBL X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 06 Sep 2012 11:26:10 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id E7580238896F for ; Thu, 6 Sep 2012 11:25:27 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1381560 - in /struts/struts2/trunk: plugins/convention/src/main/java/org/apache/struts2/convention/ plugins/convention/src/main/java/org/apache/struts2/convention/annotation/ plugins/convention/src/test/java/org/apache/struts2/convention/a... Date: Thu, 06 Sep 2012 11:25:27 -0000 To: commits@struts.apache.org From: lukaszlenart@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120906112527.E7580238896F@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: lukaszlenart Date: Thu Sep 6 11:25:26 2012 New Revision: 1381560 URL: http://svn.apache.org/viewvc?rev=1381560&view=rev Log: WW-3874 merges AnnotationTools into AnnotationUtils Added: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/Dummy2Class.java struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/DummyClass.java struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/DummyClassExt.java struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/MyAnnotation.java struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/MyAnnotation2.java struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/package-info.java Removed: struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/AnnotationTools.java struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/annotation/AnnotationToolsTest.java Modified: struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionsServiceImpl.java struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultInterceptorMapBuilder.java struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/AnnotationUtils.java struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/AnnotationUtilsTest.java Modified: struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionsServiceImpl.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionsServiceImpl.java?rev=1381560&r1=1381559&r2=1381560&view=diff ============================================================================== --- struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionsServiceImpl.java (original) +++ struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionsServiceImpl.java Thu Sep 6 11:25:26 2012 @@ -25,8 +25,8 @@ import com.opensymphony.xwork2.config.en import com.opensymphony.xwork2.config.entities.PackageConfig; import com.opensymphony.xwork2.config.entities.ResultTypeConfig; import com.opensymphony.xwork2.inject.Inject; +import com.opensymphony.xwork2.util.AnnotationUtils; import com.opensymphony.xwork2.util.ClassLoaderUtil; -import org.apache.struts2.convention.annotation.AnnotationTools; import org.apache.struts2.convention.annotation.ResultPath; import java.util.HashMap; @@ -58,7 +58,7 @@ public class ConventionsServiceImpl impl */ public String determineResultPath(Class actionClass) { String localResultPath = resultPath; - ResultPath resultPathAnnotation = AnnotationTools.findAnnotation(actionClass, ResultPath.class); + ResultPath resultPathAnnotation = AnnotationUtils.findAnnotation(actionClass, ResultPath.class); if (resultPathAnnotation != null) { if (resultPathAnnotation.value().equals("") && resultPathAnnotation.property().equals("")) { throw new ConfigurationException("The ResultPath annotation must have either" + Modified: struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultInterceptorMapBuilder.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultInterceptorMapBuilder.java?rev=1381560&r1=1381559&r2=1381560&view=diff ============================================================================== --- struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultInterceptorMapBuilder.java (original) +++ struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultInterceptorMapBuilder.java Thu Sep 6 11:25:26 2012 @@ -20,19 +20,8 @@ */ package org.apache.struts2.convention; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.struts2.convention.annotation.Action; -import org.apache.struts2.convention.annotation.AnnotationTools; -import org.apache.struts2.convention.annotation.InterceptorRef; -import org.apache.struts2.convention.annotation.InterceptorRefs; - import com.opensymphony.xwork2.ObjectFactory; import com.opensymphony.xwork2.config.Configuration; -import com.opensymphony.xwork2.config.ConfigurationException; import com.opensymphony.xwork2.config.entities.InterceptorMapping; import com.opensymphony.xwork2.config.entities.PackageConfig; import com.opensymphony.xwork2.config.providers.InterceptorBuilder; @@ -40,6 +29,13 @@ import com.opensymphony.xwork2.inject.In import com.opensymphony.xwork2.util.AnnotationUtils; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.InterceptorRef; +import org.apache.struts2.convention.annotation.InterceptorRefs; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; /** *

@@ -58,12 +54,12 @@ public class DefaultInterceptorMapBuilde 10); //from @InterceptorRefs annotation - InterceptorRefs interceptorRefs = AnnotationTools.findAnnotation(actionClass, InterceptorRefs.class); + InterceptorRefs interceptorRefs = AnnotationUtils.findAnnotation(actionClass, InterceptorRefs.class); if (interceptorRefs != null) interceptorList.addAll(build(interceptorRefs.value(), actionName, builder)); //from @InterceptorRef annotation - InterceptorRef interceptorRef = AnnotationTools.findAnnotation(actionClass, InterceptorRef.class); + InterceptorRef interceptorRef = AnnotationUtils.findAnnotation(actionClass, InterceptorRef.class); if (interceptorRef != null) interceptorList.addAll(build(new InterceptorRef[] {interceptorRef}, actionName, builder)); Modified: struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java?rev=1381560&r1=1381559&r2=1381560&view=diff ============================================================================== --- struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java (original) +++ struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java Thu Sep 6 11:25:26 2012 @@ -33,6 +33,7 @@ import com.opensymphony.xwork2.config.en import com.opensymphony.xwork2.config.entities.ResultConfig; import com.opensymphony.xwork2.inject.Container; import com.opensymphony.xwork2.inject.Inject; +import com.opensymphony.xwork2.util.AnnotationUtils; import com.opensymphony.xwork2.util.TextParseUtil; import com.opensymphony.xwork2.util.WildcardHelper; import com.opensymphony.xwork2.util.classloader.ReloadingClassLoader; @@ -50,7 +51,6 @@ import org.apache.struts2.StrutsConstant import org.apache.struts2.StrutsException; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Actions; -import org.apache.struts2.convention.annotation.AnnotationTools; import org.apache.struts2.convention.annotation.DefaultInterceptorRef; import org.apache.struts2.convention.annotation.ExceptionMapping; import org.apache.struts2.convention.annotation.ExceptionMappings; @@ -753,7 +753,7 @@ public class PackageBasedActionConfigBui // Check if there is a class or package level annotation for the namespace //single namespace - Namespace namespaceAnnotation = AnnotationTools.findAnnotation(actionClass, Namespace.class); + Namespace namespaceAnnotation = AnnotationUtils.findAnnotation(actionClass, Namespace.class); if (namespaceAnnotation != null) { if (LOG.isTraceEnabled()) { LOG.trace("Using non-default action namespace from Namespace annotation of [#0]", namespaceAnnotation.value()); @@ -763,7 +763,7 @@ public class PackageBasedActionConfigBui } //multiple annotations - Namespaces namespacesAnnotation = AnnotationTools.findAnnotation(actionClass, Namespaces.class); + Namespaces namespacesAnnotation = AnnotationUtils.findAnnotation(actionClass, Namespaces.class); if (namespacesAnnotation != null) { if (LOG.isTraceEnabled()) { StringBuilder sb = new StringBuilder(); @@ -979,7 +979,7 @@ public class PackageBasedActionConfigBui } // Next grab the parent annotation from the class - ParentPackage parent = AnnotationTools.findAnnotation(actionClass, ParentPackage.class); + ParentPackage parent = AnnotationUtils.findAnnotation(actionClass, ParentPackage.class); String parentName = null; if (parent != null) { if (LOG.isTraceEnabled()) { @@ -1013,7 +1013,7 @@ public class PackageBasedActionConfigBui packageConfigs.put(name, pkgConfig); //check for @DefaultInterceptorRef in the package - DefaultInterceptorRef defaultInterceptorRef = AnnotationTools.findAnnotation(actionClass, DefaultInterceptorRef.class); + DefaultInterceptorRef defaultInterceptorRef = AnnotationUtils.findAnnotation(actionClass, DefaultInterceptorRef.class); if (defaultInterceptorRef != null) { pkgConfig.defaultInterceptorRef(defaultInterceptorRef.value()); Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/AnnotationUtils.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/AnnotationUtils.java?rev=1381560&r1=1381559&r2=1381560&view=diff ============================================================================== --- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/AnnotationUtils.java (original) +++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/AnnotationUtils.java Thu Sep 6 11:25:26 2012 @@ -15,13 +15,14 @@ */ package com.opensymphony.xwork2.util; -import java.io.File; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.net.URL; -import java.util.*; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -49,7 +50,7 @@ public class AnnotationUtils { * @param clazz * @param allFields */ - public static void addAllFields(Class annotationClass, Class clazz, List allFields) { + public static void addAllFields(Class annotationClass, Class clazz, List allFields) { if (clazz == null) { return; @@ -73,7 +74,7 @@ public class AnnotationUtils { * @param clazz * @param allMethods */ - public static void addAllMethods(Class annotationClass, Class clazz, List allMethods) { + public static void addAllMethods(Class annotationClass, Class clazz, List allMethods) { if (clazz == null) { return; @@ -116,11 +117,11 @@ public class AnnotationUtils { * @return A {@link Collection}<{@link AnnotatedElement}> containing all of the * method {@link AnnotatedElement}s matching the specified {@link Annotation}s */ - public static final Collection getAnnotatedMethods(Class clazz, Class... annotation){ + public static Collection getAnnotatedMethods(Class clazz, Class... annotation){ Collection toReturn = new HashSet(); for(Method m : clazz.getMethods()){ - if( ArrayUtils.isNotEmpty(annotation) && isAnnotatedBy(m,annotation) ){ + if( ArrayUtils.isNotEmpty(annotation) && isAnnotatedBy(m, annotation) ){ toReturn.add(m); }else if( ArrayUtils.isEmpty(annotation) && ArrayUtils.isNotEmpty(m.getAnnotations())){ toReturn.add(m); @@ -134,44 +135,19 @@ public class AnnotationUtils { * Varargs version of AnnotatedElement.isAnnotationPresent() * @see AnnotatedElement */ - public static final boolean isAnnotatedBy(AnnotatedElement annotatedElement, Class... annotation) { + public static boolean isAnnotatedBy(AnnotatedElement annotatedElement, Class... annotation) { if(ArrayUtils.isEmpty(annotation)) return false; - + for( Class c : annotation ){ if( annotatedElement.isAnnotationPresent(c) ) return true; } - - return false; - } - - /** - * - * @deprecated since 2.0.4 use getAnnotatedMethods - */ - @Deprecated - public static List findAnnotatedMethods(Class clazz, Class annotationClass) { - List methods = new ArrayList(); - findRecursively(clazz, annotationClass, methods); - return methods; - } - /** - * - * @deprecated since 2.0.4 use getAnnotatedMethods - */ - @Deprecated - public static void findRecursively(Class clazz, Class annotationClass, List methods) { - for (Method m : clazz.getDeclaredMethods()) { - if (m.getAnnotation(annotationClass) != null) { methods.add(0, m); } - } - if (clazz.getSuperclass() != Object.class) { - findRecursively(clazz.getSuperclass(), annotationClass, methods); - } - } + return false; + } /** * Returns the property name for a method. - * This method is independant from property fields. + * This method is independent from property fields. * * @param method The method to get the property name for. * @return the property name for given method; null if non could be resolved. @@ -193,35 +169,28 @@ public class AnnotationUtils { return null; } - /** - * Retrieves all classes within a packages. - * TODO: this currently does not work with jars. + * Returns the annotation on the given class or the package of the class. This searchs up the + * class hierarchy and the package hierarchy for the closest match. * - * @param pckgname - * @return Array of full qualified class names from this package. - */ - public static String[] find(Class clazz, final String pckgname) { - - List classes = new ArrayList(); - String name = new String(pckgname); - if (!name.startsWith("/")) { - name = "/" + name; - } - - name = name.replace('.', File.separatorChar); - - final URL url = clazz.getResource(name); - final File directory = new File(url.getFile()); - - if (directory.exists()) { - final String[] files = directory.list(); - for (String file : files) { - if (file.endsWith(".class")) { - classes.add(pckgname + "." + file.substring(0, file.length() - 6)); + * @param klass The class to search for the annotation. + * @param annotationClass The Class of the annotation. + * @return The annotation or null. + */ + public static T findAnnotation(Class klass, Class annotationClass) { + T ann = klass.getAnnotation(annotationClass); + while (ann == null && klass != null) { + ann = klass.getAnnotation(annotationClass); + if (ann == null) + ann = klass.getPackage().getAnnotation(annotationClass); + if (ann == null) { + klass = klass.getSuperclass(); + if (klass != null ) { + ann = klass.getAnnotation(annotationClass); } } } - return classes.toArray(new String[classes.size()]); + + return ann; } } Modified: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/AnnotationUtilsTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/AnnotationUtilsTest.java?rev=1381560&r1=1381559&r2=1381560&view=diff ============================================================================== --- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/AnnotationUtilsTest.java (original) +++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/AnnotationUtilsTest.java Thu Sep 6 11:25:26 2012 @@ -1,9 +1,12 @@ package com.opensymphony.xwork2.util; +import com.opensymphony.xwork2.util.annotation.Dummy2Class; +import com.opensymphony.xwork2.util.annotation.DummyClass; +import com.opensymphony.xwork2.util.annotation.DummyClassExt; +import com.opensymphony.xwork2.util.annotation.MyAnnotation; +import com.opensymphony.xwork2.util.annotation.MyAnnotation2; import junit.framework.TestCase; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; import java.lang.reflect.AnnotatedElement; import java.util.Collection; @@ -12,43 +15,33 @@ import java.util.Collection; */ public class AnnotationUtilsTest extends TestCase { - + @SuppressWarnings("unchecked") public void testIsAnnotatedByWithoutAnnotationArgsReturnsFalse() throws Exception { - assertFalse(AnnotationUtils.isAnnotatedBy(DummyClass.class)); assertFalse(AnnotationUtils.isAnnotatedBy(DummyClass.class.getMethod("methodWithAnnotation"))); - } @SuppressWarnings("unchecked") public void testIsAnnotatedByWithSingleAnnotationArgMatchingReturnsTrue() throws Exception { - assertTrue(AnnotationUtils.isAnnotatedBy(DummyClass.class.getMethod("methodWithAnnotation"), MyAnnotation.class)); - } @SuppressWarnings("unchecked") public void testIsAnnotatedByWithMultiAnnotationArgMatchingReturnsTrue() throws Exception { - assertFalse(AnnotationUtils.isAnnotatedBy(DummyClass.class.getMethod("methodWithAnnotation"), Deprecated.class)); assertTrue(AnnotationUtils.isAnnotatedBy(DummyClass.class.getMethod("methodWithAnnotation"), MyAnnotation.class, Deprecated.class)); assertTrue(AnnotationUtils.isAnnotatedBy(DummyClass.class.getMethod("methodWithAnnotation"), Deprecated.class, MyAnnotation.class)); - } + @SuppressWarnings("unchecked") public void testGetAnnotedMethodsWithoutAnnotationArgs() throws Exception { - Collection ans = AnnotationUtils.getAnnotatedMethods(DummyClass.class); - assertTrue(ans.size() == 1); - assertEquals(ans.iterator().next(), DummyClass.class.getMethod("methodWithAnnotation")); - } @SuppressWarnings("unchecked") public void testGetAnnotatedMethodsWithAnnotationArgs() throws Exception { - Collection ans = AnnotationUtils.getAnnotatedMethods(DummyClass.class, Deprecated.class); assertTrue(ans.isEmpty()); @@ -63,39 +56,18 @@ public class AnnotationUtilsTest extends ans = AnnotationUtils.getAnnotatedMethods(DummyClassExt.class, MyAnnotation.class, MyAnnotation2.class); assertEquals(2, ans.size()); - - } - - /** - * ***************************************************************** - *

- * TEST CLASSES - */ - private static class DummyClass { - - public DummyClass() { - } - - @MyAnnotation - public void methodWithAnnotation() { - } - - } - - @Retention(RetentionPolicy.RUNTIME) - public @interface MyAnnotation { } - private static final class DummyClassExt extends DummyClass { - - @MyAnnotation2 - public void anotherAnnotatedMethod() { - } - + public void testFindAnnotationOnClass() { + MyAnnotation a1 = AnnotationUtils.findAnnotation(DummyClass.class, MyAnnotation.class); + assertNotNull(a1); + assertEquals("class-test", a1.value()); } - @Retention(RetentionPolicy.RUNTIME) - public @interface MyAnnotation2 { + public void testFindAnnotationOnPackage() { + MyAnnotation ns = AnnotationUtils.findAnnotation(Dummy2Class.class, MyAnnotation.class); + assertNotNull(ns); + assertEquals("package-test", ns.value()); } } Added: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/Dummy2Class.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/Dummy2Class.java?rev=1381560&view=auto ============================================================================== --- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/Dummy2Class.java (added) +++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/Dummy2Class.java Thu Sep 6 11:25:26 2012 @@ -0,0 +1,9 @@ +package com.opensymphony.xwork2.util.annotation; + +public class Dummy2Class { + + @MyAnnotation("class-test") + public void methodWithAnnotation() { + } + +} Added: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/DummyClass.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/DummyClass.java?rev=1381560&view=auto ============================================================================== --- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/DummyClass.java (added) +++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/DummyClass.java Thu Sep 6 11:25:26 2012 @@ -0,0 +1,13 @@ +package com.opensymphony.xwork2.util.annotation; + +@MyAnnotation("class-test") +public class DummyClass { + + public DummyClass() { + } + + @MyAnnotation("method-test") + public void methodWithAnnotation() { + } + +} Added: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/DummyClassExt.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/DummyClassExt.java?rev=1381560&view=auto ============================================================================== --- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/DummyClassExt.java (added) +++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/DummyClassExt.java Thu Sep 6 11:25:26 2012 @@ -0,0 +1,9 @@ +package com.opensymphony.xwork2.util.annotation; + +public final class DummyClassExt extends DummyClass { + + @MyAnnotation2 + public void anotherAnnotatedMethod() { + } + +} Added: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/MyAnnotation.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/MyAnnotation.java?rev=1381560&view=auto ============================================================================== --- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/MyAnnotation.java (added) +++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/MyAnnotation.java Thu Sep 6 11:25:26 2012 @@ -0,0 +1,11 @@ +package com.opensymphony.xwork2.util.annotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface MyAnnotation { + + String value(); + +} Added: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/MyAnnotation2.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/MyAnnotation2.java?rev=1381560&view=auto ============================================================================== --- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/MyAnnotation2.java (added) +++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/MyAnnotation2.java Thu Sep 6 11:25:26 2012 @@ -0,0 +1,8 @@ +package com.opensymphony.xwork2.util.annotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface MyAnnotation2 { +} Added: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/package-info.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/package-info.java?rev=1381560&view=auto ============================================================================== --- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/package-info.java (added) +++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/annotation/package-info.java Thu Sep 6 11:25:26 2012 @@ -0,0 +1,22 @@ +/* + * $Id: package-info.java 655902 2008-05-13 15:15:12Z bpontarelli $ + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +@MyAnnotation("package-test") +package com.opensymphony.xwork2.util.annotation;