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:
hjk
2018-07-27 12:58:10 +02:00
parent 888d940de2
commit 3ba3f74051
9 changed files with 41 additions and 52 deletions

View File

@@ -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;

View File

@@ -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()

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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;

View File

@@ -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"),