"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Method = void 0; const MemberType_1 = require("../MemberType"); const Member_1 = require("./Member"); class Method extends Member_1.Member { constructor(memberInitializer) { super(MemberType_1.MemberType.Method, memberInitializer); this.implementation = null; } get hasMethodImplementation() { return this.implementation != null; } getMethodImplementation(className) { let lines = []; lines.push(this.info()); lines.push(`${this.type} ${className}::${this.name}${this.parameterWithBrackets}`); lines.push("{"); this.implementation.forEach(l => lines.push(" " + l)); lines.push("}"); return lines.join("\n") + "\n"; } parseBody(body) { if (Array.isArray(body)) { let parameters = body[0]; let lines = body[1]; this.parseMethodParameters(parameters); this.implementation = lines; } else { return this.parseMethodParameters(body); } } get parameterWithBrackets() { let parameters = this.parametersDefinition === "" ? "()" : `( ${this.parametersDefinition} )`; return parameters; } getHeaderDefinition() { let methodInfo = "\n " + this.info() + "\n "; if (this.isVirtual) { let numParameters = this.parameters.length; let methodReturnType = this.type === "void" ? "" : "R"; let returnTypeDefinition = this.type === "void" ? "" : (this.type + ", "); let parametersDefinition = ""; if (numParameters > 0) { parametersDefinition = ", " + this.parameters.map(p => p.type).join(", "); } return `${methodInfo}GDVIRTUAL${numParameters}${methodReturnType}( ${returnTypeDefinition}${this.name}${parametersDefinition} );`; } let parameters = this.parameterWithBrackets; return `${methodInfo}${this.type} ${this.name}${parameters};`; } getBindings(className) { if (this.isVirtual) { let parameterInfos = ""; for (let i = 0; i < this.parameters.length; i++) { let name = `, "${this.parameters[i].name}"`; parameterInfos += name; } return `GDVIRTUAL_BIND( ${this.name}${parameterInfos} );`; } else { return `ClassDB::bind_method( D_METHOD( "${this.name}" ) , &${className}::${this.name} );`; } } } exports.Method = Method; //# sourceMappingURL=Method.js.map