diff options
author | hjk <hjk@qt.io> | 2023-07-11 14:19:33 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2023-07-12 13:00:48 +0000 |
commit | 90ba1405456568fcc060fa68ac41ff5490258192 (patch) | |
tree | 12b29905961d7555e112031d2ed24c14098188db | |
parent | 1d59a37acb14ff3c87c8870010acc859e30f3461 (diff) |
CplusPlus: Use plainer callbacks to interact to the CppEditor
Lets us remove a few explicit CppModelManager::instance() call
in user code later.
Change-Id: Id8d846d06a0715b3d609cc5d52cc031e1d025fb1
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r-- | src/libs/cplusplus/cppmodelmanagerbase.cpp | 59 | ||||
-rw-r--r-- | src/libs/cplusplus/cppmodelmanagerbase.h | 35 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsmodelmanagerinterface.cpp | 7 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppmodelmanager.cpp | 17 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppmodelmanager.h | 6 |
5 files changed, 70 insertions, 54 deletions
diff --git a/src/libs/cplusplus/cppmodelmanagerbase.cpp b/src/libs/cplusplus/cppmodelmanagerbase.cpp index c869fd61a0..cff9ef99e2 100644 --- a/src/libs/cplusplus/cppmodelmanagerbase.cpp +++ b/src/libs/cplusplus/cppmodelmanagerbase.cpp @@ -3,48 +3,57 @@ #include "cppmodelmanagerbase.h" -namespace CPlusPlus { +#include <utils/qtcassert.h> -static CppModelManagerBase *g_instance = nullptr; +namespace CPlusPlus::CppModelManagerBase { -CppModelManagerBase::CppModelManagerBase(QObject *parent) - : QObject(parent) +static bool (*setExtraDiagnosticsCallback) + (const QString &, const QString &, const QList<Document::DiagnosticMessage> &) = nullptr; + +static CPlusPlus::Snapshot (*snapshotCallback)() = nullptr; + + +bool trySetExtraDiagnostics(const QString &fileName, const QString &kind, + const QList<Document::DiagnosticMessage> &diagnostics) { - Q_ASSERT(!g_instance); - g_instance = this; + if (!setExtraDiagnosticsCallback) + return false; + return setExtraDiagnosticsCallback(fileName, kind, diagnostics); } -CppModelManagerBase::~CppModelManagerBase() +bool setExtraDiagnostics(const QString &fileName, const QString &kind, + const QList<Document::DiagnosticMessage> &diagnostics) { - Q_ASSERT(g_instance == this); - g_instance = nullptr; + QTC_ASSERT(setExtraDiagnosticsCallback, return false); + return setExtraDiagnosticsCallback(fileName, kind, diagnostics); } -CppModelManagerBase *CppModelManagerBase::instance() +Snapshot snapshot() { - return g_instance; + QTC_ASSERT(snapshotCallback, return {}); + return snapshotCallback(); } -bool CppModelManagerBase::trySetExtraDiagnostics(const QString &fileName, const QString &kind, - const QList<CPlusPlus::Document::DiagnosticMessage> &diagnostics) +bool hasSnapshots() { - if (CppModelManagerBase *mm = instance()) - return mm->setExtraDiagnostics(fileName, kind, diagnostics); - return false; + return snapshotCallback; } -bool CppModelManagerBase::setExtraDiagnostics(const QString &fileName, const QString &kind, - const QList<CPlusPlus::Document::DiagnosticMessage> &diagnostics) +// Installation + +void registerSetExtraDiagnosticsCallback( + bool (*callback)(const QString &, const QString &, const QList<Document::DiagnosticMessage> &)) { - Q_UNUSED(fileName) - Q_UNUSED(kind) - Q_UNUSED(diagnostics) - return false; + QTC_ASSERT(callback, return); + QTC_CHECK(!setExtraDiagnosticsCallback); // bark when used twice + setExtraDiagnosticsCallback = callback; } -CPlusPlus::Snapshot CppModelManagerBase::snapshot() const +void registerSnapshotCallback(Snapshot (*callback)()) { - return CPlusPlus::Snapshot(); + QTC_ASSERT(callback, return); + QTC_CHECK(!snapshotCallback); // bark when used twice + snapshotCallback = callback; } -} // namespace CPlusPlus +} // CPlusPlus::CppModelManagerBase diff --git a/src/libs/cplusplus/cppmodelmanagerbase.h b/src/libs/cplusplus/cppmodelmanagerbase.h index d003fcf1de..1a9e4c7db3 100644 --- a/src/libs/cplusplus/cppmodelmanagerbase.h +++ b/src/libs/cplusplus/cppmodelmanagerbase.h @@ -5,29 +5,24 @@ #include <cplusplus/CppDocument.h> -#include <QObject> -#include <QList> +namespace CPlusPlus::CppModelManagerBase { -QT_BEGIN_NAMESPACE -class QString; -QT_END_NAMESPACE +CPLUSPLUS_EXPORT bool trySetExtraDiagnostics + (const QString &, const QString &, const QList<Document::DiagnosticMessage> &); -namespace CPlusPlus { +CPLUSPLUS_EXPORT bool setSetExtraDiagnostics + (const QString &, const QString &, const QList<Document::DiagnosticMessage> &); -class CPLUSPLUS_EXPORT CppModelManagerBase : public QObject -{ - Q_OBJECT -public: - CppModelManagerBase(QObject *parent = nullptr); - ~CppModelManagerBase(); +CPLUSPLUS_EXPORT bool hasSnapshots(); - static CppModelManagerBase *instance(); - static bool trySetExtraDiagnostics(const QString &fileName, const QString &kind, - const QList<Document::DiagnosticMessage> &diagnostics); +CPLUSPLUS_EXPORT CPlusPlus::Snapshot snapshot(); - virtual bool setExtraDiagnostics(const QString &fileName, const QString &kind, - const QList<Document::DiagnosticMessage> &diagnostics); - virtual CPlusPlus::Snapshot snapshot() const; -}; -} // namespace CPlusPlus +// These callback are provided by the CppEditor plugin. + +CPLUSPLUS_EXPORT void registerSnapshotCallback(CPlusPlus::Snapshot (*)(void)); + +CPLUSPLUS_EXPORT void registerSetExtraDiagnosticsCallback( + bool(*)(const QString &, const QString &, const QList<Document::DiagnosticMessage> &)); + +} // CPlusPlus::CppModelManagerBase diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp index 93b8ca35e7..26238807e0 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp @@ -1366,13 +1366,12 @@ void ModelManagerInterface::startCppQmlTypeUpdate() return; } - CPlusPlus::CppModelManagerBase *cppModelManager = - CPlusPlus::CppModelManagerBase::instance(); - if (!cppModelManager) + if (!CPlusPlus::CppModelManagerBase::hasSnapshots()) return; m_cppQmlTypesUpdater = Utils::asyncRun(&ModelManagerInterface::updateCppQmlTypes, this, - cppModelManager->snapshot(), m_queuedCppDocuments); + CPlusPlus::CppModelManagerBase::snapshot(), + m_queuedCppDocuments); m_queuedCppDocuments.clear(); } diff --git a/src/plugins/cppeditor/cppmodelmanager.cpp b/src/plugins/cppeditor/cppmodelmanager.cpp index 4ea3e99edf..7fb8115873 100644 --- a/src/plugins/cppeditor/cppmodelmanager.cpp +++ b/src/plugins/cppeditor/cppmodelmanager.cpp @@ -912,12 +912,25 @@ void CppModelManager::initCppTools() }); } +static bool setExtraDiagnosticsCallback(const QString &fileName, const QString &kind, + const QList<Document::DiagnosticMessage> &diagnostics) +{ + return m_instance->setExtraDiagnostics(fileName, kind, diagnostics); +} + +static Snapshot snapshotCallback() +{ + return m_instance->snapshot(); +} + CppModelManager::CppModelManager() - : CppModelManagerBase(nullptr) - , d(new CppModelManagerPrivate) + : d(new CppModelManagerPrivate) { m_instance = this; + CppModelManagerBase::registerSetExtraDiagnosticsCallback(&setExtraDiagnosticsCallback); + CppModelManagerBase::registerSnapshotCallback(&snapshotCallback); + // Used for weak dependency in VcsBaseSubmitEditor setObjectName("CppModelManager"); ExtensionSystem::PluginManager::addObject(this); diff --git a/src/plugins/cppeditor/cppmodelmanager.h b/src/plugins/cppeditor/cppmodelmanager.h index 3ab9ee2689..7dd49c6ebd 100644 --- a/src/plugins/cppeditor/cppmodelmanager.h +++ b/src/plugins/cppeditor/cppmodelmanager.h @@ -66,7 +66,7 @@ enum class SignalSlotType { None }; -class CPPEDITOR_EXPORT CppModelManager final : public CPlusPlus::CppModelManagerBase +class CPPEDITOR_EXPORT CppModelManager final : public QObject { Q_OBJECT @@ -97,7 +97,7 @@ public: bool setExtraDiagnostics(const QString &fileName, const QString &kind, - const QList<Document::DiagnosticMessage> &diagnostics) override; + const QList<Document::DiagnosticMessage> &diagnostics); const QList<Document::DiagnosticMessage> diagnosticMessages(); @@ -119,7 +119,7 @@ public: /// all loaded projects. ProjectPart::ConstPtr fallbackProjectPart(); - CPlusPlus::Snapshot snapshot() const override; + CPlusPlus::Snapshot snapshot() const; Document::Ptr document(const Utils::FilePath &filePath) const; bool replaceDocument(Document::Ptr newDoc); |