respect @javax.enterprise.util.Nonbinding

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@1083107 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Matthew Jason Benson 2011-03-18 23:25:09 +00:00
parent a68f9dadd5
commit 8ec9dee44f
1 changed files with 32 additions and 1 deletions

View File

@ -88,6 +88,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);
}
}