Move Project::makeUnique to Utils

This is more generic than projects

Change-Id: Ifdbc57ff48f9fd4a40e6149ba636e0a55cbac502
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Eike Ziller
2018-03-28 16:03:11 +02:00
parent 7160b83589
commit ab7960f6cf
8 changed files with 33 additions and 29 deletions

View File

@@ -27,9 +27,11 @@
#include "utils_global.h" #include "utils_global.h"
#include <QList>
#include <QString>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QJsonValue; class QJsonValue;
class QStringList;
QT_END_NAMESPACE QT_END_NAMESPACE
namespace Utils { namespace Utils {
@@ -86,4 +88,18 @@ QTCREATOR_UTILS_EXPORT QString expandMacros(const QString &str, AbstractMacroExp
QTCREATOR_UTILS_EXPORT int parseUsedPortFromNetstatOutput(const QByteArray &line); QTCREATOR_UTILS_EXPORT int parseUsedPortFromNetstatOutput(const QByteArray &line);
template<typename T, typename Container>
T makeUniquelyNumbered(const T &preferred, const Container &reserved)
{
if (!reserved.contains(preferred))
return preferred;
int i = 2;
T tryName = preferred + QString::number(i);
while (reserved.contains(tryName))
tryName = preferred + QString::number(++i);
return tryName;
}
} // namespace Utils } // namespace Utils

View File

@@ -29,12 +29,12 @@
#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/projectexplorericons.h> #include <projectexplorer/projectexplorericons.h>
#include <projectexplorer/project.h>
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <utils/environment.h> #include <utils/environment.h>
#include <utils/detailswidget.h> #include <utils/detailswidget.h>
#include <utils/pathchooser.h> #include <utils/pathchooser.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/stringutils.h>
#include <utils/treemodel.h> #include <utils/treemodel.h>
#include <QCheckBox> #include <QCheckBox>
@@ -317,7 +317,7 @@ QString CMakeToolItemModel::uniqueDisplayName(const QString &base) const
{ {
QStringList names; QStringList names;
forItemsAtLevel<2>([&names](CMakeToolTreeItem *item) { names << item->m_name; }); forItemsAtLevel<2>([&names](CMakeToolTreeItem *item) { names << item->m_name; });
return ProjectExplorer::Project::makeUnique(base, names); return Utils::makeUniquelyNumbered(base, names);
} }
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------

View File

@@ -26,7 +26,6 @@
#include "buildsettingspropertiespage.h" #include "buildsettingspropertiespage.h"
#include "buildinfo.h" #include "buildinfo.h"
#include "buildstepspage.h" #include "buildstepspage.h"
#include "project.h"
#include "target.h" #include "target.h"
#include "buildconfiguration.h" #include "buildconfiguration.h"
#include "projectconfigurationmodel.h" #include "projectconfigurationmodel.h"
@@ -36,6 +35,7 @@
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <projectexplorer/projectexplorer.h> #include <projectexplorer/projectexplorer.h>
#include <projectexplorer/buildmanager.h> #include <projectexplorer/buildmanager.h>
#include <utils/stringutils.h>
#include <QMargins> #include <QMargins>
#include <QCoreApplication> #include <QCoreApplication>
@@ -269,7 +269,7 @@ QString BuildSettingsWidget::uniqueName(const QString & name)
continue; continue;
bcNames.append(bc->displayName()); bcNames.append(bc->displayName());
} }
result = Project::makeUnique(result, bcNames); result = Utils::makeUniquelyNumbered(result, bcNames);
} }
return result; return result;
} }

View File

@@ -30,14 +30,14 @@
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <coreplugin/messagemanager.h> #include <coreplugin/messagemanager.h>
#include <projectexplorer/project.h>
#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorerconstants.h>
#include <ssh/sshhostkeydatabase.h> #include <ssh/sshhostkeydatabase.h>
#include <utils/algorithm.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/persistentsettings.h> #include <utils/persistentsettings.h>
#include <utils/qtcassert.h>
#include <utils/portlist.h> #include <utils/portlist.h>
#include <utils/algorithm.h> #include <utils/qtcassert.h>
#include <utils/stringutils.h>
#include <QFileInfo> #include <QFileInfo>
#include <QHash> #include <QHash>
@@ -244,7 +244,7 @@ void DeviceManager::addDevice(const IDevice::ConstPtr &_device)
names << tmp->displayName(); names << tmp->displayName();
} }
device->setDisplayName(Project::makeUnique(device->displayName(), names)); device->setDisplayName(Utils::makeUniquelyNumbered(device->displayName(), names));
const int pos = d->indexForId(device->id()); const int pos = d->indexForId(device->id());

View File

