List<AbstractTypeDeclaration> topLevelType = unit.types();
for (AbstractTypeDeclaration abstractTypeDeclaration : topLevelType) {
// process TypeDeclaration (class, interface)
if (abstractTypeDeclaration instanceof TypeDeclaration) {
TypeDeclaration typeDeclaration = (TypeDeclaration)abstractTypeDeclaration;
if (typeDeclaration.isInterface()) {
// is an interface top level type
InterfaceMetadata interfaceMetadata = new InterfaceMetadata();
interfaceMetadata.setName(JavaMetadataUtil.getName(typeDeclaration.getName()));
metadata.add(interfaceMetadata);
} else {
// is a class top level type
ClassMetadata classMetadata = new ClassMetadata();
processModifiersOfTypDeclaration(typeDeclaration, classMetadata);
classMetadata.setName(JavaMetadataUtil.getName(typeDeclaration.getName()));
// fields of the class top level type
FieldDeclaration[] fieldDeclarations = typeDeclaration.getFields();
for (FieldDeclaration fieldDeclaration : fieldDeclarations) {
FieldMetadata fieldMetadata = getFieldMetadataFrom(fieldDeclaration);
classMetadata.getFields().add(fieldMetadata);
}
// methods of the class top level type
MethodDeclaration[] methodDeclarations = typeDeclaration.getMethods();
for (MethodDeclaration methodDeclaration : methodDeclarations) {
MethodMetadata methodMetadata = getMethodMetadataFrom(methodDeclaration);
classMetadata.getMethods().add(methodMetadata);
}
metadata.add(classMetadata);