diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfilegenerator.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardfilegenerator.cpp
index 9898501bfa5..9eeed19cef3 100644
--- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfilegenerator.cpp
+++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfilegenerator.cpp
@@ -100,7 +100,7 @@ bool JsonWizardFileGenerator::setup(const QVariant &data, QString *errorMessage)
File f;
- QVariantMap tmp = d.toMap();
+ const QVariantMap tmp = d.toMap();
f.source = tmp.value(QLatin1String("source")).toString();
f.target = tmp.value(QLatin1String("target")).toString();
f.condition = tmp.value(QLatin1String("condition"), true);
@@ -109,6 +109,27 @@ bool JsonWizardFileGenerator::setup(const QVariant &data, QString *errorMessage)
f.openInEditor = tmp.value(QLatin1String("openInEditor"), false);
f.openAsProject = tmp.value(QLatin1String("openAsProject"), false);
+ const QVariant options = tmp.value(QLatin1String("options"));
+ if (!options.isNull()) {
+ const QVariantList optList = JsonWizardFactory::objectOrList(options, errorMessage);
+ if (optList.isEmpty())
+ return false;
+
+ foreach (const QVariant &o, optList) {
+ QVariantMap optionObject = o.toMap();
+ File::OptionDefinition odef;
+ odef.key = optionObject.value(QLatin1String("key")).toString();
+ odef.value = optionObject.value(QLatin1String("value")).toString();
+ odef.condition = optionObject.value(QLatin1String("condition"), QLatin1String("true")).toString();
+ if (odef.key.isEmpty()) {
+ *errorMessage = QCoreApplication::translate("ProjectExplorer::Internal::JsonWizardFileGenerator",
+ "No 'key' in options object.");
+ return false;
+ }
+ f.options.append(odef);
+ }
+ }
+
if (f.source.isEmpty() && f.target.isEmpty()) {
*errorMessage = QCoreApplication::translate("ProjectExplorer::JsonFieldPage",
"Source and target are both empty.");
@@ -165,7 +186,23 @@ Core::GeneratedFiles JsonWizardFileGenerator::fileList(Utils::MacroExpander *exp
} else {
// TODO: Document that input files are UTF8 encoded!
gf.setBinary(false);
- gf.setContents(processTextFileContents(expander, QString::fromUtf8(reader.data()), errorMessage));
+ Utils::MacroExpander nested;
+ const File *fPtr = &f;
+ Utils::MacroExpander *thisExpander = &nested;
+ nested.registerExtraResolver([fPtr, thisExpander](QString n, QString *ret) -> bool {
+ foreach (const File::OptionDefinition &od, fPtr->options) {
+ if (!JsonWizard::boolFromVariant(od.condition, thisExpander))
+ continue;
+ if (n == od.key) {
+ *ret = od.value;
+ return true;
+ }
+ }
+ return false;
+ });
+ nested.registerExtraResolver([expander](QString n, QString *ret) { return expander->resolveMacro(n, ret); });
+
+ gf.setContents(processTextFileContents(&nested, QString::fromUtf8(reader.data()), errorMessage));
if (!errorMessage->isEmpty()) {
*errorMessage = QCoreApplication::translate("ProjectExplorer::JsonWizard", "When processing \"%1\":
%2")
.arg(sourcePath, *errorMessage);
diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfilegenerator.h b/src/plugins/projectexplorer/jsonwizard/jsonwizardfilegenerator.h
index 2a66f496230..03ee2dc557b 100644
--- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfilegenerator.h
+++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfilegenerator.h
@@ -65,6 +65,14 @@ private:
QVariant overwrite;
QVariant openInEditor;
QVariant openAsProject;
+
+ class OptionDefinition {
+ public:
+ QString key;
+ QString value;
+ QString condition;
+ };
+ QList options;
};
QList m_fileList;