1ca0551cfSopenharmony_ci/*
2ca0551cfSopenharmony_ci * Copyright (c) 2024 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#ifndef OHOS_IDL_ASTMETHOD_H
17ca0551cfSopenharmony_ci#define OHOS_IDL_ASTMETHOD_H
18ca0551cfSopenharmony_ci
19ca0551cfSopenharmony_ci#include <vector>
20ca0551cfSopenharmony_ci
21ca0551cfSopenharmony_ci#include "ast/ast_node.h"
22ca0551cfSopenharmony_ci#include "ast/ast_parameter.h"
23ca0551cfSopenharmony_ci#include "util/autoptr.h"
24ca0551cfSopenharmony_ci
25ca0551cfSopenharmony_cinamespace OHOS {
26ca0551cfSopenharmony_cinamespace Idl {
27ca0551cfSopenharmony_ciclass ASTMethod : public ASTNode {
28ca0551cfSopenharmony_cipublic:
29ca0551cfSopenharmony_ci    inline void SetName(const std::string &name)
30ca0551cfSopenharmony_ci    {
31ca0551cfSopenharmony_ci        name_ = name;
32ca0551cfSopenharmony_ci    }
33ca0551cfSopenharmony_ci
34ca0551cfSopenharmony_ci    inline std::string GetName()
35ca0551cfSopenharmony_ci    {
36ca0551cfSopenharmony_ci        return name_;
37ca0551cfSopenharmony_ci    }
38ca0551cfSopenharmony_ci
39ca0551cfSopenharmony_ci    std::string GetSignature();
40ca0551cfSopenharmony_ci
41ca0551cfSopenharmony_ci    inline void SetAttribute(AutoPtr<ASTAttr> attr)
42ca0551cfSopenharmony_ci    {
43ca0551cfSopenharmony_ci        if (attr_ != nullptr && attr != nullptr) {
44ca0551cfSopenharmony_ci            attr_->SetValue(attr->GetValue());
45ca0551cfSopenharmony_ci        }
46ca0551cfSopenharmony_ci    }
47ca0551cfSopenharmony_ci
48ca0551cfSopenharmony_ci    inline AutoPtr<ASTAttr> GetAttribute() const
49ca0551cfSopenharmony_ci    {
50ca0551cfSopenharmony_ci        return attr_;
51ca0551cfSopenharmony_ci    }
52ca0551cfSopenharmony_ci
53ca0551cfSopenharmony_ci    inline void SetReturnType(AutoPtr<ASTType> type)
54ca0551cfSopenharmony_ci    {
55ca0551cfSopenharmony_ci        returnType_ = type;
56ca0551cfSopenharmony_ci    }
57ca0551cfSopenharmony_ci
58ca0551cfSopenharmony_ci    inline AutoPtr<ASTType> GetReturnType()
59ca0551cfSopenharmony_ci    {
60ca0551cfSopenharmony_ci        return returnType_;
61ca0551cfSopenharmony_ci    }
62ca0551cfSopenharmony_ci
63ca0551cfSopenharmony_ci    inline bool IsOneWay() const
64ca0551cfSopenharmony_ci    {
65ca0551cfSopenharmony_ci        return attr_->HasValue(ASTAttr::ONEWAY);
66ca0551cfSopenharmony_ci    }
67ca0551cfSopenharmony_ci
68ca0551cfSopenharmony_ci    inline bool IsFull() const
69ca0551cfSopenharmony_ci    {
70ca0551cfSopenharmony_ci        return attr_->HasValue(ASTAttr::FULL);
71ca0551cfSopenharmony_ci    }
72ca0551cfSopenharmony_ci
73ca0551cfSopenharmony_ci    inline bool IsLite() const
74ca0551cfSopenharmony_ci    {
75ca0551cfSopenharmony_ci        return attr_->HasValue(ASTAttr::LITE);
76ca0551cfSopenharmony_ci    }
77ca0551cfSopenharmony_ci
78ca0551cfSopenharmony_ci    inline bool IsMini() const
79ca0551cfSopenharmony_ci    {
80ca0551cfSopenharmony_ci        return attr_->HasValue(ASTAttr::MINI);
81ca0551cfSopenharmony_ci    }
82ca0551cfSopenharmony_ci
83ca0551cfSopenharmony_ci    inline bool IsOverload() const
84ca0551cfSopenharmony_ci    {
85ca0551cfSopenharmony_ci        return isOverload_;
86ca0551cfSopenharmony_ci    }
87ca0551cfSopenharmony_ci
88ca0551cfSopenharmony_ci    void CheckOverload(AutoPtr<ASTInterfaceType> interface);
89ca0551cfSopenharmony_ci
90ca0551cfSopenharmony_ci    void AddParameter(const AutoPtr<ASTParameter> &parameter);
91ca0551cfSopenharmony_ci
92ca0551cfSopenharmony_ci    AutoPtr<ASTParameter> GetParameter(size_t index);
93ca0551cfSopenharmony_ci
94ca0551cfSopenharmony_ci    inline size_t GetParameterNumber()
95ca0551cfSopenharmony_ci    {
96ca0551cfSopenharmony_ci        return parameters_.size();
97ca0551cfSopenharmony_ci    }
98ca0551cfSopenharmony_ci
99ca0551cfSopenharmony_ci    inline void SetCmdId(size_t cmdId)
100ca0551cfSopenharmony_ci    {
101ca0551cfSopenharmony_ci        cmdId_ = cmdId;
102ca0551cfSopenharmony_ci    }
103ca0551cfSopenharmony_ci
104ca0551cfSopenharmony_ci    inline size_t GetCmdId()
105ca0551cfSopenharmony_ci    {
106ca0551cfSopenharmony_ci        return cmdId_;
107ca0551cfSopenharmony_ci    }
108ca0551cfSopenharmony_ci
109ca0551cfSopenharmony_ci    inline std::string GetMethodIdentifier()
110ca0551cfSopenharmony_ci    {
111ca0551cfSopenharmony_ci        return isOverload_ ? "_" + std::to_string(cmdId_) : "";
112ca0551cfSopenharmony_ci    }
113ca0551cfSopenharmony_ci
114ca0551cfSopenharmony_ci    std::string Dump(const std::string &prefix) override;
115ca0551cfSopenharmony_ci
116ca0551cfSopenharmony_ci    void SetCacheable(AutoPtr<ASTAttr> attr)
117ca0551cfSopenharmony_ci    {
118ca0551cfSopenharmony_ci        if (attr->HasValue(ASTAttr::CACHEABLE)) {
119ca0551cfSopenharmony_ci            attr_->SetValue(ASTAttr::CACHEABLE);
120ca0551cfSopenharmony_ci            attr_->SetCacheableTimeString(attr->GetCacheableTimeString());
121ca0551cfSopenharmony_ci        }
122ca0551cfSopenharmony_ci    }
123ca0551cfSopenharmony_ci
124ca0551cfSopenharmony_ci    bool SetCacheableTime()
125ca0551cfSopenharmony_ci    {
126ca0551cfSopenharmony_ci        return attr_->CacheableStrToInt();
127ca0551cfSopenharmony_ci    }
128ca0551cfSopenharmony_ci
129ca0551cfSopenharmony_ci    int32_t GetCacheableTime()
130ca0551cfSopenharmony_ci    {
131ca0551cfSopenharmony_ci        return attr_->GetCacheableTime();
132ca0551cfSopenharmony_ci    }
133ca0551cfSopenharmony_ci
134ca0551cfSopenharmony_ci    bool GetCacheable()
135ca0551cfSopenharmony_ci    {
136ca0551cfSopenharmony_ci        return attr_->HasValue(ASTAttr::CACHEABLE);
137ca0551cfSopenharmony_ci    }
138ca0551cfSopenharmony_ci
139ca0551cfSopenharmony_ci    inline void SetFreezeControlReason(const std::string &reason)
140ca0551cfSopenharmony_ci    {
141ca0551cfSopenharmony_ci        freezeControlReason = reason;
142ca0551cfSopenharmony_ci    }
143ca0551cfSopenharmony_ci
144ca0551cfSopenharmony_ci    inline std::string GetFreezeControlReason()
145ca0551cfSopenharmony_ci    {
146ca0551cfSopenharmony_ci        return freezeControlReason;
147ca0551cfSopenharmony_ci    }
148ca0551cfSopenharmony_ci
149ca0551cfSopenharmony_ci    inline bool IsFreezeControl() const
150ca0551cfSopenharmony_ci    {
151ca0551cfSopenharmony_ci        return attr_->HasValue(ASTAttr::FREEZECONTROL);
152ca0551cfSopenharmony_ci    }
153ca0551cfSopenharmony_ci
154ca0551cfSopenharmony_ciprivate:
155ca0551cfSopenharmony_ci    void BuildSignature();
156ca0551cfSopenharmony_ci
157ca0551cfSopenharmony_ci    std::string name_;
158ca0551cfSopenharmony_ci    std::string signature_;
159ca0551cfSopenharmony_ci    AutoPtr<ASTAttr> attr_ = new ASTAttr();
160ca0551cfSopenharmony_ci    AutoPtr<ASTType> returnType_;
161ca0551cfSopenharmony_ci    std::vector<AutoPtr<ASTParameter>> parameters_;
162ca0551cfSopenharmony_ci    bool isOverload_ = false;  // used to identify if method is overload
163ca0551cfSopenharmony_ci    size_t cmdId_;  // used to identify same name method
164ca0551cfSopenharmony_ci    std::string freezeControlReason;
165ca0551cfSopenharmony_ci};
166ca0551cfSopenharmony_ci} // namespace Idl
167ca0551cfSopenharmony_ci} // namespace OHOS
168ca0551cfSopenharmony_ci
169ca0551cfSopenharmony_ci#endif // OHOS_IDL_ASTMETHOD_H
170