IndexerJob::IndexerJob(const Source &s, Flags<Flag> f, const std::shared_ptr<Project> &p, const UnsavedFiles &u) : id(0), source(s), sourceFile(s.sourceFile()), flags(f), project(p->path()), priority(0), unsavedFiles(u), crashCount(0) { acquireId(); if (flags & Dirty) { ++priority; } else if (flags & Reindex) { priority += 4; } Server *server = Server::instance(); assert(server); if (server->isActiveBuffer(source.fileId)) { priority += 8; } else if (DependencyNode *node = p->dependencyNode(source.fileId)) { Set<DependencyNode*> seen; seen.insert(node); std::function<bool(const DependencyNode *node)> func = [&](const DependencyNode *node) { for (const auto &inc : node->includes) { if (seen.insert(inc.second) && !Location::path(node->fileId).isSystem() && (server->isActiveBuffer(node->fileId) || func(inc.second))) { return true; } } return false; }; if (func(node)) priority += 2; } visited.insert(s.fileId); }
QAccessible::Id QAccessibleCache::insert(QObject *object, QAccessibleInterface *iface) const { Q_ASSERT(iface); Q_UNUSED(object) // object might be 0 Q_ASSERT(!objectToId.contains(object)); Q_ASSERT_X(!idToInterface.values().contains(iface), "", "Accessible interface inserted into cache twice!"); QAccessible::Id id = acquireId(); QObject *obj = iface->object(); Q_ASSERT(object == obj); if (obj) { objectToId.insert(obj, id); connect(obj, &QObject::destroyed, this, &QAccessibleCache::objectDestroyed); } idToInterface.insert(id, iface); return id; }
IndexerJob::IndexerJob(const Source &s, Flags<Flag> f, const std::shared_ptr<Project> &p, const UnsavedFiles &u) : id(0), source(s), sourceFile(s.sourceFile()), flags(f), project(p->path()), priority(0), unsavedFiles(u), crashCount(0) { acquireId(); if (flags & Dirty) ++priority; Server *server = Server::instance(); assert(server); if (server->isActiveBuffer(source.fileId)) { priority += 4; } else { for (uint32_t dep : p->dependencies(source.fileId, Project::ArgDependsOn)) { if (server->isActiveBuffer(dep)) { priority += 2; break; } } } visited.insert(s.fileId); }