forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -3,48 +3,57 @@
|
|||||||
|
|
||||||
#include "cppmodelmanagerbase.h"
|
#include "cppmodelmanagerbase.h"
|
||||||
|
|
||||||
namespace CPlusPlus {
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
static CppModelManagerBase *g_instance = nullptr;
|
namespace CPlusPlus::CppModelManagerBase {
|
||||||
|
|
||||||
CppModelManagerBase::CppModelManagerBase(QObject *parent)
|
static bool (*setExtraDiagnosticsCallback)
|
||||||
: QObject(parent)
|
(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);
|
if (!setExtraDiagnosticsCallback)
|
||||||
g_instance = this;
|
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);
|
QTC_ASSERT(setExtraDiagnosticsCallback, return false);
|
||||||
g_instance = nullptr;
|
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,
|
bool hasSnapshots()
|
||||||
const QList<CPlusPlus::Document::DiagnosticMessage> &diagnostics)
|
|
||||||
{
|
{
|
||||||
if (CppModelManagerBase *mm = instance())
|
return snapshotCallback;
|
||||||
return mm->setExtraDiagnostics(fileName, kind, diagnostics);
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CppModelManagerBase::setExtraDiagnostics(const QString &fileName, const QString &kind,
|
// Installation
|
||||||
const QList<CPlusPlus::Document::DiagnosticMessage> &diagnostics)
|
|
||||||
|
void registerSetExtraDiagnosticsCallback(
|
||||||
|
bool (*callback)(const QString &, const QString &, const QList<Document::DiagnosticMessage> &))
|
||||||
{
|
{
|
||||||
Q_UNUSED(fileName)
|
QTC_ASSERT(callback, return);
|
||||||
Q_UNUSED(kind)
|
QTC_CHECK(!setExtraDiagnosticsCallback); // bark when used twice
|
||||||
Q_UNUSED(diagnostics)
|
setExtraDiagnosticsCallback = callback;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
||||||
|
@@ -5,29 +5,24 @@
|
|||||||
|
|
||||||
#include <cplusplus/CppDocument.h>
|
#include <cplusplus/CppDocument.h>
|
||||||
|
|
||||||
#include <QObject>
|
namespace CPlusPlus::CppModelManagerBase {
|
||||||
#include <QList>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
CPLUSPLUS_EXPORT bool trySetExtraDiagnostics
|
||||||
class QString;
|
(const QString &, const QString &, const QList<Document::DiagnosticMessage> &);
|
||||||
QT_END_NAMESPACE
|
|
||||||
|
|
||||||
namespace CPlusPlus {
|
CPLUSPLUS_EXPORT bool setSetExtraDiagnostics
|
||||||
|
(const QString &, const QString &, const QList<Document::DiagnosticMessage> &);
|
||||||
|
|
||||||
class CPLUSPLUS_EXPORT CppModelManagerBase : public QObject
|
CPLUSPLUS_EXPORT bool hasSnapshots();
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
CppModelManagerBase(QObject *parent = nullptr);
|
|
||||||
~CppModelManagerBase();
|
|
||||||
|
|
||||||
static CppModelManagerBase *instance();
|
CPLUSPLUS_EXPORT CPlusPlus::Snapshot snapshot();
|
||||||
static bool trySetExtraDiagnostics(const QString &fileName, const QString &kind,
|
|
||||||
const QList<Document::DiagnosticMessage> &diagnostics);
|
|
||||||
|
|
||||||
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
|
||||||
|
@@ -1366,13 +1366,12 @@ void ModelManagerInterface::startCppQmlTypeUpdate()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CPlusPlus::CppModelManagerBase *cppModelManager =
|
if (!CPlusPlus::CppModelManagerBase::hasSnapshots())
|
||||||
CPlusPlus::CppModelManagerBase::instance();
|
|
||||||
if (!cppModelManager)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_cppQmlTypesUpdater = Utils::asyncRun(&ModelManagerInterface::updateCppQmlTypes, this,
|
m_cppQmlTypesUpdater = Utils::asyncRun(&ModelManagerInterface::updateCppQmlTypes, this,
|
||||||
cppModelManager->snapshot(), m_queuedCppDocuments);
|
CPlusPlus::CppModelManagerBase::snapshot(),
|
||||||
|
m_queuedCppDocuments);
|
||||||
m_queuedCppDocuments.clear();
|
m_queuedCppDocuments.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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()
|
CppModelManager::CppModelManager()
|
||||||
: CppModelManagerBase(nullptr)
|
: d(new CppModelManagerPrivate)
|
||||||
, d(new CppModelManagerPrivate)
|
|
||||||
{
|
{
|
||||||
m_instance = this;
|
m_instance = this;
|
||||||
|
|
||||||
|
CppModelManagerBase::registerSetExtraDiagnosticsCallback(&setExtraDiagnosticsCallback);
|
||||||
|
CppModelManagerBase::registerSnapshotCallback(&snapshotCallback);
|
||||||
|
|
||||||
// Used for weak dependency in VcsBaseSubmitEditor
|
// Used for weak dependency in VcsBaseSubmitEditor
|
||||||
setObjectName("CppModelManager");
|
setObjectName("CppModelManager");
|
||||||
ExtensionSystem::PluginManager::addObject(this);
|
ExtensionSystem::PluginManager::addObject(this);
|
||||||
|
@@ -66,7 +66,7 @@ enum class SignalSlotType {
|
|||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
class CPPEDITOR_EXPORT CppModelManager final : public CPlusPlus::CppModelManagerBase
|
class CPPEDITOR_EXPORT CppModelManager final : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@@ -97,7 +97,7 @@ public:
|
|||||||
|
|
||||||
bool setExtraDiagnostics(const QString &fileName,
|
bool setExtraDiagnostics(const QString &fileName,
|
||||||
const QString &kind,
|
const QString &kind,
|
||||||
const QList<Document::DiagnosticMessage> &diagnostics) override;
|
const QList<Document::DiagnosticMessage> &diagnostics);
|
||||||
|
|
||||||
const QList<Document::DiagnosticMessage> diagnosticMessages();
|
const QList<Document::DiagnosticMessage> diagnosticMessages();
|
||||||
|
|
||||||
@@ -119,7 +119,7 @@ public:
|
|||||||
/// all loaded projects.
|
/// all loaded projects.
|
||||||
ProjectPart::ConstPtr fallbackProjectPart();
|
ProjectPart::ConstPtr fallbackProjectPart();
|
||||||
|
|
||||||
CPlusPlus::Snapshot snapshot() const override;
|
CPlusPlus::Snapshot snapshot() const;
|
||||||
Document::Ptr document(const Utils::FilePath &filePath) const;
|
Document::Ptr document(const Utils::FilePath &filePath) const;
|
||||||
bool replaceDocument(Document::Ptr newDoc);
|
bool replaceDocument(Document::Ptr newDoc);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user