String normalClassRootPath = JAVA_COMPILATION_UNIT_NODE + SLASH + JAVA_UNIT_TYPE_CHILD_NODE + SLASH
+ JAVA_CLASS_DECLARATION_CHILD_NODE + SLASH + JAVA_NORMAL_CLASS_CHILD_NODE
+ SLASH + JAVA_NORMAL_CLASS_DECLARATION_CHILD_NODE;
ClassMetadata classMetadata = (ClassMetadata)typeMetadata;
Path classChildNode = pathFactory.create(normalClassRootPath);
output.setProperty(classChildNode, nameFactory.create(JAVA_NORMAL_CLASS_NAME), classMetadata.getName());
// process modifiers of the class declaration
List<ModifierMetadata> classModifiers = classMetadata.getModifiers();
int modifierIndex = 1;
for (ModifierMetadata modifierMetadata : classModifiers) {
Path classModifierChildNode = pathFactory.create(normalClassRootPath + SLASH + JAVA_MODIFIER_CHILD_NODE
+ SLASH + JAVA_MODIFIER_DECLARATION_CHILD_NODE + "["
+ modifierIndex + "]");
output.setProperty(classModifierChildNode,
nameFactory.create(JAVA_MODIFIER_NAME),
modifierMetadata.getName());
}
// process fields of the class unit.
int primitiveIndex = 1;
int simpleIndex = 1;
int parameterizedIndex = 1;
int arrayIndex = 1;
for (FieldMetadata fieldMetadata : classMetadata.getFields()) {
String fieldMemberDataRootPath = JavaMetadataUtil.createPath(normalClassRootPath + SLASH
+ JAVA_FIELD_CHILD_NODE + SLASH
+ JAVA_FIELD_TYPE_CHILD_NODE + SLASH
+ JAVA_TYPE_CHILD_NODE);
if (fieldMetadata instanceof PrimitiveFieldMetadata) {
// primitive type
PrimitiveFieldMetadata primitiveFieldMetadata = (PrimitiveFieldMetadata)fieldMetadata;
String primitiveFieldRootPath = JavaMetadataUtil.createPathWithIndex(fieldMemberDataRootPath + SLASH
+ JAVA_PRIMITIVE_TYPE_CHILD_NODE,
primitiveIndex);
// type
Path primitiveTypeChildNode = pathFactory.create(primitiveFieldRootPath);
output.setProperty(primitiveTypeChildNode,
nameFactory.create(JAVA_PRIMITIVE_TYPE_NAME),
primitiveFieldMetadata.getType());
// modifiers
List<ModifierMetadata> modifiers = primitiveFieldMetadata.getModifiers();
int primitiveModifierIndex = 1;
for (ModifierMetadata modifierMetadata : modifiers) {
String modifierPath = JavaMetadataUtil.createPathWithIndex(primitiveFieldRootPath + SLASH
+ JAVA_MODIFIER_CHILD_NODE + SLASH
+ JAVA_MODIFIER_DECLARATION_CHILD_NODE,
primitiveModifierIndex);
Path modifierChildNode = pathFactory.create(modifierPath);
output.setProperty(modifierChildNode,
nameFactory.create(JAVA_MODIFIER_NAME),
modifierMetadata.getName());
primitiveModifierIndex++;
}
// variables
List<Variable> variables = primitiveFieldMetadata.getVariables();
int primitiveVariableIndex = 1;
for (Variable variable : variables) {
String variablePath = JavaMetadataUtil.createPathWithIndex(primitiveFieldRootPath + SLASH
+ JAVA_PRIMITIVE_TYPE_VARIABLE + SLASH
+ JAVA_VARIABLE,
primitiveVariableIndex);
Path primitiveChildNode = pathFactory.create(variablePath);
VariableSequencer.sequenceTheVariable(output, nameFactory, variable, primitiveChildNode);
primitiveVariableIndex++;
}
primitiveIndex++;
}
// Array type
if (fieldMetadata instanceof ArrayTypeFieldMetadata) {
ArrayTypeFieldMetadata arrayTypeFieldMetadata = (ArrayTypeFieldMetadata)fieldMetadata;
String arrayTypeRootPath = JavaMetadataUtil.createPathWithIndex(fieldMemberDataRootPath + SLASH
+ JAVA_ARRAY_TYPE_CHILD_NODE,
arrayIndex);
ArrayTypeFieldMetadataSequencer.sequenceFieldMemberData(arrayTypeFieldMetadata,
pathFactory,
nameFactory,
output,
arrayTypeRootPath,
arrayIndex);
arrayIndex++;
}
// Simple type
if (fieldMetadata instanceof SimpleTypeFieldMetadata) {
SimpleTypeFieldMetadata simpleTypeFieldMetadata = (SimpleTypeFieldMetadata)fieldMetadata;
String simpleTypeFieldRootPath = JavaMetadataUtil.createPathWithIndex(JAVA_COMPILATION_UNIT_NODE
+ SLASH
+ JAVA_UNIT_TYPE_CHILD_NODE
+ SLASH
+ JAVA_CLASS_DECLARATION_CHILD_NODE
+ SLASH
+ JAVA_NORMAL_CLASS_CHILD_NODE
+ SLASH
+ JAVA_NORMAL_CLASS_DECLARATION_CHILD_NODE
+ SLASH + JAVA_FIELD_CHILD_NODE
+ SLASH
+ JAVA_FIELD_TYPE_CHILD_NODE
+ SLASH + JAVA_TYPE_CHILD_NODE
+ SLASH
+ JAVA_SIMPLE_TYPE_CHILD_NODE,
simpleIndex);
Path simpleTypeFieldChildNode = pathFactory.create(simpleTypeFieldRootPath);
output.setProperty(simpleTypeFieldChildNode,
nameFactory.create(JAVA_SIMPLE_TYPE_NAME),
simpleTypeFieldMetadata.getType());
// Simple type modifies
List<ModifierMetadata> simpleModifiers = simpleTypeFieldMetadata.getModifiers();
int simpleTypeModifierIndex = 1;
for (ModifierMetadata modifierMetadata : simpleModifiers) {
String simpleTypeModifierPath = JavaMetadataUtil.createPathWithIndex(simpleTypeFieldRootPath
+ SLASH
+ JAVA_SIMPLE_TYPE_MODIFIER_CHILD_NODE
+ SLASH
+ JAVA_MODIFIER_DECLARATION_CHILD_NODE,
simpleTypeModifierIndex);
Path simpleTypeModifierChildNode = pathFactory.create(simpleTypeModifierPath);
output.setProperty(simpleTypeModifierChildNode,
nameFactory.create(JAVA_MODIFIER_NAME),
modifierMetadata.getName());
simpleTypeModifierIndex++;
}
// Simple type variables
List<Variable> variables = simpleTypeFieldMetadata.getVariables();
int simpleTypeVariableIndex = 1;
for (Variable variable : variables) {
String variablePath = JavaMetadataUtil.createPathWithIndex(simpleTypeFieldRootPath + SLASH
+ JAVA_SIMPLE_TYPE_VARIABLE + SLASH
+ JAVA_VARIABLE,
simpleTypeVariableIndex);
Path primitiveChildNode = pathFactory.create(variablePath);
VariableSequencer.sequenceTheVariable(output, nameFactory, variable, primitiveChildNode);
simpleTypeVariableIndex++;
}
simpleIndex++;
}
// Qualified type
if (fieldMetadata instanceof QualifiedTypeFieldMetadata) {
@SuppressWarnings( "unused" )
QualifiedTypeFieldMetadata qualifiedTypeFieldMetadata = (QualifiedTypeFieldMetadata)fieldMetadata;
}
// Parameterized type
if (fieldMetadata instanceof ParameterizedTypeFieldMetadata) {
ParameterizedTypeFieldMetadata parameterizedTypeFieldMetadata = (ParameterizedTypeFieldMetadata)fieldMetadata;
String parameterizedTypeFieldRootPath = ParameterizedTypeFieldMetadataSequencer.getParameterizedTypeFieldRootPath(parameterizedIndex);
ParameterizedTypeFieldMetadataSequencer.sequenceTheParameterizedTypeName(parameterizedTypeFieldMetadata,
parameterizedTypeFieldRootPath,
pathFactory,
nameFactory,
output);
// Parameterized type modifiers
List<ModifierMetadata> parameterizedTypeModifiers = parameterizedTypeFieldMetadata.getModifiers();
int parameterizedTypeModifierIndex = 1;
for (ModifierMetadata modifierMetadata : parameterizedTypeModifiers) {
String parameterizedTypeModifierPath = ParameterizedTypeFieldMetadataSequencer.getParameterizedTypeFieldRModifierPath(parameterizedTypeFieldRootPath,
parameterizedTypeModifierIndex);
ParameterizedTypeFieldMetadataSequencer.sequenceTheParameterizedTypeModifier(modifierMetadata,
parameterizedTypeModifierPath,
pathFactory,
nameFactory,
output);
parameterizedTypeModifierIndex++;
}
// Parameterized type variables
List<Variable> parameterizedTypeVariables = parameterizedTypeFieldMetadata.getVariables();
int parameterizedTypeVariableIndex = 1;
for (Variable variable : parameterizedTypeVariables) {
Path parameterizedTypeVariableChildNode = ParameterizedTypeFieldMetadataSequencer.getParameterizedTypeFieldVariablePath(pathFactory,
parameterizedTypeFieldRootPath,
parameterizedTypeVariableIndex);
VariableSequencer.sequenceTheVariable(output,
nameFactory,
variable,
parameterizedTypeVariableChildNode);
parameterizedTypeVariableIndex++;
}
parameterizedIndex++;
}
}
// process methods of the unit.
List<MethodMetadata> methods = classMetadata.getMethods();
int methodIndex = 1;
int constructorIndex = 1;
for (MethodMetadata methodMetadata : methods) {
if (methodMetadata.isContructor()) {
// process constructor