void process(Document::Ptr doc, QSet<Namespace *> *processed) { if (!doc) return; if (!processed->contains(doc->globalNamespace())) { processed->insert(doc->globalNamespace()); foreach (const Document::Include &i, doc->resolvedIncludes()) process(_snapshot.document(i.resolvedFileName()), processed); _mainDocument = (doc == _doc); // ### improve accept(doc->globalNamespace()); }
static ClassDocumentPtrPair findClassRecursively(const LookupContext &context, const QString &className, unsigned maxIncludeDepth, QString *namespaceName) { const Document::Ptr doc = context.thisDocument(); const Snapshot docTable = context.snapshot(); if (Designer::Constants::Internal::debug) qDebug() << Q_FUNC_INFO << doc->fileName() << className << maxIncludeDepth; // Check document if (const Class *cl = findClass(doc->globalNamespace(), context, className, namespaceName)) return ClassDocumentPtrPair(cl, doc); if (maxIncludeDepth) { // Check the includes const unsigned recursionMaxIncludeDepth = maxIncludeDepth - 1u; const auto includedFiles = doc->includedFiles(); for (const QString &include : includedFiles) { const Snapshot::const_iterator it = docTable.find(include); if (it != docTable.end()) { const Document::Ptr includeDoc = it.value(); LookupContext context(includeDoc, docTable); const ClassDocumentPtrPair irc = findClassRecursively(context, className, recursionMaxIncludeDepth, namespaceName); if (irc.first) return irc; } } } return ClassDocumentPtrPair(0, Document::Ptr()); }
void SnapshotSymbolVisitor::accept(Document::Ptr doc, QSet<QString> *processed) { if (doc && doc->globalNamespace() && ! processed->contains(doc->fileName())) { processed->insert(doc->fileName()); foreach (const Document::Include &i, doc->resolvedIncludes()) { if (Document::Ptr incl = _snapshot.document(i.resolvedFileName())) accept(incl, processed); } std::swap(_document, doc); accept(_document->globalNamespace()); std::swap(_document, doc); }