code_generator.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /**
  2. * Tencent is pleased to support the open source community by making Tars available.
  3. *
  4. * Copyright (C) 2016THL A29 Limited, a Tencent company. All rights reserved.
  5. *
  6. * Licensed under the BSD 3-Clause License (the "License"); you may not use this file except
  7. * in compliance with the License. You may obtain a copy of the License at
  8. *
  9. * https://opensource.org/licenses/BSD-3-Clause
  10. *
  11. * Unless required by applicable law or agreed to in writing, software distributed
  12. * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
  13. * CONDITIONS OF ANY KIND, either express or implied. See the License for the
  14. * specific language governing permissions and limitations under the License.
  15. */
  16. #include "code_generator.h"
  17. string CodeGenerator::printHeaderRemark(const string &sTypeName)
  18. {
  19. ostringstream s;
  20. s << "// **********************************************************************" << endl;
  21. s << "// Parsed By " << IDL_NAMESPACE_STR << "Parser(" << PARSER_VERSION << "), Generated By " << EXECUTE_FILENAME << "(" << GENERATOR_VERSION << ")" << endl;
  22. s << "// " << IDL_NAMESPACE_STR << "Parser Maintained By <" << TC_Common::upper(IDL_NAMESPACE_STR) << "> and " << EXECUTE_FILENAME << " Maintained By <superzheng>" << endl;
  23. s << "// Generated from \"" << TC_File::extractFileName(_sIdlFile) << "\" by " <<
  24. (_bEntry ? sTypeName : (_bMinimalMembers ? "Minimal" : "Relation")) << " Mode" << endl;
  25. s << "// **********************************************************************" << endl;
  26. s << endl;
  27. return s.str();
  28. }
  29. void CodeGenerator::createFile(const string &file, const bool bEntry)
  30. {
  31. _sIdlFile = getRealFileInfo(file);
  32. _bEntry = bEntry;
  33. g_parse->parse(_sIdlFile);
  34. vector<ContextPtr> contexts = g_parse->getContexts();
  35. for(size_t i = 0; i < contexts.size(); i++)
  36. {
  37. if (_sIdlFile == contexts[i]->getFileName())
  38. {
  39. scan(_sIdlFile, true); // collect idl symbols
  40. if (!_bClient && !_bServer)
  41. {
  42. if (_bTS)
  43. {
  44. generateTS(contexts[i]); // generate .ts
  45. }
  46. else
  47. {
  48. generateJS(contexts[i]); // generate .js
  49. if (_bDTS) generateDTS(contexts[i]); // generate .d.ts
  50. }
  51. }
  52. if (_bClient)
  53. {
  54. if (_bTS)
  55. {
  56. if (!generateTSProxy(contexts[i])) return; // generate .ts for proxy classes
  57. }
  58. else
  59. {
  60. if (!generateJSProxy(contexts[i])) return; // generate .js for proxy classes
  61. if (_bDTS) generateDTSProxy(contexts[i]); // generate .d.ts for proxy classes
  62. }
  63. }
  64. if (_bServer)
  65. {
  66. if (_bTS)
  67. {
  68. if (!generateTSServer(contexts[i])) return; // generate .ts for server classes
  69. generateTSServerImp(contexts[i]); // generate .ts for server implementations
  70. }
  71. else
  72. {
  73. if (!generateJSServer(contexts[i])) return; // generate .js for server classes
  74. if (_bDTS) generateDTSServer(contexts[i]); // generate .d.ts for server classes
  75. generateJSServerImp(contexts[i]); // generate .js for server implementations
  76. }
  77. }
  78. vector<string> files = contexts[i]->getIncludes();
  79. for (size_t ii = 0; _bRecursive && ii < files.size(); ii++)
  80. {
  81. CodeGenerator node;
  82. node.setRpcPath(_sRpcPath);
  83. node.setStreamPath(_sStreamPath);
  84. node.setTargetPath(_sToPath);
  85. node.setRecursive(_bRecursive);
  86. node.setUseSpecialPath(_bUseSpecialPath);
  87. node.setLongType(_iLongType);
  88. node.setStringBinaryEncoding(_bStringBinaryEncoding);
  89. node.setMinimalMembers(_bMinimalMembers);
  90. node.setDependent(_depMembers);
  91. node.setEnableTS(_bTS);
  92. node.setEnableDTS(_bDTS);
  93. node.createFile(files[ii], false);
  94. }
  95. }
  96. }
  97. }