123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /**
- * Tencent is pleased to support the open source community by making Tars available.
- *
- * Copyright (C) 2016THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the BSD 3-Clause License (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * https://opensource.org/licenses/BSD-3-Clause
- *
- * Unless required by applicable law or agreed to in writing, software distributed
- * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
- * CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
- */
- #include "code_generator.h"
- string CodeGenerator::generateJSServerImp(const NamespacePtr &nPtr, const InterfacePtr &pPtr, const OperationPtr &oPtr)
- {
- ostringstream str;
- str << nPtr->getId() << "." << pPtr->getId() << "Imp.prototype." << oPtr->getId() << " = function (current";
- vector<ParamDeclPtr> & vParamDecl = oPtr->getAllParamDeclPtr();
- for (size_t i = 0; i < vParamDecl.size(); i++)
- {
- str << ", " << vParamDecl[i]->getTypeIdPtr()->getId();
- }
- str << ") {" << endl;
- INC_TAB;
- str << TAB << "//TODO::" << endl;
- DEL_TAB;
- str << "};" << endl << endl;
- return str.str();
- }
- string CodeGenerator::generateJSServerImp(const NamespacePtr &nPtr, const InterfacePtr &pPtr)
- {
- ostringstream str;
- vector<OperationPtr> & vOperation = pPtr->getAllOperationPtr();
- for (size_t i = 0; i < vOperation.size(); i++)
- {
- str << generateJSServerImp(nPtr, pPtr, vOperation[i]);
- }
- return str.str();
- }
- string CodeGenerator::generateJSServerImp(const ContextPtr &cPtr, const NamespacePtr &nPtr)
- {
- ostringstream str;
- vector<InterfacePtr> & is = nPtr->getAllInterfacePtr();
- for (size_t i = 0; i < is.size(); i++)
- {
- str << generateJSServerImp(nPtr, is[i]) << endl;
- }
- return str.str();
- }
- void CodeGenerator::generateJSServerImp(const ContextPtr &cPtr)
- {
- string sFileName = TC_File::excludeFileExt(_sToPath + TC_File::extractFileName(cPtr->getFileName())) + "Imp.js";
- if (TC_File::isFileExist(sFileName))
- {
- return ;
- }
- ostringstream str;
- str << printHeaderRemark("Imp");
- str << "\"use strict\";" << endl << endl;
- vector<NamespacePtr> namespaces = cPtr->getNamespaces();
- set<string> setNamespace;
- for(size_t i = 0; i < namespaces.size(); i++)
- {
- if (setNamespace.count(namespaces[i]->getId()) != 0)
- {
- continue;
- }
- setNamespace.insert(namespaces[i]->getId());
- str << "var " << namespaces[i]->getId() << " = require(\"./"
- << TC_File::excludeFileExt(TC_File::extractFileName(cPtr->getFileName())) << ".js\")."
- << namespaces[i]->getId() << ";" << endl;
- str << "module.exports." << namespaces[i]->getId() << " = " << namespaces[i]->getId() << ";" << endl;
- }
- str << endl;
- set<string> setInterface;
- for(size_t i = 0; i < namespaces.size(); i++)
- {
- vector<InterfacePtr> & is = namespaces[i]->getAllInterfacePtr();
- for (size_t ii = 0; ii < is.size(); ii++)
- {
- if (setInterface.count(namespaces[i]->getId() + "::" + is[ii]->getId()) != 0)
- {
- continue;
- }
- setInterface.insert(namespaces[i]->getId() + "::" + is[ii]->getId());
- str << namespaces[i]->getId() << "." << is[ii]->getId() << "Imp.prototype.initialize = function () {" << endl;
- INC_TAB;
- str << TAB << "//TODO::" << endl;
- DEL_TAB;
- str << "};" << endl << endl;
- }
- }
- for(size_t i = 0; i < namespaces.size(); i++)
- {
- str << generateJSServerImp(cPtr, namespaces[i]);
- }
- TC_File::makeDirRecursive(_sToPath);
- makeUTF8File(sFileName, str.str());
- }
|