From 35919e4bcc5b570f73597dec6f83ac87d3b55cf6 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Thu, 21 May 2015 15:35:32 +0200 Subject: 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 --- src/tools/codemodelbackend/ipcsource/translationunit.cpp | 6 ++++-- src/tools/codemodelbackend/ipcsource/translationunit.h | 8 +++++++- .../codemodelbackend/ipcsource/translationunits.cpp | 6 +++++- .../codemodelbackend/unittest/translationunitstest.cpp | 16 +++++++++++++++- .../codemodelbackend/unittest/translationunittest.cpp | 8 +++++++- 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(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 &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::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) -- cgit v1.2.1