@@ -239,17 +239,6 @@ bool Project::hasActiveBuildSettings() const
return activeTarget() && IBuildConfigurationFactory::find(activeTarget()); return activeTarget() && IBuildConfigurationFactory::find(activeTarget());
} }
QString Project::makeUnique(const QString &preferredName, const QStringList &usedNames)
{
if (!usedNames.contains(preferredName))
return preferredName;
int i = 2;
QString tryName = preferredName + QString::number(i);
while (usedNames.contains(tryName))
tryName = preferredName + QString::number(++i);
return tryName;
}
void Project::addTarget(Target *t) void Project::addTarget(Target *t)
{ {
QTC_ASSERT(t && !d->m_targets.contains(t), return); QTC_ASSERT(t && !d->m_targets.contains(t), return);

View File

@@ -141,8 +141,6 @@ public:
virtual QStringList filesGeneratedFrom(const QString &sourceFile) const; virtual QStringList filesGeneratedFrom(const QString &sourceFile) const;
bool isKnownFile(const Utils::FileName &filename) const; bool isKnownFile(const Utils::FileName &filename) const;
static QString makeUnique(const QString &preferredName, const QStringList &usedNames);
virtual QVariantMap toMap() const; virtual QVariantMap toMap() const;
Core::Context projectContext() const; Core::Context projectContext() const;

View File

@@ -29,7 +29,6 @@
#include "deployconfiguration.h" #include "deployconfiguration.h"
#include "runconfiguration.h" #include "runconfiguration.h"
#include "target.h" #include "target.h"
#include "project.h"
#include "projectconfigurationmodel.h" #include "projectconfigurationmodel.h"
#include "session.h" #include "session.h"
@@ -38,6 +37,7 @@
#include <projectexplorer/buildmanager.h> #include <projectexplorer/buildmanager.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/stringutils.h>
#include <utils/utilsicons.h> #include <utils/utilsicons.h>
#include <QVariant> #include <QVariant>
@@ -506,7 +506,7 @@ QString RunSettingsWidget::uniqueDCName(const QString &name)
continue; continue;
dcNames.append(dc->displayName()); dcNames.append(dc->displayName());
} }
result = Project::makeUnique(result, dcNames); result = Utils::makeUniquelyNumbered(result, dcNames);
} }
return result; return result;
} }
@@ -521,7 +521,7 @@ QString RunSettingsWidget::uniqueRCName(const QString &name)
continue; continue;
rcNames.append(rc->displayName()); rcNames.append(rc->displayName());
} }
result = Project::makeUnique(result, rcNames); result = Utils::makeUniquelyNumbered(result, rcNames);
} }
return result; return result;
} }

View File

@@ -44,8 +44,9 @@
#include <projectexplorer/projectexplorericons.h> #include <projectexplorer/projectexplorericons.h>
#include <extensionsystem/pluginmanager.h> #include <extensionsystem/pluginmanager.h>
#include <projectexplorer/projectexplorer.h> #include <projectexplorer/projectexplorer.h>
#include <utils/qtcassert.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/qtcassert.h>
#include <utils/stringutils.h>
#include <QDebug> #include <QDebug>
#include <QIcon> #include <QIcon>
@@ -190,7 +191,7 @@ void Target::addBuildConfiguration(BuildConfiguration *bc)
// Check that we don't have a configuration with the same displayName // Check that we don't have a configuration with the same displayName
QString configurationDisplayName = bc->displayName(); QString configurationDisplayName = bc->displayName();
QStringList displayNames = Utils::transform(d->m_buildConfigurations, &BuildConfiguration::displayName); QStringList displayNames = Utils::transform(d->m_buildConfigurations, &BuildConfiguration::displayName);
configurationDisplayName = Project::makeUnique(configurationDisplayName, displayNames); configurationDisplayName = Utils::makeUniquelyNumbered(configurationDisplayName, displayNames);
if (configurationDisplayName != bc->displayName()) { if (configurationDisplayName != bc->displayName()) {
if (bc->usesDefaultDisplayName()) if (bc->usesDefaultDisplayName())
bc->setDefaultDisplayName(configurationDisplayName); bc->setDefaultDisplayName(configurationDisplayName);
@@ -265,7 +266,7 @@ void Target::addDeployConfiguration(DeployConfiguration *dc)
// Check that we don't have a configuration with the same displayName // Check that we don't have a configuration with the same displayName
QString configurationDisplayName = dc->displayName(); QString configurationDisplayName = dc->displayName();
QStringList displayNames = Utils::transform(d->m_deployConfigurations, &DeployConfiguration::displayName); QStringList displayNames = Utils::transform(d->m_deployConfigurations, &DeployConfiguration::displayName);
configurationDisplayName = Project::makeUnique(configurationDisplayName, displayNames); configurationDisplayName = Utils::makeUniquelyNumbered(configurationDisplayName, displayNames);
dc->setDisplayName(configurationDisplayName); dc->setDisplayName(configurationDisplayName);
// add it // add it
@@ -376,7 +377,7 @@ void Target::addRunConfiguration(RunConfiguration *rc)
// Check that we don't have a configuration with the same displayName // Check that we don't have a configuration with the same displayName
QString configurationDisplayName = rc->displayName(); QString configurationDisplayName = rc->displayName();
QStringList displayNames = Utils::transform(d->m_runConfigurations, &RunConfiguration::displayName); QStringList displayNames = Utils::transform(d->m_runConfigurations, &RunConfiguration::displayName);
configurationDisplayName = Project::makeUnique(configurationDisplayName, displayNames); configurationDisplayName = Utils::makeUniquelyNumbered(configurationDisplayName, displayNames);
rc->setDisplayName(configurationDisplayName); rc->setDisplayName(configurationDisplayName);
d->m_runConfigurations.push_back(rc); d->m_runConfigurations.push_back(rc);