From c908a4b9e663f2817e55e0cfd55c658265a5527b Mon Sep 17 00:00:00 2001 From: Aurindam Jana Date: Fri, 27 Apr 2012 16:00:16 +0200 Subject: [PATCH] QmlJSInterpreter: Register QML Types A Component in .qmltypes can have an array of exports which may differ in type names too (possibly because of type deprecation). Consider the type names to be aliases and create a CppComponentValue for each of the alias. Change-Id: I70cadab465aec3e7842abd7050549c77fb8342fc Reviewed-by: Marco Bubke Reviewed-by: Alessandro Portale --- src/libs/qmljs/qmljsinterpreter.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp index 8f9ba9ebbce..01c47a0dd29 100644 --- a/src/libs/qmljs/qmljsinterpreter.cpp +++ b/src/libs/qmljs/qmljsinterpreter.cpp @@ -1367,7 +1367,11 @@ QList CppQmlTypes::createObjectsForImport(const QStri foreach (const FakeMetaObject::ConstPtr &fmo, _fakeMetaObjectsByPackage.value(package)) { // find the highest-version export FakeMetaObject::Export bestExport; + QList aliases; foreach (const FakeMetaObject::Export &exp, fmo->exports()) { + // Store all aliases + if (!exp.type.isEmpty() && !aliases.contains(exp.type)) + aliases.append(exp.type); if (exp.package != package || (version.isValid() && exp.version > version)) continue; if (!bestExport.isValid() || exp.version > bestExport.version) @@ -1388,15 +1392,27 @@ QList CppQmlTypes::createObjectsForImport(const QStri name = fmo->className(); } - CppComponentValue *newObject = new CppComponentValue( + CppComponentValue *newComponent = new CppComponentValue( fmo, name, package, bestExport.version, version, bestExport.metaObjectRevision, _valueOwner); // use package.cppname importversion as key - _objectsByQualifiedName.insert(key, newObject); + _objectsByQualifiedName.insert(key, newComponent); + + // Create CppComponentValues for all the aliases + // TODO: Show warning for deprecated ones + aliases.removeOne(name); + QList newComponents; + newComponents.append(newComponent); + foreach (const QString &alias, aliases) { + newComponents.append(new CppComponentValue( + fmo, alias, package, bestExport.version, version, + bestExport.metaObjectRevision, _valueOwner)); + } + if (exported) - exportedObjects += newObject; - newObjects += newObject; + exportedObjects += newComponents; + newObjects += newComponents; } // set their prototypes, creating them if necessary