Author: mbenson
Date: Fri Mar 18 23:25:09 2011
New Revision: 1083107

URL: http://svn.apache.org/viewvc?rev=1083107&view=rev
Log:
respect @javax.enterprise.util.Nonbinding

Modified:
    
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/AnnotationUtils.java

Modified: 
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/AnnotationUtils.java
URL: 
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/AnnotationUtils.java?rev=1083107&r1=1083106&r2=1083107&view=diff
==============================================================================
--- 
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/AnnotationUtils.java
 (original)
+++ 
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/AnnotationUtils.java
 Fri Mar 18 23:25:09 2011
@@ -89,6 +89,27 @@ public class AnnotationUtils {
     };
 
     /**
+     * Statically cached class instance for the CDI Nonbinding annotation.
+     */
+    private static final Class<? extends Annotation> 
NONBINDING_ANNOTATION_TYPE;
+    static {
+        Class<?> nonbindingAnnotationType = null;
+        try {
+            nonbindingAnnotationType = 
ClassUtils.getClass("javax.enterprise.util.Nonbinding");
+        } catch (ClassNotFoundException e) {
+        }
+        if (nonbindingAnnotationType != null
+                && 
Annotation.class.isAssignableFrom(nonbindingAnnotationType)) {
+            //just checked:
+            @SuppressWarnings("unchecked")
+            Class<? extends Annotation> stronglyTyped = (Class<? extends 
Annotation>) nonbindingAnnotationType;
+            NONBINDING_ANNOTATION_TYPE = stronglyTyped;
+        } else {
+            NONBINDING_ANNOTATION_TYPE = null;
+        }
+    }
+
+    /**
      * <p>{@code AnnotationUtils} instances should NOT be constructed in
      * standard programming. Instead, the class should be used statically.</p>
      *
@@ -127,7 +148,8 @@ public class AnnotationUtils {
         try {
             for (Method m : type.getDeclaredMethods()) {
                 if (m.getParameterTypes().length == 0
-                        && isValidAnnotationMemberType(m.getReturnType())) {
+                        && isValidAnnotationMemberType(m.getReturnType())
+                        && !isNonbindingMember(m)) {
                     Object v1 = m.invoke(a1);
                     Object v2 = m.invoke(a2);
                     if (!memberEquals(m.getReturnType(), v1, v2)) {
@@ -359,4 +381,13 @@ public class AnnotationUtils {
         return Arrays.hashCode((Object[]) o);
     }
 
+    /**
+     * Helper method to look for the CDI Nonbinding annotation on an 
Annotation member.
+     * @param accessor the accessor method to check
+     * @return whether the Nonbinding annotation was found
+     */
+    private static boolean isNonbindingMember(Method accessor) {
+        return NONBINDING_ANNOTATION_TYPE != null
+                && accessor.isAnnotationPresent(NONBINDING_ANNOTATION_TYPE);
+    }
 }


Reply via email to