forked from qt-creator/qt-creator
ProjectExplorer: Move re-runnable decision to RunWorkers
A RunControl is re-runnable if all its workers are, a RunWorker is re-runnable if it's Stopped and unless it says otherwise. Also ensure SimpleTargetRunner only reportStop() once per run and make process error message re-usable. Change-Id: I73f5fb724d3026ceb81d5e32a3a71b4814b2bca9 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -116,6 +116,7 @@ void DebuggerRunTool::start()
|
||||
TaskHub::clearTasks(Debugger::Constants::TASK_CATEGORY_DEBUGGER_DEBUGINFO);
|
||||
TaskHub::clearTasks(Debugger::Constants::TASK_CATEGORY_DEBUGGER_RUNTIME);
|
||||
|
||||
setupEngine();
|
||||
DebuggerEngine *engine = m_engine;
|
||||
|
||||
QTC_ASSERT(engine, return);
|
||||
@@ -493,6 +494,16 @@ DebuggerRunTool::DebuggerRunTool(RunControl *runControl)
|
||||
m_isQmlDebugging(qmlDebugging(runControl))
|
||||
{
|
||||
setDisplayName("DebuggerRunTool");
|
||||
runControl->setIcon(ProjectExplorer::Icons::DEBUG_START_SMALL_TOOLBAR);
|
||||
runControl->setPromptToStop([](bool *optionalPrompt) {
|
||||
return RunControl::showPromptToStopDialog(
|
||||
DebuggerRunTool::tr("Close Debugging Session"),
|
||||
DebuggerRunTool::tr("A debugging session is still in progress. "
|
||||
"Terminating the session in the current"
|
||||
" state can leave the target in an inconsistent state."
|
||||
" Would you still like to terminate it?"),
|
||||
QString(), QString(), optionalPrompt);
|
||||
});
|
||||
}
|
||||
|
||||
DebuggerRunTool::DebuggerRunTool(RunControl *runControl, const DebuggerStartParameters &sp, QString *errorMessage)
|
||||
@@ -514,30 +525,22 @@ void DebuggerRunTool::setStartParameters(const DebuggerStartParameters &sp, QStr
|
||||
|
||||
void DebuggerRunTool::setRunParameters(const DebuggerRunParameters &rp, QString *errorMessage)
|
||||
{
|
||||
Q_UNUSED(errorMessage);
|
||||
m_runParameters = rp;
|
||||
}
|
||||
|
||||
void DebuggerRunTool::setupEngine()
|
||||
{
|
||||
// QML and/or mixed are not prepared for it.
|
||||
setSupportsReRunning(!(m_runParameters.languages & QmlLanguage));
|
||||
|
||||
// FIXME: Disabled due to Android. Make Android device report available ports instead.
|
||||
// int portsUsed = portsUsedByDebugger();
|
||||
// if (portsUsed > device()->freePorts().count()) {
|
||||
// if (errorMessage)
|
||||
// *errorMessage = tr("Cannot debug: Not enough free ports available.");
|
||||
// reportFailure(tr("Cannot debug: Not enough free ports available."));
|
||||
// return;
|
||||
// }
|
||||
|
||||
m_runParameters = rp;
|
||||
|
||||
// QML and/or mixed are not prepared for it.
|
||||
runControl()->setSupportsReRunning(!(rp.languages & QmlLanguage));
|
||||
|
||||
runControl()->setIcon(ProjectExplorer::Icons::DEBUG_START_SMALL_TOOLBAR);
|
||||
runControl()->setPromptToStop([](bool *optionalPrompt) {
|
||||
return RunControl::showPromptToStopDialog(
|
||||
DebuggerRunTool::tr("Close Debugging Session"),
|
||||
DebuggerRunTool::tr("A debugging session is still in progress. "
|
||||
"Terminating the session in the current"
|
||||
" state can leave the target in an inconsistent state."
|
||||
" Would you still like to terminate it?"),
|
||||
QString(), QString(), optionalPrompt);
|
||||
});
|
||||
|
||||
if (Internal::fixupParameters(m_runParameters, runControl(), m_errors)) {
|
||||
m_engine = createEngine(m_runParameters.cppEngineType,
|
||||
m_runParameters.masterEngineType,
|
||||
@@ -545,9 +548,7 @@ void DebuggerRunTool::setRunParameters(const DebuggerRunParameters &rp, QString
|
||||
m_runParameters.useTerminal,
|
||||
&m_errors);
|
||||
if (!m_engine) {
|
||||
QString msg = m_errors.join('\n');
|
||||
if (errorMessage)
|
||||
*errorMessage = msg;
|
||||
reportFailure(m_errors.join('\n'));
|
||||
return;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user