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#include "ast/ast_attribute.h" 17ca0551cfSopenharmony_ci#include "util/string_builder.h" 18ca0551cfSopenharmony_ci 19ca0551cfSopenharmony_cinamespace OHOS { 20ca0551cfSopenharmony_cinamespace Idl { 21ca0551cfSopenharmony_cistd::string ASTAttr::ToString() const 22ca0551cfSopenharmony_ci{ 23ca0551cfSopenharmony_ci std::vector<std::string> attrs; 24ca0551cfSopenharmony_ci if (value_ & ASTAttr::MINI) { 25ca0551cfSopenharmony_ci attrs.push_back("mini"); 26ca0551cfSopenharmony_ci } 27ca0551cfSopenharmony_ci 28ca0551cfSopenharmony_ci if (value_ & ASTAttr::LITE) { 29ca0551cfSopenharmony_ci attrs.push_back("lite"); 30ca0551cfSopenharmony_ci } 31ca0551cfSopenharmony_ci 32ca0551cfSopenharmony_ci if (value_ & ASTAttr::FULL) { 33ca0551cfSopenharmony_ci attrs.push_back("full"); 34ca0551cfSopenharmony_ci } 35ca0551cfSopenharmony_ci 36ca0551cfSopenharmony_ci if (value_ & ASTAttr::ONEWAY) { 37ca0551cfSopenharmony_ci attrs.push_back("oneway"); 38ca0551cfSopenharmony_ci } 39ca0551cfSopenharmony_ci 40ca0551cfSopenharmony_ci if (value_ & ASTAttr::CALLBACK) { 41ca0551cfSopenharmony_ci attrs.push_back("callback"); 42ca0551cfSopenharmony_ci } 43ca0551cfSopenharmony_ci 44ca0551cfSopenharmony_ci StringBuilder sb; 45ca0551cfSopenharmony_ci sb.Append("["); 46ca0551cfSopenharmony_ci for (size_t i = 0; i < attrs.size(); i++) { 47ca0551cfSopenharmony_ci sb.Append(attrs[i]); 48ca0551cfSopenharmony_ci if (i + 1 < attrs.size()) { 49ca0551cfSopenharmony_ci sb.Append(", "); 50ca0551cfSopenharmony_ci } 51ca0551cfSopenharmony_ci } 52ca0551cfSopenharmony_ci sb.Append("] "); 53ca0551cfSopenharmony_ci return sb.ToString(); 54ca0551cfSopenharmony_ci} 55ca0551cfSopenharmony_ci 56ca0551cfSopenharmony_cistd::string ASTAttr::Dump(const std::string &prefix) 57ca0551cfSopenharmony_ci{ 58ca0551cfSopenharmony_ci return prefix + ToString(); 59ca0551cfSopenharmony_ci} 60ca0551cfSopenharmony_ci 61ca0551cfSopenharmony_cibool ASTAttr::Match(SystemLevel level) const 62ca0551cfSopenharmony_ci{ 63ca0551cfSopenharmony_ci switch (level) { 64ca0551cfSopenharmony_ci case SystemLevel::MINI: 65ca0551cfSopenharmony_ci return HasValue(ASTAttr::MINI); 66ca0551cfSopenharmony_ci case SystemLevel::LITE: 67ca0551cfSopenharmony_ci return HasValue(ASTAttr::LITE); 68ca0551cfSopenharmony_ci case SystemLevel::FULL: 69ca0551cfSopenharmony_ci return HasValue(ASTAttr::FULL); 70ca0551cfSopenharmony_ci default: 71ca0551cfSopenharmony_ci return false; 72ca0551cfSopenharmony_ci } 73ca0551cfSopenharmony_ci} 74ca0551cfSopenharmony_ci 75ca0551cfSopenharmony_cistd::string ASTParamAttr::ToString() const 76ca0551cfSopenharmony_ci{ 77ca0551cfSopenharmony_ci std::vector<std::string> attrs; 78ca0551cfSopenharmony_ci if (value_ & ASTParamAttr::PARAM_IN) { 79ca0551cfSopenharmony_ci attrs.push_back("in"); 80ca0551cfSopenharmony_ci } 81ca0551cfSopenharmony_ci 82ca0551cfSopenharmony_ci if (value_ & ASTParamAttr::PARAM_OUT) { 83ca0551cfSopenharmony_ci attrs.push_back("out"); 84ca0551cfSopenharmony_ci } 85ca0551cfSopenharmony_ci 86ca0551cfSopenharmony_ci StringBuilder sb; 87ca0551cfSopenharmony_ci sb.Append("["); 88ca0551cfSopenharmony_ci for (size_t i = 0; i < attrs.size(); i++) { 89ca0551cfSopenharmony_ci sb.Append(attrs[i]); 90ca0551cfSopenharmony_ci if (i + 1 < attrs.size()) { 91ca0551cfSopenharmony_ci sb.Append(", "); 92ca0551cfSopenharmony_ci } 93ca0551cfSopenharmony_ci } 94ca0551cfSopenharmony_ci sb.Append("]"); 95ca0551cfSopenharmony_ci return sb.ToString(); 96ca0551cfSopenharmony_ci} 97ca0551cfSopenharmony_ci 98ca0551cfSopenharmony_cistd::string ASTParamAttr::Dump(const std::string &prefix) 99ca0551cfSopenharmony_ci{ 100ca0551cfSopenharmony_ci return prefix + ToString(); 101ca0551cfSopenharmony_ci} 102ca0551cfSopenharmony_ci 103ca0551cfSopenharmony_cibool ASTAttr::CacheableStrToInt() 104ca0551cfSopenharmony_ci{ 105ca0551cfSopenharmony_ci if (!HasValue(ASTAttr::CACHEABLE)) { 106ca0551cfSopenharmony_ci return false; 107ca0551cfSopenharmony_ci } 108ca0551cfSopenharmony_ci try { 109ca0551cfSopenharmony_ci cacheableTime_ = static_cast<int32_t>(std::stoi(cacheableTimeString_)); 110ca0551cfSopenharmony_ci } catch(...) { 111ca0551cfSopenharmony_ci return false; 112ca0551cfSopenharmony_ci } 113ca0551cfSopenharmony_ci return true; 114ca0551cfSopenharmony_ci} 115ca0551cfSopenharmony_ci} // namespace Idl 116ca0551cfSopenharmony_ci} // namespace OHOS