in lib/semantic.js [3345:3392]
getExtendFileds(extendOn, isException, keys) {
keys = keys || new Map();
if(!extendOn && !isException) {
return [];
}
let extendModel, moduleName;
let checker = this;
if(!extendOn && isException) {
extendModel = builtin.get('$Error');
isException = false;
} else if (extendOn.type === 'moduleModel') {
const [ main, ...path ] = 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 (extendOn.type === 'subModel') {
let modelName = extendOn.path.map((tag) => {
return tag.lexeme;
}).join('.');
extendModel = this.models.get(modelName);
} else if (extendOn.idType === 'builtin_model') {
extendModel = builtin.get(extendOn.lexeme);
} else {
extendModel = this.models.get(extendOn.lexeme);
}
if(!extendModel) {
return [];
}
let extendFileds = extendModel.modelBody.nodes.filter(node => {
const fieldName = node.fieldName.lexeme;
if(keys.has(fieldName)) {
return false;
}
keys.set(fieldName, true);
// non
// node.tokenRange = [];
return true;
});
if(extendModel.extendOn) {
return extendFileds.concat(this.getExtendFileds(extendModel.extendOn, isException, keys));
}
return extendFileds;
}