forked from qt-creator/qt-creator
CppTools: Turn some classes into pure value types
ProjectInfo, ProjectPart and ProjectUpdateInfo used to carry pointers to Project and/or Toolchain, even though they were used in contexts where these pointers were either unsafe to access or not guaranteed to be valid anymore, which made their use difficult and error-prone. We turn these classes into pure value types by copying in all relevant information before the first async operation takes place. Fixes: QTCREATORBUG-25678 Change-Id: I1914b0dbda6c7dfba6c95e5e92f2d69977755590 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -26,6 +26,7 @@
|
||||
#include "clangeditordocumentprocessor.h"
|
||||
|
||||
#include "clangbackendcommunicator.h"
|
||||
#include "clangprojectsettings.h"
|
||||
#include "clangdiagnostictooltipwidget.h"
|
||||
#include "clangfixitoperation.h"
|
||||
#include "clangfixitoperationsextractor.h"
|
||||
@@ -463,11 +464,14 @@ void ClangEditorDocumentProcessor::updateBackendDocument(CppTools::ProjectPart &
|
||||
return;
|
||||
}
|
||||
|
||||
const auto clangOptions = createClangOptions(projectPart, filePath());
|
||||
m_diagnosticConfigId = clangOptions.first;
|
||||
ProjectExplorer::Project * const project = CppTools::projectForProjectPart(projectPart);
|
||||
const CppTools::ClangDiagnosticConfig config = warningsConfigForProject(project);
|
||||
const QStringList clangOptions = createClangOptions(projectPart, filePath(), config,
|
||||
optionsForProject(project));
|
||||
m_diagnosticConfigId = config.id();
|
||||
|
||||
m_communicator.documentsOpened(
|
||||
{fileContainerWithOptionsAndDocumentContent(clangOptions.second, projectPart.headerPaths)});
|
||||
{fileContainerWithOptionsAndDocumentContent(clangOptions, projectPart.headerPaths)});
|
||||
setLastSentDocumentRevision(filePath(), revision());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user