summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/tools/clangbackend/ipcsource/clangbackendclangipc-source.pri8
-rw-r--r--src/tools/clangbackend/ipcsource/clangcodemodelserver.cpp76
-rw-r--r--src/tools/clangbackend/ipcsource/clangcodemodelserver.h13
-rw-r--r--src/tools/clangbackend/ipcsource/clangcompletecodejob.cpp4
-rw-r--r--src/tools/clangbackend/ipcsource/clangcompletecodejob.h4
-rw-r--r--src/tools/clangbackend/ipcsource/clangcreateinitialdocumentpreamblejob.cpp8
-rw-r--r--src/tools/clangbackend/ipcsource/clangcreateinitialdocumentpreamblejob.h4
-rw-r--r--src/tools/clangbackend/ipcsource/clangdocument.cpp (renamed from src/tools/clangbackend/ipcsource/clangtranslationunit.cpp)140
-rw-r--r--src/tools/clangbackend/ipcsource/clangdocument.h (renamed from src/tools/clangbackend/ipcsource/clangtranslationunit.h)34
-rw-r--r--src/tools/clangbackend/ipcsource/clangdocuments.cpp311
-rw-r--r--src/tools/clangbackend/ipcsource/clangdocuments.h (renamed from src/tools/clangbackend/ipcsource/translationunits.h)44
-rw-r--r--src/tools/clangbackend/ipcsource/clangfilesystemwatcher.cpp8
-rw-r--r--src/tools/clangbackend/ipcsource/clangfilesystemwatcher.h6
-rw-r--r--src/tools/clangbackend/ipcsource/clangjobcontext.cpp17
-rw-r--r--src/tools/clangbackend/ipcsource/clangjobcontext.h10
-rw-r--r--src/tools/clangbackend/ipcsource/clangjobqueue.cpp36
-rw-r--r--src/tools/clangbackend/ipcsource/clangjobqueue.h6
-rw-r--r--src/tools/clangbackend/ipcsource/clangjobs.cpp8
-rw-r--r--src/tools/clangbackend/ipcsource/clangjobs.h6
-rw-r--r--src/tools/clangbackend/ipcsource/clangrequestdocumentannotationsjob.cpp6
-rw-r--r--src/tools/clangbackend/ipcsource/clangrequestdocumentannotationsjob.h4
-rw-r--r--src/tools/clangbackend/ipcsource/clangupdatedocumentannotationsjob.cpp10
-rw-r--r--src/tools/clangbackend/ipcsource/clangupdatedocumentannotationsjob.h4
-rw-r--r--src/tools/clangbackend/ipcsource/codecompleter.cpp2
-rw-r--r--src/tools/clangbackend/ipcsource/skippedsourceranges.h2
-rw-r--r--src/tools/clangbackend/ipcsource/sourcelocation.cpp2
-rw-r--r--src/tools/clangbackend/ipcsource/sourcelocation.h2
-rw-r--r--src/tools/clangbackend/ipcsource/translationunits.cpp311
28 files changed, 539 insertions, 547 deletions
diff --git a/src/tools/clangbackend/ipcsource/clangbackendclangipc-source.pri b/src/tools/clangbackend/ipcsource/clangbackendclangipc-source.pri
index f47655a6ea..7994e63d35 100644
--- a/src/tools/clangbackend/ipcsource/clangbackendclangipc-source.pri
+++ b/src/tools/clangbackend/ipcsource/clangbackendclangipc-source.pri
@@ -10,7 +10,7 @@ HEADERS += $$PWD/clangcodemodelserver.h \
$$PWD/unsavedfile.h \
$$PWD/unsavedfiles.h \
$$PWD/projects.h \
- $$PWD/translationunits.h \
+ $$PWD/clangdocuments.h \
$$PWD/translationunitparseerrorexception.h \
$$PWD/translationunitreparseerrorexception.h \
$$PWD/projectpart.h \
@@ -29,7 +29,7 @@ HEADERS += $$PWD/clangcodemodelserver.h \
$$PWD/commandlinearguments.h \
$$PWD/cursor.h \
$$PWD/skippedsourceranges.h \
- $$PWD/clangtranslationunit.h \
+ $$PWD/clangdocument.h \
$$PWD/clangtranslationunitupdater.h \
$$PWD/clangtype.h \
$$PWD/highlightingmark.h \
@@ -60,7 +60,7 @@ SOURCES += $$PWD/clangcodemodelserver.cpp \
$$PWD/unsavedfile.cpp \
$$PWD/unsavedfiles.cpp \
$$PWD/projects.cpp \
- $$PWD/translationunits.cpp \
+ $$PWD/clangdocuments.cpp \
$$PWD/translationunitparseerrorexception.cpp \
$$PWD/translationunitreparseerrorexception.cpp \
$$PWD/projectpart.cpp \
@@ -78,7 +78,7 @@ SOURCES += $$PWD/clangcodemodelserver.cpp \
$$PWD/commandlinearguments.cpp \
$$PWD/cursor.cpp \
$$PWD/skippedsourceranges.cpp \
- $$PWD/clangtranslationunit.cpp \
+ $$PWD/clangdocument.cpp \
$$PWD/clangtranslationunitupdater.cpp \
$$PWD/clangtype.cpp \
$$PWD/highlightingmark.cpp \
diff --git a/src/tools/clangbackend/ipcsource/clangcodemodelserver.cpp b/src/tools/clangbackend/ipcsource/clangcodemodelserver.cpp
index 5f1161717a..ed30fafb55 100644
--- a/src/tools/clangbackend/ipcsource/clangcodemodelserver.cpp
+++ b/src/tools/clangbackend/ipcsource/clangcodemodelserver.cpp
@@ -25,6 +25,7 @@
#include "clangcodemodelserver.h"
+#include "clangdocuments.h"
#include "clangfilesystemwatcher.h"
#include "codecompleter.h"
#include "diagnosticset.h"
@@ -35,7 +36,6 @@
#include "translationunitfilenotexitexception.h"
#include "translationunitisnullexception.h"
#include "translationunitparseerrorexception.h"
-#include "translationunits.h"
#include <clangbackendipcdebugutils.h>
#include <cmbcodecompletedmessage.h>
@@ -85,7 +85,7 @@ int delayedDocumentAnnotationsTimerInterval()
} // anonymous
ClangCodeModelServer::ClangCodeModelServer()
- : translationUnits(projects, unsavedFiles)
+ : documents(projects, unsavedFiles)
, updateDocumentAnnotationsTimeOutInMs(delayedDocumentAnnotationsTimerInterval())
{
updateDocumentAnnotationsTimer.setSingleShot(true);
@@ -96,7 +96,7 @@ ClangCodeModelServer::ClangCodeModelServer()
processJobsForDirtyAndVisibleDocuments();
});
- QObject::connect(translationUnits.clangFileSystemWatcher(),
+ QObject::connect(documents.clangFileSystemWatcher(),
&ClangFileSystemWatcher::fileChanged,
[this](const Utf8String &filePath) {
ClangCodeModelServer::startDocumentAnnotationsTimerIfFileIsNotATranslationUnit(filePath);
@@ -113,10 +113,10 @@ void ClangCodeModelServer::registerTranslationUnitsForEditor(const ClangBackEnd:
TIME_SCOPE_DURATION("ClangCodeModelServer::registerTranslationUnitsForEditor");
try {
- auto createdTranslationUnits = translationUnits.create(message.fileContainers());
+ auto createdTranslationUnits = documents.create(message.fileContainers());
unsavedFiles.createOrUpdate(message.fileContainers());
- translationUnits.setUsedByCurrentEditor(message.currentEditorFilePath());
- translationUnits.setVisibleInEditors(message.visibleEditorFilePaths());
+ documents.setUsedByCurrentEditor(message.currentEditorFilePath());
+ documents.setVisibleInEditors(message.visibleEditorFilePaths());
processInitialJobsForDocuments(createdTranslationUnits);
} catch (const ProjectPartDoNotExistException &exception) {
@@ -131,9 +131,9 @@ void ClangCodeModelServer::updateTranslationUnitsForEditor(const UpdateTranslati
TIME_SCOPE_DURATION("ClangCodeModelServer::updateTranslationUnitsForEditor");
try {
- const auto newerFileContainers = translationUnits.newerFileContainers(message.fileContainers());
+ const auto newerFileContainers = documents.newerFileContainers(message.fileContainers());
if (newerFileContainers.size() > 0) {
- translationUnits.update(newerFileContainers);
+ documents.update(newerFileContainers);
unsavedFiles.createOrUpdate(newerFileContainers);
updateDocumentAnnotationsTimer.start(updateDocumentAnnotationsTimeOutInMs);
@@ -152,7 +152,7 @@ void ClangCodeModelServer::unregisterTranslationUnitsForEditor(const ClangBackEn
TIME_SCOPE_DURATION("ClangCodeModelServer::unregisterTranslationUnitsForEditor");
try {
- translationUnits.remove(message.fileContainers());
+ documents.remove(message.fileContainers());
unsavedFiles.remove(message.fileContainers());
} catch (const TranslationUnitDoesNotExistException &exception) {
client()->translationUnitDoesNotExist(TranslationUnitDoesNotExistMessage(exception.fileContainer()));
@@ -169,7 +169,7 @@ void ClangCodeModelServer::registerProjectPartsForEditor(const RegisterProjectPa
try {
projects.createOrUpdate(message.projectContainers());
- translationUnits.setTranslationUnitsDirtyIfProjectPartChanged();
+ documents.setDocumentsDirtyIfProjectPartChanged();
processJobsForDirtyAndVisibleDocuments();
} catch (const std::exception &exception) {
@@ -196,7 +196,7 @@ void ClangCodeModelServer::registerUnsavedFilesForEditor(const RegisterUnsavedFi
try {
unsavedFiles.createOrUpdate(message.fileContainers());
- translationUnits.updateTranslationUnitsWithChangedDependencies(message.fileContainers());
+ documents.updateDocumentsWithChangedDependencies(message.fileContainers());
updateDocumentAnnotationsTimer.start(updateDocumentAnnotationsTimeOutInMs);
} catch (const ProjectPartDoNotExistException &exception) {
@@ -212,7 +212,7 @@ void ClangCodeModelServer::unregisterUnsavedFilesForEditor(const UnregisterUnsav
try {
unsavedFiles.remove(message.fileContainers());
- translationUnits.updateTranslationUnitsWithChangedDependencies(message.fileContainers());
+ documents.updateDocumentsWithChangedDependencies(message.fileContainers());
} catch (const TranslationUnitDoesNotExistException &exception) {
client()->translationUnitDoesNotExist(TranslationUnitDoesNotExistMessage(exception.fileContainer()));
} catch (const ProjectPartDoNotExistException &exception) {
@@ -227,10 +227,9 @@ void ClangCodeModelServer::completeCode(const ClangBackEnd::CompleteCodeMessage
TIME_SCOPE_DURATION("ClangCodeModelServer::completeCode");
try {
- auto translationUnit = translationUnits.translationUnit(message.filePath(),
- message.projectPartId());
+ auto document = documents.document(message.filePath(), message.projectPartId());
- JobRequest jobRequest = createJobRequest(translationUnit, JobRequest::Type::CompleteCode);
+ JobRequest jobRequest = createJobRequest(document, JobRequest::Type::CompleteCode);
jobRequest.line = message.line();
jobRequest.column = message.column();
jobRequest.ticketNumber = message.ticketNumber();
@@ -251,10 +250,10 @@ void ClangCodeModelServer::requestDocumentAnnotations(const RequestDocumentAnnot
TIME_SCOPE_DURATION("ClangCodeModelServer::requestDocumentAnnotations");
try {
- auto translationUnit = translationUnits.translationUnit(message.fileContainer().filePath(),
- message.fileContainer().projectPartId());
+ auto document = documents.document(message.fileContainer().filePath(),
+ message.fileContainer().projectPartId());
- const JobRequest jobRequest = createJobRequest(translationUnit,
+ const JobRequest jobRequest = createJobRequest(document,
JobRequest::Type::RequestDocumentAnnotations);
jobs().add(jobRequest);
@@ -273,22 +272,22 @@ void ClangCodeModelServer::updateVisibleTranslationUnits(const UpdateVisibleTran
TIME_SCOPE_DURATION("ClangCodeModelServer::updateVisibleTranslationUnits");
try {
- translationUnits.setUsedByCurrentEditor(message.currentEditorFilePath());
- translationUnits.setVisibleInEditors(message.visibleEditorFilePaths());
+ documents.setUsedByCurrentEditor(message.currentEditorFilePath());
+ documents.setVisibleInEditors(message.visibleEditorFilePaths());
updateDocumentAnnotationsTimer.start(0);
} catch (const std::exception &exception) {
qWarning() << "Error in ClangCodeModelServer::updateVisibleTranslationUnits:" << exception.what();
}
}
-const TranslationUnits &ClangCodeModelServer::translationUnitsForTestOnly() const
+const Documents &ClangCodeModelServer::documentsForTestOnly() const
{
- return translationUnits;
+ return documents;
}
void ClangCodeModelServer::startDocumentAnnotationsTimerIfFileIsNotATranslationUnit(const Utf8String &filePath)
{
- if (!translationUnits.hasTranslationUnitWithFilePath(filePath))
+ if (!documents.hasDocumentWithFilePath(filePath))
updateDocumentAnnotationsTimer.start(0);
}
@@ -304,11 +303,9 @@ bool ClangCodeModelServer::isTimerRunningForTestOnly() const
void ClangCodeModelServer::addJobRequestsForDirtyAndVisibleDocuments()
{
- for (const auto &translationUnit : translationUnits.translationUnits()) {
- if (translationUnit.isNeedingReparse() && translationUnit.isVisibleInEditor()) {
- jobs().add(createJobRequest(translationUnit,
- JobRequest::Type::UpdateDocumentAnnotations));
- }
+ for (const auto &document : documents.documents()) {
+ if (document.isNeedingReparse() && document.isVisibleInEditor())
+ jobs().add(createJobRequest(document, JobRequest::Type::UpdateDocumentAnnotations));
}
}
@@ -318,30 +315,27 @@ void ClangCodeModelServer::processJobsForDirtyAndVisibleDocuments()
jobs().process();
}
-void ClangCodeModelServer::processInitialJobsForDocuments(
- const std::vector<TranslationUnit> &translationUnits)
+void ClangCodeModelServer::processInitialJobsForDocuments(const std::vector<Document> &documents)
{
- for (const auto &translationUnit : translationUnits) {
- jobs().add(createJobRequest(translationUnit,
- JobRequest::Type::UpdateDocumentAnnotations));
- jobs().add(createJobRequest(translationUnit,
- JobRequest::Type::CreateInitialDocumentPreamble));
+ for (const auto &document : documents) {
+ jobs().add(createJobRequest(document, JobRequest::Type::UpdateDocumentAnnotations));
+ jobs().add(createJobRequest(document, JobRequest::Type::CreateInitialDocumentPreamble));
}
jobs().process();
}
-JobRequest ClangCodeModelServer::createJobRequest(const TranslationUnit &translationUnit,
+JobRequest ClangCodeModelServer::createJobRequest(const Document &document,
JobRequest::Type type) const
{
JobRequest jobRequest;
jobRequest.type = type;
jobRequest.requirements = JobRequest::requirementsForType(type);
- jobRequest.filePath = translationUnit.filePath();
- jobRequest.projectPartId = translationUnit.projectPartId();
+ jobRequest.filePath = document.filePath();
+ jobRequest.projectPartId = document.projectPartId();
jobRequest.unsavedFilesChangeTimePoint = unsavedFiles.lastChangeTimePoint();
- jobRequest.documentRevision = translationUnit.documentRevision();
- const ProjectPart &projectPart = projects.project(translationUnit.projectPartId());
+ jobRequest.documentRevision = document.documentRevision();
+ const ProjectPart &projectPart = projects.project(document.projectPartId());
jobRequest.projectChangeTimePoint = projectPart.lastChangeTimePoint();
return jobRequest;
@@ -358,7 +352,7 @@ Jobs &ClangCodeModelServer::jobs()
// Jobs needs a reference to the client, but the client is not known at
// construction time of ClangCodeModelServer, so construct Jobs in a
// lazy manner.
- jobs_.reset(new Jobs(translationUnits, unsavedFiles, projects, *client()));
+ jobs_.reset(new Jobs(documents, unsavedFiles, projects, *client()));
}
return *jobs_.data();
diff --git a/src/tools/clangbackend/ipcsource/clangcodemodelserver.h b/src/tools/clangbackend/ipcsource/clangcodemodelserver.h
index 82c64b560d..8fb481eebc 100644
--- a/src/tools/clangbackend/ipcsource/clangcodemodelserver.h
+++ b/src/tools/clangbackend/ipcsource/clangcodemodelserver.h
@@ -29,8 +29,8 @@
#include "projectpart.h"
#include "projects.h"
-#include "clangtranslationunit.h"
-#include "translationunits.h"
+#include "clangdocument.h"
+#include "clangdocuments.h"
#include "unsavedfiles.h"
#include "clangjobs.h"
@@ -59,7 +59,7 @@ public:
void requestDocumentAnnotations(const RequestDocumentAnnotationsMessage &message) override;
public /*for tests*/:
- const TranslationUnits &translationUnitsForTestOnly() const;
+ const Documents &documentsForTestOnly() const;
const Jobs &jobsForTestOnly();
bool isTimerRunningForTestOnly() const;
void setUpdateDocumentAnnotationsTimeOutInMsForTestsOnly(int value);
@@ -70,15 +70,14 @@ private:
void startDocumentAnnotationsTimerIfFileIsNotATranslationUnit(const Utf8String &filePath);
void addJobRequestsForDirtyAndVisibleDocuments();
void processJobsForDirtyAndVisibleDocuments();
- void processInitialJobsForDocuments(const std::vector<TranslationUnit> &translationUnits);
+ void processInitialJobsForDocuments(const std::vector<Document> &documents);
- JobRequest createJobRequest(const TranslationUnit &translationUnit,
- JobRequest::Type type) const;
+ JobRequest createJobRequest(const Document &document, JobRequest::Type type) const;
private:
ProjectParts projects;
UnsavedFiles unsavedFiles;
- TranslationUnits translationUnits;
+ Documents documents;
QScopedPointer<Jobs> jobs_;
QTimer updateDocumentAnnotationsTimer;
diff --git a/src/tools/clangbackend/ipcsource/clangcompletecodejob.cpp b/src/tools/clangbackend/ipcsource/clangcompletecodejob.cpp
index d85c93190c..bf33e469b7 100644
--- a/src/tools/clangbackend/ipcsource/clangcompletecodejob.cpp
+++ b/src/tools/clangbackend/ipcsource/clangcompletecodejob.cpp
@@ -61,9 +61,9 @@ bool CompleteCodeJob::prepareAsyncRun()
QTC_ASSERT(jobRequest.type == JobRequest::Type::CompleteCode, return false);
try {
- m_pinnedTranslationUnit = context().translationUnitForJobRequest();
+ m_pinnedDocument = context().documentForJobRequest();
- const TranslationUnitCore translationUnitCore = m_pinnedTranslationUnit.translationUnitCore();
+ const TranslationUnitCore translationUnitCore = m_pinnedDocument.translationUnitCore();
const UnsavedFiles unsavedFiles = *context().unsavedFiles;
const quint32 line = jobRequest.line;
const quint32 column = jobRequest.column;
diff --git a/src/tools/clangbackend/ipcsource/clangcompletecodejob.h b/src/tools/clangbackend/ipcsource/clangcompletecodejob.h
index d3ee9dbc6b..30c0bb8e3f 100644
--- a/src/tools/clangbackend/ipcsource/clangcompletecodejob.h
+++ b/src/tools/clangbackend/ipcsource/clangcompletecodejob.h
@@ -26,7 +26,7 @@
#pragma once
#include "clangasyncjob.h"
-#include "clangtranslationunit.h"
+#include "clangdocument.h"
#include <clangbackendipc/codecompletion.h>
@@ -47,7 +47,7 @@ public:
void finalizeAsyncRun() override;
private:
- TranslationUnit m_pinnedTranslationUnit;
+ Document m_pinnedDocument;
};
} // namespace ClangBackEnd
diff --git a/src/tools/clangbackend/ipcsource/clangcreateinitialdocumentpreamblejob.cpp b/src/tools/clangbackend/ipcsource/clangcreateinitialdocumentpreamblejob.cpp
index 77ee981518..a882ec53bc 100644
--- a/src/tools/clangbackend/ipcsource/clangcreateinitialdocumentpreamblejob.cpp
+++ b/src/tools/clangbackend/ipcsource/clangcreateinitialdocumentpreamblejob.cpp
@@ -49,11 +49,11 @@ bool CreateInitialDocumentPreambleJob::prepareAsyncRun()
QTC_ASSERT(jobRequest.type == JobRequest::Type::CreateInitialDocumentPreamble, return false);
try {
- m_pinnedTranslationUnit = context().translationUnitForJobRequest();
- m_pinnedFileContainer = m_pinnedTranslationUnit.fileContainer();
+ m_pinnedDocument = context().documentForJobRequest();
+ m_pinnedFileContainer = m_pinnedDocument.fileContainer();
- const TranslationUnitCore translationUnitCore = m_pinnedTranslationUnit.translationUnitCore();
- const TranslationUnitUpdateInput updateInput = m_pinnedTranslationUnit.createUpdateInput();
+ const TranslationUnitCore translationUnitCore = m_pinnedDocument.translationUnitCore();
+ const TranslationUnitUpdateInput updateInput = m_pinnedDocument.createUpdateInput();
setRunner([translationUnitCore, updateInput]() {
return runAsyncHelper(translationUnitCore, updateInput);
});
diff --git a/src/tools/clangbackend/ipcsource/clangcreateinitialdocumentpreamblejob.h b/src/tools/clangbackend/ipcsource/clangcreateinitialdocumentpreamblejob.h
index 023a34c8f3..21fc875982 100644
--- a/src/tools/clangbackend/ipcsource/clangcreateinitialdocumentpreamblejob.h
+++ b/src/tools/clangbackend/ipcsource/clangcreateinitialdocumentpreamblejob.h
@@ -26,7 +26,7 @@
#pragma once
#include "clangasyncjob.h"
-#include "clangtranslationunit.h"
+#include "clangdocument.h"
namespace ClangBackEnd {
@@ -37,7 +37,7 @@ public:
void finalizeAsyncRun() override;
private:
- TranslationUnit m_pinnedTranslationUnit;
+ Document m_pinnedDocument;
FileContainer m_pinnedFileContainer;
};
diff --git a/src/tools/clangbackend/ipcsource/clangtranslationunit.cpp b/src/tools/clangbackend/ipcsource/clangdocument.cpp
index 8907a285bd..6cce9bc9b7 100644
--- a/src/tools/clangbackend/ipcsource/clangtranslationunit.cpp
+++ b/src/tools/clangbackend/ipcsource/clangdocument.cpp
@@ -23,8 +23,9 @@
**
****************************************************************************/
-#include "clangtranslationunit.h"
+#include "clangdocument.h"
+#include "clangdocuments.h"
#include "clangstring.h"
#include "clangunsavedfilesshallowarguments.h"
#include "codecompleter.h"
@@ -35,7 +36,6 @@
#include "translationunitreparseerrorexception.h"
#include "clangtranslationunitcore.h"
#include "clangtranslationunitupdater.h"
-#include "translationunits.h"
#include "unsavedfiles.h"
#include "unsavedfile.h"
@@ -49,17 +49,17 @@
namespace ClangBackEnd {
-class TranslationUnitData
+class DocumentData
{
public:
- TranslationUnitData(const Utf8String &filePath,
- const ProjectPart &projectPart,
- const Utf8StringVector &fileArguments,
- TranslationUnits &translationUnits);
- ~TranslationUnitData();
+ DocumentData(const Utf8String &filePath,
+ const ProjectPart &projectPart,
+ const Utf8StringVector &fileArguments,
+ Documents &documents);
+ ~DocumentData();
public:
- TranslationUnits &translationUnits;
+ Documents &documents;
const Utf8String filePath;
const Utf8StringVector fileArguments;
@@ -80,11 +80,11 @@ public:
bool isVisibleInEditor = false;
};
-TranslationUnitData::TranslationUnitData(const Utf8String &filePath,
- const ProjectPart &projectPart,
- const Utf8StringVector &fileArguments,
- TranslationUnits &translationUnits)
- : translationUnits(translationUnits),
+DocumentData::DocumentData(const Utf8String &filePath,
+ const ProjectPart &projectPart,
+ const Utf8StringVector &fileArguments,
+ Documents &documents)
+ : documents(documents),
filePath(filePath),
fileArguments(fileArguments),
projectPart(projectPart),
@@ -94,74 +94,74 @@ TranslationUnitData::TranslationUnitData(const Utf8String &filePath,
dependedFilePaths.insert(filePath);
}
-TranslationUnitData::~TranslationUnitData()
+DocumentData::~DocumentData()
{
clang_disposeTranslationUnit(translationUnit);
clang_disposeIndex(index);
}
-TranslationUnit::TranslationUnit(const Utf8String &filePath,
- const ProjectPart &projectPart,
- const Utf8StringVector &fileArguments,
- TranslationUnits &translationUnits,
- FileExistsCheck fileExistsCheck)
- : d(std::make_shared<TranslationUnitData>(filePath,
- projectPart,
- fileArguments,
- translationUnits))
+Document::Document(const Utf8String &filePath,
+ const ProjectPart &projectPart,
+ const Utf8StringVector &fileArguments,
+ Documents &documents,
+ FileExistsCheck fileExistsCheck)
+ : d(std::make_shared<DocumentData>(filePath,
+ projectPart,
+ fileArguments,
+ documents))
{
if (fileExistsCheck == CheckIfFileExists)
checkIfFileExists();
}
-TranslationUnit::~TranslationUnit() = default;
-TranslationUnit::TranslationUnit(const TranslationUnit &) = default;
-TranslationUnit &TranslationUnit::operator=(const TranslationUnit &) = default;
+Document::~Document() = default;
+Document::Document(const Document &) = default;
+Document &Document::operator=(const Document &) = default;
-TranslationUnit::TranslationUnit(TranslationUnit &&other)
+Document::Document(Document &&other)
: d(std::move(other.d))
{
}
-TranslationUnit &TranslationUnit::operator=(TranslationUnit &&other)
+Document &Document::operator=(Document &&other)
{
d = std::move(other.d);
return *this;
}
-void TranslationUnit::reset()
+void Document::reset()
{
d.reset();
}
-bool TranslationUnit::isNull() const
+bool Document::isNull() const
{
return !d;
}
-bool TranslationUnit::isIntact() const
+bool Document::isIntact() const
{
return !isNull()
&& fileExists()
&& !d->hasParseOrReparseFailed;
}
-Utf8String TranslationUnit::filePath() const
+Utf8String Document::filePath() const
{
checkIfNull();
return d->filePath;
}
-Utf8StringVector TranslationUnit::fileArguments() const
+Utf8StringVector Document::fileArguments() const
{
checkIfNull();
return d->fileArguments;
}
-FileContainer TranslationUnit::fileContainer() const
+FileContainer Document::fileContainer() const
{
checkIfNull();
@@ -172,103 +172,103 @@ FileContainer TranslationUnit::fileContainer() const
d->documentRevision);
}
-Utf8String TranslationUnit::projectPartId() const
+Utf8String Document::projectPartId() const
{
checkIfNull();
return d->projectPart.projectPartId();
}
-const ProjectPart &TranslationUnit::projectPart() const
+const ProjectPart &Document::projectPart() const
{
checkIfNull();
return d->projectPart;
}
-const time_point TranslationUnit::lastProjectPartChangeTimePoint() const
+const time_point Document::lastProjectPartChangeTimePoint() const
{
checkIfNull();
return d->lastProjectPartChangeTimePoint;
}
-bool TranslationUnit::isProjectPartOutdated() const
+bool Document::isProjectPartOutdated() const
{
checkIfNull();
return d->projectPart.lastChangeTimePoint() >= d->lastProjectPartChangeTimePoint;
}
-uint TranslationUnit::documentRevision() const
+uint Document::documentRevision() const
{
checkIfNull();
return d->documentRevision;
}
-void TranslationUnit::setDocumentRevision(uint revision)
+void Document::setDocumentRevision(uint revision)
{
checkIfNull();
d->documentRevision = revision;
}
-bool TranslationUnit::isUsedByCurrentEditor() const
+bool Document::isUsedByCurrentEditor() const
{
checkIfNull();
return d->isUsedByCurrentEditor;
}
-void TranslationUnit::setIsUsedByCurrentEditor(bool isUsedByCurrentEditor)
+void Document::setIsUsedByCurrentEditor(bool isUsedByCurrentEditor)
{
checkIfNull();
d->isUsedByCurrentEditor = isUsedByCurrentEditor;
}
-bool TranslationUnit::isVisibleInEditor() const
+bool Document::isVisibleInEditor() const
{
checkIfNull();
return d->isVisibleInEditor;
}
-void TranslationUnit::setIsVisibleInEditor(bool isVisibleInEditor)
+void Document::setIsVisibleInEditor(bool isVisibleInEditor)
{
checkIfNull();
d->isVisibleInEditor = isVisibleInEditor;
}
-time_point TranslationUnit::isNeededReparseChangeTimePoint() const
+time_point Document::isNeededReparseChangeTimePoint() const
{
checkIfNull();
return d->needsToBeReparsedChangeTimePoint;
}
-bool TranslationUnit::isNeedingReparse() const
+bool Document::isNeedingReparse() const
{
checkIfNull();
return d->needsToBeReparsed;
}
-void TranslationUnit::setDirtyIfProjectPartIsOutdated()
+void Document::setDirtyIfProjectPartIsOutdated()
{
if (isProjectPartOutdated())
setDirty();
}
-void TranslationUnit::setDirtyIfDependencyIsMet(const Utf8String &filePath)
+void Document::setDirtyIfDependencyIsMet(const Utf8String &filePath)
{
if (d->dependedFilePaths.contains(filePath) && isMainFileAndExistsOrIsOtherFile(filePath))
setDirty();
}
-TranslationUnitUpdateInput TranslationUnit::createUpdateInput() const
+TranslationUnitUpdateInput Document::createUpdateInput() const
{
TranslationUnitUpdateInput updateInput;
updateInput.parseNeeded = isProjectPartOutdated();
@@ -276,14 +276,14 @@ TranslationUnitUpdateInput TranslationUnit::createUpdateInput() const
updateInput.needsToBeReparsedChangeTimePoint = d->needsToBeReparsedChangeTimePoint;
updateInput.filePath = filePath();
updateInput.fileArguments = fileArguments();
- updateInput.unsavedFiles = d->translationUnits.unsavedFiles();
+ updateInput.unsavedFiles = d->documents.unsavedFiles();
updateInput.projectId = projectPart().projectPartId();
updateInput.projectArguments = projectPart().arguments();
return updateInput;
}
-TranslationUnitUpdater TranslationUnit::createUpdater() const
+TranslationUnitUpdater Document::createUpdater() const
{
const TranslationUnitUpdateInput updateInput = createUpdateInput();
TranslationUnitUpdater updater(d->index, d->translationUnit, updateInput);
@@ -291,12 +291,12 @@ TranslationUnitUpdater TranslationUnit::createUpdater() const
return updater;
}
-void TranslationUnit::setHasParseOrReparseFailed(bool hasFailed)
+void Document::setHasParseOrReparseFailed(bool hasFailed)
{
d->hasParseOrReparseFailed = hasFailed;
}
-void TranslationUnit::incorporateUpdaterResult(const TranslationUnitUpdateResult &result) const
+void Document::incorporateUpdaterResult(const TranslationUnitUpdateResult &result) const
{
d->hasParseOrReparseFailed = result.hasParseOrReparseFailed;
if (d->hasParseOrReparseFailed) {
@@ -310,7 +310,7 @@ void TranslationUnit::incorporateUpdaterResult(const TranslationUnitUpdateResult
if (result.parseTimePointIsSet || result.reparsed)
d->dependedFilePaths = result.dependedOnFilePaths;
- d->translationUnits.addWatchedFiles(d->dependedFilePaths);
+ d->documents.addWatchedFiles(d->dependedFilePaths);
if (result.reparsed
&& result.needsToBeReparsedChangeTimePoint == d->needsToBeReparsedChangeTimePoint) {
@@ -318,14 +318,14 @@ void TranslationUnit::incorporateUpdaterResult(const TranslationUnitUpdateResult
}
}
-TranslationUnitCore TranslationUnit::translationUnitCore() const
+TranslationUnitCore Document::translationUnitCore() const
{
checkIfNull();
return TranslationUnitCore(d->filePath, d->index, d->translationUnit);
}
-void TranslationUnit::parse() const
+void Document::parse() const
{
checkIfNull();
@@ -335,7 +335,7 @@ void TranslationUnit::parse() const
incorporateUpdaterResult(result);
}
-void TranslationUnit::reparse() const
+void Document::reparse() const
{
checkIfNull();
@@ -345,7 +345,7 @@ void TranslationUnit::reparse() const
incorporateUpdaterResult(result);
}
-const QSet<Utf8String> TranslationUnit::dependedFilePaths() const
+const QSet<Utf8String> Document::dependedFilePaths() const
{
checkIfNull();
checkIfFileExists();
@@ -353,30 +353,30 @@ const QSet<Utf8String> TranslationUnit::dependedFilePaths() const
return d->dependedFilePaths;
}
-void TranslationUnit::setDirty()
+void Document::setDirty()
{
d->needsToBeReparsedChangeTimePoint = std::chrono::steady_clock::now();
d->needsToBeReparsed = true;
}
-void TranslationUnit::checkIfNull() const
+void Document::checkIfNull() const
{
if (isNull())
throw TranslationUnitIsNullException();
}
-void TranslationUnit::checkIfFileExists() const
+void Document::checkIfFileExists() const
{
if (!fileExists())
throw TranslationUnitFileNotExitsException(d->filePath);
}
-bool TranslationUnit::fileExists() const
+bool Document::fileExists() const
{
return QFileInfo::exists(d->filePath.toString());
}
-bool TranslationUnit::isMainFileAndExistsOrIsOtherFile(const Utf8String &filePath) const
+bool Document::isMainFileAndExistsOrIsOtherFile(const Utf8String &filePath) const
{
if (filePath == d->filePath)
return QFileInfo::exists(d->filePath);
@@ -384,17 +384,17 @@ bool TranslationUnit::isMainFileAndExistsOrIsOtherFile(const Utf8String &filePat
return true;
}
-bool operator==(const TranslationUnit &first, const TranslationUnit &second)
+bool operator==(const Document &first, const Document &second)
{
return first.filePath() == second.filePath() && first.projectPartId() == second.projectPartId();
}
-void PrintTo(const TranslationUnit &translationUnit, ::std::ostream *os)
+void PrintTo(const Document &document, ::std::ostream *os)
{
- *os << "TranslationUnit("
- << translationUnit.filePath().constData() << ", "
- << translationUnit.projectPartId().constData() << ", "
- << translationUnit.documentRevision() << ")";
+ *os << "Document("
+ << document.filePath().constData() << ", "
+ << document.projectPartId().constData() << ", "
+ << document.documentRevision() << ")";
}
} // namespace ClangBackEnd
diff --git a/src/tools/clangbackend/ipcsource/clangtranslationunit.h b/src/tools/clangbackend/ipcsource/clangdocument.h
index e3ec05fa87..f727424e3e 100644
--- a/src/tools/clangbackend/ipcsource/clangtranslationunit.h
+++ b/src/tools/clangbackend/ipcsource/clangdocument.h
@@ -44,15 +44,15 @@ class Utf8String;
namespace ClangBackEnd {
class TranslationUnitCore;
-class TranslationUnitData;
+class DocumentData;
class TranslationUnitUpdateResult;
class ProjectPart;
class FileContainer;
-class TranslationUnits;
+class Documents;
using time_point = std::chrono::steady_clock::time_point;
-class TranslationUnit
+class Document
{
public:
enum FileExistsCheck {
@@ -60,19 +60,19 @@ public:
DoNotCheckIfFileExists
};
- TranslationUnit() = default;
- TranslationUnit(const Utf8String &filePath,
- const ProjectPart &projectPart,
- const Utf8StringVector &fileArguments,
- TranslationUnits &translationUnits,
- FileExistsCheck fileExistsCheck = CheckIfFileExists);
- ~TranslationUnit();
+ Document() = default;
+ Document(const Utf8String &filePath,
+ const ProjectPart &projectPart,
+ const Utf8StringVector &fileArguments,
+ Documents &documents,
+ FileExistsCheck fileExistsCheck = CheckIfFileExists);
+ ~Document();
- TranslationUnit(const TranslationUnit &cxTranslationUnit);
- TranslationUnit &operator=(const TranslationUnit &cxTranslationUnit);
+ Document(const Document &cxTranslationUnit);
+ Document &operator=(const Document &cxTranslationUnit);
- TranslationUnit(TranslationUnit &&cxTranslationUnit);
- TranslationUnit &operator=(TranslationUnit &&cxTranslationUnit);
+ Document(Document &&cxTranslationUnit);
+ Document &operator=(Document &&cxTranslationUnit);
void reset();
@@ -124,9 +124,9 @@ private:
bool isMainFileAndExistsOrIsOtherFile(const Utf8String &filePath) const;
private:
- mutable std::shared_ptr<TranslationUnitData> d;
+ mutable std::shared_ptr<DocumentData> d;
};
-bool operator==(const TranslationUnit &first, const TranslationUnit &second);
-void PrintTo(const TranslationUnit &translationUnit, ::std::ostream *os);
+bool operator==(const Document &first, const Document &second);
+void PrintTo(const Document &document, ::std::ostream *os);
} // namespace ClangBackEnd
diff --git a/src/tools/clangbackend/ipcsource/clangdocuments.cpp b/src/tools/clangbackend/ipcsource/clangdocuments.cpp
new file mode 100644
index 0000000000..1903760b23
--- /dev/null
+++ b/src/tools/clangbackend/ipcsource/clangdocuments.cpp
@@ -0,0 +1,311 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "clangdocuments.h"
+
+#include <diagnosticset.h>
+#include <documentannotationschangedmessage.h>
+#include <highlightingmarks.h>
+#include <projectpartsdonotexistexception.h>
+#include <projects.h>
+#include <skippedsourceranges.h>
+#include <translationunitalreadyexistsexception.h>
+#include <translationunitdoesnotexistexception.h>
+#include <unsavedfiles.h>
+
+#include <QDebug>
+
+#include <algorithm>
+
+namespace ClangBackEnd {
+
+bool operator==(const FileContainer &fileContainer, const Document &document)
+{
+ return fileContainer.filePath() == document.filePath() && fileContainer.projectPartId() == document.projectPartId();
+}
+
+bool operator==(const Document &document, const FileContainer &fileContainer)
+{
+ return fileContainer == document;
+}
+
+Documents::Documents(ProjectParts &projects, UnsavedFiles &unsavedFiles)
+ : fileSystemWatcher(*this),
+ projectParts(projects),
+ unsavedFiles_(unsavedFiles)
+{
+}
+
+std::vector<Document> Documents::create(const QVector<FileContainer> &fileContainers)
+{
+ checkIfDocumentsDoNotExist(fileContainers);
+
+ std::vector<Document> createdTranslationUnits;
+
+ for (const FileContainer &fileContainer : fileContainers)
+ createdTranslationUnits.push_back(createDocument(fileContainer));
+
+ return createdTranslationUnits;
+}
+
+void Documents::update(const QVector<FileContainer> &fileContainers)
+{
+ checkIfDocumentsForFilePathsExist(fileContainers);
+
+ for (const FileContainer &fileContainer : fileContainers) {
+ updateDocument(fileContainer);
+ updateDocumentsWithChangedDependency(fileContainer.filePath());
+ }
+}
+
+static bool removeFromFileContainer(QVector<FileContainer> &fileContainers, const Document &document)
+{
+ auto position = std::remove(fileContainers.begin(), fileContainers.end(), document);
+
+ bool entryIsRemoved = position != fileContainers.end();
+
+ fileContainers.erase(position, fileContainers.end());
+
+ return entryIsRemoved;
+}
+
+void Documents::remove(const QVector<FileContainer> &fileContainers)
+{
+ checkIfProjectPartsExists(fileContainers);
+
+ removeDocuments(fileContainers);
+ updateDocumentsWithChangedDependencies(fileContainers);
+}
+
+void Documents::setUsedByCurrentEditor(const Utf8String &filePath)
+{
+ for (Document &document : documents_)
+ document.setIsUsedByCurrentEditor(document.filePath() == filePath);
+}
+
+void Documents::setVisibleInEditors(const Utf8StringVector &filePaths)
+{
+ for (Document &document : documents_)
+ document.setIsVisibleInEditor(filePaths.contains(document.filePath()));
+}
+
+const Document &Documents::document(const Utf8String &filePath, const Utf8String &projectPartId) const
+{
+ checkIfProjectPartExists(projectPartId);
+
+ auto findIterator = findDocument(filePath, projectPartId);
+
+ if (findIterator == documents_.end())
+ throw TranslationUnitDoesNotExistException(FileContainer(filePath, projectPartId));
+
+ return *findIterator;
+}
+
+const Document &Documents::document(const FileContainer &fileContainer) const
+{
+ return document(fileContainer.filePath(), fileContainer.projectPartId());
+}
+
+bool Documents::hasDocument(const Utf8String &filePath,
+ const Utf8String &projectPartId) const
+{
+ return hasDocument(FileContainer(filePath, projectPartId));
+}
+
+const std::vector<Document> &Documents::documents() const
+{
+ return documents_;
+}
+
+UnsavedFiles Documents::unsavedFiles() const
+{
+ return unsavedFiles_;
+}
+
+void Documents::addWatchedFiles(QSet<Utf8String> &filePaths)
+{
+ fileSystemWatcher.addFiles(filePaths);
+}
+
+void Documents::updateDocumentsWithChangedDependency(const Utf8String &filePath)
+{
+ for (auto &document : documents_)
+ document.setDirtyIfDependencyIsMet(filePath);
+}
+
+void Documents::updateDocumentsWithChangedDependencies(const QVector<FileContainer> &fileContainers)
+{
+ for (const FileContainer &fileContainer : fileContainers)
+ updateDocumentsWithChangedDependency(fileContainer.filePath());
+}
+
+void Documents::setDocumentsDirtyIfProjectPartChanged()
+{
+ for (auto &document : documents_)
+ document.setDirtyIfProjectPartIsOutdated();
+}
+
+QVector<FileContainer> Documents::newerFileContainers(const QVector<FileContainer> &fileContainers) const
+{
+ QVector<FileContainer> newerContainers;
+
+ auto translationUnitIsNewer = [this] (const FileContainer &fileContainer) {
+ try {
+ return document(fileContainer).documentRevision() != fileContainer.documentRevision();
+ } catch (const TranslationUnitDoesNotExistException &) {
+ return true;
+ }
+ };
+
+ std::copy_if(fileContainers.cbegin(),
+ fileContainers.cend(),
+ std::back_inserter(newerContainers),
+ translationUnitIsNewer);
+
+ return newerContainers;
+}
+
+const ClangFileSystemWatcher *Documents::clangFileSystemWatcher() const
+{
+ return &fileSystemWatcher;
+}
+
+Document Documents::createDocument(const FileContainer &fileContainer)
+{
+ Document::FileExistsCheck checkIfFileExists = fileContainer.hasUnsavedFileContent() ? Document::DoNotCheckIfFileExists : Document::CheckIfFileExists;
+
+ documents_.emplace_back(fileContainer.filePath(),
+ projectParts.project(fileContainer.projectPartId()),
+ fileContainer.fileArguments(),
+ *this,
+ checkIfFileExists);
+
+ documents_.back().setDocumentRevision(fileContainer.documentRevision());
+
+ return documents_.back();
+}
+
+void Documents::updateDocument(const FileContainer &fileContainer)
+{
+ const auto documents = findAllDocumentsWithFilePath(fileContainer.filePath());
+
+ for (auto document : documents)
+ document.setDocumentRevision(fileContainer.documentRevision());
+}
+
+std::vector<Document>::iterator Documents::findDocument(const FileContainer &fileContainer)
+{
+ return std::find(documents_.begin(), documents_.end(), fileContainer);
+}
+
+std::vector<Document> Documents::findAllDocumentsWithFilePath(const Utf8String &filePath)
+{
+ const auto filePathCompare = [&filePath] (const Document &document) {
+ return document.filePath() == filePath;
+ };
+
+ std::vector<Document> documents;
+ std::copy_if(documents_.begin(),
+ documents_.end(),
+ std::back_inserter(documents),
+ filePathCompare);
+
+ return documents;
+}
+
+std::vector<Document>::const_iterator Documents::findDocument(const Utf8String &filePath, const Utf8String &projectPartId) const
+{
+ FileContainer fileContainer(filePath, projectPartId);
+ return std::find(documents_.begin(), documents_.end(), fileContainer);
+}
+
+bool Documents::hasDocument(const FileContainer &fileContainer) const
+{
+ auto findIterator = std::find(documents_.begin(), documents_.end(), fileContainer);
+
+ return findIterator != documents_.end();
+}
+
+bool Documents::hasDocumentWithFilePath(const Utf8String &filePath) const
+{
+ auto filePathCompare = [&filePath] (const Document &document) {
+ return document.filePath() == filePath;
+ };
+
+ auto findIterator = std::find_if(documents_.begin(), documents_.end(), filePathCompare);
+
+ return findIterator != documents_.end();
+}
+
+void Documents::checkIfProjectPartExists(const Utf8String &projectFileName) const
+{
+ projectParts.project(projectFileName);
+}
+
+void Documents::checkIfProjectPartsExists(const QVector<FileContainer> &fileContainers) const
+{
+ Utf8StringVector notExistingProjectParts;
+
+ for (const FileContainer &fileContainer : fileContainers) {
+ if (!projectParts.hasProjectPart(fileContainer.projectPartId()))
+ notExistingProjectParts.push_back(fileContainer.projectPartId());
+ }
+
+ if (!notExistingProjectParts.isEmpty())
+ throw ProjectPartDoNotExistException(notExistingProjectParts);
+
+}
+
+void Documents::checkIfDocumentsDoNotExist(const QVector<FileContainer> &fileContainers) const
+{
+ for (const FileContainer &fileContainer : fileContainers) {
+ if (hasDocument(fileContainer))
+ throw TranslationUnitAlreadyExistsException(fileContainer);
+ }
+}
+
+void Documents::checkIfDocumentsForFilePathsExist(const QVector<FileContainer> &fileContainers) const
+{
+ for (const FileContainer &fileContainer : fileContainers) {
+ if (!hasDocumentWithFilePath(fileContainer.filePath()))
+ throw TranslationUnitDoesNotExistException(fileContainer);
+ }
+}
+
+void Documents::removeDocuments(const QVector<FileContainer> &fileContainers)
+{
+ QVector<FileContainer> processedFileContainers = fileContainers;
+
+ auto removeBeginIterator = std::remove_if(documents_.begin(), documents_.end(), [&processedFileContainers] (const Document &document) {
+ return removeFromFileContainer(processedFileContainers, document);
+ });
+
+ documents_.erase(removeBeginIterator, documents_.end());
+
+ if (!processedFileContainers.isEmpty())
+ throw TranslationUnitDoesNotExistException(processedFileContainers.first());
+}
+
+} // namespace ClangBackEnd
diff --git a/src/tools/clangbackend/ipcsource/translationunits.h b/src/tools/clangbackend/ipcsource/clangdocuments.h
index 5607ebb665..3af689145b 100644
--- a/src/tools/clangbackend/ipcsource/translationunits.h
+++ b/src/tools/clangbackend/ipcsource/clangdocuments.h
@@ -25,8 +25,8 @@
#pragma once
+#include "clangdocument.h"
#include "clangfilesystemwatcher.h"
-#include "clangtranslationunit.h"
#include <filecontainer.h>
@@ -39,54 +39,54 @@ namespace ClangBackEnd {
class ProjectParts;
class UnsavedFiles;
-class TranslationUnits
+class Documents
{
public:
- TranslationUnits(ProjectParts &projectParts, UnsavedFiles &unsavedFiles);
+ Documents(ProjectParts &projectParts, UnsavedFiles &unsavedFiles);
- std::vector<TranslationUnit> create(const QVector<FileContainer> &fileContainers);
+ std::vector<Document> create(const QVector<FileContainer> &fileContainers);
void update(const QVector<FileContainer> &fileContainers);
void remove(const QVector<FileContainer> &fileContainers);
void setUsedByCurrentEditor(const Utf8String &filePath);
void setVisibleInEditors(const Utf8StringVector &filePaths);
- const TranslationUnit &translationUnit(const Utf8String &filePath, const Utf8String &projectPartId) const;
- const TranslationUnit &translationUnit(const FileContainer &fileContainer) const;
- bool hasTranslationUnit(const Utf8String &filePath, const Utf8String &projectPartId) const;
- bool hasTranslationUnitWithFilePath(const Utf8String &filePath) const;
+ const Document &document(const Utf8String &filePath, const Utf8String &projectPartId) const;
+ const Document &document(const FileContainer &fileContainer) const;
+ bool hasDocument(const Utf8String &filePath, const Utf8String &projectPartId) const;
+ bool hasDocumentWithFilePath(const Utf8String &filePath) const;
- const std::vector<TranslationUnit> &translationUnits() const;
+ const std::vector<Document> &documents() const;
UnsavedFiles unsavedFiles() const;
void addWatchedFiles(QSet<Utf8String> &filePaths);
- void updateTranslationUnitsWithChangedDependency(const Utf8String &filePath);
- void updateTranslationUnitsWithChangedDependencies(const QVector<FileContainer> &fileContainers);
- void setTranslationUnitsDirtyIfProjectPartChanged();
+ void updateDocumentsWithChangedDependency(const Utf8String &filePath);
+ void updateDocumentsWithChangedDependencies(const QVector<FileContainer> &fileContainers);
+ void setDocumentsDirtyIfProjectPartChanged();
QVector<FileContainer> newerFileContainers(const QVector<FileContainer> &fileContainers) const;
const ClangFileSystemWatcher *clangFileSystemWatcher() const;
private:
- TranslationUnit createTranslationUnit(const FileContainer &fileContainer);
- void updateTranslationUnit(const FileContainer &fileContainer);
- std::vector<TranslationUnit>::iterator findTranslationUnit(const FileContainer &fileContainer);
- std::vector<TranslationUnit> findAllTranslationUnitWithFilePath(const Utf8String &filePath);
- std::vector<TranslationUnit>::const_iterator findTranslationUnit(const Utf8String &filePath, const Utf8String &projectPartId) const;
- bool hasTranslationUnit(const FileContainer &fileContainer) const;
+ Document createDocument(const FileContainer &fileContainer);
+ void updateDocument(const FileContainer &fileContainer);
+ std::vector<Document>::iterator findDocument(const FileContainer &fileContainer);
+ std::vector<Document> findAllDocumentsWithFilePath(const Utf8String &filePath);
+ std::vector<Document>::const_iterator findDocument(const Utf8String &filePath, const Utf8String &projectPartId) const;
+ bool hasDocument(const FileContainer &fileContainer) const;
void checkIfProjectPartExists(const Utf8String &projectFileName) const;
void checkIfProjectPartsExists(const QVector<FileContainer> &fileContainers) const;
- void checkIfTranslationUnitsDoesNotExists(const QVector<FileContainer> &fileContainers) const;
- void checkIfTranslationUnitsForFilePathsDoesExists(const QVector<FileContainer> &fileContainers) const;
+ void checkIfDocumentsDoNotExist(const QVector<FileContainer> &fileContainers) const;
+ void checkIfDocumentsForFilePathsExist(const QVector<FileContainer> &fileContainers) const;
- void removeTranslationUnits(const QVector<FileContainer> &fileContainers);
+ void removeDocuments(const QVector<FileContainer> &fileContainers);
private:
ClangFileSystemWatcher fileSystemWatcher;
- std::vector<TranslationUnit> translationUnits_;
+ std::vector<Document> documents_;
ProjectParts &projectParts;
UnsavedFiles &unsavedFiles_;
};
diff --git a/src/tools/clangbackend/ipcsource/clangfilesystemwatcher.cpp b/src/tools/clangbackend/ipcsource/clangfilesystemwatcher.cpp
index df333a84ed..10b586b882 100644
--- a/src/tools/clangbackend/ipcsource/clangfilesystemwatcher.cpp
+++ b/src/tools/clangbackend/ipcsource/clangfilesystemwatcher.cpp
@@ -25,7 +25,7 @@
#include "clangfilesystemwatcher.h"
-#include "translationunits.h"
+#include "clangdocuments.h"
#include <utf8stringvector.h>
@@ -64,8 +64,8 @@ QStringList filterExistingFiles(QStringList &&filePaths)
}
}
-ClangFileSystemWatcher::ClangFileSystemWatcher(TranslationUnits &translationUnits)
- : translationUnits(translationUnits)
+ClangFileSystemWatcher::ClangFileSystemWatcher(Documents &documents)
+ : documents(documents)
{
connect(&watcher,
&QFileSystemWatcher::fileChanged,
@@ -83,7 +83,7 @@ void ClangFileSystemWatcher::addFiles(const QSet<Utf8String> &filePaths)
void ClangFileSystemWatcher::updateTranslationUnitsWithChangedDependencies(const QString &filePath)
{
- translationUnits.updateTranslationUnitsWithChangedDependency(filePath);
+ documents.updateDocumentsWithChangedDependency(filePath);
emit fileChanged(filePath);
}
diff --git a/src/tools/clangbackend/ipcsource/clangfilesystemwatcher.h b/src/tools/clangbackend/ipcsource/clangfilesystemwatcher.h
index 4d6be96a21..8d14be153e 100644
--- a/src/tools/clangbackend/ipcsource/clangfilesystemwatcher.h
+++ b/src/tools/clangbackend/ipcsource/clangfilesystemwatcher.h
@@ -32,14 +32,14 @@ class Utf8String;
namespace ClangBackEnd {
-class TranslationUnits;
+class Documents;
class ClangFileSystemWatcher : public QObject
{
Q_OBJECT
public:
- ClangFileSystemWatcher(TranslationUnits &translationUnits);
+ ClangFileSystemWatcher(Documents &documents);
void addFiles(const QSet<Utf8String> &filePaths);
@@ -51,7 +51,7 @@ private:
private:
QFileSystemWatcher watcher;
- TranslationUnits &translationUnits;
+ Documents &documents;
};
} // namespace ClangBackEnd
diff --git a/src/tools/clangbackend/ipcsource/clangjobcontext.cpp b/src/tools/clangbackend/ipcsource/clangjobcontext.cpp
index 9c9c520fce..f09235ca32 100644
--- a/src/tools/clangbackend/ipcsource/clangjobcontext.cpp
+++ b/src/tools/clangbackend/ipcsource/clangjobcontext.cpp
@@ -25,24 +25,24 @@
#include "clangiasyncjob.h"
-#include "translationunits.h"
+#include "clangdocuments.h"
namespace ClangBackEnd {
JobContext::JobContext(const JobRequest &jobRequest,
- TranslationUnits *translationUnits,
+ Documents *documents,
UnsavedFiles *unsavedFiles,
ClangCodeModelClientInterface *clientInterface)
: jobRequest(jobRequest)
- , translationUnits(translationUnits)
+ , documents(documents)
, unsavedFiles(unsavedFiles)
, client(clientInterface)
{
}
-TranslationUnit JobContext::translationUnitForJobRequest() const
+Document JobContext::documentForJobRequest() const
{
- return translationUnits->translationUnit(jobRequest.filePath, jobRequest.projectPartId);
+ return documents->document(jobRequest.filePath, jobRequest.projectPartId);
}
bool JobContext::isOutdated() const
@@ -53,7 +53,7 @@ bool JobContext::isOutdated() const
bool JobContext::isDocumentOpen() const
{
const bool hasTranslationUnit
- = translationUnits->hasTranslationUnit(jobRequest.filePath, jobRequest.projectPartId);
+ = documents->hasDocument(jobRequest.filePath, jobRequest.projectPartId);
if (!hasTranslationUnit)
qCDebug(jobsLog) << "Document already closed for results of" << jobRequest;
@@ -63,9 +63,8 @@ bool JobContext::isDocumentOpen() const
bool JobContext::documentRevisionChanged() const
{
- const TranslationUnit &translationUnit
- = translationUnits->translationUnit(jobRequest.filePath, jobRequest.projectPartId);
- const bool revisionChanged = translationUnit.documentRevision() != jobRequest.documentRevision;
+ const Document &document = documents->document(jobRequest.filePath, jobRequest.projectPartId);
+ const bool revisionChanged = document.documentRevision() != jobRequest.documentRevision;
if (revisionChanged)
qCDebug(jobsLog) << "Document revision changed for results of" << jobRequest;
diff --git a/src/tools/clangbackend/ipcsource/clangjobcontext.h b/src/tools/clangbackend/ipcsource/clangjobcontext.h
index 6e124c609e..629d8320bd 100644
--- a/src/tools/clangbackend/ipcsource/clangjobcontext.h
+++ b/src/tools/clangbackend/ipcsource/clangjobcontext.h
@@ -30,8 +30,8 @@
namespace ClangBackEnd {
class ClangCodeModelClientInterface;
-class TranslationUnit;
-class TranslationUnits;
+class Document;
+class Documents;
class UnsavedFiles;
class JobContext
@@ -39,11 +39,11 @@ class JobContext
public:
JobContext() = default;
JobContext(const JobRequest &jobRequest,
- TranslationUnits *translationUnits,
+ Documents *documents,
UnsavedFiles *unsavedFiles,
ClangCodeModelClientInterface *client);
- TranslationUnit translationUnitForJobRequest() const;
+ Document documentForJobRequest() const;
bool isOutdated() const;
bool isDocumentOpen() const;
@@ -51,7 +51,7 @@ public:
public:
JobRequest jobRequest;
- TranslationUnits *translationUnits = nullptr;
+ Documents *documents = nullptr;
UnsavedFiles *unsavedFiles = nullptr;
ClangCodeModelClientInterface *client = nullptr;
};
diff --git a/src/tools/clangbackend/ipcsource/clangjobqueue.cpp b/src/tools/clangbackend/ipcsource/clangjobqueue.cpp
index 6a3ae96015..1beb1cdace 100644
--- a/src/tools/clangbackend/ipcsource/clangjobqueue.cpp
+++ b/src/tools/clangbackend/ipcsource/clangjobqueue.cpp
@@ -25,8 +25,8 @@
#include "clangiasyncjob.h"
#include "clangjobqueue.h"
-#include "clangtranslationunit.h"
-#include "translationunits.h"
+#include "clangdocument.h"
+#include "clangdocuments.h"
#include "projects.h"
#include "unsavedfiles.h"
@@ -34,8 +34,8 @@
namespace ClangBackEnd {
-JobQueue::JobQueue(TranslationUnits &translationUnits, ProjectParts &projectParts)
- : m_translationUnits(translationUnits)
+JobQueue::JobQueue(Documents &documents, ProjectParts &projectParts)
+ : m_documents(documents)
, m_projectParts(projectParts)
{
}
@@ -81,7 +81,7 @@ void JobQueue::removeOutDatedRequests()
bool JobQueue::isJobRequestOutDated(const JobRequest &jobRequest) const
{
const JobRequest::Requirements requirements = jobRequest.requirements;
- const UnsavedFiles unsavedFiles = m_translationUnits.unsavedFiles();
+ const UnsavedFiles unsavedFiles = m_documents.unsavedFiles();
if (requirements.testFlag(JobRequest::CurrentUnsavedFiles)) {
if (jobRequest.unsavedFilesChangeTimePoint != unsavedFiles.lastChangeTimePoint()) {
@@ -93,7 +93,7 @@ bool JobQueue::isJobRequestOutDated(const JobRequest &jobRequest) const
bool projectCheckedAndItExists = false;
if (requirements.testFlag(JobRequest::DocumentValid)) {
- if (!m_translationUnits.hasTranslationUnit(jobRequest.filePath, jobRequest.projectPartId)) {
+ if (!m_documents.hasDocument(jobRequest.filePath, jobRequest.projectPartId)) {
qCDebug(jobsLog) << "Removing due to already closed document:" << jobRequest;
return true;
}
@@ -104,15 +104,15 @@ bool JobQueue::isJobRequestOutDated(const JobRequest &jobRequest) const
}
projectCheckedAndItExists = true;
- const TranslationUnit translationUnit
- = m_translationUnits.translationUnit(jobRequest.filePath, jobRequest.projectPartId);
- if (!translationUnit.isIntact()) {
+ const Document document
+ = m_documents.document(jobRequest.filePath, jobRequest.projectPartId);
+ if (!document.isIntact()) {
qCDebug(jobsLog) << "Removing due to not intact translation unit:" << jobRequest;
return true;
}
if (requirements.testFlag(JobRequest::CurrentDocumentRevision)) {
- if (translationUnit.documentRevision() != jobRequest.documentRevision) {
+ if (document.documentRevision() != jobRequest.documentRevision) {
qCDebug(jobsLog) << "Removing due to changed document revision:" << jobRequest;
return true;
}
@@ -135,14 +135,14 @@ bool JobQueue::isJobRequestOutDated(const JobRequest &jobRequest) const
return false;
}
-static int priority(const TranslationUnit &translationUnit)
+static int priority(const Document &document)
{
int thePriority = 0;
- if (translationUnit.isUsedByCurrentEditor())
+ if (document.isUsedByCurrentEditor())
thePriority += 1000;
- if (translationUnit.isVisibleInEditor())
+ if (document.isVisibleInEditor())
thePriority += 100;
return thePriority;
@@ -152,8 +152,8 @@ void JobQueue::prioritizeRequests()
{
const auto lessThan = [this] (const JobRequest &r1, const JobRequest &r2) {
// TODO: Getting the TU is O(n) currently, so this might become expensive for large n.
- const TranslationUnit &t1 = m_translationUnits.translationUnit(r1.filePath, r1.projectPartId);
- const TranslationUnit &t2 = m_translationUnits.translationUnit(r2.filePath, r2.projectPartId);
+ const Document &t1 = m_documents.document(r1.filePath, r1.projectPartId);
+ const Document &t2 = m_documents.document(r2.filePath, r2.projectPartId);
return priority(t1) > priority(t2);
};
@@ -171,12 +171,12 @@ JobRequests JobQueue::takeJobRequestsToRunNow()
const JobRequest &jobRequest = i.next();
try {
- const TranslationUnit &translationUnit
- = m_translationUnits.translationUnit(jobRequest.filePath,
+ const Document &document
+ = m_documents.document(jobRequest.filePath,
jobRequest.projectPartId);
const DocumentId documentId = DocumentId(jobRequest.filePath, jobRequest.projectPartId);
- if (!translationUnit.isUsedByCurrentEditor() && !translationUnit.isVisibleInEditor())
+ if (!document.isUsedByCurrentEditor() && !document.isVisibleInEditor())
continue;
if (documentsScheduledForThisRun.contains(documentId))
diff --git a/src/tools/clangbackend/ipcsource/clangjobqueue.h b/src/tools/clangbackend/ipcsource/clangjobqueue.h
index fe71502473..1be38ceaf0 100644
--- a/src/tools/clangbackend/ipcsource/clangjobqueue.h
+++ b/src/tools/clangbackend/ipcsource/clangjobqueue.h
@@ -32,12 +32,12 @@
namespace ClangBackEnd {
class ProjectParts;
-class TranslationUnits;
+class Documents;
class JobQueue
{
public:
- JobQueue(TranslationUnits &translationUnits, ProjectParts &projects);
+ JobQueue(Documents &documents, ProjectParts &projects);
void add(const JobRequest &job);
@@ -59,7 +59,7 @@ private:
bool isJobRequestOutDated(const JobRequest &jobRequest) const;
private:
- TranslationUnits &m_translationUnits;
+ Documents &m_documents;
ProjectParts &m_projectParts;
IsJobRunningHandler m_isJobRunningHandler;
diff --git a/src/tools/clangbackend/ipcsource/clangjobs.cpp b/src/tools/clangbackend/ipcsource/clangjobs.cpp
index 54465f1527..536e43fb89 100644
--- a/src/tools/clangbackend/ipcsource/clangjobs.cpp
+++ b/src/tools/clangbackend/ipcsource/clangjobs.cpp
@@ -36,15 +36,15 @@
namespace ClangBackEnd {
-Jobs::Jobs(TranslationUnits &translationUnits,
+Jobs::Jobs(Documents &documents,
UnsavedFiles &unsavedFiles,
ProjectParts &projectParts,
ClangCodeModelClientInterface &client)
- : m_translationUnits(translationUnits)
+ : m_documents(documents)
, m_unsavedFiles(unsavedFiles)
, m_projectParts(projectParts)
, m_client(client)
- , m_queue(translationUnits, projectParts)
+ , m_queue(documents, projectParts)
{
m_queue.setIsJobRunningHandler([this](const Utf8String &filePath,
const Utf8String &projectPartId) {
@@ -89,7 +89,7 @@ JobRequests Jobs::runJobs(const JobRequests &jobsRequests)
bool Jobs::runJob(const JobRequest &jobRequest)
{
if (IAsyncJob *asyncJob = IAsyncJob::create(jobRequest.type)) {
- JobContext context(jobRequest, &m_translationUnits, &m_unsavedFiles, &m_client);
+ JobContext context(jobRequest, &m_documents, &m_unsavedFiles, &m_client);
asyncJob->setContext(context);
if (asyncJob->prepareAsyncRun()) {
diff --git a/src/tools/clangbackend/ipcsource/clangjobs.h b/src/tools/clangbackend/ipcsource/clangjobs.h
index 30e2fef7d8..94a507e3ef 100644
--- a/src/tools/clangbackend/ipcsource/clangjobs.h
+++ b/src/tools/clangbackend/ipcsource/clangjobs.h
@@ -34,9 +34,9 @@
namespace ClangBackEnd {
class ClangCodeModelClientInterface;
+class Documents;
class IAsyncJob;
class ProjectParts;
-class TranslationUnits;
class UnsavedFiles;
class Jobs
@@ -49,7 +49,7 @@ public:
using RunningJobs = QHash<IAsyncJob *, RunningJob>;
public:
- Jobs(TranslationUnits &translationUnits,
+ Jobs(Documents &documents,
UnsavedFiles &unsavedFiles,
ProjectParts &projects,
ClangCodeModelClientInterface &client);
@@ -70,7 +70,7 @@ private:
void onJobFinished(IAsyncJob *asyncJob);
private:
- TranslationUnits &m_translationUnits;
+ Documents &m_documents;
UnsavedFiles &m_unsavedFiles;
ProjectParts &m_projectParts;
ClangCodeModelClientInterface &m_client;
diff --git a/src/tools/clangbackend/ipcsource/clangrequestdocumentannotationsjob.cpp b/src/tools/clangbackend/ipcsource/clangrequestdocumentannotationsjob.cpp
index ce9106d5cb..b745c4fe86 100644
--- a/src/tools/clangbackend/ipcsource/clangrequestdocumentannotationsjob.cpp
+++ b/src/tools/clangbackend/ipcsource/clangrequestdocumentannotationsjob.cpp
@@ -57,10 +57,10 @@ bool RequestDocumentAnnotationsJob::prepareAsyncRun()
QTC_ASSERT(jobRequest.type == JobRequest::Type::RequestDocumentAnnotations, return false);
try {
- m_pinnedTranslationUnit = context().translationUnitForJobRequest();
- m_pinnedFileContainer = m_pinnedTranslationUnit.fileContainer();
+ m_pinnedDocument = context().documentForJobRequest();
+ m_pinnedFileContainer = m_pinnedDocument.fileContainer();
- const TranslationUnitCore translationUnitCore = m_pinnedTranslationUnit.translationUnitCore();
+ const TranslationUnitCore translationUnitCore = m_pinnedDocument.translationUnitCore();
setRunner([translationUnitCore]() {
return runAsyncHelper(translationUnitCore);
});
diff --git a/src/tools/clangbackend/ipcsource/clangrequestdocumentannotationsjob.h b/src/tools/clangbackend/ipcsource/clangrequestdocumentannotationsjob.h
index f44c50b190..04bdd7cfc3 100644
--- a/src/tools/clangbackend/ipcsource/clangrequestdocumentannotationsjob.h
+++ b/src/tools/clangbackend/ipcsource/clangrequestdocumentannotationsjob.h
@@ -26,7 +26,7 @@
#pragma once
#include "clangasyncjob.h"
-#include "clangtranslationunit.h"
+#include "clangdocument.h"
#include <clangbackendipc/diagnosticcontainer.h>
#include <clangbackendipc/highlightingmarkcontainer.h>
@@ -53,7 +53,7 @@ private:
void sendAnnotations(const AsyncResult &result);
private:
- TranslationUnit m_pinnedTranslationUnit;
+ Document m_pinnedDocument;
FileContainer m_pinnedFileContainer;
};
diff --git a/src/tools/clangbackend/ipcsource/clangupdatedocumentannotationsjob.cpp b/src/tools/clangbackend/ipcsource/clangupdatedocumentannotationsjob.cpp
index 2e61c50b92..0c62be4f9e 100644
--- a/src/tools/clangbackend/ipcsource/clangupdatedocumentannotationsjob.cpp
+++ b/src/tools/clangbackend/ipcsource/clangupdatedocumentannotationsjob.cpp
@@ -63,11 +63,11 @@ bool UpdateDocumentAnnotationsJob::prepareAsyncRun()
QTC_ASSERT(jobRequest.type == JobRequest::Type::UpdateDocumentAnnotations, return false);
try {
- m_pinnedTranslationUnit = context().translationUnitForJobRequest();
- m_pinnedFileContainer = m_pinnedTranslationUnit.fileContainer();
+ m_pinnedDocument = context().documentForJobRequest();
+ m_pinnedFileContainer = m_pinnedDocument.fileContainer();
- const TranslationUnitCore translationUnitCore = m_pinnedTranslationUnit.translationUnitCore();
- const TranslationUnitUpdateInput updateInput = m_pinnedTranslationUnit.createUpdateInput();
+ const TranslationUnitCore translationUnitCore = m_pinnedDocument.translationUnitCore();
+ const TranslationUnitUpdateInput updateInput = m_pinnedDocument.createUpdateInput();
setRunner([translationUnitCore, updateInput]() {
return runAsyncHelper(translationUnitCore, updateInput);
});
@@ -92,7 +92,7 @@ void UpdateDocumentAnnotationsJob::finalizeAsyncRun()
void UpdateDocumentAnnotationsJob::incorporateUpdaterResult(const AsyncResult &result)
{
- m_pinnedTranslationUnit.incorporateUpdaterResult(result.updateResult);
+ m_pinnedDocument.incorporateUpdaterResult(result.updateResult);
}
void UpdateDocumentAnnotationsJob::sendAnnotations(const AsyncResult &result)
diff --git a/src/tools/clangbackend/ipcsource/clangupdatedocumentannotationsjob.h b/src/tools/clangbackend/ipcsource/clangupdatedocumentannotationsjob.h
index 643df07571..c2ca0d13aa 100644
--- a/src/tools/clangbackend/ipcsource/clangupdatedocumentannotationsjob.h
+++ b/src/tools/clangbackend/ipcsource/clangupdatedocumentannotationsjob.h
@@ -26,7 +26,7 @@
#pragma once
#include "clangasyncjob.h"
-#include "clangtranslationunit.h"
+#include "clangdocument.h"
#include "clangtranslationunitupdater.h"
#include <clangbackendipc/diagnosticcontainer.h>
@@ -57,7 +57,7 @@ private:
void sendAnnotations(const AsyncResult &result);
private:
- TranslationUnit m_pinnedTranslationUnit;
+ Document m_pinnedDocument;
FileContainer m_pinnedFileContainer;
};
diff --git a/src/tools/clangbackend/ipcsource/codecompleter.cpp b/src/tools/clangbackend/ipcsource/codecompleter.cpp
index db396ffab3..7756001bcb 100644
--- a/src/tools/clangbackend/ipcsource/codecompleter.cpp
+++ b/src/tools/clangbackend/ipcsource/codecompleter.cpp
@@ -34,7 +34,7 @@
#include "sourcelocation.h"
#include "unsavedfile.h"
#include "unsavedfiles.h"
-#include "clangtranslationunit.h"
+#include "clangdocument.h"
#include "sourcerange.h"
#include "clangunsavedfilesshallowarguments.h"
#include "clangtranslationunitupdater.h"
diff --git a/src/tools/clangbackend/ipcsource/skippedsourceranges.h b/src/tools/clangbackend/ipcsource/skippedsourceranges.h
index ddbf3e62b5..a2c6c6a374 100644
--- a/src/tools/clangbackend/ipcsource/skippedsourceranges.h
+++ b/src/tools/clangbackend/ipcsource/skippedsourceranges.h
@@ -34,7 +34,7 @@ class SourceRangeContainer;
class SkippedSourceRanges
{
public:
- SkippedSourceRanges(CXTranslationUnit TranslationUnit, const char *filePath);
+ SkippedSourceRanges(CXTranslationUnit Document, const char *filePath);
~SkippedSourceRanges();
SkippedSourceRanges(const SkippedSourceRanges &) = delete;
diff --git a/src/tools/clangbackend/ipcsource/sourcelocation.cpp b/src/tools/clangbackend/ipcsource/sourcelocation.cpp
index 992599785d..5d54600c3c 100644
--- a/src/tools/clangbackend/ipcsource/sourcelocation.cpp
+++ b/src/tools/clangbackend/ipcsource/sourcelocation.cpp
@@ -25,9 +25,9 @@
#include "sourcelocation.h"
+#include "clangdocument.h"
#include "clangfilepath.h"
#include "clangstring.h"
-#include "clangtranslationunit.h"
#include <utf8string.h>
diff --git a/src/tools/clangbackend/ipcsource/sourcelocation.h b/src/tools/clangbackend/ipcsource/sourcelocation.h
index 7fc7205ba2..6c2776c2be 100644
--- a/src/tools/clangbackend/ipcsource/sourcelocation.h
+++ b/src/tools/clangbackend/ipcsource/sourcelocation.h
@@ -32,7 +32,7 @@
namespace ClangBackEnd {
class SourceLocationContainer;
-class TranslationUnit;
+class Document;
class SourceLocation
{
diff --git a/src/tools/clangbackend/ipcsource/translationunits.cpp b/src/tools/clangbackend/ipcsource/translationunits.cpp
deleted file mode 100644
index 5fde27b8b9..0000000000
--- a/src/tools/clangbackend/ipcsource/translationunits.cpp
+++ /dev/null
@@ -1,311 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "translationunits.h"
-
-#include <diagnosticset.h>
-#include <documentannotationschangedmessage.h>
-#include <highlightingmarks.h>
-#include <projectpartsdonotexistexception.h>
-#include <projects.h>
-#include <skippedsourceranges.h>
-#include <translationunitalreadyexistsexception.h>
-#include <translationunitdoesnotexistexception.h>
-#include <unsavedfiles.h>
-
-#include <QDebug>
-
-#include <algorithm>
-
-namespace ClangBackEnd {
-
-bool operator==(const FileContainer &fileContainer, const TranslationUnit &translationUnit)
-{
- return fileContainer.filePath() == translationUnit.filePath() && fileContainer.projectPartId() == translationUnit.projectPartId();
-}
-
-bool operator==(const TranslationUnit &translationUnit, const FileContainer &fileContainer)
-{
- return fileContainer == translationUnit;
-}
-
-TranslationUnits::TranslationUnits(ProjectParts &projects, UnsavedFiles &unsavedFiles)
- : fileSystemWatcher(*this),
- projectParts(projects),
- unsavedFiles_(unsavedFiles)
-{
-}
-
-std::vector<TranslationUnit> TranslationUnits::create(const QVector<FileContainer> &fileContainers)
-{
- checkIfTranslationUnitsDoesNotExists(fileContainers);
-
- std::vector<TranslationUnit> createdTranslationUnits;
-
- for (const FileContainer &fileContainer : fileContainers)
- createdTranslationUnits.push_back(createTranslationUnit(fileContainer));
-
- return createdTranslationUnits;
-}
-
-void TranslationUnits::update(const QVector<FileContainer> &fileContainers)
-{
- checkIfTranslationUnitsForFilePathsDoesExists(fileContainers);
-
- for (const FileContainer &fileContainer : fileContainers) {
- updateTranslationUnit(fileContainer);
- updateTranslationUnitsWithChangedDependency(fileContainer.filePath());
- }
-}
-
-static bool removeFromFileContainer(QVector<FileContainer> &fileContainers, const TranslationUnit &translationUnit)
-{
- auto position = std::remove(fileContainers.begin(), fileContainers.end(), translationUnit);
-
- bool entryIsRemoved = position != fileContainers.end();
-
- fileContainers.erase(position, fileContainers.end());
-
- return entryIsRemoved;
-}
-
-void TranslationUnits::remove(const QVector<FileContainer> &fileContainers)
-{
- checkIfProjectPartsExists(fileContainers);
-
- removeTranslationUnits(fileContainers);
- updateTranslationUnitsWithChangedDependencies(fileContainers);
-}
-
-void TranslationUnits::setUsedByCurrentEditor(const Utf8String &filePath)
-{
- for (TranslationUnit &translationUnit : translationUnits_)
- translationUnit.setIsUsedByCurrentEditor(translationUnit.filePath() == filePath);
-}
-
-void TranslationUnits::setVisibleInEditors(const Utf8StringVector &filePaths)
-{
- for (TranslationUnit &translationUnit : translationUnits_)
- translationUnit.setIsVisibleInEditor(filePaths.contains(translationUnit.filePath()));
-}
-
-const TranslationUnit &TranslationUnits::translationUnit(const Utf8String &filePath, const Utf8String &projectPartId) const
-{
- checkIfProjectPartExists(projectPartId);
-
- auto findIterator = findTranslationUnit(filePath, projectPartId);
-
- if (findIterator == translationUnits_.end())
- throw TranslationUnitDoesNotExistException(FileContainer(filePath, projectPartId));
-
- return *findIterator;
-}
-
-const TranslationUnit &TranslationUnits::translationUnit(const FileContainer &fileContainer) const
-{
- return translationUnit(fileContainer.filePath(), fileContainer.projectPartId());
-}
-
-bool TranslationUnits::hasTranslationUnit(const Utf8String &filePath,
- const Utf8String &projectPartId) const
-{
- return hasTranslationUnit(FileContainer(filePath, projectPartId));
-}
-
-const std::vector<TranslationUnit> &TranslationUnits::translationUnits() const
-{
- return translationUnits_;
-}
-
-UnsavedFiles TranslationUnits::unsavedFiles() const
-{
- return unsavedFiles_;
-}
-
-void TranslationUnits::addWatchedFiles(QSet<Utf8String> &filePaths)
-{
- fileSystemWatcher.addFiles(filePaths);
-}
-
-void TranslationUnits::updateTranslationUnitsWithChangedDependency(const Utf8String &filePath)
-{
- for (auto &translationUnit : translationUnits_)
- translationUnit.setDirtyIfDependencyIsMet(filePath);
-}
-
-void TranslationUnits::updateTranslationUnitsWithChangedDependencies(const QVector<FileContainer> &fileContainers)
-{
- for (const FileContainer &fileContainer : fileContainers)
- updateTranslationUnitsWithChangedDependency(fileContainer.filePath());
-}
-
-void TranslationUnits::setTranslationUnitsDirtyIfProjectPartChanged()
-{
- for (auto &translationUnit : translationUnits_)
- translationUnit.setDirtyIfProjectPartIsOutdated();
-}
-
-QVector<FileContainer> TranslationUnits::newerFileContainers(const QVector<FileContainer> &fileContainers) const
-{
- QVector<FileContainer> newerContainers;
-
- auto translationUnitIsNewer = [this] (const FileContainer &fileContainer) {
- try {
- return translationUnit(fileContainer).documentRevision() != fileContainer.documentRevision();
- } catch (const TranslationUnitDoesNotExistException &) {
- return true;
- }
- };
-
- std::copy_if(fileContainers.cbegin(),
- fileContainers.cend(),
- std::back_inserter(newerContainers),
- translationUnitIsNewer);
-
- return newerContainers;
-}
-
-const ClangFileSystemWatcher *TranslationUnits::clangFileSystemWatcher() const
-{
- return &fileSystemWatcher;
-}
-
-TranslationUnit TranslationUnits::createTranslationUnit(const FileContainer &fileContainer)
-{
- TranslationUnit::FileExistsCheck checkIfFileExists = fileContainer.hasUnsavedFileContent() ? TranslationUnit::DoNotCheckIfFileExists : TranslationUnit::CheckIfFileExists;
-
- translationUnits_.emplace_back(fileContainer.filePath(),
- projectParts.project(fileContainer.projectPartId()),
- fileContainer.fileArguments(),
- *this,
- checkIfFileExists);
-
- translationUnits_.back().setDocumentRevision(fileContainer.documentRevision());
-
- return translationUnits_.back();
-}
-
-void TranslationUnits::updateTranslationUnit(const FileContainer &fileContainer)
-{
- const auto translationUnits = findAllTranslationUnitWithFilePath(fileContainer.filePath());
-
- for (auto translationUnit : translationUnits)
- translationUnit.setDocumentRevision(fileContainer.documentRevision());
-}
-
-std::vector<TranslationUnit>::iterator TranslationUnits::findTranslationUnit(const FileContainer &fileContainer)
-{
- return std::find(translationUnits_.begin(), translationUnits_.end(), fileContainer);
-}
-
-std::vector<TranslationUnit> TranslationUnits::findAllTranslationUnitWithFilePath(const Utf8String &filePath)
-{
- const auto filePathCompare = [&filePath] (const TranslationUnit &translationUnit) {
- return translationUnit.filePath() == filePath;
- };
-
- std::vector<TranslationUnit> translationUnits;
- std::copy_if(translationUnits_.begin(),
- translationUnits_.end(),
- std::back_inserter(translationUnits),
- filePathCompare);
-
- return translationUnits;
-}
-
-std::vector<TranslationUnit>::const_iterator TranslationUnits::findTranslationUnit(const Utf8String &filePath, const Utf8String &projectPartId) const
-{
- FileContainer fileContainer(filePath, projectPartId);
- return std::find(translationUnits_.begin(), translationUnits_.end(), fileContainer);
-}
-
-bool TranslationUnits::hasTranslationUnit(const FileContainer &fileContainer) const
-{
- auto findIterator = std::find(translationUnits_.begin(), translationUnits_.end(), fileContainer);
-
- return findIterator != translationUnits_.end();
-}
-
-bool TranslationUnits::hasTranslationUnitWithFilePath(const Utf8String &filePath) const
-{
- auto filePathCompare = [&filePath] (const TranslationUnit &translationUnit) {
- return translationUnit.filePath() == filePath;
- };
-
- auto findIterator = std::find_if(translationUnits_.begin(), translationUnits_.end(), filePathCompare);
-
- return findIterator != translationUnits_.end();
-}
-
-void TranslationUnits::checkIfProjectPartExists(const Utf8String &projectFileName) const
-{
- projectParts.project(projectFileName);
-}
-
-void TranslationUnits::checkIfProjectPartsExists(const QVector<FileContainer> &fileContainers) const
-{
- Utf8StringVector notExistingProjectParts;
-
- for (const FileContainer &fileContainer : fileContainers) {
- if (!projectParts.hasProjectPart(fileContainer.projectPartId()))
- notExistingProjectParts.push_back(fileContainer.projectPartId());
- }
-
- if (!notExistingProjectParts.isEmpty())
- throw ProjectPartDoNotExistException(notExistingProjectParts);
-
-}
-
-void TranslationUnits::checkIfTranslationUnitsDoesNotExists(const QVector<FileContainer> &fileContainers) const
-{
- for (const FileContainer &fileContainer : fileContainers) {
- if (hasTranslationUnit(fileContainer))
- throw TranslationUnitAlreadyExistsException(fileContainer);
- }
-}
-
-void TranslationUnits::checkIfTranslationUnitsForFilePathsDoesExists(const QVector<FileContainer> &fileContainers) const
-{
- for (const FileContainer &fileContainer : fileContainers) {
- if (!hasTranslationUnitWithFilePath(fileContainer.filePath()))
- throw TranslationUnitDoesNotExistException(fileContainer);
- }
-}
-
-void TranslationUnits::removeTranslationUnits(const QVector<FileContainer> &fileContainers)
-{
- QVector<FileContainer> processedFileContainers = fileContainers;
-
- auto removeBeginIterator = std::remove_if(translationUnits_.begin(), translationUnits_.end(), [&processedFileContainers] (const TranslationUnit &translationUnit) {
- return removeFromFileContainer(processedFileContainers, translationUnit);
- });
-
- translationUnits_.erase(removeBeginIterator, translationUnits_.end());
-
- if (!processedFileContainers.isEmpty())
- throw TranslationUnitDoesNotExistException(processedFileContainers.first());
-}
-
-} // namespace ClangBackEnd