forked from qt-creator/qt-creator
Android: Use QVariant for targetData/setTargetData
This makes it more similar to the classic QAbstractItemModel::{data/setData} pattern and hides qmake-specific semantic (variables are QString*Lists*) behind something more general. Change-Id: I82d7006affd4af208be2b7640076698d13fd3a61 Reviewed-by: Vikas Pachdha <vikas.pachdha@qt.io>
This commit is contained in:
@@ -180,7 +180,7 @@ bool AndroidBuildApkStep::init(QList<const BuildStep *> &earlierSteps)
|
||||
&Utils::FileName::toString));
|
||||
|
||||
AndroidQtSupport *qtSupport = AndroidManager::androidQtSupport(target());
|
||||
QFileInfo sourceDirInfo(qtSupport->targetDataItem(Constants::AndroidPackageSourceDir, target()));
|
||||
QFileInfo sourceDirInfo(qtSupport->targetData(Constants::AndroidPackageSourceDir, target()).toString());
|
||||
parser->setSourceDirectory(Utils::FileName::fromString(sourceDirInfo.canonicalFilePath()));
|
||||
parser->setBuildDirectory(Utils::FileName::fromString(bc->buildDirectory().appendPath(Constants::ANDROID_BUILDDIRECTORY).toString()));
|
||||
setOutputParser(parser);
|
||||
@@ -202,7 +202,7 @@ bool AndroidBuildApkStep::init(QList<const BuildStep *> &earlierSteps)
|
||||
QString outputDir = bc->buildDirectory().appendPath(Constants::ANDROID_BUILDDIRECTORY).toString();
|
||||
|
||||
QString inputFile = AndroidManager::androidQtSupport(target())
|
||||
->targetDataItem(Constants::AndroidDeploySettingsFile, target());
|
||||
->targetData(Constants::AndroidDeploySettingsFile, target()).toString();
|
||||
if (inputFile.isEmpty()) {
|
||||
m_skipBuilding = true;
|
||||
return true;
|
||||
|
@@ -135,8 +135,9 @@ void AndroidDebugSupport::start()
|
||||
qCDebug(androidDebugSupportLog) << "C++ debugging enabled";
|
||||
AndroidQtSupport *qtSupport = AndroidManager::androidQtSupport(target);
|
||||
QStringList solibSearchPath = qtSupport->soLibSearchPath(target);
|
||||
QStringList extraLibs = qtSupport->targetData(Android::Constants::AndroidExtraLibs, target).toStringList();
|
||||
solibSearchPath.append(qtSoPaths(qtVersion));
|
||||
solibSearchPath.append(uniquePaths(qtSupport->targetData(Android::Constants::AndroidExtraLibs, target)));
|
||||
solibSearchPath.append(uniquePaths(extraLibs));
|
||||
setSolibSearchPath(solibSearchPath);
|
||||
qCDebug(androidDebugSupportLog) << "SoLibSearchPath: "<<solibSearchPath;
|
||||
setSymbolFile(target->activeBuildConfiguration()->buildDirectory().toString()
|
||||
|
@@ -191,7 +191,7 @@ bool AndroidDeployQtStep::init(QList<const BuildStep *> &earlierSteps)
|
||||
Utils::QtcProcess::addArg(&m_androiddeployqtArgs, m_workingDirectory);
|
||||
Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--no-build"));
|
||||
Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--input"));
|
||||
const QString jsonFile = qtSupport->targetDataItem(Constants::AndroidDeploySettingsFile, target());
|
||||
const QString jsonFile = qtSupport->targetData(Constants::AndroidDeploySettingsFile, target()).toString();
|
||||
if (jsonFile.isEmpty()) {
|
||||
emit addOutput(tr("Cannot find the androiddeploy Json file."), OutputFormat::Stderr);
|
||||
return false;
|
||||
|
@@ -93,7 +93,7 @@ void AndroidExtraLibraryListModel::updateModel()
|
||||
bool enabled;
|
||||
beginResetModel();
|
||||
if (qtSupport->validParse(m_target)) {
|
||||
m_entries = qtSupport->targetData(Constants::AndroidExtraLibs, m_target);
|
||||
m_entries = qtSupport->targetData(Constants::AndroidExtraLibs, m_target).toStringList();
|
||||
enabled = true;
|
||||
} else {
|
||||
// parsing error or not a application template
|
||||
|
@@ -305,7 +305,8 @@ Utils::FileName AndroidManager::apkPath(const ProjectExplorer::Target *target)
|
||||
Utils::FileName AndroidManager::manifestSourcePath(ProjectExplorer::Target *target)
|
||||
{
|
||||
if (AndroidQtSupport *androidQtSupport = AndroidManager::androidQtSupport(target)) {
|
||||
const QString packageSource = androidQtSupport->targetDataItem(Android::Constants::AndroidPackageSourceDir, target);
|
||||
const QString packageSource
|
||||
= androidQtSupport->targetData(Android::Constants::AndroidPackageSourceDir, target).toString();
|
||||
if (!packageSource.isEmpty()) {
|
||||
const FileName manifest = FileName::fromUserInput(packageSource + "/AndroidManifest.xml");
|
||||
if (manifest.exists())
|
||||
@@ -630,7 +631,7 @@ bool AndroidManager::updateGradleProperties(ProjectExplorer::Target *target)
|
||||
if (!qtSupport)
|
||||
return false;
|
||||
|
||||
QFileInfo sourceDirInfo(qtSupport->targetDataItem(Constants::AndroidPackageSourceDir, target));
|
||||
QFileInfo sourceDirInfo(qtSupport->targetData(Constants::AndroidPackageSourceDir, target).toString());
|
||||
FileName packageSourceDir = FileName::fromString(sourceDirInfo.canonicalFilePath());
|
||||
if (!packageSourceDir.appendPath("gradlew").exists())
|
||||
return false;
|
||||
|
@@ -38,10 +38,10 @@ namespace Utils { class FileName; }
|
||||
namespace Android {
|
||||
namespace Constants {
|
||||
|
||||
const char AndroidPackageSourceDir[] = "AndroidPackageSourceDir";
|
||||
const char AndroidDeploySettingsFile[] = "AndroidDeploySettingsFile";
|
||||
const char AndroidExtraLibs[] = "AndroidExtraLibs";
|
||||
const char AndroidArch[] = "AndroidArch";
|
||||
const char AndroidPackageSourceDir[] = "AndroidPackageSourceDir"; // QString
|
||||
const char AndroidDeploySettingsFile[] = "AndroidDeploySettingsFile"; // QString
|
||||
const char AndroidExtraLibs[] = "AndroidExtraLibs"; // QStringList
|
||||
const char AndroidArch[] = "AndroidArch"; // QString
|
||||
|
||||
} // namespace Constants
|
||||
|
||||
@@ -64,9 +64,8 @@ public:
|
||||
virtual QStringList soLibSearchPath(const ProjectExplorer::Target *target) const = 0;
|
||||
virtual QStringList projectTargetApplications(const ProjectExplorer::Target *target) const = 0;
|
||||
|
||||
virtual QString targetDataItem(Core::Id role, const ProjectExplorer::Target *target) const = 0;
|
||||
virtual QStringList targetData(Core::Id role, const ProjectExplorer::Target *target) const = 0;
|
||||
virtual bool setTargetData(Core::Id role, const QStringList &values,
|
||||
virtual QVariant targetData(Core::Id role, const ProjectExplorer::Target *target) const = 0;
|
||||
virtual bool setTargetData(Core::Id role, const QVariant &value,
|
||||
const ProjectExplorer::Target *target) const = 0;
|
||||
|
||||
virtual bool parseInProgress(const ProjectExplorer::Target *target) const = 0;
|
||||
|
@@ -183,7 +183,7 @@ void ChooseDirectoryPage::initializePage()
|
||||
|
||||
AndroidQtSupport *qtSupport = AndroidManager::androidQtSupport(m_wizard->target());
|
||||
const QString androidPackageDir
|
||||
= qtSupport->targetDataItem(Android::Constants::AndroidPackageSourceDir, m_wizard->target());
|
||||
= qtSupport->targetData(Android::Constants::AndroidPackageSourceDir, m_wizard->target()).toString();
|
||||
|
||||
if (androidPackageDir.isEmpty()) {
|
||||
m_label->setText(tr("Select the Android package source directory.\n\n"
|
||||
@@ -348,13 +348,13 @@ void CreateAndroidManifestWizard::createAndroidTemplateFiles()
|
||||
qtSupport->addFiles(m_target, m_buildKey, addedFiles);
|
||||
|
||||
const QString androidPackageDir
|
||||
= qtSupport->targetDataItem(Android::Constants::AndroidPackageSourceDir, m_target);
|
||||
= qtSupport->targetData(Android::Constants::AndroidPackageSourceDir, m_target).toString();
|
||||
|
||||
if (androidPackageDir.isEmpty()) {
|
||||
// and now time for some magic
|
||||
const BuildTargetInfo bti = m_target->applicationTargets().buildTargetInfo(m_buildKey);
|
||||
const QString value = "$$PWD/" + bti.projectFilePath.toFileInfo().absoluteDir().relativeFilePath(m_directory);
|
||||
bool result = qtSupport->setTargetData(Android::Constants::AndroidPackageSourceDir, {value}, m_target);
|
||||
bool result = qtSupport->setTargetData(Android::Constants::AndroidPackageSourceDir, value, m_target);
|
||||
|
||||
if (!result) {
|
||||
QMessageBox::warning(this, tr("Project File not Updated"),
|
||||
|
@@ -54,11 +54,11 @@ bool QmakeAndroidSupport::canHandle(const ProjectExplorer::Target *target) const
|
||||
return qobject_cast<QmakeProject*>(target->project());
|
||||
}
|
||||
|
||||
QStringList QmakeAndroidSupport::targetData(Core::Id role, const Target *target) const
|
||||
QVariant QmakeAndroidSupport::targetData(Core::Id role, const Target *target) const
|
||||
{
|
||||
RunConfiguration *rc = target->activeRunConfiguration();
|
||||
if (!rc)
|
||||
return QStringList();
|
||||
return {};
|
||||
|
||||
const FileName projectFilePath = FileName::fromString(rc->buildKey());
|
||||
const QmakeProject *pro = qobject_cast<QmakeProject *>(target->project());
|
||||
@@ -67,19 +67,17 @@ QStringList QmakeAndroidSupport::targetData(Core::Id role, const Target *target)
|
||||
const QmakeProFileNode *profileNode = pro->rootProjectNode()->findProFileFor(projectFilePath);
|
||||
QTC_ASSERT(profileNode, return {});
|
||||
|
||||
Variable var = {};
|
||||
if (role == Android::Constants::AndroidPackageSourceDir)
|
||||
var = Variable::AndroidPackageSourceDir;
|
||||
else if (role == Android::Constants::AndroidDeploySettingsFile)
|
||||
var = Variable::AndroidDeploySettingsFile;
|
||||
else if (role == Android::Constants::AndroidExtraLibs)
|
||||
var = Variable::AndroidExtraLibs;
|
||||
else if (role == Android::Constants::AndroidArch)
|
||||
var = Variable::AndroidArch;
|
||||
else
|
||||
QTC_CHECK(false);
|
||||
return profileNode->singleVariableValue(Variable::AndroidPackageSourceDir);
|
||||
if (role == Android::Constants::AndroidDeploySettingsFile)
|
||||
return profileNode->singleVariableValue(Variable::AndroidDeploySettingsFile);
|
||||
if (role == Android::Constants::AndroidExtraLibs)
|
||||
return profileNode->variableValue(Variable::AndroidExtraLibs);
|
||||
if (role == Android::Constants::AndroidArch)
|
||||
return profileNode->singleVariableValue(Variable::AndroidArch);
|
||||
|
||||
return profileNode->variableValue(var);
|
||||
QTC_CHECK(false);
|
||||
return {};
|
||||
}
|
||||
|
||||
static QmakeProFile *applicationProFile(const Target *target)
|
||||
@@ -115,32 +113,23 @@ FileName QmakeAndroidSupport::projectFilePath(const Target *target) const
|
||||
return pro ? pro->filePath() : FileName();
|
||||
}
|
||||
|
||||
bool QmakeAndroidSupport::setTargetData(Core::Id role, const QStringList &values, const Target *target) const
|
||||
bool QmakeAndroidSupport::setTargetData(Core::Id role, const QVariant &value, const Target *target) const
|
||||
{
|
||||
QmakeProFile *pro = applicationProFile(target);
|
||||
if (!pro)
|
||||
return false;
|
||||
|
||||
QString var;
|
||||
if (role == Android::Constants::AndroidExtraLibs)
|
||||
var = "ANDROID_EXTRA_LIBS";
|
||||
else if (role == Android::Constants::AndroidPackageSourceDir)
|
||||
var = "ANDROID_PACKAGE_SOURCE_DIR";
|
||||
|
||||
if (var.isEmpty())
|
||||
return false;
|
||||
|
||||
const QString arch = pro->singleVariableValue(Variable::AndroidArch);
|
||||
const QString scope = "contains(ANDROID_TARGET_ARCH," + arch + ')';
|
||||
return pro->setProVariable(var, values, scope,
|
||||
QmakeProjectManager::Internal::ProWriter::ReplaceValues
|
||||
| QmakeProjectManager::Internal::ProWriter::MultiLine);
|
||||
}
|
||||
auto flags = QmakeProjectManager::Internal::ProWriter::ReplaceValues
|
||||
| QmakeProjectManager::Internal::ProWriter::MultiLine;
|
||||
|
||||
QString QmakeAndroidSupport::targetDataItem(Core::Id role, const Target *target) const
|
||||
{
|
||||
const QStringList data = targetData(role, target);
|
||||
return data.isEmpty() ? QString() : data.first();
|
||||
if (role == Android::Constants::AndroidExtraLibs)
|
||||
return pro->setProVariable("ANDROID_EXTRA_LIBS", value.toStringList(), scope, flags);
|
||||
if (role == Android::Constants::AndroidPackageSourceDir)
|
||||
return pro->setProVariable("ANDROID_PACKAGE_SOURCE_DIR", {value.toString()}, scope, flags);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
QStringList QmakeAndroidSupport::soLibSearchPath(const ProjectExplorer::Target *target) const
|
||||
@@ -162,7 +151,7 @@ QStringList QmakeAndroidSupport::soLibSearchPath(const ProjectExplorer::Target *
|
||||
res.insert(destDir.toString());
|
||||
}
|
||||
|
||||
const QString jsonFile = targetDataItem(Android::Constants::AndroidDeploySettingsFile, target);
|
||||
const QString jsonFile = targetData(Android::Constants::AndroidDeploySettingsFile, target).toString();
|
||||
QFile deploymentSettings(jsonFile);
|
||||
if (deploymentSettings.open(QIODevice::ReadOnly)) {
|
||||
QJsonParseError error;
|
||||
|
@@ -39,9 +39,8 @@ public:
|
||||
QStringList soLibSearchPath(const ProjectExplorer::Target *target) const override;
|
||||
QStringList projectTargetApplications(const ProjectExplorer::Target *target) const override;
|
||||
|
||||
QString targetDataItem(Core::Id role, const ProjectExplorer::Target *target) const override;
|
||||
QStringList targetData(Core::Id role, const ProjectExplorer::Target *target) const override;
|
||||
bool setTargetData(Core::Id role, const QStringList &values,
|
||||
QVariant targetData(Core::Id role, const ProjectExplorer::Target *target) const override;
|
||||
bool setTargetData(Core::Id role, const QVariant &value,
|
||||
const ProjectExplorer::Target *target) const override;
|
||||
|
||||
bool parseInProgress(const ProjectExplorer::Target *target) const override;
|
||||
|
Reference in New Issue
Block a user