summaryrefslogtreecommitdiff
path: root/src/tools/clangrefactoringbackend/source/symbolindexer.cpp
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2019-02-07 12:20:51 +0100
committerMarco Bubke <marco.bubke@qt.io>2019-02-12 14:02:02 +0000
commit97ec6b9ad2bb6859516928db0f98b740d8f72590 (patch)
treee8340e8ca90859252e00cde06c4e0bc321c5aae5 /src/tools/clangrefactoringbackend/source/symbolindexer.cpp
parentc52c531c3f3ec84215caaae6ee720207c9f432cb (diff)
downloadqt-creator-97ec6b9ad2bb6859516928db0f98b740d8f72590.tar.gz
ClangRefactoring: Don't update the database if something went wrong
We can get an compile error. In that case we should not update the database. In the future we should have a mechanism to report about the database state. Task-number: QTCREATORBUG-21949 Change-Id: I203346d536b007171f7bf255047409431c44a85a Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src/tools/clangrefactoringbackend/source/symbolindexer.cpp')
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolindexer.cpp57
1 files changed, 33 insertions, 24 deletions
diff --git a/src/tools/clangrefactoringbackend/source/symbolindexer.cpp b/src/tools/clangrefactoringbackend/source/symbolindexer.cpp
index d3d0f4a505..2b4e90cf5a 100644
--- a/src/tools/clangrefactoringbackend/source/symbolindexer.cpp
+++ b/src/tools/clangrefactoringbackend/source/symbolindexer.cpp
@@ -117,27 +117,32 @@ void SymbolIndexer::updateProjectPart(ProjectPartContainer &&projectPart)
std::vector<SymbolIndexerTask> symbolIndexerTask;
symbolIndexerTask.reserve(projectPart.sourcePathIds.size());
for (FilePathId sourcePathId : projectPart.sourcePathIds) {
- auto indexing = [projectPartId, arguments = commandLineBuilder.commandLine, sourcePathId, this](
- SymbolsCollectorInterface &symbolsCollector) {
+ auto indexing = [projectPartId,
+ arguments = commandLineBuilder.commandLine,
+ sourcePathId,
+ this](SymbolsCollectorInterface &symbolsCollector) {
symbolsCollector.setFile(sourcePathId, arguments);
- symbolsCollector.collectSymbols();
+ bool success = symbolsCollector.collectSymbols();
- Sqlite::ImmediateTransaction transaction{m_transactionInterface};
+ if (success) {
+ Sqlite::ImmediateTransaction transaction{m_transactionInterface};
- m_symbolStorage.addSymbolsAndSourceLocations(symbolsCollector.symbols(),
- symbolsCollector.sourceLocations());
+ m_symbolStorage.addSymbolsAndSourceLocations(symbolsCollector.symbols(),
+ symbolsCollector.sourceLocations());
- m_symbolStorage.updateProjectPartSources(projectPartId, symbolsCollector.sourceFiles());
+ m_symbolStorage.updateProjectPartSources(projectPartId,
+ symbolsCollector.sourceFiles());
- m_buildDependencyStorage.insertOrUpdateUsedMacros(symbolsCollector.usedMacros());
+ m_buildDependencyStorage.insertOrUpdateUsedMacros(symbolsCollector.usedMacros());
- m_buildDependencyStorage.insertFileStatuses(symbolsCollector.fileStatuses());
+ m_buildDependencyStorage.insertFileStatuses(symbolsCollector.fileStatuses());
- m_buildDependencyStorage.insertOrUpdateSourceDependencies(
- symbolsCollector.sourceDependencies());
+ m_buildDependencyStorage.insertOrUpdateSourceDependencies(
+ symbolsCollector.sourceDependencies());
- transaction.commit();
+ transaction.commit();
+ }
};
symbolIndexerTask.emplace_back(sourcePathId, projectPartId, std::move(indexing));
@@ -185,27 +190,31 @@ void SymbolIndexer::updateChangedPath(FilePathId filePathId,
CommandLineBuilder<ProjectPartArtefact, Utils::SmallStringVector>
builder{artefact, artefact.toolChainArguments, InputFileType::Source, {}, {}, pchPath};
- auto indexing = [projectPartId = artefact.projectPartId, arguments=builder.commandLine, filePathId, this](
- SymbolsCollectorInterface &symbolsCollector) {
+ auto indexing = [projectPartId = artefact.projectPartId,
+ arguments = builder.commandLine,
+ filePathId,
+ this](SymbolsCollectorInterface &symbolsCollector) {
symbolsCollector.setFile(filePathId, arguments);
- symbolsCollector.collectSymbols();
+ bool success = symbolsCollector.collectSymbols();
- Sqlite::ImmediateTransaction transaction{m_transactionInterface};
+ if (success) {
+ Sqlite::ImmediateTransaction transaction{m_transactionInterface};
- m_symbolStorage.addSymbolsAndSourceLocations(symbolsCollector.symbols(),
- symbolsCollector.sourceLocations());
+ m_symbolStorage.addSymbolsAndSourceLocations(symbolsCollector.symbols(),
+ symbolsCollector.sourceLocations());
- m_symbolStorage.updateProjectPartSources(projectPartId, symbolsCollector.sourceFiles());
+ m_symbolStorage.updateProjectPartSources(projectPartId, symbolsCollector.sourceFiles());
- m_buildDependencyStorage.insertOrUpdateUsedMacros(symbolsCollector.usedMacros());
+ m_buildDependencyStorage.insertOrUpdateUsedMacros(symbolsCollector.usedMacros());
- m_buildDependencyStorage.insertFileStatuses(symbolsCollector.fileStatuses());
+ m_buildDependencyStorage.insertFileStatuses(symbolsCollector.fileStatuses());
- m_buildDependencyStorage.insertOrUpdateSourceDependencies(
- symbolsCollector.sourceDependencies());
+ m_buildDependencyStorage.insertOrUpdateSourceDependencies(
+ symbolsCollector.sourceDependencies());
- transaction.commit();
+ transaction.commit();
+ }
};
symbolIndexerTask.emplace_back(filePathId, optionalArtefact->projectPartId, std::move(indexing));