1 /*
2     SPDX-FileCopyrightText: 2008 Niko Sams <niko.sams@gmail.com>
3 
4     SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #ifndef VARIABLEDECLARATION_H
8 #define VARIABLEDECLARATION_H
9 
10 #include <language/duchain/declaration.h>
11 #include <language/duchain/declarationdata.h>
12 
13 #include "phpduchainexport.h"
14 
15 namespace Php
16 {
17 
18 class KDEVPHPDUCHAIN_EXPORT VariableDeclarationData : public KDevelop::DeclarationData
19 {
20 public:
VariableDeclarationData()21     VariableDeclarationData()
22             : KDevelop::DeclarationData(), m_isSuperglobal(false), m_isVariadic(false) {
23     }
24 
VariableDeclarationData(const VariableDeclarationData & rhs)25     VariableDeclarationData(const VariableDeclarationData& rhs)
26             : KDevelop::DeclarationData(rhs) {
27         m_isSuperglobal = rhs.m_isSuperglobal;
28         m_isVariadic = rhs.m_isVariadic;
29     }
30 
~VariableDeclarationData()31     ~VariableDeclarationData() {
32     }
33 
34 bool m_isSuperglobal;
35 bool m_isVariadic;
36 };
37 
38 /**
39  * Declaration used for Php variables eg. $a = 0;
40  */
41 class KDEVPHPDUCHAIN_EXPORT VariableDeclaration : public KDevelop::Declaration
42 {
43 public:
44     VariableDeclaration(const VariableDeclaration& rhs);
45     VariableDeclaration(const KDevelop::RangeInRevision& range, KDevelop::DUContext* context);
46     VariableDeclaration(VariableDeclarationData& data);
47     VariableDeclaration(VariableDeclarationData& data, const KDevelop::RangeInRevision&);
48     ~VariableDeclaration() override;
49 
50     bool isSuperglobal() const;
51     void setSuperglobal(bool superglobal);
52 
53     bool isVariadic() const;
54     void setVariadic(bool variadic);
55 
56     uint additionalIdentity() const override;
57     KDevelop::DeclarationId id(bool forceDirect = false) const override;
58 
59     enum {
60         Identity = 83
61     };
62     typedef KDevelop::Declaration Base;
63 
64 private:
65     DUCHAIN_DECLARE_DATA(VariableDeclaration)
66 };
67 
68 }
69 
70 #endif // VARIABLEDECLARATION_H
71