forked from qt-creator/qt-creator
Clang: Reduce database accesses
If we prefetch data from the database to the caches we reduce the database transaction calls which are quite expensive. Change-Id: I617a0d886807402e0a94291a913a77f989970b55 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -82,10 +82,9 @@ void ClangQueryProjectsFindFilter::requestSourceRangesAndDiagnostics(const QStri
|
||||
{
|
||||
const QString filePath = temporaryFile.fileName();
|
||||
|
||||
ClangBackEnd::RequestSourceRangesAndDiagnosticsForQueryMessage message(queryText,
|
||||
{ClangBackEnd::FilePath(filePath),
|
||||
exampleContent,
|
||||
{"cc", "-std=c++1z", toNative(filePath)}});
|
||||
ClangBackEnd::RequestSourceRangesAndDiagnosticsForQueryMessage message(
|
||||
queryText,
|
||||
{ClangBackEnd::FilePath(filePath), 1, exampleContent, {"cc", "-std=c++1z", toNative(filePath)}});
|
||||
|
||||
m_server.requestSourceRangesAndDiagnosticsForQueryMessage(std::move(message));
|
||||
}
|
||||
@@ -204,10 +203,9 @@ void appendSource(std::vector<ClangBackEnd::V2::FileContainer> &sources,
|
||||
|
||||
if (!unsavedContentContains(sourceFilePath, unsavedContent) && !isCHeader(projectFile.kind)) {
|
||||
sources.emplace_back(ClangBackEnd::FilePath(projectFile.path),
|
||||
-1,
|
||||
"",
|
||||
createCommandLine(projectPart.data(),
|
||||
projectFile.path,
|
||||
projectFile.kind));
|
||||
createCommandLine(projectPart.data(), projectFile.path, projectFile.kind));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -108,10 +108,12 @@ std::vector<ClangBackEnd::V2::FileContainer> createUnsavedContents()
|
||||
std::vector<ClangBackEnd::V2::FileContainer> unsavedContents;
|
||||
unsavedContents.reserve(std::size_t(abstractEditors.size()));
|
||||
|
||||
auto toFileContainer = [] (const CppTools::AbstractEditorSupport *abstractEditor) {
|
||||
return ClangBackEnd::V2::FileContainer(ClangBackEnd::FilePath(abstractEditor->fileName()),
|
||||
Utils::SmallString::fromQByteArray(abstractEditor->contents()),
|
||||
{});
|
||||
auto toFileContainer = [](const CppTools::AbstractEditorSupport *abstractEditor) {
|
||||
return ClangBackEnd::V2::FileContainer(ClangBackEnd::FilePath(abstractEditor->fileName()),
|
||||
-1,
|
||||
Utils::SmallString::fromQByteArray(
|
||||
abstractEditor->contents()),
|
||||
{});
|
||||
};
|
||||
|
||||
std::transform(abstractEditors.begin(),
|
||||
|
||||
@@ -37,16 +37,21 @@ CppTools::CppModelManager *cppModelManager()
|
||||
return CppTools::CppModelManager::instance();
|
||||
}
|
||||
|
||||
std::vector<ClangBackEnd::V2::FileContainer> createGeneratedFiles()
|
||||
std::vector<ClangBackEnd::V2::FileContainer> createGeneratedFiles(
|
||||
ClangBackEnd::FilePathCachingInterface &filePathCache)
|
||||
{
|
||||
auto abstractEditors = CppTools::CppModelManager::instance()->abstractEditorSupports();
|
||||
std::vector<ClangBackEnd::V2::FileContainer> generatedFiles;
|
||||
generatedFiles.reserve(std::size_t(abstractEditors.size()));
|
||||
|
||||
auto toFileContainer = [] (const CppTools::AbstractEditorSupport *abstractEditor) {
|
||||
return ClangBackEnd::V2::FileContainer(ClangBackEnd::FilePath(abstractEditor->fileName()),
|
||||
Utils::SmallString::fromQByteArray(abstractEditor->contents()),
|
||||
{});
|
||||
auto toFileContainer = [&](const CppTools::AbstractEditorSupport *abstractEditor) {
|
||||
ClangBackEnd::FilePath filePath{abstractEditor->fileName()};
|
||||
ClangBackEnd::FilePathId filePathId = filePathCache.filePathId(filePath);
|
||||
return ClangBackEnd::V2::FileContainer(std::move(filePath),
|
||||
filePathId,
|
||||
Utils::SmallString::fromQByteArray(
|
||||
abstractEditor->contents()),
|
||||
{});
|
||||
};
|
||||
|
||||
std::transform(abstractEditors.begin(),
|
||||
@@ -76,9 +81,12 @@ QtCreatorRefactoringProjectUpdater::QtCreatorRefactoringProjectUpdater(
|
||||
connectToCppModelManager();
|
||||
}
|
||||
|
||||
void QtCreatorRefactoringProjectUpdater::abstractEditorUpdated(const QString &filePath, const QByteArray &contents)
|
||||
void QtCreatorRefactoringProjectUpdater::abstractEditorUpdated(const QString &qFilePath,
|
||||
const QByteArray &contents)
|
||||
{
|
||||
RefactoringProjectUpdater::updateGeneratedFiles({{ClangBackEnd::FilePath{filePath}, contents}});
|
||||
ClangBackEnd::FilePath filePath{qFilePath};
|
||||
ClangBackEnd::FilePathId filePathId = m_filePathCache.filePathId(filePath);
|
||||
RefactoringProjectUpdater::updateGeneratedFiles({{std::move(filePath), filePathId, contents}});
|
||||
}
|
||||
|
||||
void QtCreatorRefactoringProjectUpdater::abstractEditorRemoved(const QString &filePath)
|
||||
@@ -88,7 +96,7 @@ void QtCreatorRefactoringProjectUpdater::abstractEditorRemoved(const QString &fi
|
||||
|
||||
void QtCreatorRefactoringProjectUpdater::connectToCppModelManager()
|
||||
{
|
||||
RefactoringProjectUpdater::updateGeneratedFiles(createGeneratedFiles());
|
||||
RefactoringProjectUpdater::updateGeneratedFiles(createGeneratedFiles(m_filePathCache));
|
||||
|
||||
QObject::connect(cppModelManager(),
|
||||
&CppTools::CppModelManager::abstractEditorSupportContentsUpdated,
|
||||
|
||||
Reference in New Issue
Block a user