File indexing completed on 2024-05-12 04:37:56

0001 /*
0002     SPDX-FileCopyrightText: 2008 David Nolden <david.nolden.kdevelop@art-master.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-only
0005 */
0006 
0007 #include "aliasdeclaration.h"
0008 
0009 #include "ducontext.h"
0010 #include "duchainregister.h"
0011 #include "types/delayedtype.h"
0012 #include <editor/rangeinrevision.h>
0013 
0014 namespace KDevelop {
0015 REGISTER_DUCHAIN_ITEM(AliasDeclaration);
0016 
0017 AliasDeclaration::AliasDeclaration(const AliasDeclaration& rhs)
0018     : ClassMemberDeclaration(*new AliasDeclarationData(*rhs.d_func()))
0019 {
0020 }
0021 
0022 AliasDeclaration::AliasDeclaration(const RangeInRevision& range, DUContext* context)
0023     : ClassMemberDeclaration(*new AliasDeclarationData, range)
0024 {
0025     d_func_dynamic()->setClassId(this);
0026     setKind(Alias);
0027     if (context)
0028         setContext(context);
0029 }
0030 
0031 AliasDeclaration::AliasDeclaration(AliasDeclarationData& data) : ClassMemberDeclaration(data)
0032 {
0033 }
0034 
0035 AliasDeclaration::~AliasDeclaration()
0036 {
0037 }
0038 
0039 Declaration* AliasDeclaration::clonePrivate() const
0040 {
0041     return new AliasDeclaration(*this);
0042 }
0043 
0044 QString AliasDeclaration::toString() const
0045 {
0046     if (aliasedDeclaration().isValid())
0047         return i18n("Alias %1 as %2", aliasedDeclaration().declaration()->qualifiedIdentifier().toString(),
0048                     identifier().toString());
0049     else
0050         return i18n("Lost alias %1", identifier().toString());
0051 }
0052 
0053 void AliasDeclaration::setAliasedDeclaration(const IndexedDeclaration& decl)
0054 {
0055     d_func_dynamic()->m_aliasedDeclaration = decl;
0056     Declaration* aliased = decl.data();
0057     if (aliased)
0058         Declaration::setAbstractType(aliased->abstractType());
0059 }
0060 
0061 IndexedDeclaration AliasDeclaration::aliasedDeclaration() const
0062 {
0063     return d_func()->m_aliasedDeclaration;
0064 }
0065 
0066 void AliasDeclaration::setAbstractType(AbstractType::Ptr type)
0067 {
0068     Declaration::setAbstractType(type);
0069 }
0070 }