private Set<ContainerElementTypeDescriptor> asContainerElementTypeDescriptors(Type type, ContainerElementMetaDataTree containerElementMetaDataTree, boolean defaultGroupSequenceRedefined, List<Class<?>> defaultGroupSequence) { Set<ContainerElementTypeDescriptor> containerElementTypeDescriptors = new HashSet<>(); for ( Entry<TypeVariable<?>, ContainerElementMetaDataTree> entry : containerElementMetaDataTree.nodes.entrySet() ) { TypeVariable<?> childTypeParameter = entry.getKey(); ContainerElementMetaDataTree childContainerElementMetaDataTree = entry.getValue(); Set<ContainerElementTypeDescriptor> childrenDescriptors = asContainerElementTypeDescriptors( childContainerElementMetaDataTree.elementType, childContainerElementMetaDataTree, defaultGroupSequenceRedefined, defaultGroupSequence ); containerElementTypeDescriptors.add( new ContainerElementTypeDescriptorImpl( childContainerElementMetaDataTree.elementType, childContainerElementMetaDataTree.containerClass, TypeVariables.getTypeParameterIndex( childTypeParameter ), asDescriptors( childContainerElementMetaDataTree.constraints ), childrenDescriptors, childContainerElementMetaDataTree.cascading, defaultGroupSequenceRedefined, defaultGroupSequence, childContainerElementMetaDataTree.groupConversionDescriptors ) ); } return containerElementTypeDescriptors; }