QScriptValue Transformer::translateInOutputs(ScriptEngine *scriptEngine, const ArtifactSet &artifacts, const QString &defaultModuleName) { using TagArtifactsMap = QMap<QString, QList<Artifact*>>; TagArtifactsMap tagArtifactsMap; for (Artifact *artifact : artifacts) for (const FileTag &fileTag : artifact->fileTags()) tagArtifactsMap[fileTag.toString()].push_back(artifact); for (TagArtifactsMap::Iterator it = tagArtifactsMap.begin(); it != tagArtifactsMap.end(); ++it) std::sort(it.value().begin(), it.value().end(), compareByFilePath); QScriptValue jsTagFiles = scriptEngine->newObject(); for (TagArtifactsMap::const_iterator tag = tagArtifactsMap.constBegin(); tag != tagArtifactsMap.constEnd(); ++tag) { const QList<Artifact*> &artifacts = tag.value(); QScriptValue jsFileConfig = scriptEngine->newArray(artifacts.size()); int i = 0; for (Artifact * const artifact : artifacts) { jsFileConfig.setProperty(i++, translateFileConfig(scriptEngine, artifact, defaultModuleName)); } jsTagFiles.setProperty(tag.key(), jsFileConfig); } return jsTagFiles; }
void Transformer::setupInputs(QScriptValue targetScriptValue, const ArtifactSet &inputs, const QString &defaultModuleName) { const auto scriptEngine = static_cast<ScriptEngine *>(targetScriptValue.engine()); QScriptValue scriptValue = translateInOutputs(scriptEngine, inputs, defaultModuleName); targetScriptValue.setProperty(StringConstants::inputsVar(), scriptValue); QScriptValue inputScriptValue; if (inputs.size() == 1) { Artifact *input = *inputs.cbegin(); const FileTags &fileTags = input->fileTags(); QBS_ASSERT(!fileTags.empty(), return); QScriptValue inputsForFileTag = scriptValue.property(fileTags.cbegin()->toString()); inputScriptValue = inputsForFileTag.property(0); }