private static void fillUsedClasses()

in timescaledb-connector/src/main/java/com/epam/deltix/timebase/connector/util/RecordClassDescriptorUtils.java [131:178]


    private static void fillUsedClasses(com.epam.deltix.timebase.messages.schema.RecordClassDescriptorInfo descriptor,
                                        Set<String> usedClasses,
                                        Map<CharSequence, com.epam.deltix.timebase.messages.schema.RecordClassDescriptor> descriptorsMap) {
        com.epam.deltix.timebase.messages.schema.RecordClassDescriptorInfo parent = descriptor.getParent();

        if (usedClasses.contains(descriptor.getName())) {
            return;
        }

        if (parent != null) {
            fillUsedClasses(parent, usedClasses, descriptorsMap);
            usedClasses.add(parent.getName().toString());
        }

        ObjectList<DataFieldInfo> dataFields = descriptor.getDataFields();

        if (dataFields == null) {
            return;
        }

        for (int i = 0; i < dataFields.size(); i++) {
            DataFieldInfo field = dataFields.get(i);
            DataTypeInfo dataType = field.getDataType();

            if (dataType instanceof com.epam.deltix.timebase.messages.schema.ClassDataType) {
                com.epam.deltix.timebase.messages.schema.ClassDataType type = (com.epam.deltix.timebase.messages.schema.ClassDataType) dataType;
                ObjectArrayList<ClassDescriptorRefInfo> classDescriptors = type.getTypeDescriptors();

                classDescriptors.forEach(d -> {
                    fillUsedClasses(descriptorsMap.get(d.getName()), usedClasses, descriptorsMap);
                    usedClasses.add(d.getName().toString());
                });
            } else if (dataType instanceof com.epam.deltix.timebase.messages.schema.ArrayDataType) {
                com.epam.deltix.timebase.messages.schema.ArrayDataType type = (com.epam.deltix.timebase.messages.schema.ArrayDataType) dataType;
                DataTypeInfo elementDataType = type.getElementType();

                if (elementDataType instanceof com.epam.deltix.timebase.messages.schema.ClassDataType) {
                    com.epam.deltix.timebase.messages.schema.ClassDataType classElementType =
                            (com.epam.deltix.timebase.messages.schema.ClassDataType) elementDataType;
                    ObjectArrayList<ClassDescriptorRefInfo> descriptors = classElementType.getTypeDescriptors();
                    descriptors.forEach(d -> {
                        fillUsedClasses(descriptorsMap.get(d.getName()), usedClasses, descriptorsMap);
                        usedClasses.add(d.getName().toString());
                    });
                }
            }
        }
    }