Clang: Support second translation unit

A TranslationUnit is owned by TranslationUnits now. TranslationUnits
allows to add another TranslationUnit and to update/query the recently
and previously parsed translation unit.

This does not change any behavior yet.

Change-Id: I8a2f0cc05d3e51bf739dd5d7c4da14b54147f3ab
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Nikolai Kosjar
2016-09-13 10:41:22 +02:00
parent c12d01fb41
commit 1a426d9f01
20 changed files with 508 additions and 22 deletions

View File

@@ -33,6 +33,7 @@ using ClangBackEnd::TranslationUnitUpdater;
using ClangBackEnd::TranslationUnitUpdateInput;
using ClangBackEnd::TranslationUnitUpdateResult;
using testing::Eq;
using testing::Gt;
namespace {
@@ -42,7 +43,8 @@ class TranslationUnitUpdater : public ::testing::Test
protected:
void TearDown() override;
::TranslationUnitUpdater createUpdater(const TranslationUnitUpdateInput &input);
::TranslationUnitUpdater createUpdater(const TranslationUnitUpdateInput &input,
const Utf8String &translationUnitId = Utf8String());
enum ReparseMode { SetReparseNeeded, DoNotSetReparseNeeded };
TranslationUnitUpdateInput createInput(ReparseMode reparseMode = DoNotSetReparseNeeded);
@@ -73,6 +75,16 @@ TEST_F(TranslationUnitUpdater, ReparsesIfNeeded)
ASSERT_TRUE(result.hasReparsed());
}
TEST_F(TranslationUnitUpdater, PropagatesTranslationUnitId)
{
const Utf8String translationUnitId = Utf8StringLiteral("myId");
::TranslationUnitUpdater updater = createUpdater(createInput(SetReparseNeeded), translationUnitId);
TranslationUnitUpdateResult result = updater.update(::TranslationUnitUpdater::UpdateMode::AsNeeded);
ASSERT_THAT(result.translationUnitId, Eq(translationUnitId));
}
TEST_F(TranslationUnitUpdater, UpdatesParseTimePoint)
{
::TranslationUnitUpdater updater = createUpdater(createInput());
@@ -111,9 +123,10 @@ void TranslationUnitUpdater::TearDown()
}
::TranslationUnitUpdater
TranslationUnitUpdater::createUpdater(const TranslationUnitUpdateInput &input)
TranslationUnitUpdater::createUpdater(const TranslationUnitUpdateInput &input,
const Utf8String &translationUnitId)
{
return ::TranslationUnitUpdater(cxIndex, cxTranslationUnit, input);
return ::TranslationUnitUpdater(translationUnitId, cxIndex, cxTranslationUnit, input);
}
TranslationUnitUpdateInput