From f5716f05b77ee00c34218cde249c24f00b2df3a5 Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@nokia.com>
Date: Wed, 6 Oct 2010 10:03:51 +0200
Subject: [PATCH] QmlDump: Get right Qt version for .qmlproject

We're using a QObject property to get the Qt Version Id: QmlDumpTool
is in Qt4ProjectManager, which shouldn't have a dependency to QmlProjectManager.

Reviewed-by: Christian Kamm
---
 .../qmlprojectrunconfiguration.cpp                  |  7 +++++++
 .../qmlprojectmanager/qmlprojectrunconfiguration.h  |  4 ++++
 src/plugins/qt4projectmanager/qmldumptool.cpp       | 13 +++++++++++++
 3 files changed, 24 insertions(+)

diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
index 9cec81f7613..aa7dab53ffe 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
@@ -67,6 +67,7 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(Internal::QmlProjectTarge
     m_isEnabled(false)
 {
     ctor();
+    updateQtVersions();
 }
 
 QmlProjectRunConfiguration::QmlProjectRunConfiguration(Internal::QmlProjectTarget *parent, QmlProjectRunConfiguration *source) :
@@ -78,6 +79,7 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(Internal::QmlProjectTarge
 {
     ctor();
     setMainScript(source->m_scriptFile);
+    updateQtVersions();
 }
 
 bool QmlProjectRunConfiguration::isEnabled(ProjectExplorer::BuildConfiguration *bc) const
@@ -158,6 +160,11 @@ QString QmlProjectRunConfiguration::workingDirectory() const
     return projectFile.absolutePath();
 }
 
+int QmlProjectRunConfiguration::qtVersionId() const
+{
+    return m_qtVersionId;
+}
+
 Qt4ProjectManager::QtVersion *QmlProjectRunConfiguration::qtVersion() const
 {
     if (m_qtVersionId == -1)
diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h
index 9cae9392628..7381fa1b545 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h
+++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h
@@ -62,6 +62,9 @@ class QMLPROJECTMANAGER_EXPORT QmlProjectRunConfiguration : public ProjectExplor
     Q_OBJECT
     friend class Internal::QmlProjectRunConfigurationFactory;
 
+    // used in qmldumptool.cpp
+    Q_PROPERTY(int qtVersionId READ qtVersionId)
+
 public:
     QmlProjectRunConfiguration(Internal::QmlProjectTarget *parent);
     virtual ~QmlProjectRunConfiguration();
@@ -74,6 +77,7 @@ public:
     QString observerPath() const;
     QStringList viewerArguments() const;
     QString workingDirectory() const;
+    int qtVersionId() const;
     Qt4ProjectManager::QtVersion *qtVersion() const;
 
     // RunConfiguration
diff --git a/src/plugins/qt4projectmanager/qmldumptool.cpp b/src/plugins/qt4projectmanager/qmldumptool.cpp
index 99e598c30af..d0dddbe26ac 100644
--- a/src/plugins/qt4projectmanager/qmldumptool.cpp
+++ b/src/plugins/qt4projectmanager/qmldumptool.cpp
@@ -36,8 +36,10 @@
 
 #include <projectexplorer/project.h>
 #include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/runconfiguration.h>
 #include <qtconcurrent/runextensions.h>
 #include <qmljs/qmljsmodelmanagerinterface.h>
+#include <utils/qtcassert.h>
 #include <QDesktopServices>
 #include <QCoreApplication>
 #include <QDir>
@@ -147,6 +149,17 @@ static QtVersion *qtVersionForProject(ProjectExplorer::Project *project)
         return 0;
     }
 
+    if (project && project->id() == QLatin1String("QmlProjectManager.QmlProject")) {
+        // We cannot access the QmlProject interfaces here, therefore use the metatype system
+        QTC_ASSERT(project->activeTarget() && project->activeTarget()->activeRunConfiguration(), return 0);
+        QVariant variant = project->activeTarget()->activeRunConfiguration()->property("qtVersionId");
+        QTC_ASSERT(variant.isValid() && variant.canConvert(QVariant::Int), return 0);
+        QtVersion *version = QtVersionManager::instance()->version(variant.toInt());
+        if (version && version->isValid())
+            return version;
+        return 0;
+    }
+
     // else, find any desktop Qt version that has qmldump, or - if there isn't any -
     // one that could build it
     QtVersion *desktopQt = 0;
-- 
GitLab