1ca0551cfSopenharmony_ci/* 2ca0551cfSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3ca0551cfSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4ca0551cfSopenharmony_ci * you may not use this file except in compliance with the License. 5ca0551cfSopenharmony_ci * You may obtain a copy of the License at 6ca0551cfSopenharmony_ci * 7ca0551cfSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8ca0551cfSopenharmony_ci * 9ca0551cfSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10ca0551cfSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11ca0551cfSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12ca0551cfSopenharmony_ci * See the License for the specific language governing permissions and 13ca0551cfSopenharmony_ci * limitations under the License. 14ca0551cfSopenharmony_ci */ 15ca0551cfSopenharmony_ci 16ca0551cfSopenharmony_ci#include "ast/ast_method.h" 17ca0551cfSopenharmony_ci 18ca0551cfSopenharmony_ci#include "util/string_builder.h" 19ca0551cfSopenharmony_ci 20ca0551cfSopenharmony_cinamespace OHOS { 21ca0551cfSopenharmony_cinamespace Idl { 22ca0551cfSopenharmony_ciString ASTMethod::GetSignature() 23ca0551cfSopenharmony_ci{ 24ca0551cfSopenharmony_ci if (signature_.IsEmpty()) { 25ca0551cfSopenharmony_ci BuildSignature(); 26ca0551cfSopenharmony_ci } 27ca0551cfSopenharmony_ci return signature_; 28ca0551cfSopenharmony_ci} 29ca0551cfSopenharmony_ci 30ca0551cfSopenharmony_civoid ASTMethod::BuildSignature() 31ca0551cfSopenharmony_ci{ 32ca0551cfSopenharmony_ci StringBuilder sb; 33ca0551cfSopenharmony_ci 34ca0551cfSopenharmony_ci if (returnType_ != nullptr) { 35ca0551cfSopenharmony_ci sb.AppendFormat("(%s)", returnType_->GetSignature().string()); 36ca0551cfSopenharmony_ci } 37ca0551cfSopenharmony_ci for (size_t i = 0; i < parameters_.size(); i++) { 38ca0551cfSopenharmony_ci sb.Append(parameters_[i]->GetType()->GetSignature()); 39ca0551cfSopenharmony_ci } 40ca0551cfSopenharmony_ci signature_ = sb.ToString(); 41ca0551cfSopenharmony_ci} 42ca0551cfSopenharmony_ci 43ca0551cfSopenharmony_civoid ASTMethod::AddParameter(ASTParameter* parameter) 44ca0551cfSopenharmony_ci{ 45ca0551cfSopenharmony_ci if (parameter == nullptr) { 46ca0551cfSopenharmony_ci return; 47ca0551cfSopenharmony_ci } 48ca0551cfSopenharmony_ci parameters_.push_back(parameter); 49ca0551cfSopenharmony_ci} 50ca0551cfSopenharmony_ci 51ca0551cfSopenharmony_ciAutoPtr<ASTParameter> ASTMethod::GetParameter(size_t index) 52ca0551cfSopenharmony_ci{ 53ca0551cfSopenharmony_ci if (index >= parameters_.size()) { 54ca0551cfSopenharmony_ci return nullptr; 55ca0551cfSopenharmony_ci } 56ca0551cfSopenharmony_ci 57ca0551cfSopenharmony_ci return parameters_[index]; 58ca0551cfSopenharmony_ci} 59ca0551cfSopenharmony_ci 60ca0551cfSopenharmony_ciString ASTMethod::Dump(const String& prefix) 61ca0551cfSopenharmony_ci{ 62ca0551cfSopenharmony_ci StringBuilder sb; 63ca0551cfSopenharmony_ci 64ca0551cfSopenharmony_ci sb.Append(prefix); 65ca0551cfSopenharmony_ci if (returnType_ != nullptr) { 66ca0551cfSopenharmony_ci sb.Append(returnType_->ToString()).Append(' '); 67ca0551cfSopenharmony_ci } 68ca0551cfSopenharmony_ci sb.Append(name_).Append('('); 69ca0551cfSopenharmony_ci if (parameters_.size() > 0) { 70ca0551cfSopenharmony_ci sb.Append('\n'); 71ca0551cfSopenharmony_ci for (auto parameter : parameters_) { 72ca0551cfSopenharmony_ci String info = parameter->Dump(prefix + " "); 73ca0551cfSopenharmony_ci sb.Append(info); 74ca0551cfSopenharmony_ci if (parameter != parameters_[parameters_.size() - 1]) { 75ca0551cfSopenharmony_ci sb.Append(",\n"); 76ca0551cfSopenharmony_ci } 77ca0551cfSopenharmony_ci } 78ca0551cfSopenharmony_ci } 79ca0551cfSopenharmony_ci sb.Append(");\n"); 80ca0551cfSopenharmony_ci 81ca0551cfSopenharmony_ci return sb.ToString(); 82ca0551cfSopenharmony_ci} 83ca0551cfSopenharmony_ci} // namespace Idl 84ca0551cfSopenharmony_ci} // namespace OHOS 85