OSDN Git Service

QmlDesigner.textToModelMerger: use fully qualified types
authorThomas Hartmann <Thomas.Hartmann@nokia.com>
Mon, 16 May 2011 14:05:46 +0000 (16:05 +0200)
committerThomas Hartmann <Thomas.Hartmann@nokia.com>
Mon, 16 May 2011 14:20:00 +0000 (16:20 +0200)
We now use fully qualified types also for components.

src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp

index b458a58..69a5997 100644 (file)
@@ -54,6 +54,7 @@
 
 #include <QtCore/QSet>
 #include <QtGui/QMessageBox>
+#include <QDir>
 
 using namespace LanguageUtils;
 using namespace QmlJS;
@@ -341,8 +342,33 @@ public:
             for (UiQualifiedId *iter = astTypeNode; iter; iter = iter->next)
                 if (!iter->next && iter->name)
                     typeName = iter->name->asString();
+
+            QString fullTypeName;
+            for (UiQualifiedId *iter = astTypeNode; iter; iter = iter->next)
+                if (iter->name)
+                    fullTypeName += iter->name->asString() + ".";
+
+            if (fullTypeName.endsWith("."))
+                fullTypeName.chop(1);
+
             majorVersion = ComponentVersion::NoVersion;
             minorVersion = ComponentVersion::NoVersion;
+
+            const Interpreter::TypeEnvironment *typeEnv = m_lookupContext->context()->typeEnvironment(m_lookupContext->document().data());
+            Interpreter::ImportInfo importInfo = typeEnv->importInfo(fullTypeName, m_context);
+            if (importInfo.isValid() && importInfo.type() == Interpreter::ImportInfo::LibraryImport) {
+                QString name = importInfo.name().replace("\\", ".");
+                majorVersion = importInfo.version().majorVersion();
+                minorVersion = importInfo.version().minorVersion();
+                typeName.prepend(name + ".");
+            } else if (importInfo.isValid() && importInfo.type() == Interpreter::ImportInfo::DirectoryImport) {
+                QString path = importInfo.name();
+                QDir dir(m_doc->path());
+                QString relativeDir = dir.relativeFilePath(path);
+                QString name = relativeDir.replace("/", ".");               
+                if (!name.isEmpty())
+                    typeName.prepend(name + ".");
+            }
         }
     }
 
@@ -1370,7 +1396,7 @@ ModelNode ModelAmender::listPropertyMissingModelNode(NodeListProperty &modelProp
     if (!astObjectType || !astInitializer)
         return ModelNode();
 
-    QString typeName, dummy;
+    QString typeName, fullTypeName, dummy;
     int majorVersion;
     int minorVersion;
     context->lookup(astObjectType, typeName, majorVersion, minorVersion, dummy);