in lib/semantic.js [527:582]
findProperty(model, propName, isException = false, moduleName, extendFrom = []) {
let find = model.modelBody.nodes.find((item) => {
return item.fieldName.lexeme === propName;
});
if(find) {
return {
modelField: find,
modelName: model.modelName.lexeme,
extendFrom: extendFrom,
};
}
if(!model.extendOn && !isException) {
return;
}
let extendModel;
let checker = this;
if(!model.extendOn && isException) {
extendModel = builtin.get('$Error');
isException = false;
} else if (model.extendOn.type === 'moduleModel') {
const [ main, ...path ] = model.extendOn.path;
moduleName = main.lexeme;
checker = this.dependencies.get(moduleName);
const typeName = path.map((item) => {
return item.lexeme;
}).join('.');
extendModel = checker.models.get(typeName);
} else if (model.extendOn.type === 'subModel') {
let modelName = model.extendOn.path.map((tag) => {
return tag.lexeme;
}).join('.');
extendModel = this.models.get(modelName);
} else if (model.extendOn.idType === 'builtin_model') {
extendModel = builtin.get(model.extendOn.lexeme);
} else {
extendModel = this.models.get(model.extendOn.lexeme);
}
// console.log(model)
extendFrom.push({
moduleName,
modelName: extendModel.modelName.lexeme
});
find = checker.findProperty(extendModel, propName, isException, moduleName, extendFrom);
if(!find) {
return;
}
return {
moduleName,
...find
};
}