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