示例#1
0
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;
}
示例#3
0
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);
}