• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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_TSCODEEMITTER_H
17 #define OHOS_IDL_TSCODEEMITTER_H
18 
19 #include <string>
20 #include <vector>
21 
22 #include "codegen/code_emitter.h"
23 #include "util/string_builder.h"
24 
25 namespace OHOS {
26 namespace Idl {
27 class TsCodeEmitter : public CodeEmitter {
28 public:
TsCodeEmitter(MetaComponent * mc)29     TsCodeEmitter(MetaComponent* mc)
30         : CodeEmitter(mc)
31     {}
32 
33     void EmitInterface() override;
34 
35     void EmitInterfaceProxy() override;
36 
37     void EmitInterfaceStub() override;
38 
39     struct Parameter {
40         bool operator< (const Parameter &para) const
41         {
42             if (this->attr_ == ATTR_IN) {
43                 return this->attr_ < para.attr_;
44             } else {
45                 return false;
46             }
47         }
48         std::string name_;
49         std::string type_;
50         unsigned int attr_ = 0;
51     };
52 
53     struct Method {
54         Parameter retParameter_;
55         std::vector<Parameter> parameters_;
56         std::string callbackName_;
57         std::string name_;
58         std::string exportFunction_;
59         unsigned int properties_;
60     };
61 
62 private:
63     void EmitInterfaceImports(StringBuilder& stringBuilder);
64 
65     void EmitInterfaceProxyImports(StringBuilder& stringBuilder);
66 
67     void EmitInterfaceSelfDefinedTypeImports(StringBuilder& stringBuilder);
68 
69     void EmitInterfaceDefinition(StringBuilder& stringBuilder);
70 
71     void EmitInterfaceMethods(StringBuilder& stringBuilder, const String& prefix);
72 
73     void EmitInterfaceMethod(MetaMethod* metaMethod, StringBuilder& stringBuilder, const String& prefix);
74 
75     void EmitInterfaceMethodParameter(MetaParameter* mp, StringBuilder& stringBuilder, const String& prefix);
76 
77     void EmitMethodInParameter(StringBuilder& stringBuilder, const std::string& name, const std::string& type,
78         const String& prefix);
79 
80     void EmitInterfaceMethodExportCallback(Method& m, const Parameter& para, bool isLast);
81 
82     void EmitInterfaceProxyImpl(StringBuilder& stringBuilder);
83 
84     void EmitInterfaceProxyConstructor(StringBuilder& stringBuilder, const String& prefix);
85 
86     void EmitInterfaceProxyMethodImpls(StringBuilder& stringBuilder, const String& prefix);
87 
88     void EmitInterfaceProxyMethodImpl(MetaMethod* metaMethod, int methodIndex, StringBuilder& stringBuilder,
89         const String& prefix);
90 
91     void EmitInterfaceProxyMethodBody(MetaMethod* metaMethod, int methodIndex, StringBuilder& stringBuilder,
92         const String& prefix);
93 
94     void EmitWriteMethodParameter(MetaParameter* mp, const String& parcelName, StringBuilder& stringBuilder,
95         const String& prefix);
96 
97     void EmitReadMethodParameter(MetaParameter* mp, const String& parcelName, StringBuilder& stringBuilder,
98         const String& prefix);
99 
100     void EmitInterfaceStubImpl(StringBuilder& stringBuilder);
101 
102     void EmitInterfaceStubConstructor(StringBuilder& stringBuilder, const String& prefix);
103 
104     void EmitInterfaceStubMethodImpls(StringBuilder& stringBuilder, const String& prefix);
105 
106     void EmitInterfaceStubMethodImpl(MetaMethod* metaMethod, int methodIndex, StringBuilder& stringBuilder,
107         const String& prefix);
108 
109     void EmitInterfaceMethodCommands(StringBuilder& stringBuilder);
110 
111     void EmitLicense(StringBuilder& stringBuilder);
112 
113     void EmitWriteVariable(const String& parcelName, const std::string& name, MetaType* mt,
114         StringBuilder& stringBuilder,
115         const String& prefix);
116 
117     void EmitReadVariable(const String& parcelName, const std::string& name, MetaType* mt, unsigned int attributes,
118         StringBuilder& stringBuilder,
119         const String& prefix);
120 
121     void EmitReadOutVariable(const String& parcelName, const std::string& name, MetaType* mt,
122         StringBuilder& stringBuilder,
123         const String& prefix);
124 
125     void EmitReadArrayVariable(const String& parcelName, const std::string& name, MetaType* mt,
126         unsigned int attributes,
127         StringBuilder& stringBuilder,
128         const String& prefix);
129 
130     void EmitWriteArrayVariable(const String& parcelName, const std::string& name, MetaType* mt,
131         StringBuilder& stringBuilder,
132         const String& prefix);
133 
134     void EmitReadOutArrayVariable(const String& parcelName, const std::string& name, MetaType* mt,
135         StringBuilder& stringBuilder,
136         const String& prefix);
137 
138     String EmitType(MetaType* mt);
139 
140     String FileName(const String& name);
141 
142     String MethodName(const String& name);
143 
144     String ConstantName(const String& name);
145 
146     String StubName(const String& name);
147 
148     bool CheckInterfaceType();
149 
150     const std::string UnderlineAdded(const String& name);
151 
152     std::vector<Method> methods_;
153 };
154 } // namespace Idl
155 } // namespace OHOS
156 #endif // OHOS_IDL_TSCODEEMITTER_H
157