import { AnalyzerOptions, SymbolAnalysisOptions, ReferenceResult, SymbolInfo, CallGraphResult } from '../types/index.js';
import { ProjectManager } from './ProjectManager.js';
import { SymbolFinder } from './SymbolFinder.js';
import { NodeUtils } from '../utils/NodeUtils.js';
import { CallGraphAnalyzer } from './CallGraphAnalyzer.js';
/**
 * TypeScriptコードのシンボル参照を分析するクラス
 */
export declare class SymbolReferenceAnalyzer {
    private projectManager;
    private symbolFinder;
    private nodeUtils;
    private callGraphAnalyzer;
    private basePath;
    /**
     * コンストラクタ
     * @param options 設定オプション
     * @param dependencies 依存コンポーネント（オプション、テスト用）
     */
    constructor(options: AnalyzerOptions, dependencies?: {
        projectManager?: ProjectManager;
        symbolFinder?: SymbolFinder;
        nodeUtils?: NodeUtils;
        callGraphAnalyzer?: CallGraphAnalyzer;
    });
    /**
     * シンボルの参照を分析する
     * @param symbolName 分析対象のシンボル名
     * @param options 分析オプション
     * @returns 参照分析結果
     */
    analyzeSymbol(symbolName: string, options?: SymbolAnalysisOptions): ReferenceResult;
    /**
     * ファイル内の未参照シンボルをチェック
     * @param filePath チェック対象のファイルパス
     * @returns 他のファイルから参照されていないシンボルのリスト
     */
    checkFile(filePath: string): SymbolInfo[];
    /**
     * トップレベルのシンボルをチェックする
     * @param sourceFile ソースファイル
     * @param checkedSymbols チェック済みシンボルのセット
     * @param unreferencedSymbols 未参照シンボルのリスト
     */
    private checkTopLevelSymbols;
    /**
     * クラスメンバーをチェックする
     * @param sourceFile ソースファイル
     * @param checkedSymbols チェック済みシンボルのセット
     * @param unreferencedSymbols 未参照シンボルのリスト
     */
    private checkClassMembers;
    /**
     * メソッド参照を検索する
     * @param className クラス名
     * @param methodName メソッド名
     * @returns 参照の配列
     */
    private findMethodReferences;
    /**
     * プロパティ参照を検索する
     * @param className クラス名
     * @param propertyName プロパティ名
     * @returns 参照の配列
     */
    private findPropertyReferences;
    /**
     * 呼び出しグラフを構築する
     * @returns 構築されたノード数
     */
    buildCallGraph(): number;
    /**
     * 2つのシンボル間の呼び出し経路を分析
     * @param fromSymbol 開始シンボル
     * @param toSymbol 終了シンボル
     * @returns 呼び出し経路の分析結果
     */
    traceCallPath(fromSymbol: string, toSymbol: string): CallGraphResult;
    /**
     * シンボルを呼び出すすべての経路を分析
     * @param symbol 対象シンボル
     * @returns 呼び出し経路の分析結果
     */
    findCallers(symbol: string): CallGraphResult;
    /**
     * シンボルが存在するかどうかを確認する
     * @param symbolName シンボル名
     * @returns シンボルが存在する場合はtrue、存在しない場合はfalse
     */
    hasSymbol(symbolName: string): boolean;
    /**
     * プロジェクトインスタンスを取得する
     * @returns プロジェクトインスタンス
     */
    getProject(): import("ts-morph").Project;
    /**
     * クラスメンバーの種類を判定する（内部メソッド）
     * @param className クラス名
     * @param memberName メンバー名
     * @returns シンボルの種類
     */
    private determineClassMemberType;
    /**
     * クラスメンバーノードを検索する（内部メソッド）
     * @param classNameOrNode クラス名またはクラスのノード
     * @param memberName メンバー名
     * @returns メンバーノード
     */
    private findClassMemberNode;
    /**
     * クラスのプロパティまたはメソッドの参照を分析する
     * @param containerName コンテナ名（クラス/インターフェース名）
     * @param memberName メンバー名（メソッド/プロパティ名）
     * @param options 分析オプション
     * @returns 参照分析結果
     */
    analyzePropertyOrMethod(containerName: string, memberName: string, options?: SymbolAnalysisOptions): ReferenceResult;
}
//# sourceMappingURL=SymbolReferenceAnalyzer.d.ts.map