diff options
author | Marco Bubke <marco.bubke@qt.io> | 2019-02-07 12:20:51 +0100 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2019-02-12 14:02:02 +0000 |
commit | 97ec6b9ad2bb6859516928db0f98b740d8f72590 (patch) | |
tree | e8340e8ca90859252e00cde06c4e0bc321c5aae5 /src/tools/clangrefactoringbackend/source/symbolindexer.cpp | |
parent | c52c531c3f3ec84215caaae6ee720207c9f432cb (diff) | |
download | qt-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.cpp | 57 |
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)); |