forked from qt-creator/qt-creator
Clang: Process distinct documents concurrently
Speed ups the typical use cases that can profit from this: * Change a header file and switch then to source file * Open documents one after the other (Follow Symbol) * Change documents visible in splits (e.g. by refactoring action) * Restore a session with multiple splits Fixes the test ClangIpcServer.GetCodeCompletionDependingOnArgumets. Change-Id: Ia575bd59780df14146dfc091a4d48794e4a0543d Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -32,10 +32,11 @@
|
||||
#include "clangtranslationunit.h"
|
||||
#include "translationunits.h"
|
||||
#include "unsavedfiles.h"
|
||||
#include "clangjobs.h"
|
||||
|
||||
#include <utf8string.h>
|
||||
|
||||
#include <QMap>
|
||||
#include <QScopedPointer>
|
||||
#include <QTimer>
|
||||
|
||||
namespace ClangBackEnd {
|
||||
@@ -57,18 +58,31 @@ public:
|
||||
void updateVisibleTranslationUnits(const UpdateVisibleTranslationUnitsMessage &message) override;
|
||||
void requestDocumentAnnotations(const RequestDocumentAnnotationsMessage &message) override;
|
||||
|
||||
public /*for tests*/:
|
||||
const TranslationUnits &translationUnitsForTestOnly() const;
|
||||
const Jobs &jobsForTestOnly();
|
||||
bool isTimerRunningForTestOnly() const;
|
||||
void setUpdateDocumentAnnotationsTimeOutInMsForTestsOnly(int value);
|
||||
|
||||
private:
|
||||
Jobs &jobs();
|
||||
|
||||
void startDocumentAnnotationsTimerIfFileIsNotATranslationUnit(const Utf8String &filePath);
|
||||
void startDocumentAnnotations();
|
||||
void reparseVisibleDocuments(std::vector<TranslationUnit> &translationUnits);
|
||||
void addJobRequestsForDirtyAndVisibleDocuments();
|
||||
void processJobsForDirtyAndVisibleDocuments();
|
||||
void processInitialJobsForDocuments(const std::vector<TranslationUnit> &translationUnits);
|
||||
|
||||
JobRequest createJobRequest(const TranslationUnit &translationUnit,
|
||||
JobRequest::Type type) const;
|
||||
|
||||
private:
|
||||
ProjectParts projects;
|
||||
UnsavedFiles unsavedFiles;
|
||||
TranslationUnits translationUnits;
|
||||
QTimer sendDocumentAnnotationsTimer;
|
||||
QScopedPointer<Jobs> jobs_;
|
||||
|
||||
QTimer updateDocumentAnnotationsTimer;
|
||||
int updateDocumentAnnotationsTimeOutInMs;
|
||||
};
|
||||
|
||||
} // namespace ClangBackEnd
|
||||
|
||||
Reference in New Issue
Block a user