File indexing completed on 2024-05-05 16:41:08

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 }