1 /* 2 * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 3 * 4 * HDF is dual licensed: you can use it either under the terms of 5 * the GPL, or the BSD license, at your option. 6 * See the LICENSE file in the root of this repository for complete details. 7 */ 8 9 #ifndef OHOS_HDI_CPP_CLIENT_PROXY_CODE_EMITTER_H 10 #define OHOS_HDI_CPP_CLIENT_PROXY_CODE_EMITTER_H 11 12 #include "codegen/cpp_code_emitter.h" 13 14 namespace OHOS { 15 namespace HDI { 16 class CppClientProxyCodeEmitter : public CppCodeEmitter { 17 public: CppClientProxyCodeEmitter()18 CppClientProxyCodeEmitter() : CppCodeEmitter() 19 { 20 devmgrDeathRecipientName_ = "IServiceManagerDeathRecipient"; 21 devmgrVersionName_ = "OHOS::HDI::ServiceManager::V1_0"; 22 } 23 24 ~CppClientProxyCodeEmitter() override = default; 25 26 protected: 27 std::string devmgrDeathRecipientName_; 28 std::string devmgrVersionName_; 29 30 private: 31 bool ResolveDirectory(const std::string &targetDirectory) override; 32 33 void EmitCode() override; 34 35 void EmitProxyHeaderFile(); 36 37 void EmitProxyHeaderInclusions(StringBuilder &sb); 38 39 void GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet &headerFiles) const; 40 41 void GetSourceOtherFileInclusions(HeaderFile::HeaderFileSet &headerFiles) const; 42 43 void EmitProxyDecl(StringBuilder &sb, const std::string &prefix); 44 45 void EmitProxyConstructor(StringBuilder &sb, const std::string &prefix) const; 46 47 void EmitProxyMethodDecls(StringBuilder &sb, const std::string &prefix) const; 48 49 void EmitProxyMethodDecl( 50 const AutoPtr<ASTMethod> &method, StringBuilder &sb, const std::string &prefix) const; 51 52 void EmitProxyConstants(StringBuilder &sb, const std::string &prefix) const; 53 54 void EmitProxyMethodParameter( 55 const AutoPtr<ASTParameter> ¶m, StringBuilder &sb, const std::string &prefix) const; 56 57 void EmitPassthroughProxySourceFile(); 58 59 void EmitPassthroughProxySourceInclusions(StringBuilder &sb); 60 61 void EmitPassthroughGetInstanceMethodImpl(StringBuilder &sb, const std::string &prefix) const; 62 63 void EmitProxySourceFile(); 64 65 void EmitProxySourceInclusions(StringBuilder &sb); 66 67 void GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet &headerFiles) const; 68 69 void EmitGetMethodImpl(StringBuilder &sb, const std::string &prefix) const; 70 71 void EmitGetInstanceMethodImpl(StringBuilder &sb, const std::string &prefix); 72 73 void EmitProxyPassthroughtLoadImpl(StringBuilder &sb, const std::string &prefix) const; 74 75 void EmitProxyMethodImpls(StringBuilder &sb, const std::string &prefix); 76 77 void EmitProxyMethodImpl(const AutoPtr<ASTInterfaceType> interface, const AutoPtr<ASTMethod> &method, 78 StringBuilder &sb, const std::string &prefix); 79 80 void EmitProxyMethodBody(const AutoPtr<ASTInterfaceType> interface, const AutoPtr<ASTMethod> &method, 81 StringBuilder &sb, const std::string &prefix); 82 83 void EmitWriteInterfaceToken(const std::string &parcelName, StringBuilder &sb, const std::string &prefix) const; 84 85 void EmitWriteFlagOfNeedSetMem(const AutoPtr<ASTMethod> &method, const std::string &dataBufName, StringBuilder &sb, 86 const std::string &prefix) const; 87 88 void GetUtilMethods(UtilMethodMap &methods) override; 89 90 void EmitProxyStaticMethodDecl( 91 const AutoPtr<ASTMethod> &method, StringBuilder &sb, const std::string &prefix) const; 92 93 void EmitProxyStaticMethodImpl(const AutoPtr<ASTMethod> &method, StringBuilder &sb, const std::string &prefix); 94 95 void EmitProxyStaticMethodBody(const AutoPtr<ASTMethod> &method, StringBuilder &sb, const std::string &prefix); 96 97 void EmitProxyIsProxyMethodImpl(StringBuilder &sb, const std::string &prefix) const; 98 void EmitProxyCastFromMethodImpls(StringBuilder &sb, const std::string &prefix) const; 99 void EmitProxyCastFromMethodImpl(const AutoPtr<ASTInterfaceType> interface, StringBuilder &sb, 100 const std::string &prefix) const; 101 void EmitProxyCastFromMethodImplTemplate(StringBuilder &sb, const std::string &prefix) const; 102 103 void EmitProxyDevmgrDeathRecipient(StringBuilder &sb, const std::string &prefix) const; 104 105 void EmitProxyPublicMembers(StringBuilder &sb, const std::string &prefix) const; 106 107 void EmitProxyDevmgrDeathCallBack(StringBuilder &sb, const std::string &prefix) const; 108 109 void EmitProxyReconnectMethodDecl(StringBuilder &sb, const std::string &prefix) const; 110 111 void EmitProxyGetRemoteMethodDecl(StringBuilder &sb, const std::string &prefix) const; 112 113 void EmitGetInstanceMethodInitProxyImpl(StringBuilder &sb, const std::string &prefix) const; 114 115 void EmitProxyCppReconnectMethodImpl(StringBuilder &sb, const std::string &prefix) const; 116 }; 117 } // namespace HDI 118 } // namespace OHOS 119 120 #endif // OHOS_HDI_CPP_CLIENT_PROXY_CODE_EMITTER_H