File indexing completed on 2024-05-12 04:38:01

0001 /*
0002     SPDX-FileCopyrightText: 2002-2005 Roberto Raggi <roberto@kdevelop.org>
0003     SPDX-FileCopyrightText: 2006 Adam Treat <treat@kde.org>
0004     SPDX-FileCopyrightText: 2006-2007 Hamish Rodda <rodda@kde.org>
0005     SPDX-FileCopyrightText: 2007-2008 David Nolden <david.nolden.kdevelop@art-master.de>
0006 
0007     SPDX-License-Identifier: LGPL-2.0-only
0008 */
0009 
0010 #ifndef KDEVPLATFORM_FUNCTIONDECLARATION_H
0011 #define KDEVPLATFORM_FUNCTIONDECLARATION_H
0012 
0013 #include "declaration.h"
0014 #include "abstractfunctiondeclaration.h"
0015 #include "declarationdata.h"
0016 
0017 namespace KDevelop {
0018 KDEVPLATFORMLANGUAGE_EXPORT DECLARE_LIST_MEMBER_HASH(FunctionDeclarationData, m_defaultParameters, IndexedString)
0019 
0020 class KDEVPLATFORMLANGUAGE_EXPORT FunctionDeclarationData
0021     : public DeclarationData
0022     , public AbstractFunctionDeclarationData
0023 {
0024 public:
0025     FunctionDeclarationData()
0026     {
0027         initializeAppendedLists();
0028     }
0029     FunctionDeclarationData(const FunctionDeclarationData& rhs)
0030         : DeclarationData(rhs)
0031         , AbstractFunctionDeclarationData(rhs)
0032     {
0033         initializeAppendedLists();
0034         copyListsFrom(rhs);
0035     }
0036     ~FunctionDeclarationData()
0037     {
0038         freeAppendedLists();
0039     }
0040     FunctionDeclarationData& operator=(const FunctionDeclarationData& rhs) = delete;
0041 
0042     START_APPENDED_LISTS_BASE(FunctionDeclarationData, DeclarationData);
0043     APPENDED_LIST_FIRST(FunctionDeclarationData, IndexedString, m_defaultParameters);
0044     END_APPENDED_LISTS(FunctionDeclarationData, m_defaultParameters);
0045 };
0046 /**
0047  * Represents a single variable definition in a definition-use chain.
0048  */
0049 using FunctionDeclarationBase = MergeAbstractFunctionDeclaration<Declaration, FunctionDeclarationData>;
0050 class KDEVPLATFORMLANGUAGE_EXPORT FunctionDeclaration
0051     : public FunctionDeclarationBase
0052 {
0053 public:
0054     FunctionDeclaration(const FunctionDeclaration& rhs);
0055     FunctionDeclaration(const RangeInRevision& range, DUContext* context);
0056     explicit FunctionDeclaration(FunctionDeclarationData& data);
0057     FunctionDeclaration(FunctionDeclarationData& data, const KDevelop::RangeInRevision&);
0058     ~FunctionDeclaration() override;
0059 
0060     FunctionDeclaration& operator=(const FunctionDeclaration& rhs) = delete;
0061 
0062     void setAbstractType(AbstractType::Ptr type) override;
0063 
0064     QString toString() const override;
0065 
0066     bool isFunctionDeclaration() const override;
0067 
0068     uint additionalIdentity() const override;
0069 
0070     const IndexedString* defaultParameters() const override;
0071     unsigned int defaultParametersSize() const override;
0072     void addDefaultParameter(const IndexedString& str) override;
0073     void clearDefaultParameters() override;
0074 
0075     enum {
0076         Identity = 12
0077     };
0078 
0079     using Base = Declaration;
0080 
0081 private:
0082     Declaration* clonePrivate() const override;
0083     DUCHAIN_DECLARE_DATA(FunctionDeclaration)
0084 };
0085 }
0086 
0087 #endif // KDEVPLATFORM_FUNCTIONDECLARATION_H