in timescaledb-connector/src/main/java/com/epam/deltix/timebase/connector/util/RecordClassDescriptorUtils.java [91:129]
private static void fillUsedClasses(RecordClassDescriptor descriptor, Set<String> usedClasses) {
RecordClassDescriptor parent = descriptor.getParent();
if (usedClasses.contains(descriptor.getName())) {
return;
}
if (parent != null) {
fillUsedClasses(parent, usedClasses);
usedClasses.add(parent.getName());
}
DataField[] fields = descriptor.getFields();
for (DataField field : fields) {
var dataType = field.getType();
if (dataType instanceof ClassDataType) {
ClassDataType type = (ClassDataType) dataType;
RecordClassDescriptor[] classDescriptors = type.getDescriptors();
for (RecordClassDescriptor d : classDescriptors) {
fillUsedClasses(d, usedClasses);
usedClasses.add(d.getName());
}
} else if (dataType instanceof ArrayDataType) {
ArrayDataType type = (ArrayDataType) dataType;
DataType elementDataType = type.getElementDataType();
if (elementDataType instanceof ClassDataType) {
ClassDataType classElementType = (ClassDataType) elementDataType;
RecordClassDescriptor[] descriptors = classElementType.getDescriptors();
for (RecordClassDescriptor d : descriptors) {
fillUsedClasses(d, usedClasses);
usedClasses.add(d.getName());
}
}
}
}
}