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"
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
CppModelManagerBase::~CppModelManagerBase()
|
||||
{
|
||||
Q_ASSERT(g_instance == this);
|
||||
g_instance = nullptr;
|
||||
}
|
||||
|
||||
CppModelManagerBase *CppModelManagerBase::instance()
|
||||
{
|
||||
return g_instance;
|
||||
}
|
||||
|
||||
bool CppModelManagerBase::trySetExtraDiagnostics(const QString &fileName, const QString &kind,
|
||||
const QList<CPlusPlus::Document::DiagnosticMessage> &diagnostics)
|
||||
{
|
||||
if (CppModelManagerBase *mm = instance())
|
||||
return mm->setExtraDiagnostics(fileName, kind, diagnostics);
|
||||
if (!setExtraDiagnosticsCallback)
|
||||
return false;
|
||||
return setExtraDiagnosticsCallback(fileName, kind, diagnostics);
|
||||
}
|
||||
|
||||
bool CppModelManagerBase::setExtraDiagnostics(const QString &fileName, const QString &kind,
|
||||
const QList<CPlusPlus::Document::DiagnosticMessage> &diagnostics)
|
||||
bool setExtraDiagnostics(const QString &fileName, const QString &kind,
|
||||
const QList<Document::DiagnosticMessage> &diagnostics)
|
||||
{
|
||||
Q_UNUSED(fileName)
|
||||
Q_UNUSED(kind)
|
||||
Q_UNUSED(diagnostics)
|
||||
return false;
|
||||
QTC_ASSERT(setExtraDiagnosticsCallback, return false);
|
||||
return setExtraDiagnosticsCallback(fileName, kind, diagnostics);
|
||||
}
|
||||
|
||||
CPlusPlus::Snapshot CppModelManagerBase::snapshot() const
|
||||
Snapshot snapshot()
|
||||
{
|
||||
return CPlusPlus::Snapshot();
|
||||
QTC_ASSERT(snapshotCallback, return {});
|
||||
return snapshotCallback();
|
||||
}
|
||||
|
||||
} // namespace CPlusPlus
|
||||
bool hasSnapshots()
|
||||
{
|
||||
return snapshotCallback;
|
||||
}
|
||||
|
||||
// Installation
|
||||
|
||||
void registerSetExtraDiagnosticsCallback(
|
||||
bool (*callback)(const QString &, const QString &, const QList<Document::DiagnosticMessage> &))
|
||||
{
|
||||
QTC_ASSERT(callback, return);
|
||||
QTC_CHECK(!setExtraDiagnosticsCallback); // bark when used twice
|
||||
setExtraDiagnosticsCallback = callback;
|
||||
}
|
||||
|
||||
void registerSnapshotCallback(Snapshot (*callback)())
|
||||
{
|
||||
QTC_ASSERT(callback, return);
|
||||
QTC_CHECK(!snapshotCallback); // bark when used twice
|
||||
snapshotCallback = callback;
|
||||
}
|
||||
|
||||
} // CPlusPlus::CppModelManagerBase
|
||||
|
@@ -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
|
||||
|
@@ -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();
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user