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