summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@theqtcompany.com>2015-05-21 15:35:32 +0200
committerNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2015-05-21 13:37:15 +0000
commit35919e4bcc5b570f73597dec6f83ac87d3b55cf6 (patch)
tree31e9184f7f9b32a9cd728eb8afc57b451482bfe3
parent45996a9f354800a428502685bbb615830d9e2e1e (diff)
downloadqt-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>
-rw-r--r--src/tools/codemodelbackend/ipcsource/translationunit.cpp6
-rw-r--r--src/tools/codemodelbackend/ipcsource/translationunit.h8
-rw-r--r--src/tools/codemodelbackend/ipcsource/translationunits.cpp6
-rw-r--r--tests/unit/codemodelbackend/unittest/translationunitstest.cpp16
-rw-r--r--tests/unit/codemodelbackend/unittest/translationunittest.cpp8
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)