import FlowNode from "./node/FlowNode.js";
import BaseGraph from "../graph/BaseGraph.js";
import { GraphBuilder, GraphTypeGuard } from "../graph/Graph.js";
import { IfComparison, IfComparisonWithZero, Instruction, LabelReference, MethodNode, Program, Statement } from "../../../../Joinpoints.js";
import InstructionNode from "./node/instruction/InstructionNode.js";
import FunctionEntryNode from "./node/instruction/FunctionEntryNode.js";
import FunctionExitNode from "./node/instruction/FunctionExitNode.js";
import IfComparisonNode from "./node/condition/IfComparisonNode.js";
import TryCatchNode from "./node/condition/TryCatchNode.js";
import CaseNode from "./node/condition/CaseNode.js";
declare namespace FlowGraph {
    class Class<D extends Data = Data, S extends ScratchData = ScratchData> extends BaseGraph.Class<D, S> {
        addFunction($jp: MethodNode, bodyHead: FlowNode.Class | undefined, bodyTail: InstructionNode.Class[]): [FunctionEntryNode.Class, FunctionExitNode.Class?];
        addCondition($jp: IfComparison | IfComparisonWithZero, iftrue: FlowNode.Class, iffalse: FlowNode.Class): IfComparisonNode.Class;
        addSwitchCase($jp: LabelReference, iftrue: FlowNode.Class, iffalse: FlowNode.Class): CaseNode.Class;
        addTryCatch($jp: Instruction, iftrue: FlowNode.Class, iffalse: FlowNode.Class): TryCatchNode.Class;
        getFunction(name: string): FunctionEntryNode.Class | undefined;
        get functions(): FunctionEntryNode.Class[];
        getNode($stmt: Statement | string): FlowNode.Class | undefined;
    }
    class Builder extends BaseGraph.Builder implements GraphBuilder<Data, ScratchData> {
        buildData(data: BaseGraph.Data): Data;
        buildScratchData(scratchData: BaseGraph.ScratchData): ScratchData;
    }
    const TypeGuard: GraphTypeGuard<Data, ScratchData>;
    interface Data extends BaseGraph.Data {
        functions: Map<string, string>;
    }
    interface ScratchData extends BaseGraph.Data {
    }
    function generate($jp: Program | MethodNode, graph?: BaseGraph.Class): FlowGraph.Class;
}
export default FlowGraph;
//# sourceMappingURL=FlowGraph.d.ts.map