Commit ecab2093 authored by Roberto Raggi's avatar Roberto Raggi
Browse files

Wait the future values.

parent c395680e
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include <functional> #include <functional>
#include <QtConcurrentRun> #include <QtConcurrentRun>
#include <QFutureSynchronizer>
#include <qtconcurrent/runextensions.h> #include <qtconcurrent/runextensions.h>
#include <texteditor/itexteditor.h> #include <texteditor/itexteditor.h>
...@@ -163,6 +164,7 @@ class CppPreprocessor: public CPlusPlus::Client ...@@ -163,6 +164,7 @@ class CppPreprocessor: public CPlusPlus::Client
{ {
public: public:
CppPreprocessor(QPointer<CppModelManager> modelManager); CppPreprocessor(QPointer<CppModelManager> modelManager);
virtual ~CppPreprocessor();
void setWorkingCopy(const QMap<QString, QByteArray> &workingCopy); void setWorkingCopy(const QMap<QString, QByteArray> &workingCopy);
void setIncludePaths(const QStringList &includePaths); void setIncludePaths(const QStringList &includePaths);
...@@ -212,6 +214,7 @@ private: ...@@ -212,6 +214,7 @@ private:
Document::Ptr m_currentDoc; Document::Ptr m_currentDoc;
QSet<QString> m_todo; QSet<QString> m_todo;
QSet<QString> m_processed; QSet<QString> m_processed;
QFutureSynchronizer<void> m_synchronizer;
}; };
} // namespace Internal } // namespace Internal
...@@ -221,6 +224,11 @@ CppPreprocessor::CppPreprocessor(QPointer<CppModelManager> modelManager) ...@@ -221,6 +224,11 @@ CppPreprocessor::CppPreprocessor(QPointer<CppModelManager> modelManager)
: snapshot(modelManager->snapshot()), : snapshot(modelManager->snapshot()),
m_modelManager(modelManager), m_modelManager(modelManager),
preprocess(this, &env) preprocess(this, &env)
{
m_synchronizer.setCancelOnWait(true);
}
CppPreprocessor::~CppPreprocessor()
{ } { }
void CppPreprocessor::setWorkingCopy(const QMap<QString, QByteArray> &workingCopy) void CppPreprocessor::setWorkingCopy(const QMap<QString, QByteArray> &workingCopy)
...@@ -502,7 +510,7 @@ void CppPreprocessor::sourceNeeded(QString &fileName, IncludeType type, ...@@ -502,7 +510,7 @@ void CppPreprocessor::sourceNeeded(QString &fileName, IncludeType type,
snapshot.insert(doc->fileName(), doc); snapshot.insert(doc->fileName(), doc);
m_todo.remove(fileName); m_todo.remove(fileName);
QtConcurrent::run(Process(m_modelManager), doc); m_synchronizer.addFuture(QtConcurrent::run(Process(m_modelManager), doc));
(void) switchDocument(previousDoc); (void) switchDocument(previousDoc);
} }
...@@ -528,6 +536,8 @@ Document::Ptr CppPreprocessor::switchDocument(Document::Ptr doc) ...@@ -528,6 +536,8 @@ Document::Ptr CppPreprocessor::switchDocument(Document::Ptr doc)
CppModelManager::CppModelManager(QObject *parent) CppModelManager::CppModelManager(QObject *parent)
: CppModelManagerInterface(parent) : CppModelManagerInterface(parent)
{ {
m_synchronizer.setCancelOnWait(true);
m_core = Core::ICore::instance(); // FIXME m_core = Core::ICore::instance(); // FIXME
m_dirty = true; m_dirty = true;
...@@ -702,6 +712,8 @@ QFuture<void> CppModelManager::refreshSourceFiles(const QStringList &sourceFiles ...@@ -702,6 +712,8 @@ QFuture<void> CppModelManager::refreshSourceFiles(const QStringList &sourceFiles
QFuture<void> result = QtConcurrent::run(&CppModelManager::parse, QFuture<void> result = QtConcurrent::run(&CppModelManager::parse,
preproc, sourceFiles); preproc, sourceFiles);
m_synchronizer.addFuture(result);
if (sourceFiles.count() > 1) { if (sourceFiles.count() > 1) {
m_core->progressManager()->addTask(result, tr("Indexing"), m_core->progressManager()->addTask(result, tr("Indexing"),
CppTools::Constants::TASK_INDEX, CppTools::Constants::TASK_INDEX,
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include <QMap> #include <QMap>
#include <QFutureInterface> #include <QFutureInterface>
#include <QFutureSynchronizer>
#include <QMutex> #include <QMutex>
#include <QTimer> #include <QTimer>
#include <QTextEdit> #include <QTextEdit>
...@@ -174,6 +175,8 @@ private: ...@@ -174,6 +175,8 @@ private:
QList<Editor> m_todo; QList<Editor> m_todo;
QTimer *m_updateEditorSelectionsTimer; QTimer *m_updateEditorSelectionsTimer;
QFutureSynchronizer<void> m_synchronizer;
}; };
} // namespace Internal } // namespace Internal
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment