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:
@@ -736,17 +736,17 @@ FileInfos ClangTool::collectFileInfos(Project *project, FileSelection fileSelect
|
||||
return {};
|
||||
}
|
||||
|
||||
auto projectInfo = CppTools::CppModelManager::instance()->projectInfo(project);
|
||||
QTC_ASSERT(projectInfo.isValid(), return FileInfos());
|
||||
const auto projectInfo = CppTools::CppModelManager::instance()->projectInfo(project);
|
||||
QTC_ASSERT(projectInfo, return FileInfos());
|
||||
|
||||
const FileInfos allFileInfos = sortedFileInfos(projectInfo.projectParts());
|
||||
const FileInfos allFileInfos = sortedFileInfos(projectInfo->projectParts());
|
||||
|
||||
if (selectionType && *selectionType == FileSelectionType::AllFiles)
|
||||
return allFileInfos;
|
||||
|
||||
if (selectionType && *selectionType == FileSelectionType::AskUser) {
|
||||
static int initialProviderIndex = 0;
|
||||
SelectableFilesDialog dialog(projectInfo,
|
||||
SelectableFilesDialog dialog(project,
|
||||
fileInfoProviders(project, allFileInfos),
|
||||
initialProviderIndex);
|
||||
if (dialog.exec() == QDialog::Rejected)
|
||||
@@ -875,7 +875,7 @@ static bool canAnalyzeProject(Project *project)
|
||||
const bool projectSupportsLanguage = project->projectLanguages().contains(c)
|
||||
|| project->projectLanguages().contains(cxx);
|
||||
return projectSupportsLanguage
|
||||
&& CppModelManager::instance()->projectInfo(project).isValid()
|
||||
&& CppModelManager::instance()->projectInfo(project)
|
||||
&& ToolChainKitAspect::cxxToolChain(target->kit());
|
||||
}
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user