* @return The ClassMetaData
*/
public AbstractClassMetaData getMetaDataForClass(Class cls, PackageMetaData pmd, ClassLoaderResolver clr)
{
AnnotationObject[] classAnnotations = getClassAnnotationsForClass(cls);
AbstractClassMetaData cmd = processClassAnnotations(pmd, cls, classAnnotations, clr);
if (cmd != null)
{
// Process using any user-provided class annotation handlers
AnnotationManager annMgr = mgr.getAnnotationManager();
for (int i=0;i<classAnnotations.length;i++)
{
String annName = classAnnotations[i].getName();
ClassAnnotationHandler handler = annMgr.getHandlerForClassAnnotation(annName);
if (handler != null)
{
handler.processClassAnnotation(classAnnotations[i], cmd, clr);
}
}
boolean propertyAccessor = false;
// Extract the annotations for the getters
Collection<AnnotatedMember> annotatedMethods = getJavaBeanAccessorAnnotationsForClass(cls);
Map<String, AnnotatedMember> m = new HashMap<String, AnnotatedMember>();
Iterator it = annotatedMethods.iterator();
while (it.hasNext())
{
AnnotatedMember method = (AnnotatedMember)it.next();
m.put(method.getName(), method);
if (method.getAnnotations().length > 0)
{
// We have a getter with at least one annotation so must be using properties
propertyAccessor = true;
}
}
// Extract the annotations for the fields
Collection<AnnotatedMember> annotatedFields = getFieldAnnotationsForClass(cls);
Map<String, AnnotatedMember> f = new HashMap<String, AnnotatedMember>();
it = annotatedFields.iterator();
while (it.hasNext())
{
AnnotatedMember field = (AnnotatedMember)it.next();
f.put(field.getName(), field);
}
// Process the getters
it = m.values().iterator();
while (it.hasNext())
{
AnnotatedMember method = (AnnotatedMember)it.next();
AnnotationObject[] annotations = method.getAnnotations();
AbstractMemberMetaData mmd = processMemberAnnotations(cmd, method.getMember(), annotations, propertyAccessor);
if (annotations != null && annotations.length > 0)
{
// Process using any user-provided member annotation handlers
for (int i=0;i<annotations.length;i++)
{
String annName = annotations[i].getName();
MemberAnnotationHandler handler = annMgr.getHandlerForMemberAnnotation(annName);
if (handler != null)
{
if (mmd == null)
{
mmd = new PropertyMetaData(cmd, method.getMember().getName());
cmd.addMember(mmd);
}
handler.processMemberAnnotation(annotations[i], mmd, clr);
}
}
}
}
// Process the fields
it = f.values().iterator();
while (it.hasNext())
{
AnnotatedMember field = (AnnotatedMember)it.next();
AnnotationObject[] annotations = field.getAnnotations();
AbstractMemberMetaData mmd = processMemberAnnotations(cmd, field.getMember(), annotations, propertyAccessor);
if (annotations != null && annotations.length > 0)
{
// Process using any user-provided member annotation handlers
for (int i=0;i<annotations.length;i++)
{
String annName = annotations[i].getName();
MemberAnnotationHandler handler = annMgr.getHandlerForMemberAnnotation(annName);
if (handler != null)
{
if (mmd == null)
{
mmd = new FieldMetaData(cmd, field.getMember().getName());
cmd.addMember(mmd);
}
handler.processMemberAnnotation(annotations[i], mmd, clr);
}
}
}