Author: musachy
Date: Sun Apr 12 18:16:43 2009
New Revision: 764310

URL: http://svn.apache.org/viewvc?rev=764310&view=rev
Log:
WW-3083 fix how packages and actions are scanned for annotations

Added:
    
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/parentpackage/sub/
    
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/parentpackage/sub/ClassLevelParentPackageChildAction.java
    
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/parentpackage/sub/PackageLevelParentPackageChildAction.java
Modified:
    
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/PackageBasedActionConfigBuilderTest.java

Modified: 
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/AnnotationTools.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/AnnotationTools.java?rev=764310&r1=764309&r2=764310&view=diff
==============================================================================
--- 
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/AnnotationTools.java
 (original)
+++ 
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/AnnotationTools.java
 Sun Apr 12 18:16:43 2009
@@ -40,7 +40,9 @@
     public static <T extends Annotation> T findAnnotation(Class<?> klass, 
Class<T> annotationClass) {
         T ann = klass.getAnnotation(annotationClass);
         while (ann == null && klass != null) {
-            ann = klass.getPackage().getAnnotation(annotationClass);
+            ann = klass.getAnnotation(annotationClass);
+            if (ann == null)
+                ann = klass.getPackage().getAnnotation(annotationClass);
             if (ann == null) {
                 klass = klass.getSuperclass();
             }

Modified: 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java?rev=764310&r1=764309&r2=764310&view=diff
==============================================================================
--- 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
 (original)
+++ 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
 Sun Apr 12 18:16:43 2009
@@ -56,6 +56,8 @@
 import 
org.apache.struts2.convention.actions.params.ActionParamsMethodLevelAction;
 import 
org.apache.struts2.convention.actions.parentpackage.ClassLevelParentPackageAction;
 import 
org.apache.struts2.convention.actions.parentpackage.PackageLevelParentPackageAction;
+import 
org.apache.struts2.convention.actions.parentpackage.sub.ClassLevelParentPackageChildAction;
+import 
org.apache.struts2.convention.actions.parentpackage.sub.PackageLevelParentPackageChildAction;
 import org.apache.struts2.convention.actions.result.ActionLevelResultAction;
 import org.apache.struts2.convention.actions.result.ActionLevelResultsAction;
 import org.apache.struts2.convention.actions.result.ClassLevelResultAction;
@@ -148,8 +150,12 @@
                 "/interceptor", strutsDefault, null);
         PackageConfig packageLevelPkg = 
makePackageConfig("org.apache.struts2.convention.actions.parentpackage#package-level#/parentpackage",
             "/parentpackage", packageLevelParentPkg, null);
+        PackageConfig packageLevelSubPkg = 
makePackageConfig("org.apache.struts2.convention.actions.parentpackage.sub#package-level#/parentpackage/sub",
+            "/parentpackage/sub", packageLevelParentPkg, null);
         PackageConfig differentPkg = 
makePackageConfig("org.apache.struts2.convention.actions.parentpackage#class-level#/parentpackage",
             "/parentpackage", classLevelParentPkg, null);
+        PackageConfig differentSubPkg = 
makePackageConfig("org.apache.struts2.convention.actions.parentpackage.sub#class-level#/parentpackage/sub",
+            "/parentpackage/sub", classLevelParentPkg, null);
         PackageConfig pkgLevelNamespacePkg = 
makePackageConfig("org.apache.struts2.convention.actions.namespace#struts-default#/package-level",
             "/package-level", strutsDefault, null);
         PackageConfig classLevelNamespacePkg = 
makePackageConfig("org.apache.struts2.convention.actions.namespace#struts-default#/class-level",
@@ -234,7 +240,9 @@
 
         /* org.apache.struts2.convention.actions.parentpackage */
         expect(resultMapBuilder.build(PackageLevelParentPackageAction.class, 
null, "package-level-parent-package", packageLevelPkg)).andReturn(results);
+        
expect(resultMapBuilder.build(PackageLevelParentPackageChildAction.class, null, 
"package-level-parent-package-child", packageLevelSubPkg)).andReturn(results);
         expect(resultMapBuilder.build(ClassLevelParentPackageAction.class, 
null, "class-level-parent-package", differentPkg)).andReturn(results);
+        
expect(resultMapBuilder.build(ClassLevelParentPackageChildAction.class, null, 
"class-level-parent-package-child", differentSubPkg)).andReturn(results);
 
         /* org.apache.struts2.convention.actions.result */
         expect(resultMapBuilder.build(ClassLevelResultAction.class, null, 
"class-level-result", resultPkg)).andReturn(results);
@@ -443,12 +451,26 @@
         assertEquals(1, pkgConfig.getActionConfigs().size());
         verifyActionConfig(pkgConfig, "class-level-parent-package", 
ClassLevelParentPackageAction.class, "execute", pkgConfig.getName());
 
+        /* org.apache.struts2.convention.actions.parentpackage.sub class level 
*/
+        pkgConfig = 
configuration.getPackageConfig("org.apache.struts2.convention.actions.parentpackage.sub#class-level#/parentpackage/sub");
+        assertNotNull(pkgConfig);
+        assertEquals(1, pkgConfig.getActionConfigs().size());
+        verifyActionConfig(pkgConfig, "class-level-parent-package-child", 
ClassLevelParentPackageChildAction.class, "execute", pkgConfig.getName());
+        assertEquals("class-level", pkgConfig.getParents().get(0).getName());
+
         /* org.apache.struts2.convention.actions.parentpackage package level */
         pkgConfig = 
configuration.getPackageConfig("org.apache.struts2.convention.actions.parentpackage#package-level#/parentpackage");
         assertNotNull(pkgConfig);
         assertEquals(1, pkgConfig.getActionConfigs().size());
         verifyActionConfig(pkgConfig, "package-level-parent-package", 
PackageLevelParentPackageAction.class, "execute", pkgConfig.getName());
 
+        /* org.apache.struts2.convention.actions.parentpackage.sub package 
level */
+        pkgConfig = 
configuration.getPackageConfig("org.apache.struts2.convention.actions.parentpackage.sub#package-level#/parentpackage/sub");
+        assertNotNull(pkgConfig);
+        assertEquals(1, pkgConfig.getActionConfigs().size());
+        verifyActionConfig(pkgConfig, "package-level-parent-package-child", 
PackageLevelParentPackageChildAction.class, "execute", pkgConfig.getName());
+        assertEquals("package-level", pkgConfig.getParents().get(0).getName());
+
         /* org.apache.struts2.convention.actions.result */
         pkgConfig = 
configuration.getPackageConfig("org.apache.struts2.convention.actions.result#struts-default#/result");
         assertNotNull(pkgConfig);

Added: 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/parentpackage/sub/ClassLevelParentPackageChildAction.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/parentpackage/sub/ClassLevelParentPackageChildAction.java?rev=764310&view=auto
==============================================================================
--- 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/parentpackage/sub/ClassLevelParentPackageChildAction.java
 (added)
+++ 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/parentpackage/sub/ClassLevelParentPackageChildAction.java
 Sun Apr 12 18:16:43 2009
@@ -0,0 +1,29 @@
+/*
+ * $Id: ClassLevelParentPackageAction.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.
+ */
+package org.apache.struts2.convention.actions.parentpackage.sub;
+
+import 
org.apache.struts2.convention.actions.parentpackage.ClassLevelParentPackageAction;
+
+/**
+ * Extends an action that hass a @ParentPackage at the class level
+ */
+public class ClassLevelParentPackageChildAction extends 
ClassLevelParentPackageAction {
+}

Added: 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/parentpackage/sub/PackageLevelParentPackageChildAction.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/parentpackage/sub/PackageLevelParentPackageChildAction.java?rev=764310&view=auto
==============================================================================
--- 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/parentpackage/sub/PackageLevelParentPackageChildAction.java
 (added)
+++ 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/parentpackage/sub/PackageLevelParentPackageChildAction.java
 Sun Apr 12 18:16:43 2009
@@ -0,0 +1,29 @@
+/*
+ * $Id: ClassLevelParentPackageAction.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.
+ */
+package org.apache.struts2.convention.actions.parentpackage.sub;
+
+import 
org.apache.struts2.convention.actions.parentpackage.PackageLevelParentPackageAction;
+
+/**
+ * Extends a class the has a @ParentPackage at the package level
+ */
+public class PackageLevelParentPackageChildAction extends 
PackageLevelParentPackageAction {
+}


Reply via email to