File indexing completed on 2024-05-19 08:26:10
0001 /* 0002 SPDX-FileCopyrightText: 2014 Heinz Wiesinger <pprkut@liwjatan.at> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "traitmethodaliasdeclaration.h" 0008 0009 #include <language/duchain/duchainregister.h> 0010 using namespace KDevelop; 0011 0012 namespace Php 0013 { 0014 0015 KDEVPLATFORMLANGUAGE_EXPORT DECLARE_LIST_MEMBER_HASH(TraitMethodAliasDeclarationData, items, IndexedQualifiedIdentifier) 0016 0017 class KDEVPHPDUCHAIN_EXPORT TraitMethodAliasDeclarationData : public ClassMethodDeclarationData 0018 { 0019 public: 0020 TraitMethodAliasDeclarationData() 0021 : ClassMethodDeclarationData() 0022 { 0023 initializeAppendedLists(); 0024 } 0025 0026 TraitMethodAliasDeclarationData(const TraitMethodAliasDeclarationData& rhs) 0027 : ClassMethodDeclarationData(rhs) 0028 { 0029 m_aliasedDeclaration = rhs.m_aliasedDeclaration; 0030 initializeAppendedLists(); 0031 copyListsFrom(rhs); 0032 } 0033 0034 ~TraitMethodAliasDeclarationData() 0035 { 0036 freeAppendedLists(); 0037 } 0038 0039 IndexedDeclaration m_aliasedDeclaration; 0040 START_APPENDED_LISTS_BASE(TraitMethodAliasDeclarationData, ClassMethodDeclarationData); 0041 APPENDED_LIST_FIRST(TraitMethodAliasDeclarationData, IndexedQualifiedIdentifier, items); 0042 END_APPENDED_LISTS(TraitMethodAliasDeclarationData, items); 0043 }; 0044 0045 0046 DEFINE_LIST_MEMBER_HASH(TraitMethodAliasDeclarationData, items, IndexedQualifiedIdentifier) 0047 0048 REGISTER_DUCHAIN_ITEM(TraitMethodAliasDeclaration); 0049 0050 TraitMethodAliasDeclaration::TraitMethodAliasDeclaration(const TraitMethodAliasDeclaration& rhs) 0051 : ClassMethodDeclaration(*new TraitMethodAliasDeclarationData(*rhs.d_func())) 0052 { 0053 } 0054 0055 TraitMethodAliasDeclaration::TraitMethodAliasDeclaration(const RangeInRevision& range, DUContext* context) 0056 : ClassMethodDeclaration(*new TraitMethodAliasDeclarationData, range, context) 0057 { 0058 d_func_dynamic()->setClassId(this); 0059 if (context) 0060 setContext(context); 0061 } 0062 0063 TraitMethodAliasDeclaration::TraitMethodAliasDeclaration(TraitMethodAliasDeclarationData& data) 0064 : ClassMethodDeclaration(data) 0065 { 0066 } 0067 0068 TraitMethodAliasDeclaration::TraitMethodAliasDeclaration(TraitMethodAliasDeclarationData& data, const RangeInRevision& range, DUContext* context) 0069 : ClassMethodDeclaration(data, range, context) 0070 { 0071 } 0072 0073 TraitMethodAliasDeclaration::~TraitMethodAliasDeclaration() 0074 { 0075 } 0076 0077 Declaration* TraitMethodAliasDeclaration::clonePrivate() const 0078 { 0079 return new TraitMethodAliasDeclaration(*this); 0080 } 0081 0082 QString TraitMethodAliasDeclaration::toString() const 0083 { 0084 if( aliasedDeclaration().isValid() ) 0085 return aliasedDeclaration().declaration()->toString(); 0086 else 0087 return i18n("Lost trait alias %1").arg(identifier().toString()); 0088 } 0089 0090 void TraitMethodAliasDeclaration::setAliasedDeclaration(const IndexedDeclaration& decl) 0091 { 0092 d_func_dynamic()->m_aliasedDeclaration = decl; 0093 Declaration* aliased = decl.data(); 0094 if(aliased) 0095 Declaration::setAbstractType(aliased->abstractType()); 0096 } 0097 0098 IndexedDeclaration TraitMethodAliasDeclaration::aliasedDeclaration() const 0099 { 0100 return d_func()->m_aliasedDeclaration; 0101 } 0102 0103 void TraitMethodAliasDeclaration::setOverrides(const QVector< IndexedQualifiedIdentifier>& ids) 0104 { 0105 d_func_dynamic()->itemsList().clear(); 0106 foreach (const IndexedQualifiedIdentifier& id, ids) { 0107 d_func_dynamic()->itemsList().append(id); 0108 } 0109 } 0110 0111 0112 bool TraitMethodAliasDeclaration::isOverriding(const IndexedQualifiedIdentifier& id) const 0113 { 0114 FOREACH_FUNCTION(const IndexedQualifiedIdentifier& list, d_func()->items) { 0115 if (list == id) { 0116 return true; 0117 } 0118 } 0119 return false; 0120 } 0121 0122 }