1 /* 2 * Copyright (c) 2024 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 "ast/ast_interface_type.h" 19 #include "util/string_builder.h" 20 21 namespace OHOS { 22 namespace Idl { CheckOverload(AutoPtr<ASTInterfaceType> interface)23void ASTMethod::CheckOverload(AutoPtr<ASTInterfaceType> interface) 24 { 25 if (interface == nullptr) { 26 return; 27 } 28 interface = interface->GetExtendsInterface(); 29 while (interface != nullptr) { 30 const std::vector<AutoPtr<ASTMethod>> methodMap = 31 interface->GetMethodsBySystem(Options::GetInstance().GetSystemLevel()); 32 if (std::any_of(methodMap.begin(), methodMap.end(), 33 [this] (const AutoPtr<ASTMethod> &method) { return name_ == method->GetName();})) { 34 isOverload_ = true; 35 return; 36 } 37 interface = interface->GetExtendsInterface(); 38 } 39 isOverload_ = false; 40 } 41 GetSignature()42std::string ASTMethod::GetSignature() 43 { 44 if (signature_.empty()) { 45 BuildSignature(); 46 } 47 return signature_; 48 } 49 BuildSignature()50void ASTMethod::BuildSignature() 51 { 52 StringBuilder sb; 53 54 sb.AppendFormat("(%s)", returnType_->GetSignature().c_str()); 55 for (size_t i = 0; i < parameters_.size(); i++) { 56 sb.Append(parameters_[i]->GetType()->GetSignature()); 57 } 58 signature_ = sb.ToString(); 59 } 60 AddParameter(const AutoPtr<ASTParameter> & parameter)61void ASTMethod::AddParameter(const AutoPtr<ASTParameter> ¶meter) 62 { 63 if (parameter == nullptr) { 64 return; 65 } 66 parameters_.push_back(parameter); 67 } 68 GetParameter(size_t index)69AutoPtr<ASTParameter> ASTMethod::GetParameter(size_t index) 70 { 71 if (index >= parameters_.size()) { 72 return nullptr; 73 } 74 75 return parameters_[index]; 76 } 77 Dump(const std::string & prefix)78std::string ASTMethod::Dump(const std::string &prefix) 79 { 80 StringBuilder sb; 81 82 if (Options::GetInstance().GetInterfaceType() == InterfaceType::SA) { 83 if (returnType_ != nullptr) { 84 sb.Append(prefix).Append(returnType_->ToString()).Append(' '); 85 } 86 } else { 87 sb.Append(prefix).Append(attr_->Dump(prefix)); 88 } 89 sb.Append(name_).Append('('); 90 if (parameters_.size() > 0) { 91 sb.Append('\n'); 92 for (auto parameter : parameters_) { 93 std::string info = parameter->Dump(prefix + TAB); 94 sb.Append(info); 95 if (parameter != parameters_[parameters_.size() - 1]) { 96 sb.Append(",\n"); 97 } 98 } 99 } 100 sb.Append(");\n"); 101 102 return sb.ToString(); 103 } 104 } // namespace Idl 105 } // namespace OHOS