in src/langs/cpp/combinator.js [117:156]
addModelInclude(modelName) {
let realFullClassName, includeFileName, using;
let accessPath = modelName.split('.');
const dependencies = this.dependencies;
if (_contain(modelName, '$')) {
realFullClassName = this.coreClass(modelName);
includeFileName = `<${_toSnakeCase(this.config.tea.name)}/${_toSnakeCase(this.config.tea.header)}>`;
} else if (accessPath.length > 1 && dependencies[accessPath[0]]) {
const info = dependencies[accessPath[0]];
// is third package model
realFullClassName = `${_upperFirst(_name(info.scope))
}_${_upperFirst(_name(info.package_name))
}::${_name(accessPath.slice(1).join('.'))
}`;
let scope = _toSnakeCase(_name(info.scope));
let client = _toSnakeCase(_name(info.package_name));
includeFileName = `<${scope}/${client}.${this.config.header_ext}>`;
using = null;
} else if (accessPath.length === 1 && dependencies[accessPath[0]]) {
const info = dependencies[accessPath[0]];
realFullClassName = `${_upperFirst(_name(info.scope))
}_${_upperFirst(_name(info.package_name))
}::Client`;
let scope = _toSnakeCase(_name(info.scope));
let client = _toSnakeCase(_name(info.package_name));
includeFileName = `<${scope}/${client}.${this.config.header_ext}>`;
using = null;
} else {
// self model
realFullClassName = _name(accessPath.join('.'));
includeFileName = `<${_toSnakeCase(this.scope)}/${_toSnakeCase(this.package)}.${this.config.header_ext}>`;
using = null;
}
if (!this.classNameMap[realFullClassName]) {
const include = { import: realFullClassName, includeFileName, using };
this.classNameMap[realFullClassName] = include;
this.includeList.push(include);
}
return realFullClassName;
}