summaryrefslogtreecommitdiff
path: root/src/libs/qmljs/qmljsinterpreter.cpp
diff options
context:
space:
mode:
authorAurindam Jana <aurindam.jana@nokia.com>2012-05-03 11:37:30 +0200
committerAurindam Jana <aurindam.jana@nokia.com>2012-05-07 17:07:29 +0200
commitd4c2c3f214ebfbdd39674a9f281394315aab59f8 (patch)
tree052305b93c9a8331e3faa476e74a90cec1e6f9d1 /src/libs/qmljs/qmljsinterpreter.cpp
parent72bf41b40f37ba9e030741636a0b20cc697729e5 (diff)
downloadqt-creator-d4c2c3f214ebfbdd39674a9f281394315aab59f8.tar.gz
QmlJSInterpreter: QML Plugin types
A Component in .qmltypes can have an array of exports which may differ in type names and versions. Consider the type names to be aliases and create a CppComponentValue for each of the alias corresponding to the best available version. Change-Id: I759ae0c68441e805b0502bf2d203c524bf1a7a7c Reviewed-by: Fawzi Mohamed <fawzi.mohamed@nokia.com>
Diffstat (limited to 'src/libs/qmljs/qmljsinterpreter.cpp')
-rw-r--r--src/libs/qmljs/qmljsinterpreter.cpp61
1 files changed, 26 insertions, 35 deletions
diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index 01c47a0dd2..bf776defa0 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -1365,19 +1365,20 @@ QList<const CppComponentValue *> CppQmlTypes::createObjectsForImport(const QStri
// make new exported objects
foreach (const FakeMetaObject::ConstPtr &fmo, _fakeMetaObjectsByPackage.value(package)) {
- // find the highest-version export
- FakeMetaObject::Export bestExport;
- QList<QString> aliases;
+ // find the highest-version export for each alias
+ QHash<QString, FakeMetaObject::Export> bestExports;
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)
- bestExport = exp;
+
+ if (bestExports.contains(exp.type)) {
+ if (exp.version > bestExports.value(exp.type).version)
+ bestExports.insert(exp.type, exp);
+ } else {
+ bestExports.insert(exp.type, exp);
+ }
}
- if (!bestExport.isValid())
+ if (bestExports.isEmpty())
continue;
// if it already exists, skip
@@ -1385,34 +1386,24 @@ QList<const CppComponentValue *> CppQmlTypes::createObjectsForImport(const QStri
if (_objectsByQualifiedName.contains(key))
continue;
- QString name = bestExport.type;
- bool exported = true;
- if (name.isEmpty()) {
- exported = false;
- name = fmo->className();
- }
+ foreach (const FakeMetaObject::Export &bestExport, bestExports) {
+ QString name = bestExport.type;
+ bool exported = true;
+ if (name.isEmpty()) {
+ exported = false;
+ name = fmo->className();
+ }
- CppComponentValue *newComponent = new CppComponentValue(
- fmo, name, package, bestExport.version, version,
- bestExport.metaObjectRevision, _valueOwner);
-
- // use package.cppname importversion as key
- _objectsByQualifiedName.insert(key, newComponent);
-
- // Create CppComponentValues for all the aliases
- // TODO: Show warning for deprecated ones
- aliases.removeOne(name);
- QList<const CppComponentValue *> newComponents;
- newComponents.append(newComponent);
- foreach (const QString &alias, aliases) {
- newComponents.append(new CppComponentValue(
- fmo, alias, package, bestExport.version, version,
- bestExport.metaObjectRevision, _valueOwner));
- }
+ CppComponentValue *newComponent = new CppComponentValue(
+ fmo, name, package, bestExport.version, version,
+ bestExport.metaObjectRevision, _valueOwner);
- if (exported)
- exportedObjects += newComponents;
- newObjects += newComponents;
+ // use package.cppname importversion as key
+ _objectsByQualifiedName.insert(key, newComponent);
+ if (exported)
+ exportedObjects += newComponent;
+ newObjects += newComponent;
+ }
}
// set their prototypes, creating them if necessary