@tripsnek/tmf
Version:
TypeScript Modeling Framework - A TypeScript port of the Eclipse Modeling Framework (EMF)
34 lines (33 loc) • 4.71 kB
JavaScript
import { TGenUtils as DU } from './tgen-utils.js';
/**
* Source code generation for *impl.ts files for EClasses.
*
* @tripsnek
*/
export class TGeneratorImpl {
generate(eClass, toImport) {
const genClassName = DU.genGenClassName(eClass);
const apiClassName = eClass.getName();
const implClassName = DU.genImplClassName(eClass);
const isEcore = eClass.getEPackage().getName() == 'ecore';
return `
${isEcore ? DU.ECORE_DEFAULT_IMPORTS : DU.DEFAULT_IMPORTS}
${DU.genApiImports(eClass, toImport, '..' + DU.API_PATH)}
import {${genClassName}} from '..${DU.GEN_PATH}/${DU.genClassGenName(eClass)}.js'
import { ${apiClassName} } from '..${DU.API_PATH}/${DU.genClassApiName(eClass)}.js';
/**
* Editable Impl class.
*/
export class ${implClassName} extends ${genClassName}{
${this.generateOperations(eClass)}
}`;
}
generateOperations(eClass) {
let result = '';
for (const eop of eClass.getEOperations()) {
result += `public override ${DU.eopSignature(eop)} {throw new Error('Not implemented');}`;
}
return result;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGdlbmVyYXRvci1pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9zb3VyY2UtZ2VuZXJhdG9ycy90Z2VuZXJhdG9yLWltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsSUFBSSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUdsRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFDbEIsUUFBUSxDQUFDLE1BQWMsRUFBRSxRQUEwQjtRQUN4RCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0QyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLE9BQU8sQ0FBQztRQUMxRCxPQUFPO1FBQ0gsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxlQUFlO1FBQ3ZELEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDOUMsWUFBWSxhQUFhLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FDcEUsTUFBTSxDQUNQO2lCQUNZLFlBQVksY0FBYyxFQUFFLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQ3RFLE1BQU0sQ0FDUDs7Ozs7cUJBS2dCLGFBQWEsWUFBWSxZQUFZO1VBQ2hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7UUFDakMsQ0FBQztJQUNQLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxNQUFjO1FBQ3ZDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxtQkFBbUIsRUFBRSxDQUFDLFlBQVksQ0FDMUMsR0FBRyxDQUNKLHdDQUF3QyxDQUFDO1FBQzVDLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFQ2xhc3MgfSBmcm9tICcuLi9tZXRhbW9kZWwvYXBpL2VjbGFzcy5qcyc7XHJcbmltcG9ydCB7IFRHZW5VdGlscyBhcyBEVSB9IGZyb20gJy4vdGdlbi11dGlscy5qcyc7XHJcbmltcG9ydCB7IEVDbGFzc2lmaWVyIH0gZnJvbSAnLi4vbWV0YW1vZGVsL2FwaS9lY2xhc3NpZmllci5qcyc7XHJcblxyXG4vKipcclxuICogU291cmNlIGNvZGUgZ2VuZXJhdGlvbiBmb3IgKmltcGwudHMgZmlsZXMgZm9yIEVDbGFzc2VzLlxyXG4gKlxyXG4gKiBAdHJpcHNuZWtcclxuICovXHJcbmV4cG9ydCBjbGFzcyBUR2VuZXJhdG9ySW1wbCB7XHJcbiAgcHVibGljIGdlbmVyYXRlKGVDbGFzczogRUNsYXNzLCB0b0ltcG9ydDogU2V0PEVDbGFzc2lmaWVyPik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBnZW5DbGFzc05hbWUgPSBEVS5nZW5HZW5DbGFzc05hbWUoZUNsYXNzKTtcclxuICAgIGNvbnN0IGFwaUNsYXNzTmFtZSA9IGVDbGFzcy5nZXROYW1lKCk7XHJcbiAgICBjb25zdCBpbXBsQ2xhc3NOYW1lID0gRFUuZ2VuSW1wbENsYXNzTmFtZShlQ2xhc3MpO1xyXG4gICAgY29uc3QgaXNFY29yZSA9IGVDbGFzcy5nZXRFUGFja2FnZSgpLmdldE5hbWUoKSA9PSAnZWNvcmUnO1xyXG4gICAgcmV0dXJuIGBcclxuICAgICAgJHtpc0Vjb3JlID8gRFUuRUNPUkVfREVGQVVMVF9JTVBPUlRTIDogRFUuREVGQVVMVF9JTVBPUlRTfVxyXG4gICAgICAke0RVLmdlbkFwaUltcG9ydHMoZUNsYXNzLCB0b0ltcG9ydCwgJy4uJyArIERVLkFQSV9QQVRIKX1cclxuICAgICAgaW1wb3J0IHske2dlbkNsYXNzTmFtZX19IGZyb20gJy4uJHtEVS5HRU5fUEFUSH0vJHtEVS5nZW5DbGFzc0dlbk5hbWUoXHJcbiAgICAgIGVDbGFzc1xyXG4gICAgKX0uanMnXHJcbiAgICAgIGltcG9ydCB7ICR7YXBpQ2xhc3NOYW1lfSB9IGZyb20gJy4uJHtEVS5BUElfUEFUSH0vJHtEVS5nZW5DbGFzc0FwaU5hbWUoXHJcbiAgICAgIGVDbGFzc1xyXG4gICAgKX0uanMnO1xyXG5cclxuICAgICAgIC8qKlxyXG4gICAgICAgICogRWRpdGFibGUgSW1wbCBjbGFzcy5cclxuICAgICAgICAqL1xyXG4gICAgICBleHBvcnQgY2xhc3MgJHtpbXBsQ2xhc3NOYW1lfSBleHRlbmRzICR7Z2VuQ2xhc3NOYW1lfXtcclxuICAgICAgICAke3RoaXMuZ2VuZXJhdGVPcGVyYXRpb25zKGVDbGFzcyl9XHJcbiAgICAgIH1gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZU9wZXJhdGlvbnMoZUNsYXNzOiBFQ2xhc3MpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgZm9yIChjb25zdCBlb3Agb2YgZUNsYXNzLmdldEVPcGVyYXRpb25zKCkpIHtcclxuICAgICAgcmVzdWx0ICs9IGBwdWJsaWMgb3ZlcnJpZGUgJHtEVS5lb3BTaWduYXR1cmUoXHJcbiAgICAgICAgZW9wXHJcbiAgICAgICl9IHt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO31gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbn1cclxuIl19