/**
 * ProjectGraph
 *
 * Wraps multiple per-file CodeGraph instances with lazy cross-file resolution
 * infrastructure (SymbolTable, TypeHierarchyResolver, CrossFileResolver).
 *
 * Usage:
 *   const pg = new ProjectGraph();
 *   pg.addFile('/src/A.java', graphA);
 *   pg.addFile('/src/B.java', graphB);
 *   const flows = pg.resolver.findCrossFileTaintFlows();
 */
import type { CircleIR } from '../types/index.js';
import { CodeGraph } from './code-graph.js';
import { SymbolTable, TypeHierarchyResolver, CrossFileResolver } from '../resolution/index.js';
export declare class ProjectGraph {
    private readonly files;
    private _symbolTable;
    private _typeHierarchy;
    private _resolver;
    /**
     * Register a file's CodeGraph.  Invalidates all lazy caches.
     */
    addFile(filePath: string, graph: CodeGraph): void;
    /** Registered file paths in insertion order. */
    get filePaths(): string[];
    /** Total number of registered files. */
    get fileCount(): number;
    /** Retrieve a file's CodeGraph, or undefined if not registered. */
    getGraph(filePath: string): CodeGraph | undefined;
    /** Retrieve a file's CircleIR, or undefined if not registered. */
    getIR(filePath: string): CircleIR | undefined;
    /** Lazily-built SymbolTable covering all registered files. */
    get symbolTable(): SymbolTable;
    /** Lazily-built TypeHierarchyResolver covering all registered files. */
    get typeHierarchy(): TypeHierarchyResolver;
    /**
     * Lazily-built CrossFileResolver.
     * Accesses `this.symbolTable` and `this.typeHierarchy` (also lazy) so all
     * three are computed together on the first call after any `addFile()`.
     */
    get resolver(): CrossFileResolver;
}
//# sourceMappingURL=project-graph.d.ts.map