dataTypes.forEach(dataType -> {
int highestDependencyIndex = -1;
- for (final String dependencyName : getDependencyTypes(dataType)) {
+ for (final String dependencyName : getDependencyTypes(dataType, dataTypes)) {
final DataTypeDefinition dependency = dataTypeDefinitionsMap.get(dependencyName);
final int indexOfDependency = sortedDataTypeDefinitions.lastIndexOf(dependency);
highestDependencyIndex = indexOfDependency > highestDependencyIndex ? indexOfDependency : highestDependencyIndex;
return sortedDataTypeDefinitions;
}
- private Collection<String> getDependencyTypes(final DataTypeDefinition dataType) {
+ private Collection<String> getDependencyTypes(final DataTypeDefinition dataType, final List<DataTypeDefinition> dataTypes) {
final Set<String> dependencies = new HashSet<>();
if (dataType.getDerivedFromName() != null) {
dependencies.add(dataType.getDerivedFromName());
if (dataType.getProperties() != null) {
dataType.getProperties().stream().forEach(property -> dependencies.add(property.getType()));
}
+ dataTypes.stream().filter(dependencyCandidate -> dependencies.contains(dependencyCandidate.getName()))
+ .forEach(dependencyDataType -> dependencies.addAll(getDependencyTypes(dependencyDataType, dataTypes)));
return dependencies;
}