• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_SERVICE_STUB_CODE_EMITTER_H
17 #define OHOS_IDL_CPP_SERVICE_STUB_CODE_EMITTER_H
18 
19 #include "hdi_cpp_code_emitter.h"
20 
21 namespace OHOS {
22 namespace Idl {
23 class CppServiceStubCodeEmitter : public HDICppCodeEmitter {
24 public:
CppServiceStubCodeEmitter()25     CppServiceStubCodeEmitter() : HDICppCodeEmitter() {}
26 
27     ~CppServiceStubCodeEmitter() override = default;
28 
29 private:
30     bool ResolveDirectory(const std::string &targetDirectory) override;
31 
32     void EmitCode() override;
33 
34     // ISample.idl -> sample_service_stub.h
35     void EmitStubHeaderFile();
36 
37     void EmitStubHeaderInclusions(StringBuilder &sb);
38 
39     void GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet &headerFiles) const;
40 
41     void EmitStubUsingNamespace(StringBuilder &sb) const;
42 
43     void EmitStubDecl(StringBuilder &sb);
44 
45     void EmitStubBody(StringBuilder &sb, const std::string &prefix) const;
46 
47     void EmitStubConstructorDecl(StringBuilder &sb, const std::string &prefix) const;
48 
49     void EmitStubOnRequestDecl(StringBuilder &sb, const std::string &prefix) const;
50 
51     void EmitStubMethodDecls(StringBuilder &sb, const std::string &prefix) const;
52 
53     void EmitStubMethodDecl(const AutoPtr<ASTMethod> &method, StringBuilder &sb, const std::string &prefix) const;
54 
55     void EmitStubPrivateData(StringBuilder &sb, const std::string &prefix) const;
56 
57     // ISample.idl -> sample_service_stub.cpp
58     void EmitStubSourceFile();
59 
60     void EmitStubSourceInclusions(StringBuilder &sb);
61 
62     void GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet &headerFiles) const;
63 
64     void GetSourceOtherFileInclusions(HeaderFile::HeaderFileSet &headerFiles) const;
65 
66     void EmitInterfaceGetMethodImpl(StringBuilder &sb, const std::string &prefix) const;
67 
68     void EmitGetMethodImpl(StringBuilder &sb, const std::string &prefix) const;
69 
70     void EmitGetInstanceMethodImpl(StringBuilder &sb, const std::string &prefix) const;
71 
72     void EmitStubConstructorImpl(StringBuilder &sb, const std::string &prefix) const;
73 
74     void EmitStubOnRequestMethodImpl(StringBuilder &sb, const std::string &prefix);
75 
76     void EmitStubMethodImpls(StringBuilder &sb, const std::string &prefix) const;
77 
78     void EmitStubMethodImpl(AutoPtr<ASTInterfaceType> interface, const AutoPtr<ASTMethod> &method, StringBuilder &sb,
79         const std::string &prefix) const;
80 
81     void EmitStubStaticMethodImpl(const AutoPtr<ASTMethod> &method, StringBuilder &sb, const std::string &prefix) const;
82 
83     void EmitStubCallMethod(const AutoPtr<ASTMethod> &method, StringBuilder &sb, const std::string &prefix) const;
84 
85     void EmitStubReadInterfaceToken(const std::string &parcelName, StringBuilder &sb, const std::string &prefix) const;
86 
87     void EmitStubReadMemFlag(const AutoPtr<ASTMethod> &method, const std::string &parcelName, StringBuilder &sb,
88         const std::string &prefix) const;
89 
90     void EmitLocalVariable(const AutoPtr<ASTParameter> &param, const std::string &parcelName, StringBuilder &sb,
91         const std::string &prefix) const;
92 
93     void EmitUtilMethods(StringBuilder &sb, bool isDecl) override;
94 
95     void EmitStubStaticMethodDecl(const AutoPtr<ASTMethod> &method, StringBuilder &sb, const std::string &prefix) const;
96 
97     void EmitCppLocalVar(const AutoPtr<ASTParameter> &param, StringBuilder &sb, const std::string &prefix) const;
98 };
99 } // namespace Idl
100 } // namespace OHOS
101 
102 #endif // OHOS_IDL_CPP_SERVICE_STUB_CODE_EMITTER_H