diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2018-01-11 17:06:26 +0100 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2018-01-16 08:31:11 +0000 |
commit | 5e861d2be6729b7d4b0927b1d334f6298927013e (patch) | |
tree | ced4c2b983c44173b6331e406a1f255f6881d089 /src/plugins/cpptools/cppelementevaluator.h | |
parent | 53a744a6dfe3999b86e9adaab3c05d60322a251e (diff) | |
download | qt-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.h | 191 |
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 ¯o); +}; + +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 |