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_C_SERVICE_STUB_CODEE_MITTER_H 10 #define OHOS_HDI_C_SERVICE_STUB_CODEE_MITTER_H 11 12 #include "codegen/c_code_emitter.h" 13 14 namespace OHOS { 15 namespace HDI { 16 class CServiceStubCodeEmitter : public CCodeEmitter { 17 public: CServiceStubCodeEmitter()18 CServiceStubCodeEmitter() : CCodeEmitter() {} 19 20 ~CServiceStubCodeEmitter() override = default; 21 22 private: 23 bool ResolveDirectory(const std::string &targetDirectory) override; 24 25 void EmitCode() override; 26 27 void EmitServiceStubHeaderFile(); 28 29 void EmitStubHeaderInclusions(StringBuilder &sb); 30 31 void EmitCbServiceStubDef(StringBuilder &sb) const; 32 33 void EmitCbServiceStubMethodsDcl(StringBuilder &sb) const; 34 35 void EmitServiceStubSourceFile(); 36 37 void EmitStubSourceInclusions(StringBuilder &sb); 38 39 void GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet &headerFiles) const; 40 41 // get or release method for driver interface object 42 void EmitExternalMethodImpl(StringBuilder &sb); 43 44 void EmitGetMethodImpl(StringBuilder &sb) const; 45 46 void EmitGetInstanceMehtodImpl(StringBuilder &sb) const; 47 48 void EmitReleaseMethodImpl(StringBuilder &sb) const; 49 50 void EmitReleaseInstanceMethodImpl(StringBuilder &sb) const; 51 52 void EmitServiceStubMethodImpls(StringBuilder &sb, const std::string &prefix); 53 54 void EmitServiceStubMethodImpl(const AutoPtr<ASTMethod> &method, StringBuilder &sb, 55 const std::string &prefix) const; 56 57 void EmitReadFlagVariable(bool readFlag, StringBuilder &sb, const std::string &prefix) const; 58 59 void EmitStubLocalVariable(const AutoPtr<ASTParameter> ¶m, StringBuilder &sb, const std::string &prefix) const; 60 61 void EmitReadStubMethodParameter(const AutoPtr<ASTParameter> ¶m, const std::string &parcelName, 62 const std::string &gotoLabel, StringBuilder &sb, const std::string &prefix) const; 63 64 void EmitReadCStringStubMethodParameter(const AutoPtr<ASTParameter> ¶m, const std::string &parcelName, 65 const std::string &gotoLabel, StringBuilder &sb, const std::string &prefix, AutoPtr<ASTType> &type) const; 66 67 void EmitOutVarMemInitialize(const AutoPtr<ASTParameter> ¶m, const std::string &parcelName, 68 const std::string &gotoLabel, StringBuilder &sb, const std::string &prefix) const; 69 70 void EmitStubCallMethod(const AutoPtr<ASTMethod> &method, 71 const std::string &gotoLabel, StringBuilder &sb, const std::string &prefix) const; 72 73 void EmitCallParameter( 74 StringBuilder &sb, const AutoPtr<ASTType> &type, ParamAttr attribute, const std::string &name) const; 75 76 void EmitStubGetVerMethodImpl( 77 const AutoPtr<ASTMethod> &method, StringBuilder &sb, const std::string &prefix) const; 78 79 void EmitStubAsObjectMethodImpl(StringBuilder &sb, const std::string &prefix) const; 80 81 void EmitKernelStubOnRequestMethodImpl(StringBuilder &sb, const std::string &prefix); 82 83 void EmitKernelStubConstruct(StringBuilder &sb) const; 84 85 void EmitStubOnRequestMethodImpl(StringBuilder &sb, const std::string &prefix); 86 87 void EmitStubRemoteDispatcher(StringBuilder &sb) const; 88 89 void EmitStubNewInstance(StringBuilder &sb) const; 90 91 void EmitStubReleaseMethod(StringBuilder &sb) const; 92 93 void EmitStubConstructor(StringBuilder &sb) const; 94 95 void EmitStubRegAndUnreg(StringBuilder &sb) const; 96 97 void GetUtilMethods(UtilMethodMap &methods) override; 98 }; 99 } // namespace HDI 100 } // namespace OHOS 101 102 #endif // OHOS_HDI_C_SERVICE_STUB_CODEE_MITTER_H