summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppelementevaluator.h
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2018-03-08 19:25:04 +0100
committerEike Ziller <eike.ziller@qt.io>2018-03-09 08:21:07 +0000
commit711ac6602f67a711eeeb307174408cdc5cf0ab3a (patch)
treed7e2627b3a158f43cd49fab0de08d15797658183 /src/plugins/cpptools/cppelementevaluator.h
parent32188f448ab9cfc0e7ed3da4f95c3f9ce2953795 (diff)
downloadqt-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.h10
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);