import { Project, Node } from 'ts-morph';
import { SymbolLocation } from '../types/index.js';
/**
 * シンボルの定義と参照を検索するクラス
 */
export declare class SymbolFinder {
    private project;
    private nodeUtils;
    /**
     * コンストラクタ
     * @param project ts-morphのプロジェクトインスタンス
     */
    constructor(project: Project);
    /**
     * シンボルの定義ノードを見つける
     * @param symbolName シンボル名
     * @returns 定義ノード（見つからない場合はundefined）
     */
    findDefinitionNode(symbolName: string): Node | undefined;
    /**
     * 定義情報を抽出する
     * @param definitionNode 定義ノード
     * @returns 定義情報
     */
    extractDefinitionInfo(definitionNode: Node): SymbolLocation;
    /**
     * シンボルの参照を収集する
     * @param symbolName シンボル名
     * @param definitionNode 定義ノード
     * @param includeInternalReferences 内部参照を含めるかどうか
     * @returns 参照情報の配列
     */
    collectReferences(symbolName: string, definitionNode: Node, includeInternalReferences?: boolean): SymbolLocation[];
    /**
     * 定義ノードがクラスまたはインターフェースの定義かどうかを判定する
     * @param node 定義ノード
     * @returns クラスまたはインターフェースの定義かどうか
     */
    private isClassOrInterfaceDefinition;
    /**
     * 参照情報を抽出する
     * @param node 参照ノード
     * @param currentFile 現在のファイルパス
     * @param contextPrefix コンテキスト情報の接頭辞 (例: "JSX Element")
     * @returns 参照情報
     */
    private extractReferenceInfo;
    /**
     * シンボルが存在するかどうかを確認する
     * @param symbolName シンボル名
     * @returns シンボルが存在する場合はtrue、存在しない場合はfalse
     */
    hasSymbol(symbolName: string): boolean;
    /**
     * プロジェクト内のすべてのエクスポートされたシンボルを取得
     * @param filterType 特定のシンボルタイプでフィルタリングする場合（オプション）
     * @returns シンボル名とその位置情報のマップ
     */
    getAllExportedSymbols(filterType?: 'class' | 'interface' | 'function' | 'enum' | 'variable'): Map<string, SymbolLocation>;
    /**
     * 宣言がエクスポートされているかどうかを確認
     * @param node 宣言ノード
     * @returns エクスポートされている場合はtrue
     */
    private isExported;
}
//# sourceMappingURL=SymbolFinder.d.ts.map