import { LaraJoinPoint } from "@specs-feup/lara/api/LaraJoinPoint.js";
type PrivateMapper = {
    "Joinpoint": typeof Joinpoint;
    "ClassNode": typeof ClassNode;
    "Expression": typeof Expression;
    "FieldNode": typeof FieldNode;
    "FieldReference": typeof FieldReference;
    "LabelReference": typeof LabelReference;
    "Literal": typeof Literal;
    "Manifest": typeof Manifest;
    "MethodNode": typeof MethodNode;
    "MethodPrototype": typeof MethodPrototype;
    "MethodReference": typeof MethodReference;
    "Placeholder": typeof Placeholder;
    "PrimitiveLiteral": typeof PrimitiveLiteral;
    "Program": typeof Program;
    "RegisterList": typeof RegisterList;
    "RegisterRange": typeof RegisterRange;
    "RegisterReference": typeof RegisterReference;
    "ResourceNode": typeof ResourceNode;
    "SparseSwitchElement": typeof SparseSwitchElement;
    "Statement": typeof Statement;
    "TypeDescriptor": typeof TypeDescriptor;
    "ArrayType": typeof ArrayType;
    "Catch": typeof Catch;
    "ClassType": typeof ClassType;
    "Instruction": typeof Instruction;
    "Label": typeof Label;
    "LineDirective": typeof LineDirective;
    "PackedSwitch": typeof PackedSwitch;
    "PrimitiveType": typeof PrimitiveType;
    "RegistersDirective": typeof RegistersDirective;
    "ReturnStatement": typeof ReturnStatement;
    "SparseSwitch": typeof SparseSwitch;
    "Switch": typeof Switch;
    "ThrowStatement": typeof ThrowStatement;
    "Goto": typeof Goto;
    "IfComparison": typeof IfComparison;
    "IfComparisonWithZero": typeof IfComparisonWithZero;
};
type DefaultAttributeMap = {};
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 representation of the ast
     */
    get ast(): string;
    /**
     * Returns an array with the children of the node, ignoring null nodes
     */
    get children(): Joinpoint[];
    /**
     * String with the code represented by this node
     */
    get code(): string;
    /**
     * Retrieves all descendants of the join point
     */
    get descendants(): Joinpoint[];
    /**
     * The id of the node
     */
    get id(): string;
    /**
     * Returns the parent node in the AST, or undefined if it is the root node
     */
    get parent(): Joinpoint;
    /**
     * Returns the 'program' joinpoint
     */
    get root(): Program;
    /**
     * Looks for an ancestor joinpoint name, walking back on the AST
     */
    getAncestor(type: string): Joinpoint;
    /**
     * Returns the child of the node at the given index, ignoring null nodes
     */
    getChild(index: number): Joinpoint;
    /**
     * Retrieves the descendants of the given type
     */
    getDescendants(type: string): Joinpoint[];
    /**
     * Retrieves the descendants of the given type, including the node itself
     */
    getDescendantsAndSelf(type: string): Joinpoint[];
    /**
     * Removes the node associated to this joinpoint from the AST
     */
    detach(): Joinpoint;
    /**
     * Inserts the given join point after this join point
     */
    insertAfter(node: Joinpoint): Joinpoint;
    /**
     * Overload which accepts a string
     */
    insertAfter(code: string): Joinpoint;
    /**
     * Inserts the given join point before this join point
     */
    insertBefore(node: Joinpoint): Joinpoint;
    /**
     * Overload which accepts a string
     */
    insertBefore(node: string): Joinpoint;
    /**
     * Replaces this node with the given node
     */
    replaceWith(node: Joinpoint): Joinpoint;
    /**
     * Overload which accepts a string
     */
    replaceWith(node: string): Joinpoint;
    /**
     * Overload which accepts a list of join points
     */
    replaceWith(node: Joinpoint[]): Joinpoint;
    /**
     * Overload which accepts a list of strings
     */
    replaceWithStrings(node: string[]): Joinpoint;
}
/**
 * Class definition
 */
export declare class ClassNode extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get classDescriptor(): ClassType;
    get fields(): FieldNode[];
    get methods(): MethodNode[];
    get superClassDescriptor(): ClassType;
}
/**
 * Expression
 */
export declare class Expression extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Field definition
 */
export declare class FieldNode extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get isStatic(): boolean;
    get name(): string;
    get referenceName(): string;
}
/**
 * Field reference
 */
export declare class FieldReference extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Label reference
 */
export declare class LabelReference extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get decl(): Label;
}
/**
 * Literal
 */
export declare class Literal extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * The application's manifest
 */
export declare class Manifest extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get activities(): string[];
    get packageName(): string;
    get services(): string[];
}
/**
 * Method definition
 */
