diff options
author | Marco Bubke <marco.bubke@theqtcompany.com> | 2015-05-21 15:35:32 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2015-05-21 13:37:15 +0000 |
commit | 35919e4bcc5b570f73597dec6f83ac87d3b55cf6 (patch) | |
tree | 31e9184f7f9b32a9cd728eb8afc57b451482bfe3 | |
parent | 45996a9f354800a428502685bbb615830d9e2e1e (diff) | |
download | qt-creator-35919e4bcc5b570f73597dec6f83ac87d3b55cf6.tar.gz |
Do not check for file existence if it hase unsaved content
In the case of UI files we have unsaved content but no file.
Change-Id: I0f3a7618f8eb271a22bbc4aad83ab921113f5f0f
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
5 files changed, 38 insertions, 6 deletions
diff --git a/src/tools/codemodelbackend/ipcsource/translationunit.cpp b/src/tools/codemodelbackend/ipcsource/translationunit.cpp index da2c29f140..519e2f7aa2 100644 --- a/src/tools/codemodelbackend/ipcsource/translationunit.cpp +++ b/src/tools/codemodelbackend/ipcsource/translationunit.cpp @@ -79,10 +79,12 @@ TranslationUnitData::~TranslationUnitData() TranslationUnit::TranslationUnit(const Utf8String &filePath, const UnsavedFiles &unsavedFiles, - const ProjectPart &project) + const ProjectPart &project, + FileExistsCheck fileExistsCheck) : d(std::make_shared<TranslationUnitData>(filePath, unsavedFiles, project)) { - checkIfFileExists(); + if (fileExistsCheck == CheckIfFileExists) + checkIfFileExists(); } bool TranslationUnit::isNull() const diff --git a/src/tools/codemodelbackend/ipcsource/translationunit.h b/src/tools/codemodelbackend/ipcsource/translationunit.h index 3dfc3fe83b..8d4347ac3c 100644 --- a/src/tools/codemodelbackend/ipcsource/translationunit.h +++ b/src/tools/codemodelbackend/ipcsource/translationunit.h @@ -52,10 +52,16 @@ using time_point = std::chrono::steady_clock::time_point; class TranslationUnit { public: + enum FileExistsCheck { + CheckIfFileExists, + DoNotCheckIfFileExists + }; + TranslationUnit() = default; TranslationUnit(const Utf8String &filePath, const UnsavedFiles &unsavedFiles, - const ProjectPart &projectPart); + const ProjectPart &projectPart, + FileExistsCheck fileExitsCheck = CheckIfFileExists); ~TranslationUnit(); TranslationUnit(const TranslationUnit &cxTranslationUnit); diff --git a/src/tools/codemodelbackend/ipcsource/translationunits.cpp b/src/tools/codemodelbackend/ipcsource/translationunits.cpp index c20320ad4c..508371c24d 100644 --- a/src/tools/codemodelbackend/ipcsource/translationunits.cpp +++ b/src/tools/codemodelbackend/ipcsource/translationunits.cpp @@ -107,9 +107,13 @@ const std::vector<TranslationUnit> &TranslationUnits::translationUnits() const void TranslationUnits::createOrUpdateTranslationUnit(const FileContainer &fileContainer) { + TranslationUnit::FileExistsCheck checkIfFileExists = fileContainer.hasUnsavedFileContent() ? TranslationUnit::DoNotCheckIfFileExists : TranslationUnit::CheckIfFileExists; auto findIterator = findTranslationUnit(fileContainer); if (findIterator == translationUnits_.end()) - translationUnits_.push_back(TranslationUnit(fileContainer.filePath(), unsavedFiles, projects.project(fileContainer.projectPartId()))); + translationUnits_.push_back(TranslationUnit(fileContainer.filePath(), + unsavedFiles, + projects.project(fileContainer.projectPartId()), + checkIfFileExists)); } std::vector<TranslationUnit>::iterator TranslationUnits::findTranslationUnit(const FileContainer &fileContainer) diff --git a/tests/unit/codemodelbackend/unittest/translationunitstest.cpp b/tests/unit/codemodelbackend/unittest/translationunitstest.cpp index 4262112b66..7c5b5d3814 100644 --- a/tests/unit/codemodelbackend/unittest/translationunitstest.cpp +++ b/tests/unit/codemodelbackend/unittest/translationunitstest.cpp @@ -1,4 +1,4 @@ -/**************************************************************************** +/**************************************************************************** ** ** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal @@ -112,6 +112,20 @@ TEST_F(TranslationUnits, ThrowForGettingWithWrongProjectPartFilePath) } +TEST_F(TranslationUnits, ThrowForAddingNonExistingFile) +{ + CodeModelBackEnd::FileContainer fileContainer(Utf8StringLiteral("foo.cpp"), projectPartId); + + ASSERT_THROW(translationUnits.createOrUpdate({fileContainer}), + CodeModelBackEnd::TranslationUnitFileNotExitsException); +} + +TEST_F(TranslationUnits, DoNotThrowForAddingNonExistingFileWithUnsavedContent) +{ + CodeModelBackEnd::FileContainer fileContainer(Utf8StringLiteral("foo.cpp"), projectPartId, Utf8String(), true); + + ASSERT_NO_THROW(translationUnits.createOrUpdate({fileContainer})); +} TEST_F(TranslationUnits, Add) { diff --git a/tests/unit/codemodelbackend/unittest/translationunittest.cpp b/tests/unit/codemodelbackend/unittest/translationunittest.cpp index 26314bc060..3961ddeec5 100644 --- a/tests/unit/codemodelbackend/unittest/translationunittest.cpp +++ b/tests/unit/codemodelbackend/unittest/translationunittest.cpp @@ -68,7 +68,13 @@ TEST(TranslationUnit, DefaultTranslationUnitIsInvalid) TEST(TranslationUnit, ThrowExceptionForNonExistingFilePath) { - ASSERT_THROW(TranslationUnit(Utf8StringLiteral("file.cpp"), UnsavedFiles(), ProjectPart(Utf8StringLiteral("/path/to/projectfile"))), CodeModelBackEnd::TranslationUnitFileNotExitsException); + ASSERT_THROW(TranslationUnit(Utf8StringLiteral("file.cpp"), UnsavedFiles(), ProjectPart(Utf8StringLiteral("/path/to/projectfile"))), + CodeModelBackEnd::TranslationUnitFileNotExitsException); +} + +TEST(TranslationUnit, ThrowNoExceptionForNonExistingFilePathIfDoNotCheckIfFileExistsIsSet) +{ + ASSERT_NO_THROW(TranslationUnit(Utf8StringLiteral("file.cpp"), UnsavedFiles(), ProjectPart(Utf8StringLiteral("/path/to/projectfile")), TranslationUnit::DoNotCheckIfFileExists)); } TEST(TranslationUnit, TranslationUnitIsValid) |