tars2android.h 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  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. #ifndef _TARS2ANDROID_H
  17. #define _TARS2ANDROID_H
  18. #include "parse.h"
  19. #include <cassert>
  20. #include <string>
  21. #define TARS_PACKAGE ".tup.tars"
  22. #define PROXY_PACKAGE ".proxy"
  23. #define WUP_PACKAGE ".tup"
  24. /**
  25. * 根据tars生成java文件
  26. * 包括结构的编解码以及生成Proxy和Servant
  27. */
  28. class Tars2Java
  29. {
  30. public:
  31. Tars2Java();
  32. /**
  33. * 设置代码生成的根目录
  34. * @param dir
  35. */
  36. void setBaseDir(const string& dir);
  37. /**
  38. * 设置包前缀
  39. * @param prefix
  40. */
  41. void setBasePackage(const string& prefix);
  42. /**
  43. * 默认将非byte的vector转list 加上该参数后转数组
  44. */
  45. void setForceArray(bool bArray) { _bForceArray = bArray; }
  46. void setCheckDefault(bool bCheck) { _bCheckDefault = bCheck; }
  47. /*支持自定义字符集*/
  48. void setCharset(string charset) { _sCharset = charset; }
  49. /*支持javabean规范*/
  50. void setWithJbr(bool bJbr) { _bWithJbr = bJbr;}
  51. /*去掉属性的read write方法、 cloneable、equals、hashCode、clone、display*/
  52. void setWithCompact(bool bCompact) { _bWithCompact = bCompact;}
  53. /*生成枚举类时,采用int方式实现*/
  54. void setEnumCompact(bool bCompact) { _bEnumCompact = bCompact;}
  55. /*tars与json互相转换*/
  56. void setJsonSupport(bool bJson) { _bJson = bJson;}
  57. void setWithGenerateInterfaceDependencies(bool bWithGenerateInterfaceDependencies)
  58. {
  59. _bWithGenerateInterfaceDependencies = bWithGenerateInterfaceDependencies;
  60. }
  61. void setWithFilterRomTars(bool bWithFilterRomTars)
  62. {
  63. _bWithFilterRomTars = bWithFilterRomTars;
  64. }
  65. // 增加的接口定义
  66. string generateConstructor(const TypePtr& vType) const;
  67. string generateAndroidJavaParams(const vector<ParamDeclPtr>& vParamDecl, bool needParamType, bool needOutParam) const;
  68. string generateAndroidStub(const InterfacePtr& pPtr, const NamespacePtr& nPtr) const;
  69. /**
  70. * 生成
  71. * @param file
  72. * @param isFramework 是否是框架
  73. */
  74. void createFile(const string& file);
  75. /**
  76. * 设置TARS库的报名
  77. */
  78. void setTarsPacket(const std::string& sPacket)
  79. {
  80. s_TARS_PACKAGE = sPacket + TARS_PACKAGE;
  81. s_PROXY_PACKAGE = sPacket + PROXY_PACKAGE;
  82. s_WUP_PACKAGE = sPacket + WUP_PACKAGE;
  83. }
  84. protected:
  85. /**
  86. * 根据命名空间获取文件路径
  87. * @param ns 命名空间
  88. *
  89. * @return string
  90. */
  91. string getFilePath(const string& ns) const;
  92. string _packagePrefix;
  93. string _baseDir;
  94. bool _bForceArray;
  95. bool _bCheckDefault;
  96. string _sCharset;
  97. bool _bWithJbr;
  98. bool _bWithCompact;
  99. bool _bEnumCompact;
  100. bool _bJson;
  101. bool _bWithGenerateInterfaceDependencies;
  102. bool _bWithFilterRomTars;
  103. protected:
  104. /**
  105. * 生成某类型的解码源码
  106. * @param pPtr
  107. *
  108. * @return string
  109. */
  110. string writeTo(const TypeIdPtr& pPtr) const;
  111. /**
  112. * 生成某类型的编码源码
  113. * @param pPtr
  114. *
  115. * @return string
  116. */
  117. string readFrom(const TypeIdPtr& pPtr) const;
  118. /**
  119. *
  120. * 这个函数目前是用不到的
  121. * @param pPtr
  122. *
  123. * @return string
  124. */
  125. string display(const TypeIdPtr& pPtr) const;
  126. //下面是类型描述的源码生成
  127. protected:
  128. /*
  129. * 生成某类型的初始化字符串
  130. * @param pPtr
  131. *
  132. * @return string
  133. */
  134. string toTypeInit(const TypePtr& pPtr) const;
  135. /**
  136. * 生成某类型的对应对象的字符串描述源码
  137. * @param pPtr
  138. *
  139. * @return string
  140. */
  141. string toObjStr(const TypePtr& pPtr) const;
  142. /**
  143. * 判断是否是对象类型
  144. */
  145. bool isObjType(const TypePtr& pPtr) const;
  146. /**
  147. * 生成某类型的字符串描述源码
  148. * @param pPtr
  149. *
  150. * @return string
  151. */
  152. string tostr(const TypePtr& pPtr) const;
  153. /**
  154. * 生成内建类型的字符串源码
  155. * @param pPtr
  156. *
  157. * @return string
  158. */
  159. string tostrBuiltin(const BuiltinPtr& pPtr) const;
  160. /**
  161. * 生成vector的字符串描述
  162. * @param pPtr
  163. *
  164. * @return string
  165. */
  166. string tostrVector(const VectorPtr& pPtr) const;
  167. /**
  168. * 生成map的字符串描述
  169. * @param pPtr
  170. *
  171. * @return string
  172. */
  173. string tostrMap(const MapPtr& pPtr, bool bNew = false) const;
  174. /**
  175. * 生成某种结构的符串描述
  176. * @param pPtr
  177. *
  178. * @return string
  179. */
  180. string tostrStruct(const StructPtr& pPtr) const;
  181. /**
  182. * 生成某种枚举的符串描述
  183. * @param pPtr
  184. *
  185. * @return string
  186. */
  187. string tostrEnum(const EnumPtr& pPtr) const;
  188. /**
  189. * 生成类型变量的解码源码
  190. * @param pPtr
  191. *
  192. * @return string
  193. */
  194. string decode(const TypeIdPtr& pPtr) const;
  195. /**
  196. * 生成类型变量的编码源码
  197. * @param pPtr
  198. *
  199. * @return string
  200. */
  201. string encode(const TypeIdPtr& pPtr) const;
  202. //以下是h和java文件的具体生成
  203. protected:
  204. /**
  205. * 结构的md5
  206. * @param pPtr
  207. *
  208. * @return string
  209. */
  210. string MD5(const StructPtr& pPtr) const;
  211. /**
  212. * 生成结构的Holder类,用于引用传递
  213. * @param pPtr
  214. * @param nPtr
  215. *
  216. * @return string
  217. */
  218. string generateHolder(const StructPtr& pPtr, const NamespacePtr& nPtr) const;
  219. /**
  220. * 放置默认元素用于识别map/list类型
  221. * @param pPtr
  222. * @param sElemName 元素名称
  223. *
  224. * @return string
  225. */
  226. string generateDefautElem(const TypePtr& pPtr, const string& sElemName) const;
  227. /**
  228. * 生成结构的java文件内容
  229. * @param pPtr
  230. *
  231. * @return string
  232. */
  233. string generateJava(const StructPtr& pPtr, const NamespacePtr& nPtr) const;
  234. /**
  235. * 生成容器的java源码
  236. * @param pPtr
  237. *
  238. * @return string
  239. */
  240. string generateJava(const ContainerPtr& pPtr) const;
  241. /**
  242. * 生成参数声明的java文件内容
  243. * @param pPtr
  244. *
  245. * @return string
  246. */
  247. string generateJava(const ParamDeclPtr& pPtr) const;
  248. /**
  249. * 生成作操作的proxy的java文件内容
  250. * @param pPtr
  251. * @param cn
  252. *
  253. * @return string
  254. */
  255. string generateJava(const OperationPtr& pPtr, const string& cn) const;
  256. /**
  257. * 生成操作java文件函数调用分发的源码
  258. * @param pPtr
  259. * @param cn
  260. *
  261. * @return string
  262. */
  263. string generateDispatchJava(const OperationPtr& pPtr, const string& cn) const;
  264. /**
  265. * 生成接口的java文件的源码
  266. * @param pPtr
  267. * @param nPtr
  268. *
  269. * @return string
  270. */
  271. string generateJava(const InterfacePtr& pPtr, const NamespacePtr& nPtr) const;
  272. /**
  273. * 生成Proxy接口的java文件的源码
  274. * @param pPtr
  275. * @param nPtr
  276. *
  277. * @return string
  278. */
  279. string generatePrx(const InterfacePtr& pPtr, const NamespacePtr& nPtr) const;
  280. /**
  281. * 生成Proxy帮助类的java文件的源码
  282. * @param pPtr
  283. * @param nPtr
  284. *
  285. * @return string
  286. */
  287. string generatePrxHelper(const InterfacePtr& pPtr, const NamespacePtr& nPtr) const;
  288. /**
  289. * 生成Proxy回调类的java文件的源码
  290. * @param pPtr
  291. * @param nPtr
  292. *
  293. * @return string
  294. */
  295. string generatePrxCallback(const InterfacePtr& pPtr, const NamespacePtr& nPtr) const;
  296. /**
  297. * 生成枚举的头文件源码
  298. * @param pPtr
  299. *
  300. * @return string
  301. */
  302. string generateJava(const EnumPtr& pPtr, const NamespacePtr& nPtr) const;
  303. /**
  304. * 生成常量java源码
  305. * @param pPtr
  306. *
  307. * @return string
  308. */
  309. void generateJava(const ConstPtr& pPtr, const NamespacePtr& nPtr) const;
  310. /**
  311. * 生成名字空间java文件源码
  312. * @param pPtr
  313. *
  314. * @return string
  315. */
  316. void generateJava(const NamespacePtr& pPtr) const;
  317. /**
  318. * 生成每个tars文件的java文件源码
  319. * @param pPtr
  320. *
  321. * @return string
  322. */
  323. void generateJava(const ContextPtr& pPtr) const;
  324. private:
  325. std::string s_TARS_PACKAGE;
  326. std::string s_PROXY_PACKAGE;
  327. std::string s_HOLDER_PACKAGE;
  328. std::string s_SERVER_PACKAGE;
  329. std::string s_WUP_PACKAGE;
  330. };
  331. #endif