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 #include "ast/ast_method.h" 17 18 #include "util/string_builder.h" 19 20 namespace OHOS { 21 namespace Idl { GetSignature()22String ASTMethod::GetSignature() 23 { 24 if (signature_.IsEmpty()) { 25 BuildSignature(); 26 } 27 return signature_; 28 } 29 BuildSignature()30void ASTMethod::BuildSignature() 31 { 32 StringBuilder sb; 33 34 if (returnType_ != nullptr) { 35 sb.AppendFormat("(%s)", returnType_->GetSignature().string()); 36 } 37 for (size_t i = 0; i < parameters_.size(); i++) { 38 sb.Append(parameters_[i]->GetType()->GetSignature()); 39 } 40 signature_ = sb.ToString(); 41 } 42 AddParameter(ASTParameter * parameter)43void ASTMethod::AddParameter(ASTParameter* parameter) 44 { 45 if (parameter == nullptr) { 46 return; 47 } 48 parameters_.push_back(parameter); 49 } 50 GetParameter(size_t index)51AutoPtr<ASTParameter> ASTMethod::GetParameter(size_t index) 52 { 53 if (index >= parameters_.size()) { 54 return nullptr; 55 } 56 57 return parameters_[index]; 58 } 59 Dump(const String & prefix)60String ASTMethod::Dump(const String& prefix) 61 { 62 StringBuilder sb; 63 64 sb.Append(prefix); 65 if (returnType_ != nullptr) { 66 sb.Append(returnType_->ToString()).Append(' '); 67 } 68 sb.Append(name_).Append('('); 69 if (parameters_.size() > 0) { 70 sb.Append('\n'); 71 for (auto parameter : parameters_) { 72 String info = parameter->Dump(prefix + " "); 73 sb.Append(info); 74 if (parameter != parameters_[parameters_.size() - 1]) { 75 sb.Append(",\n"); 76 } 77 } 78 } 79 sb.Append(");\n"); 80 81 return sb.ToString(); 82 } 83 } // namespace Idl 84 } // namespace OHOS 85