File indexing completed on 2024-05-05 16:42:24

0001 /*
0002     SPDX-FileCopyrightText: 2011 Sven Brauch <svenbrauch@googlemail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef PYTHONFUNCTIONDECLARATION_H
0008 #define PYTHONFUNCTIONDECLARATION_H
0009 
0010 #include <language/duchain/functiondeclaration.h>
0011 #include <serialization/indexedstring.h>
0012 
0013 #include "pythonduchainexport.h"
0014 
0015 namespace Python {
0016 
0017 class KDEVPYTHONDUCHAIN_EXPORT FunctionDeclarationData : public KDevelop::FunctionDeclarationData
0018 {
0019 public:
0020     FunctionDeclarationData()
0021         : KDevelop::FunctionDeclarationData()
0022         , m_isStatic(false)
0023         , m_isClassMethod(false)
0024         , m_isProperty(false)
0025         , m_vararg(-1)
0026         , m_kwarg(-1) {}
0027 
0028     FunctionDeclarationData(const FunctionDeclarationData& rhs)
0029         : KDevelop::FunctionDeclarationData(rhs)
0030         , m_isStatic(rhs.m_isStatic)
0031         , m_isClassMethod(rhs.m_isClassMethod)
0032         , m_isProperty(rhs.m_isProperty)
0033         , m_vararg(rhs.m_vararg)
0034         , m_kwarg(rhs.m_kwarg) {}
0035 
0036     ~FunctionDeclarationData() {}
0037 
0038     bool m_isStatic: 1;
0039     bool m_isClassMethod: 1;
0040     bool m_isProperty: 1; //TODO real property declarations
0041     short m_vararg;
0042     short m_kwarg;
0043 };
0044 
0045 class KDEVPYTHONDUCHAIN_EXPORT FunctionDeclaration : public KDevelop::FunctionDeclaration
0046 {
0047 public:
0048     FunctionDeclaration(const FunctionDeclaration &rhs);
0049     FunctionDeclaration(const KDevelop::RangeInRevision &range, KDevelop::DUContext *context);
0050     FunctionDeclaration(FunctionDeclarationData &data);
0051     FunctionDeclaration(FunctionDeclarationData &data, const KDevelop::RangeInRevision &range, KDevelop::DUContext *context);
0052     ~FunctionDeclaration() override;
0053     
0054     enum {
0055         Identity = 126
0056     };
0057     
0058     inline void setVararg(short vararg) {
0059         d_func_dynamic()->m_vararg = vararg;
0060     }
0061     
0062     inline short vararg() const {
0063         return d_func()->m_vararg;
0064     }
0065     
0066     inline void setKwarg(short kwarg) {
0067         d_func_dynamic()->m_kwarg = kwarg;
0068     }
0069     
0070     inline short kwarg() const {
0071         return d_func()->m_kwarg;
0072     }
0073     
0074     inline bool isStatic() const {
0075         return d_func()->m_isStatic;
0076     }
0077     
0078     inline void setStatic(bool isStatic) {
0079         d_func_dynamic()->m_isStatic = isStatic;
0080     }
0081     inline bool isClassMethod() const {
0082         return d_func()->m_isClassMethod;
0083     }
0084 
0085     inline void setClassMethod(bool isClassMethod) {
0086         d_func_dynamic()->m_isClassMethod = isClassMethod;
0087     }
0088 
0089     inline bool isProperty() const {
0090         return d_func()->m_isProperty;
0091     }
0092 
0093     inline void setProperty(bool isProperty) {
0094         d_func_dynamic()->m_isProperty = isProperty;
0095     }
0096 
0097     typedef KDevelop::DUChainPointer<FunctionDeclaration> Ptr;
0098     
0099 private:
0100     DUCHAIN_DECLARE_DATA(FunctionDeclaration);
0101 };
0102 
0103 typedef KDevelop::DUChainPointer<FunctionDeclaration> FunctionDeclarationPointer;
0104 } // namespace Python
0105 
0106 #endif // PYTHONFUNCTIONDECLARATION_H