1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef OHOS_IDL_CPP_CLIENT_PROXY_CODE_EMITTER_H 17 #define OHOS_IDL_CPP_CLIENT_PROXY_CODE_EMITTER_H 18 19 #include "hdi_cpp_code_emitter.h" 20 21 namespace OHOS { 22 namespace Idl { 23 class CppClientProxyCodeEmitter : public HDICppCodeEmitter { 24 public: CppClientProxyCodeEmitter()25 CppClientProxyCodeEmitter() : HDICppCodeEmitter(), 26 devmgrDeathRecipientName_("IServiceManagerDeathRecipient"), 27 devmgrVersionName_("OHOS::HDI::ServiceManager::V1_0") {} 28 29 ~CppClientProxyCodeEmitter() override = default; 30 31 protected: 32 std::string devmgrDeathRecipientName_; 33 std::string devmgrVersionName_; 34 35 private: 36 bool ResolveDirectory(const std::string &targetDirectory) override; 37 38 void EmitCode() override; 39 40 void EmitProxyHeaderFile(); 41 42 void EmitProxyHeaderInclusions(StringBuilder &sb); 43 44 void GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet &headerFiles) const; 45 46 void GetSourceOtherFileInclusions(HeaderFile::HeaderFileSet &headerFiles) const; 47 48 void EmitProxyDecl(StringBuilder &sb, const std::string &prefix); 49 50 void EmitProxyConstructor(StringBuilder &sb, const std::string &prefix) const; 51 52 void EmitProxyMethodDecls(StringBuilder &sb, const std::string &prefix) const; 53 54 void EmitProxyMethodDecl( 55 const AutoPtr<ASTMethod> &method, StringBuilder &sb, const std::string &prefix) const; 56 57 void EmitProxyConstants(StringBuilder &sb, const std::string &prefix) const; 58 59 void EmitPassthroughProxySourceFile(); 60 61 void EmitPassthroughProxySourceInclusions(StringBuilder &sb); 62 63 void EmitPassthroughGetInstanceMethodImpl(StringBuilder &sb, const std::string &prefix) const; 64 65 void EmitProxySourceFile(); 66 67 void EmitProxySourceInclusions(StringBuilder &sb); 68 69 void GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet &headerFiles) const; 70 71 void EmitGetMethodImpl(StringBuilder &sb, const std::string &prefix) const; 72 73 void EmitGetInstanceMethodImpl(StringBuilder &sb, const std::string &prefix); 74 75 void EmitProxyPassthroughtLoadImpl(StringBuilder &sb, const std::string &prefix) const; 76 77 void EmitProxyMethodImpls(StringBuilder &sb, const std::string &prefix); 78 79 void EmitProxyMethodImpl(const AutoPtr<ASTInterfaceType> interface, const AutoPtr<ASTMethod> &method, 80 StringBuilder &sb, const std::string &prefix); 81 82 void EmitProxyMethodBody(const AutoPtr<ASTInterfaceType> interface, const AutoPtr<ASTMethod> &method, 83 StringBuilder &sb, const std::string &prefix); 84 85 void EmitWriteInterfaceToken(const std::string &parcelName, StringBuilder &sb, const std::string &prefix) const; 86 87 void EmitWriteFlagOfNeedSetMem(const AutoPtr<ASTMethod> &method, const std::string &dataBufName, StringBuilder &sb, 88 const std::string &prefix) const; 89 90 void EmitUtilMethods(StringBuilder &sb, bool isDecl) override; 91 92 void EmitProxyStaticMethodDecl( 93 const AutoPtr<ASTMethod> &method, StringBuilder &sb, const std::string &prefix) const; 94 95 void EmitProxyStaticMethodImpl(const AutoPtr<ASTMethod> &method, StringBuilder &sb, const std::string &prefix); 96 97 void EmitProxyStaticMethodBody(const AutoPtr<ASTMethod> &method, StringBuilder &sb, const std::string &prefix); 98 99 void EmitProxyIsProxyMethodImpl(StringBuilder &sb, const std::string &prefix) const; 100 void EmitProxyCastFromMethodImpls(StringBuilder &sb, const std::string &prefix) const; 101 void EmitProxyCastFromMethodImpl(const AutoPtr<ASTInterfaceType> interface, StringBuilder &sb, 102 const std::string &prefix) const; 103 void EmitProxyCastFromMethodImplTemplate(StringBuilder &sb, const std::string &prefix) const; 104 105 std::string GetNameSpaceByInterface(AutoPtr<ASTInterfaceType> interface, const std::string &name); 106 107 void EmitProxyDevmgrDeathRecipient(StringBuilder &sb, const std::string &prefix) const; 108 109 void EmitProxyPublicMembers(StringBuilder &sb, const std::string &prefix) const; 110 111 void EmitProxyDevmgrDeathCallBack(StringBuilder &sb, const std::string &prefix) const; 112 113 void EmitProxyReconnectMethodDecl(StringBuilder &sb, const std::string &prefix) const; 114 115 void EmitProxyGetRemoteMethodDecl(StringBuilder &sb, const std::string &prefix) const; 116 117 void EmitGetInstanceMethodInitProxyImpl(StringBuilder &sb, const std::string &prefix) const; 118 119 void EmitProxyCppReconnectMethodImpl(StringBuilder &sb, const std::string &prefix) const; 120 }; 121 } // namespace Idl 122 } // namespace OHOS 123 124 #endif // OHOS_IDL_CPP_CLIENT_PROXY_CODE_EMITTER_H