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);
+ }
}