export declare class MethodNode extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get isStatic(): boolean;
    get name(): string;
    get prototype(): MethodPrototype;
    get referenceName(): string;
    get registersDirective(): RegistersDirective;
}
/**
 * Method prototype
 */
export declare class MethodPrototype extends Literal {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get parameters(): TypeDescriptor[];
    get returnType(): TypeDescriptor;
}
/**
 * Method reference
 */
export declare class MethodReference extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get name(): string;
    get parentClassDescriptor(): TypeDescriptor;
    get prototype(): MethodPrototype;
}
/**
 * Placeholder node
 */
export declare class Placeholder extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get kind(): string;
}
/**
 * Primitive literal
 */
export declare class PrimitiveLiteral extends Literal {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    setValue(value: string): string;
}
/**
 * App node
 */
export declare class Program extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get classes(): ClassNode[];
    get manifest(): Manifest;
    buildApk(outputName: string): void;
}
/**
 * Register list
 */
export declare class RegisterList extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Register range
 */
export declare class RegisterRange extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Register reference
 */
export declare class RegisterReference extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Resource nodes, like xml files are not being handled for now
 */
export declare class ResourceNode extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Sparse switch element
 */
export declare class SparseSwitchElement extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get label(): LabelReference;
}
/**
 * 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 line(): LineDirective;
    get nextStatement(): Statement;
    get prevStatement(): Statement;
}
/**
 * Type descriptor
 */
export declare class TypeDescriptor extends Literal {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Array descriptor
 */
export declare class ArrayType extends TypeDescriptor {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Catch directive
 */
export declare class Catch extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get catch(): LabelReference;
    get exception(): TypeDescriptor;
    get tryEnd(): LabelReference;
    get tryStart(): LabelReference;
}
/**
 * Class descriptor
 */
export declare class ClassType extends TypeDescriptor {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get className(): string;
    get decl(): ClassNode;
    get packageName(): string;
}
/**
 * Instruction
 */
export declare class Instruction extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get canThrow(): boolean;
    get opCodeName(): string;
    get setsRegister(): boolean;
    get setsResult(): boolean;
}
/**
 * Label declaration
 */
export declare class Label extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get name(): string;
}
/**
 * Line directive
 */
export declare class LineDirective extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get value(): Literal;
}
/**
 * Packed switch directive
 */
export declare class PackedSwitch extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Primitive descriptor
 */
export declare class PrimitiveType extends TypeDescriptor {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Registers directive
 */
export declare class RegistersDirective extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get type(): string;
    get value(): PrimitiveLiteral;
}
/**
 * Smali instruction formats 10x, 11x
 */
export declare class ReturnStatement extends Instruction {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Sparse switch directive
 */
export declare class SparseSwitch extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Smali instruction format 31t
 */
export declare class Switch extends Instruction {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Smali instruction format 11x
 */
export declare class ThrowStatement extends Instruction {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Smali instruction formats 10t, 20t, 30t
 */
export declare class Goto extends Instruction {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get label(): LabelReference;
}
/**
 * Smali instruction format 22t
 */
export declare class IfComparison extends Instruction {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get label(): LabelReference;
}
/**
 * Smali instruction format 21t
 */
export declare class IfComparisonWithZero extends Instruction {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get label(): LabelReference;
}
declare const JoinpointMapper: {
    joinpoint: typeof Joinpoint;
    classNode: typeof ClassNode;
    expression: typeof Expression;
    fieldNode: typeof FieldNode;
    fieldReference: typeof FieldReference;
    labelReference: typeof LabelReference;
    literal: typeof Literal;
    manifest: typeof Manifest;
    methodNode: typeof MethodNode;
    methodPrototype: typeof MethodPrototype;
    methodReference: typeof MethodReference;
    placeholder: typeof Placeholder;
    primitiveLiteral: typeof PrimitiveLiteral;
    program: typeof Program;
    registerList: typeof RegisterList;
    registerRange: typeof RegisterRange;
    registerReference: typeof RegisterReference;
    resourceNode: typeof ResourceNode;
    sparseSwitchElement: typeof SparseSwitchElement;
    statement: typeof Statement;
    typeDescriptor: typeof TypeDescriptor;
    arrayType: typeof ArrayType;
    catch: typeof Catch;
    classType: typeof ClassType;
    instruction: typeof Instruction;
    label: typeof Label;
    lineDirective: typeof LineDirective;
    packedSwitch: typeof PackedSwitch;
    primitiveType: typeof PrimitiveType;
    registersDirective: typeof RegistersDirective;
    returnStatement: typeof ReturnStatement;
    sparseSwitch: typeof SparseSwitch;
    switch: typeof Switch;
    throwStatement: typeof ThrowStatement;
    goto: typeof Goto;
    ifComparison: typeof IfComparison;
    ifComparisonWithZero: typeof IfComparisonWithZero;
};
export {};
//# sourceMappingURL=Joinpoints.d.ts.map