File indexing completed on 2024-05-19 04:39:10

0001 /*
0002     SPDX-FileCopyrightText: 2002-2005 Roberto Raggi <roberto@kdevelop.org>
0003     SPDX-FileCopyrightText: 2006 Adam Treat <treat@kde.org>
0004     SPDX-FileCopyrightText: 2006 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_CLASSFUNCTIONDECLARATION_H
0011 #define KDEVPLATFORM_CLASSFUNCTIONDECLARATION_H
0012 
0013 #include "classmemberdeclaration.h"
0014 #include "abstractfunctiondeclaration.h"
0015 #include "classmemberdeclarationdata.h"
0016 
0017 namespace KDevelop {
0018 enum ClassFunctionFlag
0019 {
0020     FunctionFlagNormal = 0,
0021     FunctionSignalFlag = 1 <<  1,
0022     FunctionSlotFlag = 1 << 2,
0023     AbstractFunctionFlag = 1 << 3,
0024     FinalFunctionFlag = 1 << 4
0025 };
0026 Q_DECLARE_FLAGS(ClassFunctionFlags, ClassFunctionFlag)
0027 
0028 KDEVPLATFORMLANGUAGE_EXPORT DECLARE_LIST_MEMBER_HASH(ClassFunctionDeclarationData, m_defaultParameters, IndexedString)
0029 
0030 class KDEVPLATFORMLANGUAGE_EXPORT ClassFunctionDeclarationData
0031     : public ClassMemberDeclarationData
0032     , public AbstractFunctionDeclarationData
0033 {
0034 public:
0035     ClassFunctionDeclarationData()
0036     {
0037         initializeAppendedLists();
0038         m_functionFlags = FunctionFlagNormal;
0039     }
0040     ClassFunctionDeclarationData(const ClassFunctionDeclarationData& rhs)
0041         : ClassMemberDeclarationData(rhs)
0042         , AbstractFunctionDeclarationData(rhs)
0043     {
0044         initializeAppendedLists();
0045         copyListsFrom(rhs);
0046         m_functionFlags = rhs.m_functionFlags;
0047     }
0048     ~ClassFunctionDeclarationData()
0049     {
0050         freeAppendedLists();
0051     }
0052     ClassFunctionDeclarationData& operator=(const ClassFunctionDeclarationData& rhs) = delete;
0053     ClassFunctionFlags m_functionFlags;
0054     START_APPENDED_LISTS_BASE(ClassFunctionDeclarationData, ClassMemberDeclarationData);
0055     APPENDED_LIST_FIRST(ClassFunctionDeclarationData, IndexedString, m_defaultParameters);
0056     END_APPENDED_LISTS(ClassFunctionDeclarationData, m_defaultParameters);
0057 };
0058 /**
0059  * Represents a single variable definition in a definition-use chain.
0060  */
0061 using ClassFunctionDeclarationBase = MergeAbstractFunctionDeclaration<ClassMemberDeclaration, ClassFunctionDeclarationData>;
0062 class KDEVPLATFORMLANGUAGE_EXPORT ClassFunctionDeclaration
0063     : public ClassFunctionDeclarationBase
0064 {
0065 public:
0066     ClassFunctionDeclaration(const RangeInRevision& range, DUContext* context);
0067     ClassFunctionDeclaration(ClassFunctionDeclarationData& data, const RangeInRevision& range, DUContext* context);
0068     explicit ClassFunctionDeclaration(ClassFunctionDeclarationData& data);
0069     ~ClassFunctionDeclaration() override;
0070 
0071     ///Whether this function is a signal, for example a C++ Qt signal
0072     bool isSignal() const;
0073     void setIsSignal(bool);
0074 
0075     ///Whether this function is a slot, for example a C++ Qt slot
0076     bool isSlot() const;
0077     void setIsSlot(bool);
0078 
0079     ///Whether this function is abstract
0080     bool isAbstract() const;
0081     void setIsAbstract(bool);
0082 
0083     ///Whether this function is final
0084     bool isFinal() const;
0085     void setIsFinal(bool);
0086 
0087     virtual bool isConstructor() const;
0088     virtual bool isDestructor() const;
0089 
0090     bool isConversionFunction() const;
0091 
0092     bool isFunctionDeclaration() const override;
0093 
0094     QString toString() const override;
0095 
0096     void setAbstractType(AbstractType::Ptr type) override;
0097 
0098     Declaration* clonePrivate() const override;
0099 
0100     uint additionalIdentity() const override;
0101 
0102     const IndexedString* defaultParameters() const override;
0103     unsigned int defaultParametersSize() const override;
0104     void addDefaultParameter(const IndexedString& str) override;
0105     void clearDefaultParameters() override;
0106 
0107     enum {
0108         Identity = 14
0109     };
0110 
0111 protected:
0112     ClassFunctionDeclaration(const ClassFunctionDeclaration& rhs);
0113 
0114 private:
0115     DUCHAIN_DECLARE_DATA(ClassFunctionDeclaration)
0116 };
0117 }
0118 
0119 #endif // KDEVPLATFORM_CLASSFUNCTIONDECLARATION_H