summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppelementevaluator.h
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2018-01-11 17:06:26 +0100
committerNikolai Kosjar <nikolai.kosjar@qt.io>2018-01-16 08:31:11 +0000
commit5e861d2be6729b7d4b0927b1d334f6298927013e (patch)
treeced4c2b983c44173b6331e406a1f255f6881d089 /src/plugins/cpptools/cppelementevaluator.h
parent53a744a6dfe3999b86e9adaab3c05d60322a251e (diff)
downloadqt-creator-5e861d2be6729b7d4b0927b1d334f6298927013e.tar.gz
CppTools: Move CppHoverHandler to CppTools
This is in preparation for clang code model to provide its own hover handler. Change-Id: Ifbdd96f427989bd5d1fbc4badb9c38108485c2f2 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src/plugins/cpptools/cppelementevaluator.h')
-rw-r--r--src/plugins/cpptools/cppelementevaluator.h191
1 files changed, 191 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppelementevaluator.h b/src/plugins/cpptools/cppelementevaluator.h
new file mode 100644
index 0000000000..af994989ed
--- /dev/null
+++ b/src/plugins/cpptools/cppelementevaluator.h
@@ -0,0 +1,191 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include "cpptools_global.h"
+
+#include <texteditor/texteditor.h>
+#include <texteditor/helpitem.h>
+
+#include <cplusplus/CppDocument.h>
+
+#include <QString>
+#include <QStringList>
+#include <QSharedPointer>
+#include <QTextCursor>
+#include <QIcon>
+
+namespace CPlusPlus {
+class LookupItem;
+class LookupContext;
+}
+
+namespace CppTools {
+class CppElement;
+class CppModelManager;
+
+class CPPTOOLS_EXPORT CppElementEvaluator
+{
+public:
+ explicit CppElementEvaluator(TextEditor::TextEditorWidget *editor);
+
+ void setTextCursor(const QTextCursor &tc);
+ void setLookupBaseClasses(const bool lookup);
+ void setLookupDerivedClasses(const bool lookup);
+
+ void execute();
+ bool identifiedCppElement() const;
+ const QSharedPointer<CppElement> &cppElement() const;
+ bool hasDiagnosis() const;
+ const QString &diagnosis() const;
+
+private:
+ void clear();
+ void checkDiagnosticMessage(int pos);
+ bool matchIncludeFile(const CPlusPlus::Document::Ptr &document, unsigned line);
+ bool matchMacroInUse(const CPlusPlus::Document::Ptr &document, unsigned pos);
+ void handleLookupItemMatch(const CPlusPlus::Snapshot &snapshot,
+ const CPlusPlus::LookupItem &lookupItem,
+ const CPlusPlus::LookupContext &lookupContext,
+ const CPlusPlus::Scope *scope);
+
+ TextEditor::TextEditorWidget *m_editor;
+ CppTools::CppModelManager *m_modelManager;
+ QTextCursor m_tc;
+ bool m_lookupBaseClasses;
+ bool m_lookupDerivedClasses;
+ QSharedPointer<CppElement> m_element;
+ QString m_diagnosis;
+};
+
+class CPPTOOLS_EXPORT CppElement
+{
+protected:
+ CppElement();
+
+public:
+ virtual ~CppElement();
+
+ TextEditor::HelpItem::Category helpCategory;
+ QStringList helpIdCandidates;
+ QString helpMark;
+ Utils::Link link;
+ QString tooltip;
+};
+
+class Unknown : public CppElement
+{
+public:
+ explicit Unknown(const QString &type);
+
+public:
+ QString type;
+};
+
+class CppInclude : public CppElement
+{
+public:
+ explicit CppInclude(const CPlusPlus::Document::Include &includeFile);
+
+public:
+ QString path;
+ QString fileName;
+};
+
+class CppMacro : public CppElement
+{
+public:
+ explicit CppMacro(const CPlusPlus::Macro &macro);
+};
+
+class CppDeclarableElement : public CppElement
+{
+public:
+ explicit CppDeclarableElement(CPlusPlus::Symbol *declaration);
+
+public:
+ CPlusPlus::Symbol *declaration;
+ QString name;
+ QString qualifiedName;
+ QString type;
+ QIcon icon;
+};
+
+class CppNamespace : public CppDeclarableElement
+{
+public:
+ explicit CppNamespace(CPlusPlus::Symbol *declaration);
+};
+
+class CppClass : public CppDeclarableElement
+{
+public:
+ CppClass();
+ explicit CppClass(CPlusPlus::Symbol *declaration);
+
+ bool operator==(const CppClass &other);
+
+ void lookupBases(CPlusPlus::Symbol *declaration, const CPlusPlus::LookupContext &context);
+ void lookupDerived(CPlusPlus::Symbol *declaration, const CPlusPlus::Snapshot &snapshot);
+
+public:
+ QList<CppClass> bases;
+ QList<CppClass> derived;
+};
+
+class CppFunction : public CppDeclarableElement
+{
+public:
+ explicit CppFunction(CPlusPlus::Symbol *declaration);
+};
+
+class CppEnum : public CppDeclarableElement
+{
+public:
+ explicit CppEnum(CPlusPlus::Enum *declaration);
+};
+
+class CppTypedef : public CppDeclarableElement
+{
+public:
+ explicit CppTypedef(CPlusPlus::Symbol *declaration);
+};
+
+class CppVariable : public CppDeclarableElement
+{
+public:
+ CppVariable(CPlusPlus::Symbol *declaration,
+ const CPlusPlus::LookupContext &context,
+ CPlusPlus::Scope *scope);
+};
+
+class CppEnumerator : public CppDeclarableElement
+{
+public:
+ explicit CppEnumerator(CPlusPlus::EnumeratorDeclaration *declaration);
+};
+
+} // namespace CppTools