import { LaraJoinPoint } from "@specs-feup/lara/api/LaraJoinPoint.js";
type PrivateMapper = {
    "Joinpoint": typeof Joinpoint;
    "FileJp": typeof FileJp;
    "Program": typeof Program;
    "Statement": typeof Statement;
};
type DefaultAttributeMap = {
    FileJp: "name";
};
export declare class Joinpoint extends LaraJoinPoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    /**
     * String with the code represented by this node
     */
    get code(): string;
    /**
     * Returns the parent node in the AST, or undefined if it is the root node
     */
    get parent(): Joinpoint;
    /**
     * Returns the 'program' join point
     */
    get root(): Program;
    /**
     * Replaces this node with the given node
     */
    replaceWith(node: Joinpoint): Joinpoint;
}
/**
 * Represents a source file (e.g., .f90)
 */
export declare class FileJp extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    /**
     * The name of the file
     */
    get name(): string;
}
/**
 * Represents the complete program and is the top-most join point in the hierarchy
 */
export declare class Program extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Represents a Fortran statement
 */
export declare class Statement extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get isFirst(): boolean;
    get isLast(): boolean;
}
declare const JoinpointMapper: {
    joinpoint: typeof Joinpoint;
    file: typeof FileJp;
    program: typeof Program;
    statement: typeof Statement;
};
export {};
//# sourceMappingURL=Joinpoints.d.ts.map