summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppmodelmanager.cpp
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2011-01-06 10:01:45 +0100
committerChristian Kamm <christian.d.kamm@nokia.com>2011-01-06 15:02:06 +0100
commit283a3d32cda68b0dcf7642d9ddbfb60dd88d9ccb (patch)
tree0e6a9ea92cb6c7dfa60bbe8d662b55a1872cc5dd /src/plugins/cpptools/cppmodelmanager.cpp
parentc7070526ec34d0bea66bde2ada0cb2e52d1613db (diff)
downloadqt-creator-283a3d32cda68b0dcf7642d9ddbfb60dd88d9ccb.tar.gz
Qml/C++: Fix performance problem with type extraction.
By moving the offending code into a background thread. Reviewed-by: Erik Verbruggen
Diffstat (limited to 'src/plugins/cpptools/cppmodelmanager.cpp')
-rw-r--r--src/plugins/cpptools/cppmodelmanager.cpp41
1 files changed, 21 insertions, 20 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index 263e0c1a81..4860027f69 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -291,8 +291,7 @@ public:
void operator()()
{
_doc->check(_mode);
- // temporarily disabled because it's too expensive
- //_doc->findExposedQmlTypes();
+ _doc->findExposedQmlTypes();
_doc->releaseSource();
_doc->releaseTranslationUnit();
@@ -1548,32 +1547,34 @@ static void populate(LanguageUtils::FakeMetaObject::Ptr fmo, Class *klass,
}
}
-QList<LanguageUtils::FakeMetaObject::ConstPtr> CppModelManager::exportedQmlObjects() const
+QList<LanguageUtils::FakeMetaObject::ConstPtr> CppModelManager::exportedQmlObjects(const Document::Ptr &doc) const
{
using namespace LanguageUtils;
QList<FakeMetaObject::ConstPtr> exportedObjects;
QHash<Class *, FakeMetaObject::Ptr> classes;
+ const QList<CPlusPlus::Document::ExportedQmlType> exported = doc->exportedQmlTypes();
+ if (exported.isEmpty())
+ return exportedObjects;
+
+ TypeOfExpression typeOf;
const Snapshot currentSnapshot = snapshot();
- foreach (Document::Ptr doc, currentSnapshot) {
- TypeOfExpression typeOf;
- typeOf.init(doc, currentSnapshot);
- foreach (const Document::ExportedQmlType &exportedType, doc->exportedQmlTypes()) {
- FakeMetaObject::Ptr fmo(new FakeMetaObject);
- fmo->addExport(exportedType.typeName, exportedType.packageName,
- ComponentVersion(exportedType.majorVersion, exportedType.minorVersion));
- exportedObjects += fmo;
-
- Class *klass = lookupClass(exportedType.typeExpression, exportedType.scope, typeOf);
- if (!klass)
- continue;
+ typeOf.init(doc, currentSnapshot);
+ foreach (const Document::ExportedQmlType &exportedType, exported) {
+ FakeMetaObject::Ptr fmo(new FakeMetaObject);
+ fmo->addExport(exportedType.typeName, exportedType.packageName,
+ ComponentVersion(exportedType.majorVersion, exportedType.minorVersion));
+ exportedObjects += fmo;
+
+ Class *klass = lookupClass(exportedType.typeExpression, exportedType.scope, typeOf);
+ if (!klass)
+ continue;
- // add the no-package export, so the cpp name can be used in properties
- Overview overview;
- fmo->addExport(overview(klass->name()), QString(), ComponentVersion());
+ // add the no-package export, so the cpp name can be used in properties
+ Overview overview;
+ fmo->addExport(overview(klass->name()), QString(), ComponentVersion());
- populate(fmo, klass, &classes, typeOf);
- }
+ populate(fmo, klass, &classes, typeOf);
}
return exportedObjects;