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:
Friedemann Kleint
2009-11-09 15:57:56 +01:00
parent 19fb0311ba
commit 7aa2411693
30 changed files with 265 additions and 61 deletions

View File

@@ -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);
}