Commit cac28198 authored by Tobias Hunger's avatar Tobias Hunger
Browse files

Fix crashes when no default profile is set



* Handle 0 when calling createTarget to avoid the crashes in the first place
* Do not try to create/add targets for 0 profiles to avoid creator writing
  a warning to the console
* Fix possible crashes in debugger when no default profile is set.

Task-number: QTCREATORBUG-7695
Change-Id: I9afc8e29c8b859ad078dad794ef5017168daac78
Reviewed-by: Orgad Shaneh's avatarOrgad Shaneh <orgads@gmail.com>
Reviewed-by: default avatarEike Ziller <eike.ziller@nokia.com>
parent 240e6a8a
......@@ -158,8 +158,9 @@ bool AutotoolsProject::fromMap(const QVariantMap &map)
// Load the project tree structure.
evaluateBuildSystem();
if (!activeTarget())
addTarget(createTarget(ProfileManager::instance()->defaultProfile()));
Profile *defaultProfile = ProfileManager::instance()->defaultProfile();
if (!activeTarget() && defaultProfile)
addTarget(createTarget(defaultProfile));
return true;
}
......
......@@ -539,8 +539,9 @@ bool CMakeProject::fromMap(const QVariantMap &map)
if (!Project::fromMap(map))
return false;
if (!activeTarget())
addTarget(createTarget(ProfileManager::instance()->defaultProfile()));
Profile *defaultProfile = ProfileManager::instance()->defaultProfile();
if (!activeTarget() && defaultProfile)
addTarget(createTarget(defaultProfile));
// We have a user file, but we could still be missing the cbp file
// or simply run createXml with the saved settings
......
......@@ -1317,7 +1317,8 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
return false;
}
DebuggerStartParameters sp;
fillParameters(&sp, ProfileManager::instance()->defaultProfile()->id());
Profile *defaultProfile = ProfileManager::instance()->defaultProfile();
fillParameters(&sp, defaultProfile ? defaultProfile->id() : Core::Id());
qulonglong pid = it->toULongLong();
if (pid) {
sp.startMode = AttachExternal;
......
......@@ -877,7 +877,7 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu
Target *target = runConfiguration->target();
Profile *profile = target ? target->profile() : ProfileManager::instance()->defaultProfile();
fillParameters(&sp, profile->id());
fillParameters(&sp, profile ? profile->id() : Core::Id());
sp.environment = rc->environment();
sp.workingDirectory = rc->workingDirectory();
......
......@@ -429,8 +429,9 @@ bool GenericProject::fromMap(const QVariantMap &map)
if (!Project::fromMap(map))
return false;
if (!activeTarget())
addTarget(createTarget(ProfileManager::instance()->defaultProfile()));
Profile *defaultProfile = ProfileManager::instance()->defaultProfile();
if (!activeTarget() && defaultProfile)
addTarget(createTarget(defaultProfile));
// Sanity check: We need both a buildconfiguration and a runconfiguration!
QList<Target *> targetList = targets();
......
......@@ -248,7 +248,7 @@ bool Project::supportsProfile(Profile *p) const
Target *Project::createTarget(Profile *p)
{
if (target(p))
if (!p || target(p))
return 0;
Target *t = new Target(this, p);
......
......@@ -300,8 +300,9 @@ bool QmlProject::fromMap(const QVariantMap &map)
if (!Project::fromMap(map))
return false;
if (!activeTarget())
addTarget(createTarget(ProjectExplorer::ProfileManager::instance()->defaultProfile()));
ProjectExplorer::Profile *defaultProfile = ProjectExplorer::ProfileManager::instance()->defaultProfile();
if (!activeTarget() && defaultProfile)
addTarget(createTarget(defaultProfile));
refresh(Everything);
// FIXME workaround to guarantee that run/debug actions are enabled if a valid file exists
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment