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
20namespace OHOS {
21namespace Idl {
22String ASTMethod::GetSignature()
23{
24    if (signature_.IsEmpty()) {
25        BuildSignature();
26    }
27    return signature_;
28}
29
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
43void ASTMethod::AddParameter(ASTParameter* parameter)
44{
45    if (parameter == nullptr) {
46        return;
47    }
48    parameters_.push_back(parameter);
49}
50
51AutoPtr<ASTParameter> ASTMethod::GetParameter(size_t index)
52{
53    if (index >= parameters_.size()) {
54        return nullptr;
55    }
56
57    return parameters_[index];
58}
59
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