forked from qt-creator/qt-creator
Code model: Update on changes from the versioning system.
Add state logic to CppCodeModelManagerInterface, making it aware whether an indexer is running, protect the update methods from another invocation while running. Add changed signals to IVersionControl and VCSManager and wire them to the update methods. Add a menu action for manually updating. Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com> Reviewed-by: con <qtc-committer@nokia.com>
This commit is contained in:
@@ -595,6 +595,8 @@ Document::Ptr CppPreprocessor::switchDocument(Document::Ptr doc)
|
||||
|
||||
void CppTools::CppModelManagerInterface::updateModifiedSourceFiles()
|
||||
{
|
||||
if (isIndexing())
|
||||
return;
|
||||
const Snapshot snapshot = this->snapshot();
|
||||
QStringList sourceFiles;
|
||||
|
||||
@@ -630,7 +632,8 @@ CppTools::CppModelManagerInterface *CppTools::CppModelManagerInterface::instance
|
||||
*/
|
||||
|
||||
CppModelManager::CppModelManager(QObject *parent)
|
||||
: CppModelManagerInterface(parent)
|
||||
: CppModelManagerInterface(parent),
|
||||
m_indexing(false)
|
||||
{
|
||||
m_findReferences = new CppFindReferences(this);
|
||||
|
||||
@@ -675,6 +678,11 @@ CppModelManager::CppModelManager(QObject *parent)
|
||||
|
||||
connect(m_core->editorManager(), SIGNAL(editorAboutToClose(Core::IEditor *)),
|
||||
this, SLOT(editorAboutToClose(Core::IEditor *)));
|
||||
|
||||
connect(m_core->progressManager(), SIGNAL(taskStarted(QString)),
|
||||
this, SLOT(onTaskStarted(QString)));
|
||||
connect(m_core->progressManager(), SIGNAL(allTasksFinished(QString)),
|
||||
this, SLOT(onAllTasksFinished(QString)));
|
||||
}
|
||||
|
||||
CppModelManager::~CppModelManager()
|
||||
@@ -871,7 +879,7 @@ QStringList CppModelManager::includesInPath(const QString &path) const
|
||||
|
||||
QFuture<void> CppModelManager::refreshSourceFiles(const QStringList &sourceFiles)
|
||||
{
|
||||
if (! sourceFiles.isEmpty() && qgetenv("QTCREATOR_NO_CODE_INDEXER").isNull()) {
|
||||
if (!m_indexing && !sourceFiles.isEmpty() && qgetenv("QTCREATOR_NO_CODE_INDEXER").isNull()) {
|
||||
const QMap<QString, QString> workingCopy = buildWorkingCopyList();
|
||||
|
||||
CppPreprocessor *preproc = new CppPreprocessor(this);
|
||||
@@ -897,7 +905,7 @@ QFuture<void> CppModelManager::refreshSourceFiles(const QStringList &sourceFiles
|
||||
|
||||
m_synchronizer.addFuture(result);
|
||||
|
||||
if (sourceFiles.count() > 1) {
|
||||
if (sourceFiles.count() > 1) {
|
||||
m_core->progressManager()->addTask(result, tr("Indexing"),
|
||||
CppTools::Constants::TASK_INDEX,
|
||||
Core::ProgressManager::CloseOnSuccess);
|
||||
@@ -1391,4 +1399,31 @@ void CppModelManager::GC()
|
||||
protectSnapshot.unlock();
|
||||
}
|
||||
|
||||
bool CppModelManager::isIndexing() const
|
||||
{
|
||||
return m_indexing;
|
||||
}
|
||||
|
||||
void CppModelManager::setIndexing(bool v)
|
||||
{
|
||||
if (m_indexing == v)
|
||||
return;
|
||||
m_indexing = v;
|
||||
if (v) {
|
||||
emit indexingStarted();
|
||||
} else {
|
||||
emit indexingFinished();
|
||||
}
|
||||
}
|
||||
|
||||
void CppModelManager::onTaskStarted(const QString &type)
|
||||
{
|
||||
if (type == QLatin1String(CppTools::Constants::TASK_INDEX))
|
||||
setIndexing(true);
|
||||
}
|
||||
|
||||
void CppModelManager::onAllTasksFinished(const QString &type)
|
||||
{
|
||||
if (type == QLatin1String(CppTools::Constants::TASK_INDEX))
|
||||
setIndexing(false);
|
||||
}
|
||||
|
||||
@@ -111,6 +111,8 @@ public:
|
||||
void setHeaderSuffixes(const QStringList &suffixes)
|
||||
{ m_headerSuffixes = suffixes; }
|
||||
|
||||
virtual bool isIndexing() const;
|
||||
|
||||
Q_SIGNALS:
|
||||
void projectPathChanged(const QString &projectPath);
|
||||
|
||||
@@ -129,6 +131,8 @@ private Q_SLOTS:
|
||||
void onProjectAdded(ProjectExplorer::Project *project);
|
||||
void postEditorUpdate();
|
||||
void updateEditorSelections();
|
||||
void onTaskStarted(const QString &type);
|
||||
void onAllTasksFinished(const QString &type);
|
||||
|
||||
private:
|
||||
QMap<QString, QString> buildWorkingCopyList();
|
||||
@@ -175,10 +179,13 @@ private:
|
||||
CppPreprocessor *preproc,
|
||||
QStringList files);
|
||||
|
||||
void setIndexing(bool);
|
||||
|
||||
private:
|
||||
Core::ICore *m_core;
|
||||
CPlusPlus::Snapshot m_snapshot;
|
||||
|
||||
bool m_indexing;
|
||||
// cache
|
||||
bool m_dirty;
|
||||
QStringList m_projectFiles;
|
||||
|
||||
@@ -102,6 +102,12 @@ public:
|
||||
virtual void renameUsages(CPlusPlus::Symbol *symbol) = 0;
|
||||
virtual void findUsages(CPlusPlus::Symbol *symbol) = 0;
|
||||
|
||||
virtual bool isIndexing() const = 0;
|
||||
|
||||
signals:
|
||||
void indexingStarted();
|
||||
void indexingFinished();
|
||||
|
||||
public Q_SLOTS:
|
||||
void updateModifiedSourceFiles();
|
||||
virtual void updateSourceFiles(const QStringList &sourceFiles) = 0;
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
#include <coreplugin/actionmanager/actionmanager.h>
|
||||
#include <coreplugin/editormanager/editormanager.h>
|
||||
#include <coreplugin/progressmanager/progressmanager.h>
|
||||
#include <coreplugin/vcsmanager.h>
|
||||
#include <cppeditor/cppeditorconstants.h>
|
||||
|
||||
#include <QtCore/QtConcurrentRun>
|
||||
@@ -97,6 +98,11 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error)
|
||||
|
||||
// Objects
|
||||
m_modelManager = new CppModelManager(this);
|
||||
Core::VCSManager *vcsManager = core->vcsManager();
|
||||
connect(vcsManager, SIGNAL(repositoryChanged(QString)),
|
||||
m_modelManager, SLOT(updateModifiedSourceFiles()));
|
||||
connect(vcsManager, SIGNAL(filesChanged(QStringList)),
|
||||
m_modelManager, SLOT(updateModifiedSourceFiles()));
|
||||
addAutoReleasedObject(m_modelManager);
|
||||
|
||||
m_completion = new CppCodeCompletion(m_modelManager);
|
||||
|
||||
Reference in New Issue
Block a user