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