diff options
author | Aurindam Jana <aurindam.jana@nokia.com> | 2012-05-03 11:37:30 +0200 |
---|---|---|
committer | Aurindam Jana <aurindam.jana@nokia.com> | 2012-05-07 17:07:29 +0200 |
commit | d4c2c3f214ebfbdd39674a9f281394315aab59f8 (patch) | |
tree | 052305b93c9a8331e3faa476e74a90cec1e6f9d1 /src/libs/qmljs/qmljsinterpreter.cpp | |
parent | 72bf41b40f37ba9e030741636a0b20cc697729e5 (diff) | |
download | qt-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.cpp | 61 |
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 |