import { Call, FunctionJp } from "../../Joinpoints.js";
import MemoiTarget from "./MemoiTarget.js";
/**
 * 		Enum with the results of the predicate test.
 */
export declare enum PRED {
    VALID = 1,
    INVALID = -1,
    WAITING = 0
}
type MemoiPred = ($call: Call, processed: Record<string, PRED | undefined>, report: FailReport) => PRED | undefined;
export default class MemoiAnalysis {
    /**
     * Returns array of MemoiTarget.
     */
    static findTargets(pred: MemoiPred): MemoiTarget[];
    /**
     * Returns MemoiTargetReport.
     */
    static findTargetsReport(pred?: MemoiPred): MemoiTargetReport;
}
/**
 * Class to hold info about target finding (targets and reports).
 */
export declare class MemoiTargetReport {
    targets: MemoiTarget[];
    failReport: FailReport;
    constructor(targets: MemoiTarget[], failReport: FailReport);
    isTarget($func: FunctionJp): boolean;
    toJson(jsonPath: string): void;
    printFailReport(): void;
}
/**
 * Class to hold info about failed targets.
 */
export declare class FailReport {
    private _failMap;
    private _numParams;
    private _unsupportedNumParams;
    private _typeParams;
    private _typeReturn;
    private _unsupportedTypes;
    private _globalAccess;
    private _invalidCalls;
    get numParams(): number;
    get typeParams(): number;
    get typeReturn(): number;
    get globalAccess(): number;
    get invalidCalls(): number;
    get unsupportedNumParams(): Record<string, number>;
    get unsupportedTypes(): Record<string, number>;
    incNumParams(sig: string, num: number | string): void;
    private _addUnsupportedNumParams;
    incTypeParams(sig: string, type: string): void;
    incTypeReturn(sig: string, type: string): void;
    private _addUnsupportedTypes;
    incGlobalAccess(sig: string): void;
    incInvalidCalls(sig?: string): void;
}
export {};
//# sourceMappingURL=MemoiAnalysis.d.ts.map