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 "traitmemberaliasdeclaration.h"
0008 
0009 #include <language/duchain/duchainregister.h>
0010 using namespace KDevelop;
0011 
0012 namespace Php
0013 {
0014 
0015 REGISTER_DUCHAIN_ITEM(TraitMemberAliasDeclaration);
0016 
0017 TraitMemberAliasDeclaration::TraitMemberAliasDeclaration(const TraitMemberAliasDeclaration& rhs)
0018         : KDevelop::ClassMemberDeclaration(*new TraitMemberAliasDeclarationData(*rhs.d_func()))
0019 {
0020 }
0021 
0022 TraitMemberAliasDeclaration::TraitMemberAliasDeclaration(const RangeInRevision& range, DUContext* context)
0023         : KDevelop::ClassMemberDeclaration(*new TraitMemberAliasDeclarationData, range)
0024 {
0025     d_func_dynamic()->setClassId(this);
0026     if (context)
0027         setContext(context);
0028 }
0029 
0030 TraitMemberAliasDeclaration::TraitMemberAliasDeclaration(TraitMemberAliasDeclarationData& dd)
0031         : KDevelop::ClassMemberDeclaration(dd)
0032 {
0033 }
0034 
0035 TraitMemberAliasDeclaration::TraitMemberAliasDeclaration(TraitMemberAliasDeclarationData& dd, const RangeInRevision& range)
0036         : KDevelop::ClassMemberDeclaration(dd, range)
0037 {
0038 }
0039 
0040 TraitMemberAliasDeclaration::~TraitMemberAliasDeclaration()
0041 {
0042 }
0043 
0044 Declaration* TraitMemberAliasDeclaration::clonePrivate() const
0045 {
0046     return new TraitMemberAliasDeclaration(*this);
0047 }
0048 
0049 QString TraitMemberAliasDeclaration::toString() const
0050 {
0051     if( aliasedDeclaration().isValid() )
0052         return aliasedDeclaration().declaration()->toString();
0053     else
0054         return i18n("Lost trait alias %1").arg(identifier().toString());
0055 }
0056 
0057 void TraitMemberAliasDeclaration::setAliasedDeclaration(const IndexedDeclaration& decl)
0058 {
0059   d_func_dynamic()->m_aliasedDeclaration = decl;
0060   Declaration* aliased = decl.data();
0061   if(aliased)
0062     Declaration::setAbstractType(aliased->abstractType());
0063 }
0064 
0065 IndexedDeclaration TraitMemberAliasDeclaration::aliasedDeclaration() const
0066 {
0067   return d_func()->m_aliasedDeclaration;
0068 }
0069 
0070 }