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 ¶) 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