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:
@@ -76,10 +76,15 @@ void ClangCodeModelPlugin::generateCompilationDB()
|
||||
if (!target)
|
||||
return;
|
||||
|
||||
const auto projectInfo = CppModelManager::instance()->projectInfo(target->project());
|
||||
if (!projectInfo)
|
||||
return;
|
||||
|
||||
QFuture<GenerateCompilationDbResult> task
|
||||
= QtConcurrent::run(&Internal::generateCompilationDB,
|
||||
CppModelManager::instance()->projectInfo(target->project()),
|
||||
CompilationDbPurpose::Project);
|
||||
= QtConcurrent::run(&Internal::generateCompilationDB, projectInfo,
|
||||
CompilationDbPurpose::Project,
|
||||
warningsConfigForProject(target->project()),
|
||||
optionsForProject(target->project()));
|
||||
Core::ProgressManager::addTask(task, tr("Generating Compilation DB"), "generate compilation db");
|
||||
m_generatorWatcher.setFuture(task);
|
||||
}
|
||||
@@ -89,8 +94,8 @@ static bool isDBGenerationEnabled(ProjectExplorer::Project *project)
|
||||
using namespace CppTools;
|
||||
if (!project)
|
||||
return false;
|
||||
ProjectInfo projectInfo = CppModelManager::instance()->projectInfo(project);
|
||||
return projectInfo.isValid() && !projectInfo.projectParts().isEmpty();
|
||||
const ProjectInfo::Ptr projectInfo = CppModelManager::instance()->projectInfo(project);
|
||||
return projectInfo && !projectInfo->projectParts().isEmpty();
|
||||
}
|
||||
|
||||
ClangCodeModelPlugin::~ClangCodeModelPlugin()
|
||||
|
||||
Reference in New Issue
Block a user