1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
/*
SPDX-FileCopyrightText: 2014 Heinz Wiesinger <pprkut@liwjatan.at>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include "traitmethodaliasdeclaration.h"
#include <language/duchain/duchainregister.h>
using namespace KDevelop;
namespace Php
{
KDEVPLATFORMLANGUAGE_EXPORT DECLARE_LIST_MEMBER_HASH(TraitMethodAliasDeclarationData, items, IndexedQualifiedIdentifier)
class KDEVPHPDUCHAIN_EXPORT TraitMethodAliasDeclarationData : public ClassMethodDeclarationData
{
public:
TraitMethodAliasDeclarationData()
: ClassMethodDeclarationData()
{
initializeAppendedLists();
}
TraitMethodAliasDeclarationData(const TraitMethodAliasDeclarationData& rhs)
: ClassMethodDeclarationData(rhs)
{
m_aliasedDeclaration = rhs.m_aliasedDeclaration;
initializeAppendedLists();
copyListsFrom(rhs);
}
~TraitMethodAliasDeclarationData()
{
freeAppendedLists();
}
IndexedDeclaration m_aliasedDeclaration;
START_APPENDED_LISTS_BASE(TraitMethodAliasDeclarationData, ClassMethodDeclarationData);
APPENDED_LIST_FIRST(TraitMethodAliasDeclarationData, IndexedQualifiedIdentifier, items);
END_APPENDED_LISTS(TraitMethodAliasDeclarationData, items);
};
DEFINE_LIST_MEMBER_HASH(TraitMethodAliasDeclarationData, items, IndexedQualifiedIdentifier)
REGISTER_DUCHAIN_ITEM(TraitMethodAliasDeclaration);
TraitMethodAliasDeclaration::TraitMethodAliasDeclaration(const TraitMethodAliasDeclaration& rhs)
: ClassMethodDeclaration(*new TraitMethodAliasDeclarationData(*rhs.d_func()))
{
}
TraitMethodAliasDeclaration::TraitMethodAliasDeclaration(const RangeInRevision& range, DUContext* context)
: ClassMethodDeclaration(*new TraitMethodAliasDeclarationData, range, context)
{
d_func_dynamic()->setClassId(this);
if (context)
setContext(context);
}
TraitMethodAliasDeclaration::TraitMethodAliasDeclaration(TraitMethodAliasDeclarationData& data)
: ClassMethodDeclaration(data)
{
}
TraitMethodAliasDeclaration::TraitMethodAliasDeclaration(TraitMethodAliasDeclarationData& data, const RangeInRevision& range, DUContext* context)
: ClassMethodDeclaration(data, range, context)
{
}
TraitMethodAliasDeclaration::~TraitMethodAliasDeclaration()
{
}
Declaration* TraitMethodAliasDeclaration::clonePrivate() const
{
return new TraitMethodAliasDeclaration(*this);
}
QString TraitMethodAliasDeclaration::toString() const
{
if( aliasedDeclaration().isValid() )
return aliasedDeclaration().declaration()->toString();
else
return i18n("Lost trait alias %1").arg(identifier().toString());
}
void TraitMethodAliasDeclaration::setAliasedDeclaration(const IndexedDeclaration& decl)
{
d_func_dynamic()->m_aliasedDeclaration = decl;
Declaration* aliased = decl.data();
if(aliased)
Declaration::setAbstractType(aliased->abstractType());
}
IndexedDeclaration TraitMethodAliasDeclaration::aliasedDeclaration() const
{
return d_func()->m_aliasedDeclaration;
}
void TraitMethodAliasDeclaration::setOverrides(const QVector< IndexedQualifiedIdentifier>& ids)
{
d_func_dynamic()->itemsList().clear();
foreach (const IndexedQualifiedIdentifier& id, ids) {
d_func_dynamic()->itemsList().append(id);
}
}
bool TraitMethodAliasDeclaration::isOverriding(const IndexedQualifiedIdentifier& id) const
{
FOREACH_FUNCTION(const IndexedQualifiedIdentifier& list, d_func()->items) {
if (list == id) {
return true;
}
}
return false;
}
}
|