diff options
author | Eike Ziller <eike.ziller@qt.io> | 2018-03-08 19:25:04 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2018-03-09 08:21:07 +0000 |
commit | 711ac6602f67a711eeeb307174408cdc5cf0ab3a (patch) | |
tree | d7e2627b3a158f43cd49fab0de08d15797658183 /src/plugins/cpptools/cppelementevaluator.h | |
parent | 32188f448ab9cfc0e7ed3da4f95c3f9ce2953795 (diff) | |
download | qt-creator-711ac6602f67a711eeeb307174408cdc5cf0ab3a.tar.gz |
Fix C++ type hierarchy
Dynamic casts between library boundaries tend to fail. Add an "explicit
cast" to CppClass via virtual functions as a quickfix.
This is a recurring issue, e.g. d2769f30037aa, 3f11ef92167ba and
2ffd0e2d0da5d to name just a few...
This was introduced in 5e861d2be6729
Task-number: QTCREATORBUG-20001
Change-Id: Ie5a89a028d587e4e9d1ecec920a7c7d17497dbde
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src/plugins/cpptools/cppelementevaluator.h')
-rw-r--r-- | src/plugins/cpptools/cppelementevaluator.h | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/plugins/cpptools/cppelementevaluator.h b/src/plugins/cpptools/cppelementevaluator.h index 0755bd3004..0bececefaf 100644 --- a/src/plugins/cpptools/cppelementevaluator.h +++ b/src/plugins/cpptools/cppelementevaluator.h @@ -81,6 +81,8 @@ private: QString m_diagnosis; }; +class CppClass; + class CPPTOOLS_EXPORT CppElement { protected: @@ -89,6 +91,8 @@ protected: public: virtual ~CppElement(); + virtual CppClass *toCppClass(); + TextEditor::HelpItem::Category helpCategory; QStringList helpIdCandidates; QString helpMark; @@ -96,7 +100,7 @@ public: QString tooltip; }; -class CppDeclarableElement : public CppElement +class CPPTOOLS_EXPORT CppDeclarableElement : public CppElement { public: explicit CppDeclarableElement(CPlusPlus::Symbol *declaration); @@ -109,7 +113,7 @@ public: QIcon icon; }; -class CppClass : public CppDeclarableElement +class CPPTOOLS_EXPORT CppClass : public CppDeclarableElement { public: CppClass(); @@ -117,6 +121,8 @@ public: bool operator==(const CppClass &other); + CppClass *toCppClass() final; + void lookupBases(CPlusPlus::Symbol *declaration, const CPlusPlus::LookupContext &context); void lookupDerived(CPlusPlus::Symbol *declaration, const CPlusPlus::Snapshot &snapshot); |