1 /* 2 * Copyright (c) 2021 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 virtual ~CServiceStubCodeEmitter() = 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); 32 33 void EmitCbServiceStubMethodsDcl(StringBuilder &sb); 34 35 void EmitServiceStubSourceFile(); 36 37 void EmitStubSourceInclusions(StringBuilder &sb); 38 39 void GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet &headerFiles); 40 41 // get or release method for driver interface object 42 void EmitExternalMethodImpl(StringBuilder &sb); 43 44 void EmitGetMethodImpl(StringBuilder &sb); 45 46 void EmitGetInstanceMehtodImpl(StringBuilder &sb); 47 48 void EmitReleaseMethodImpl(StringBuilder &sb); 49 50 void EmitReleaseInstanceMethodImpl(StringBuilder &sb); 51 52 void EmitServiceStubMethodImpls(StringBuilder &sb, const std::string &prefix); 53 54 void EmitServiceStubMethodImpl(const AutoPtr<ASTMethod> &method, StringBuilder &sb, const std::string &prefix); 55 56 void EmitReadFlagVariable(bool readFlag, StringBuilder &sb, const std::string &prefix); 57 58 void EmitStubLocalVariable(const AutoPtr<ASTParameter> ¶m, StringBuilder &sb, const std::string &prefix); 59 60 void EmitReadStubMethodParameter(const AutoPtr<ASTParameter> ¶m, const std::string &parcelName, 61 const std::string &gotoLabel, StringBuilder &sb, const std::string &prefix); 62 63 void EmitReadCStringStubMethodParameter(const AutoPtr<ASTParameter> ¶m, const std::string &parcelName, 64 const std::string &gotoLabel, StringBuilder &sb, const std::string &prefix, AutoPtr<ASTType> &type); 65 66 void EmitOutVarMemInitialize(const AutoPtr<ASTParameter> ¶m, const std::string &parcelName, 67 const std::string &gotoLabel, StringBuilder &sb, const std::string &prefix); 68 69 void EmitStubCallMethod( 70 const AutoPtr<ASTMethod> &method, const std::string &gotoLabel, StringBuilder &sb, const std::string &prefix); 71 72 void EmitCallParameter( 73 StringBuilder &sb, const AutoPtr<ASTType> &type, ParamAttr attribute, const std::string &name); 74 75 void EmitStubGetVerMethodImpl(const AutoPtr<ASTMethod> &method, StringBuilder &sb, const std::string &prefix); 76 77 void EmitStubAsObjectMethodImpl(StringBuilder &sb, const std::string &prefix); 78 79 void EmitKernelStubOnRequestMethodImpl(StringBuilder &sb, const std::string &prefix); 80 81 void EmitKernelStubConstruct(StringBuilder &sb); 82 83 void EmitStubOnRequestMethodImpl(StringBuilder &sb, const std::string &prefix); 84 85 void EmitStubRemoteDispatcher(StringBuilder &sb); 86 87 void EmitStubNewInstance(StringBuilder &sb); 88 89 void EmitStubReleaseMethod(StringBuilder &sb); 90 91 void EmitStubConstructor(StringBuilder &sb); 92 93 void EmitStubRegAndUnreg(StringBuilder &sb); 94 95 void GetUtilMethods(UtilMethodMap &methods) override; 96 }; 97 } // namespace HDI 98 } // namespace OHOS 99 100 #endif // OHOS_HDI_C_SERVICE_STUB_CODEE_MITTER_H