private void processRecord(ARecordType requiredType, ARecordVisitablePointable srp, AListVisitablePointable inputList, int nestedLevel) throws IOException { if (rbStack.size() < (nestedLevel + 1)) { rbStack.add(new RecordBuilder()); } rbStack.get(nestedLevel).reset(requiredType); rbStack.get(nestedLevel).init(); List<IVisitablePointable> fieldNames = srp.getFieldNames(); List<IVisitablePointable> fieldValues = srp.getFieldValues(); List<IVisitablePointable> fieldTypes = srp.getFieldTypeTags(); for (int i = 0; i < fieldNames.size(); i++) { IVisitablePointable subRecFieldName = fieldNames.get(i); recordPath.push(subRecFieldName); if (isValidPath(inputList)) { if (requiredType != null && requiredType.getTypeTag() != ATypeTag.ANY) { addKeptFieldToSubRecord(requiredType, subRecFieldName, fieldValues.get(i), fieldTypes.get(i), inputList, nestedLevel); } else { addKeptFieldToSubRecord(DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE, subRecFieldName, fieldValues.get(i), fieldTypes.get(i), inputList, nestedLevel); } } recordPath.pop(); } }