void QmlProfilerDetailsRewriter::documentReady(QmlJS::Document::Ptr doc) { // this could be triggered by an unrelated reload in Creator if (!d->m_pendingDocs.contains(doc->fileName())) return; // if the file could not be opened this slot is still triggered but source will be an empty string QString source = doc->source(); if (!source.isEmpty()) { QTextStream st(&source, QIODevice::ReadOnly); for (int i = d->m_pendingEvents.count()-1; i>=0; i--) { PendingEvent ev = d->m_pendingEvents[i]; if (ev.localFile == doc->fileName()) { d->m_pendingEvents.removeAt(i); rewriteDetailsForLocation(st, doc, ev.eventType, ev.location); } } } d->m_pendingDocs.removeOne(doc->fileName()); if (d->m_pendingDocs.isEmpty()) { disconnect(QmlJS::ModelManagerInterface::instance(), SIGNAL(documentUpdated(QmlJS::Document::Ptr)), this, SLOT(documentReady(QmlJS::Document::Ptr))); emit eventDetailsChanged(); } }
QmlProfilerBaseModel::QmlProfilerBaseModel(Utils::FileInProjectFinder *fileFinder, QmlProfilerModelManager *manager, QmlProfilerBaseModelPrivate *dd) : d_ptr(dd) { Q_D(QmlProfilerBaseModel); d->modelManager = manager; d->processingDone = false; d->detailsRewriter = new QmlProfilerDetailsRewriter(this, fileFinder); Q_ASSERT(d->modelManager); d->modelId = d->modelManager->registerModelProxy(); connect(d->detailsRewriter, SIGNAL(rewriteDetailsString(int,QString)), this, SLOT(detailsChanged(int,QString))); connect(d->detailsRewriter, SIGNAL(eventDetailsChanged()), this, SLOT(detailsDone())); }