in src/langs/cpp/combinator.js [936:984]
findUndefinedModel(emitter, type, parentObject = []) {
const models = this.models;
if (is.object(type)) {
let objectName = this.resolveName(type.objectName);
if (parentObject.indexOf(objectName) < 0) {
parentObject.push(objectName);
}
if (!_contain(this.definedModels, objectName)) {
const [obj] = models.filter(node => node.name === objectName);
if (obj) {
obj.body.filter(node => is.prop(node)).forEach(item => {
if (is.object(item.type)) {
const typeObjectName = this.resolveName(item.type.objectName);
if (typeObjectName === objectName) {
return;
} else if (parentObject.indexOf(typeObjectName) < 0) {
parentObject.push(typeObjectName);
}
}
this.findUndefinedModel(emitter, item.type, parentObject);
});
this.emitModel(emitter, obj);
}
}
} else if (is.array(type)) {
if (is.object(type.itemType)) {
const objectName = this.resolveName(type.itemType.objectName);
if (parentObject && parentObject.indexOf(objectName) > -1) {
return;
}
parentObject.push(objectName);
this.findUndefinedModel(emitter, type.itemType, parentObject);
} else {
this.findUndefinedModel(emitter, type.itemType, parentObject);
}
} else if (is.map(type)) {
if (is.object(type.valType)) {
const objectName = this.resolveName(type.valType.objectName);
if (parentObject && parentObject.indexOf(objectName) > -1) {
return;
}
parentObject.push(objectName);
this.findUndefinedModel(emitter, type.valType, parentObject);
} else {
this.findUndefinedModel(emitter, type.valType, parentObject);
}
}
return parentObject;
}