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