aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2023-07-11 14:19:33 +0200
committerhjk <hjk@qt.io>2023-07-12 13:00:48 +0000
commit90ba1405456568fcc060fa68ac41ff5490258192 (patch)
tree12b29905961d7555e112031d2ed24c14098188db
parent1d59a37acb14ff3c87c8870010acc859e30f3461 (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.cpp59
-rw-r--r--src/libs/cplusplus/cppmodelmanagerbase.h35
-rw-r--r--src/libs/qmljs/qmljsmodelmanagerinterface.cpp7
-rw-r--r--src/plugins/cppeditor/cppmodelmanager.cpp17
-rw-r--r--src/plugins/cppeditor/cppmodelmanager.h6
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);