static QList<QmlJS::Document::Ptr> scanDirectoryForQuickTestQmlFiles(const QString &srcDir) { QStringList dirs(srcDir); QmlJS::ModelManagerInterface *qmlJsMM = QmlJSTools::Internal::ModelManager::instance(); // make sure even files not listed in pro file are available inside the snapshot QFutureInterface<void> future; QmlJS::PathsAndLanguages paths; paths.maybeInsert(Utils::FileName::fromString(srcDir), QmlJS::Dialect::Qml); const bool emitDocumentChanges = false; const bool onlyTheLib = false; QmlJS::ModelManagerInterface::importScan(future, qmlJsMM->workingCopy(), paths, qmlJsMM, emitDocumentChanges, onlyTheLib); const QmlJS::Snapshot snapshot = QmlJSTools::Internal::ModelManager::instance()->snapshot(); QDirIterator it(srcDir, QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories); while (it.hasNext()) { it.next(); QFileInfo fi(it.fileInfo().canonicalFilePath()); dirs << fi.filePath(); } QList<QmlJS::Document::Ptr> foundDocs; foreach (const QString &path, dirs) { const QList<QmlJS::Document::Ptr> docs = snapshot.documentsInDirectory(path); foreach (const QmlJS::Document::Ptr &doc, docs) { const QString fileName(QFileInfo(doc->fileName()).fileName()); if (fileName.startsWith(QLatin1String("tst_")) && fileName.endsWith(QLatin1String(".qml"))) foundDocs << doc; } } return foundDocs; }
QList<QmlJSEditor::FindReferences::Usage> FindImplementation::run(const QString &fileName, const QString &typeName, const QString &itemName) { QList<QmlJSEditor::FindReferences::Usage> usages; QmlJS::ModelManagerInterface *modelManager = ModelManagerInterface::instance(); //Parse always the latest version of document QmlJS::Dialect dialect = QmlJS::ModelManagerInterface::guessLanguageOfFile(fileName); QmlJS::Document::MutablePtr documentUpdate = QmlJS::Document::create(fileName, dialect); documentUpdate->setSource(modelManager->workingCopy().source(fileName)); if (documentUpdate->parseQml()) modelManager->updateDocument(documentUpdate); Document::Ptr document = modelManager->snapshot().document(fileName); if (!document) return usages; QmlJS::Link link(modelManager->snapshot(), modelManager->defaultVContext(document->language(), document), modelManager->builtins(document)); ContextPtr context = link(); ScopeChain scopeChain(document, context); const ObjectValue *targetValue = scopeChain.context()->lookupType(document.data(), QStringList(typeName)); FindImplementationVisitor visitor(document, context); FindImplementationVisitor::Results results = visitor(typeName, itemName, targetValue); foreach (const AST::SourceLocation &location, results) { usages.append(QmlJSEditor::FindReferences::Usage(fileName, matchingLine(location.offset, document->source()), location.startLine, location.startColumn - 1, location.length)); }