Author: kkolinko
Date: Thu Jun 19 20:42:43 2014
New Revision: 1604030

URL: http://svn.apache.org/r1604030
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56611
Refactor code to remove inefficient calls to Method.isAnnotationPresent(). 
Additional fixes that were missed in r1603591.
Merged r1604024 from tomcat/trunk.

Modified:
    tomcat/tc7.0.x/trunk/   (props changed)
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebAnnotationSet.java
    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml

Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
  Merged /tomcat/trunk:r1604024

Modified: 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebAnnotationSet.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebAnnotationSet.java?rev=1604030&r1=1604029&r2=1604030&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebAnnotationSet.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebAnnotationSet.java 
Thu Jun 19 20:42:43 2014
@@ -143,8 +143,8 @@ public class WebAnnotationSet {
                  * Ref JSR 250, equivalent to the run-as element in
                  * the deployment descriptor
                  */
-                if (classClass.isAnnotationPresent(RunAs.class)) {
-                    RunAs annotation = classClass.getAnnotation(RunAs.class);
+                RunAs annotation = classClass.getAnnotation(RunAs.class);
+                if (annotation != null) {
                     wrapper.setRunAs(annotation.value());
                 }
             }
@@ -159,96 +159,106 @@ public class WebAnnotationSet {
      */
     protected static void loadClassAnnotation(Context context,
             Class<?> classClass) {
-        // Initialize the annotations
-        if (classClass.isAnnotationPresent(Resource.class)) {
+        /* Process Resource annotation.
+         * Ref JSR 250
+         */
+        {
             Resource annotation = classClass.getAnnotation(Resource.class);
-            addResource(context, annotation);
+            if (annotation != null) {
+                addResource(context, annotation);
+            }
         }
         /* Process Resources annotation.
          * Ref JSR 250
          */
-        if (classClass.isAnnotationPresent(Resources.class)) {
+        {
             Resources annotation = classClass.getAnnotation(Resources.class);
-            for (int i = 0; annotation.value() != null && i < 
annotation.value().length; i++) {
-                addResource(context, annotation.value()[i]);
+            if (annotation != null && annotation.value() != null) {
+                for (Resource resource : annotation.value()) {
+                    addResource(context, resource);
+                }
             }
         }
         /* Process EJB annotation.
          * Ref JSR 224, equivalent to the ejb-ref or ejb-local-ref
          * element in the deployment descriptor.
-        if (classClass.isAnnotationPresent(EJB.class)) {
-            EJB annotation = (EJB) 
-            classClass.getAnnotation(EJB.class);
-            
-            if ((annotation.mappedName().length() == 0) ||
-                    annotation.mappedName().equals("Local")) {
-                
-                ContextLocalEjb ejb = new ContextLocalEjb();
-                
-                ejb.setName(annotation.name());
-                ejb.setType(annotation.beanInterface().getCanonicalName());
-                ejb.setDescription(annotation.description());
-                
-                ejb.setHome(annotation.beanName());
-                
-                context.getNamingResources().addLocalEjb(ejb);
-                
-            } else if (annotation.mappedName().equals("Remote")) {
-                
-                ContextEjb ejb = new ContextEjb();
-                
-                ejb.setName(annotation.name());
-                ejb.setType(annotation.beanInterface().getCanonicalName());
-                ejb.setDescription(annotation.description());
-                
-                ejb.setHome(annotation.beanName());
-                
-                context.getNamingResources().addEjb(ejb);
-                
+        {
+            EJB annotation = classClass.getAnnotation(EJB.class);
+            if (annotation != null) {
+
+                if ((annotation.mappedName().length() == 0)
+                        || annotation.mappedName().equals("Local")) {
+
+                    ContextLocalEjb ejb = new ContextLocalEjb();
+
+                    ejb.setName(annotation.name());
+                    ejb.setType(annotation.beanInterface().getCanonicalName());
+                    ejb.setDescription(annotation.description());
+
+                    ejb.setHome(annotation.beanName());
+
+                    context.getNamingResources().addLocalEjb(ejb);
+
+                } else if (annotation.mappedName().equals("Remote")) {
+
+                    ContextEjb ejb = new ContextEjb();
+
+                    ejb.setName(annotation.name());
+                    ejb.setType(annotation.beanInterface().getCanonicalName());
+                    ejb.setDescription(annotation.description());
+
+                    ejb.setHome(annotation.beanName());
+
+                    context.getNamingResources().addEjb(ejb);
+
+                }
             }
-            
         }
-         */
+        */
         /* Process WebServiceRef annotation.
          * Ref JSR 224, equivalent to the service-ref element in 
          * the deployment descriptor.
          * The service-ref registration is not implemented
-        if (classClass.isAnnotationPresent(WebServiceRef.class)) {
-            WebServiceRef annotation = (WebServiceRef) 
-            classClass.getAnnotation(WebServiceRef.class);
-            
-            ContextService service = new ContextService();
-            
-            service.setName(annotation.name());
-            service.setWsdlfile(annotation.wsdlLocation());
-            
-            service.setType(annotation.type().getCanonicalName());
-            
-            if (annotation.value() == null)
-                
service.setServiceinterface(annotation.type().getCanonicalName());
-            
-            if (annotation.type().getCanonicalName().equals("Service"))
-                
service.setServiceinterface(annotation.type().getCanonicalName());
-            
-            if (annotation.value().getCanonicalName().equals("Endpoint"))
-                
service.setServiceendpoint(annotation.type().getCanonicalName());
-            
-            service.setPortlink(annotation.type().getCanonicalName());
-            
-            context.getNamingResources().addService(service);
-            
-            
+        {
+            WebServiceRef annotation = classClass
+                    .getAnnotation(WebServiceRef.class);
+            if (annotation != null) {
+                ContextService service = new ContextService();
+
+                service.setName(annotation.name());
+                service.setWsdlfile(annotation.wsdlLocation());
+
+                service.setType(annotation.type().getCanonicalName());
+
+                if (annotation.value() == null)
+                    service.setServiceinterface(annotation.type()
+                            .getCanonicalName());
+
+                if (annotation.type().getCanonicalName().equals("Service"))
+                    service.setServiceinterface(annotation.type()
+                            .getCanonicalName());
+
+                if (annotation.value().getCanonicalName().equals("Endpoint"))
+                    service.setServiceendpoint(annotation.type()
+                            .getCanonicalName());
+
+                service.setPortlink(annotation.type().getCanonicalName());
+
+                context.getNamingResources().addService(service);
+            }
         }
-         */
+        */
         /* Process DeclareRoles annotation.
          * Ref JSR 250, equivalent to the security-role element in
          * the deployment descriptor
          */
-        if (classClass.isAnnotationPresent(DeclareRoles.class)) {
-            DeclareRoles annotation =
-                classClass.getAnnotation(DeclareRoles.class);
-            for (int i = 0; annotation.value() != null && i < 
annotation.value().length; i++) {
-                context.addSecurityRole(annotation.value()[i]);
+        {
+            DeclareRoles annotation = classClass
+                    .getAnnotation(DeclareRoles.class);
+            if (annotation != null && annotation.value() != null) {
+                for (String role : annotation.value()) {
+                    context.addSecurityRole(role);
+                }
             }
         }
     }

Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1604030&r1=1604029&r2=1604030&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Thu Jun 19 20:42:43 2014
@@ -104,7 +104,7 @@
       <scode>
         <bug>56611</bug>: Refactor code to remove inefficient calls to
         <code>Method.isAnnotationPresent()</code>. Based on a patch by Jian 
Mou.
-        (markt)
+        (markt/kkolinko)
       </scode>
     </changelog>
   </subsection>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to