Clang: Don't reparse before code completion

Task-number: QTCREATORBUG-15365
Change-Id: I37f623449fa95268f1a0a5d5e66d75df0582c183
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
Marco Bubke
2015-11-30 16:10:28 +01:00
committed by Nikolai Kosjar
parent 2186e42697
commit 514a96c75f
5 changed files with 12 additions and 4 deletions

View File

@@ -66,7 +66,7 @@
namespace ClangBackEnd {
namespace {
const int delayedDocumentAnnotationsTimerInterval = 300;
const int delayedDocumentAnnotationsTimerInterval = 500;
}
ClangIpcServer::ClangIpcServer()

View File

@@ -173,12 +173,19 @@ CXIndex TranslationUnit::index() const
}
CXTranslationUnit TranslationUnit::cxTranslationUnit() const
{
cxTranslationUnitWithoutReparsing();
reparseTranslationUnitIfFilesAreChanged();
return d->translationUnit;
}
CXTranslationUnit TranslationUnit::cxTranslationUnitWithoutReparsing() const
{
checkIfNull();
checkIfFileExists();
removeTranslationUnitIfProjectPartWasChanged();
createTranslationUnitIfNeeded();
reparseTranslationUnitIfFilesAreChanged();
return d->translationUnit;
}

View File

@@ -97,6 +97,7 @@ public:
CXIndex index() const;
CXTranslationUnit cxTranslationUnit() const;
CXTranslationUnit cxTranslationUnitWithoutReparsing() const;
CXUnsavedFile * cxUnsavedFiles() const;
uint unsavedFilesCount() const;

View File

@@ -49,7 +49,7 @@ CodeCompleter::CodeCompleter(TranslationUnit translationUnit)
CodeCompletions CodeCompleter::complete(uint line, uint column)
{
ClangCodeCompleteResults completeResults(clang_codeCompleteAt(translationUnit.cxTranslationUnit(),
ClangCodeCompleteResults completeResults(clang_codeCompleteAt(translationUnit.cxTranslationUnitWithoutReparsing(),
translationUnit.filePath().constData(),
line,
column,

View File

@@ -225,7 +225,7 @@ TEST_F(CodeCompleter, DISABLED_FunctionInChangedIncludedHeader)
CodeCompletion::FunctionCompletionKind)));
}
TEST_F(CodeCompleter, FunctionInChangedIncludedHeaderWithUnsavedContentInMainFile)
TEST_F(CodeCompleter, DISABLED_FunctionInChangedIncludedHeaderWithUnsavedContentInMainFile) // it's not that bad because we reparse anyway
{
unsavedFiles.createOrUpdate({unsavedMainFileContainer});
translationUnits.update({unsavedMainFileContainer});