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 private: 22 bool ResolveDirectory(const String& targetDirectory) override; 23 24 void EmitCode() override; 25 26 void EmitServiceStubHeaderFile(); 27 28 void EmitStubHeaderInclusions(StringBuilder& sb); 29 30 void EmitCbServiceStubDef(StringBuilder& sb); 31 32 void EmitCbServiceStubMethodsDcl(StringBuilder& sb); 33 34 void EmitServiceStubSourceFile(); 35 36 void EmitStubSourceInclusions(StringBuilder& sb); 37 38 void GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); 39 40 void EmitServiceStubMethodImpls(StringBuilder& sb, const String& prefix); 41 42 void EmitServiceStubMethodImpl(const AutoPtr<ASTMethod>& method, StringBuilder& sb, const String& prefix); 43 44 void EmitStubLocalVariable(const AutoPtr<ASTParameter>& param, StringBuilder& sb, const String& prefix); 45 46 void EmitReadStubMethodParameter(const AutoPtr<ASTParameter>& param, const String& parcelName, 47 const String& gotoLabel, StringBuilder& sb, const String& prefix); 48 49 void EmitReadCStringStubMethodParameter(const AutoPtr<ASTParameter>& param, const String& parcelName, 50 const String& gotoLabel, StringBuilder& sb, const String& prefix, AutoPtr<ASTType>& type); 51 52 void EmitStubCallMethod(const AutoPtr<ASTMethod>& method, const String& gotoLabel, StringBuilder& sb, 53 const String& prefix); 54 55 void EmitCallParameter(StringBuilder& sb, const AutoPtr<ASTType>& type, ParamAttr attribute, const String& name); 56 57 void EmitStubGetVerMethodImpl(const AutoPtr<ASTMethod>& method, StringBuilder& sb, const String& prefix); 58 59 void EmitStubAsObjectMethodImpl(StringBuilder& sb, const String& prefix); 60 61 void EmitStubOnRequestMethodImpl(StringBuilder& sb, const String& prefix); 62 63 void EmitStubGetMethodImpl(StringBuilder& sb); 64 65 void EmitStubReleaseImpl(StringBuilder& sb); 66 }; 67 } // namespace HDI 68 } // namespace OHOS 69 70 #endif // OHOS_HDI_C_SERVICE_STUB_CODEE_MITTER_H