}
FieldDefinition[] orderedFields = new FieldDefinition[fields.size()];
for (Field fld : fields) {
Position pos = fld.getAnnotation(Position.class);
if (pos != null) {
if (pos.value() < 0 || pos.value() >= fields.size()) {
kbuilder.addBuilderResult(new TypeDeclarationError(typeDeclaration,
"Out of range position " + pos.value() + " for field '" + fld.getName() + "' on class " + cls.getName()));
continue;
}
if (orderedFields[pos.value()] != null) {
kbuilder.addBuilderResult(new TypeDeclarationError(typeDeclaration,
"Duplicated position " + pos.value() + " for field '" + fld.getName() + "' on class " + cls.getName()));
continue;
}
FieldDefinition fldDef = clsDef.getField(fld.getName());
if (fldDef == null) {
fldDef = new FieldDefinition(fld.getName(), fld.getType().getName());
}
fldDef.setIndex(pos.value());
orderedFields[pos.value()] = fldDef;
}
}
for (FieldDefinition fld : orderedFields) {
if (fld != null) {
// it's null if there is no @Position