aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOswald Buddenhagen <[email protected]>2010-11-08 19:54:19 +0100
committerOswald Buddenhagen <[email protected]>2010-11-17 13:19:06 +0100
commitdc3ab5bf85d6ce9be2131f1a299731288d37c923 (patch)
treeb62d6743d23ebfed8a813e2c9be4f0915d68f078
parent9bd95ade0853ff7fb3295c8e119232820be7139b (diff)
refactor VariableManager
make it provide a macroExpander() instead of a resolve() function. this detaches the actual variable management from the string manipulation.
-rw-r--r--src/plugins/coreplugin/variablemanager.cpp32
-rw-r--r--src/plugins/coreplugin/variablemanager.h6
-rw-r--r--src/plugins/genericprojectmanager/genericmakestep.cpp18
3 files changed, 32 insertions, 24 deletions
diff --git a/src/plugins/coreplugin/variablemanager.cpp b/src/plugins/coreplugin/variablemanager.cpp
index ffe74597fc0..b82db3ad744 100644
--- a/src/plugins/coreplugin/variablemanager.cpp
+++ b/src/plugins/coreplugin/variablemanager.cpp
@@ -32,6 +32,7 @@
#include "editormanager/ieditor.h"
#include "editormanager/editormanager.h"
+#include <utils/stringutils.h>
#include <utils/qtcassert.h>
#include <QtCore/QFileInfo>
@@ -41,6 +42,15 @@
namespace Core {
+class VMMapExpander : public Utils::AbstractQtcMacroExpander {
+public:
+ virtual bool resolveMacro(const QString &name, QString *ret)
+ {
+ *ret = Core::VariableManager::instance()->value(name);
+ return !ret->isEmpty();
+ }
+};
+
class VariableManagerPrivate : public QObject
{
Q_OBJECT
@@ -54,7 +64,8 @@ public slots:
void updateCurrentDocument(Core::IEditor *editor);
public:
- QMap<QString, QString> m_map;
+ QHash<QString, QString> m_map;
+ VMMapExpander m_macroExpander;
static VariableManager *m_instance;
};
@@ -144,20 +155,6 @@ QString VariableManager::value(const QString &variable, const QString &defaultVa
return d->m_map.value(variable, defaultValue);
}
-QString VariableManager::resolve(const QString &stringWithVariables) const
-{
- QString result = stringWithVariables;
- QMapIterator<QString, QString> i(d->m_map);
- while (i.hasNext()) {
- i.next();
- QString key = QLatin1String("%{");
- key += i.key();
- key += QLatin1Char('}');
- result.replace(key, i.value());
- }
- return result;
-}
-
void VariableManager::insert(const QString &variable, const QString &value)
{
d->insert(variable, value);
@@ -178,6 +175,11 @@ bool VariableManager::remove(const QString &variable)
return d->remove(variable);
}
+Utils::AbstractMacroExpander *VariableManager::macroExpander()
+{
+ return &d->m_macroExpander;
+}
+
VariableManager* VariableManager::instance()
{
return VariableManagerPrivate::m_instance;
diff --git a/src/plugins/coreplugin/variablemanager.h b/src/plugins/coreplugin/variablemanager.h
index ea033ea7cc2..805eb806a77 100644
--- a/src/plugins/coreplugin/variablemanager.h
+++ b/src/plugins/coreplugin/variablemanager.h
@@ -39,6 +39,10 @@ QT_BEGIN_NAMESPACE
class QFileInfo;
QT_END_NAMESPACE
+namespace Utils {
+class AbstractMacroExpander;
+}
+
namespace Core {
class VariableManagerPrivate;
@@ -58,7 +62,7 @@ public:
QString value(const QString &variable) const;
QString value(const QString &variable, const QString &defaultValue) const;
bool remove(const QString &variable);
- QString resolve(const QString &stringWithVariables) const;
+ Utils::AbstractMacroExpander *macroExpander();
private:
QScopedPointer<VariableManagerPrivate> d;
diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp
index 1c727de628c..5776f2593e8 100644
--- a/src/plugins/genericprojectmanager/genericmakestep.cpp
+++ b/src/plugins/genericprojectmanager/genericmakestep.cpp
@@ -40,6 +40,7 @@
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/gnumakeparser.h>
#include <coreplugin/variablemanager.h>
+#include <utils/stringutils.h>
#include <utils/qtcassert.h>
#include <QtGui/QFormLayout>
@@ -102,9 +103,8 @@ bool GenericMakeStep::init()
GenericBuildConfiguration *bc = genericBuildConfiguration();
setEnabled(true);
- Core::VariableManager *vm = Core::VariableManager::instance();
- const QString rawBuildDir = bc->buildDirectory();
- const QString buildDir = vm->resolve(rawBuildDir);
+ QString buildDir = bc->buildDirectory();
+ Utils::expandMacros(&buildDir, Core::VariableManager::instance()->macroExpander());
setWorkingDirectory(buildDir);
setCommand(makeCommand());
@@ -140,15 +140,17 @@ bool GenericMakeStep::fromMap(const QVariantMap &map)
QStringList GenericMakeStep::replacedArguments() const
{
- Core::VariableManager *vm = Core::VariableManager::instance();
+ Utils::AbstractMacroExpander *mx = Core::VariableManager::instance()->macroExpander();
const QStringList targets = m_buildTargets;
QStringList arguments = m_makeArguments;
QStringList replacedArguments;
- foreach (const QString &arg, arguments) {
- replacedArguments.append(vm->resolve(arg));
+ foreach (QString arg, arguments) {
+ Utils::expandMacros(&arg, mx);
+ replacedArguments << arg;
}
- foreach (const QString &arg, targets) {
- replacedArguments.append(vm->resolve(arg));
+ foreach (QString arg, targets) {
+ Utils::expandMacros(&arg, mx);
+ replacedArguments << arg;
}
return replacedArguments;
}