1 /*
2     SPDX-FileCopyrightText: 2013 Sven Brauch <svenbrauch@googlemail.com>
3 
4     SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #ifndef PYTHONDUCONTEXT_H
8 #define PYTHONDUCONTEXT_H
9 
10 #include <QString>
11 #include <language/duchain/ducontext.h>
12 #include <language/editor/modificationrevision.h>
13 
14 namespace KDevelop
15 {
16     class Declaration;
17     class TopDUContext;
18 }
19 
20 namespace Python
21 {
22 
23 template<class BaseContext, int IdentityT>
24 class PythonDUContext : public BaseContext
25 {
26 public:
27     template<class Data>
PythonDUContext(Data & data)28     PythonDUContext(Data& data) : BaseContext(data) {
29     }
30 
31     ///Parameters will be reached to the base-class
32     template<class Param1, class Param2>
PythonDUContext(const Param1 & p1,const Param2 & p2,bool isInstantiationContext)33     PythonDUContext(const Param1& p1, const Param2& p2, bool isInstantiationContext) : BaseContext(p1, p2, isInstantiationContext) {
34         static_cast<KDevelop::DUChainBase*>(this)->d_func_dynamic()->setClassId(this);
35     }
36 
37     ///Both parameters will be reached to the base-class. This fits TopDUContext.
38     template<class Param1, class Param2, class Param3>
PythonDUContext(const Param1 & p1,const Param2 & p2,const Param3 & p3)39     PythonDUContext(const Param1& p1, const Param2& p2, const Param3& p3) : BaseContext(p1, p2, p3) {
40         static_cast<KDevelop::DUChainBase*>(this)->d_func_dynamic()->setClassId(this);
41     }
42     template<class Param1, class Param2>
PythonDUContext(const Param1 & p1,const Param2 & p2)43     PythonDUContext(const Param1& p1, const Param2& p2) : BaseContext(p1, p2) {
44         static_cast<KDevelop::DUChainBase*>(this)->d_func_dynamic()->setClassId(this);
45     }
46 
47     KDevelop::AbstractNavigationWidget* createNavigationWidget(KDevelop::Declaration* decl, KDevelop::TopDUContext* topContext,
48                                             KDevelop::AbstractNavigationWidget::DisplayHints hints) const override;
49 
50     enum {
51         Identity = IdentityT
52     };
53 };
54 
55 typedef PythonDUContext<KDevelop::TopDUContext, 100> PythonTopDUContext;
56 typedef PythonDUContext<KDevelop::DUContext, 101> PythonNormalDUContext;
57 
58 }
59 
60 
61 #endif // PYTHONDUCONTEXT_H
62