import { LaraJoinPoint } from "@specs-feup/lara/api/LaraJoinPoint.js";
type PrivateMapper = {
    "Joinpoint": typeof Joinpoint;
    "NamedType": typeof NamedType;
    "App": typeof App;
    "Catch": typeof Catch;
    "Declaration": typeof Declaration;
    "Executable": typeof Executable;
    "Expression": typeof Expression;
    "Field": typeof Field;
    "FileJp": typeof FileJp;
    "LibClass": typeof LibClass;
    "LibMethod": typeof LibMethod;
    "Literal": typeof Literal;
    "Method": typeof Method;
    "New": typeof New;
    "Reference": typeof Reference;
    "SnippetExpr": typeof SnippetExpr;
    "Statement": typeof Statement;
    "Switch": typeof Switch;
    "Ternary": typeof Ternary;
    "This": typeof This;
    "Throw": typeof Throw;
    "Try": typeof Try;
    "Type": typeof Type;
    "TypeReference": typeof TypeReference;
    "UnaryExpression": typeof UnaryExpression;
    "Var": typeof Var;
    "XmlNode": typeof XmlNode;
    "AndroidManifest": typeof AndroidManifest;
    "Annotation": typeof Annotation;
    "AnonymousExec": typeof AnonymousExec;
    "ArrayAccess": typeof ArrayAccess;
    "Assert": typeof Assert;
    "Assignment": typeof Assignment;
    "BinaryExpression": typeof BinaryExpression;
    "Body": typeof Body;
    "Break": typeof Break;
    "Call": typeof Call;
    "CallStatement": typeof CallStatement;
    "Case": typeof Case;
    "Class": typeof Class;
    "Comment": typeof Comment;
    "Constructor": typeof Constructor;
    "Continue": typeof Continue;
    "Enum": typeof Enum;
    "EnumValue": typeof EnumValue;
    "FieldAccess": typeof FieldAccess;
    "If": typeof If;
    "InterfaceType": typeof InterfaceType;
    "LocalVariable": typeof LocalVariable;
    "Loop": typeof Loop;
    "OpAssignment": typeof OpAssignment;
    "Pragma": typeof Pragma;
    "Return": typeof Return;
    "SnippetStmt": typeof SnippetStmt;
    "XmlElement": typeof XmlElement;
};
type DefaultAttributeMap = {
    NamedType: "name";
    App: "name";
    Declaration: "name";
    Executable: "name";
    Expression: "exprType";
    Field: "name";
    FileJp: "name";
    LibClass: "name";
    LibMethod: "name";
    Literal: "value";
    Method: "name";
    New: "name";
    Reference: "name";
    SnippetExpr: "exprType";
    Statement: "kind";
    Switch: "kind";
    Ternary: "exprType";
    This: "exprType";
    Throw: "kind";
    Try: "kind";
    Type: "name";
    TypeReference: "name";
    UnaryExpression: "operator";
    Var: "name";
    Annotation: "exprType";
    AnonymousExec: "name";
    ArrayAccess: "name";
    Assert: "kind";
    Assignment: "operator";
    BinaryExpression: "operator";
    Body: "kind";
    Break: "kind";
    Call: "name";
    CallStatement: "kind";
    Case: "kind";
    Class: "name";
    Comment: "type";
    Constructor: "name";
    Continue: "kind";
    Enum: "name";
    EnumValue: "name";
    FieldAccess: "name";
    If: "kind";
    InterfaceType: "name";
    LocalVariable: "name";
    Loop: "type";
    OpAssignment: "operator";
    Pragma: "name";
    Return: "kind";
    SnippetStmt: "kind";
    XmlElement: "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;
    };
    /**
     * An array of the annotations of this node
     */
    get annotations(): Annotation[];
    /**
     * A string representation of the AST corresponding to this node
     */
    get ast(): string;
    /**
     * Alias of attribute 'parent'
     */
    get astParent(): Joinpoint;
    /**
     * Returns an array with the children of the node
     */
    get children(): Joinpoint[];
    /**
     * The source code corresponding to this join point
     */
    get code(): string;
    get descendants(): Joinpoint[];
    /**
     * Unique identifier for node
     */
    get id(): string;
    /**
     * True if this node is considered a block of statements
     */
    get isBlock(): boolean;
    /**
     * True if this node has the modifier 'final'
     */
    get isFinal(): boolean;
    /**
     * True if the node is inside a loop header, false otherwise
     */
    get isInsideLoopHeader(): boolean;
    /**
     * True if this node is considered a statement
     */
    get isStatement(): boolean;
    /**
     * True if this node has the modifier 'static'
     */
    get isStatic(): boolean;
    /**
     * Sibling nodes to the left of this node
     */
    get left(): Joinpoint[];
    get line(): number;
    /**
     * An array of modifiers (e.g., final, static) applied to this node. If no modifiers are applied, or if the node does not support modifiers, returns an empty array
     */
    get modifiers(): string[];
    /**
     * An array of modifiers (e.g., final, static) applied to this node. If no modifiers are applied, or if the node does not support modifiers, returns an empty array
     */
    set modifiers(value: string[]);
    /**
     * Returns the number of children of the node
     */
    get numChildren(): number;
    get parent(): Joinpoint;
    /**
     * Sibling nodes to the right of this node
     */
    get right(): Joinpoint[];
    /**
     * Alias for attribute 'code'
     */
    get srcCode(): string;
    /**
     * Returns the child of the node at the given index
     */
    child(index: number): Joinpoint;
    getAncestor(type: string): Joinpoint;
    /**
     * True if this node has the given modifier
     */
    hasModifier(modifier: string): boolean;
    copy(): Joinpoint;
    insertAfter(node: Joinpoint): Joinpoint;
    insertAfter(code: string): Joinpoint;
    insertBefore(node: Joinpoint): Joinpoint;
    insertBefore(code: string): Joinpoint;
    insertReplace(jp: Joinpoint): Joinpoint;
    insertReplace(code: string): Joinpoint;
    remove(): void;
    removeAnnotation(annotation: Annotation): void;
    removeModifier(modifier: string): void;
    replaceWith(jp: Joinpoint): Joinpoint;
    replaceWith(code: string): Joinpoint;
    setModifiers(modifiers: string[]): void;
}
export declare class NamedType extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    /**
     * List of names of interfaces that this type implements
     */
    get interfaces(): string[];
    get javadoc(): string;
    /**
     * The simple name of the type
     */
    get name(): string;
    /**
     * Package name of this type
     */
    get packageName(): string;
    /**
     * The qualified name of this type, includes packages
     */
    get qualifiedName(): string;
    /**
     * Name of the superclass this type extends
     */
    get superClass(): string;
    /**
     * Verify if the type is extends OR implements the given type
     */
    isSubtypeOf(type: string): boolean;
}
/**
 * Root node that represents the application
 */
export declare class App extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get files(): FileJp[];
    get folder(): string;
    get manifest(): AndroidManifest;
    showAST(Title: string): string;
    mapVersions(name: string, keyType: string, interfaceType: InterfaceType, methodName: string): Class;
    newClass(name: string, extend: string, implement: string[]): Class;
    newClass(name: string): Class;
    newInterface(name: string, extend: string[]): InterfaceType;
    newInterface(name: string): InterfaceType;
}
export declare class Catch extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get body(): Body;
}
export declare class Declaration extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get completeType(): string;
    get init(): Expression;
    set init(value: Expression);
    get isArray(): boolean;
    get isPrimitive(): boolean;
    get name(): string;
    get type(): string;
    get typeReference(): TypeReference;
    setInit(value: Expression): void;
}
export declare class Executable extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get body(): Body;
    get name(): string;
    set name(value: string);
    get params(): Declaration[];
    get returnRef(): TypeReference;
    get returnType(): string;
    /**
     * Sets the name of this executable, returns the previous name
     */
    setName(name: string): string;
}
export declare class Expression extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get kind(): string;
    get qualifiedType(): string;
    get test(): number;
    get type(): string;
    get typeReference(): TypeReference;
    extract(varName: string, location: Statement, position: string): void;
}
export declare class Field extends Declaration {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get declarator(): string;
    get staticAccess(): string;
}
/**
 * Represents a source-code file
 */
export declare class FileJp extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get dir(): string;
    /**
     * Main class of the file. Java files must have a top level class with the same name as the file.
     */
    get mainClass(): Type;
    get name(): string;
    get numClasses(): number;
    get numInterfaces(): number;
    get packageName(): string;
    get path(): string;
    /**
     * Insert a given class inside the target
     */
    addClass(newClass: Class): void;
    addImport(qualifiedName: string): void;
    addInterface(newInterface: InterfaceType): void;
    mapVersions(name: string, keyType: string, interfaceType: InterfaceType, methodName: string): Class;
    newClass(name: string, extend: string, implement: string[]): Class;
    newClass(name: string): Class;
    newInterface(name: string, extend: string[]): InterfaceType;
    newInterface(name: string): InterfaceType;
    removeInterface(interfaceName: string): InterfaceType;
}
/**
 * Class that is part of a library, included in the classpath
 */
export declare class LibClass extends NamedType {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
/**
 * Method of a class that is part of a library included in the classpath
 */
export declare class LibMethod extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get declarator(): NamedType;
    /**
     * The simple name of the type
     */
    get name(): string;
    get returnType(): string;
}
export declare class Literal extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get value(): string;
    set value(value: string);
    setValue(value: string): void;
}
export declare class Method extends Executable {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get declarator(): string;
    get privacy(): string;
    get toQualifiedReference(): string;
    get toReference(): string;
    isOverriding(method: Method): boolean;
    addComment(comment: string): void;
    addParameter(type: string, name: string): void;
    clone(newName: string): Method;
    createAdapter(adaptMethod: Method, name: string): Class;
}
export declare class New extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get arguments(): Expression[];
    set arguments(value: Expression[]);
    get name(): string;
    setArguments(newArguments: Expression[]): void;
}
/**
 * Points to a named program element reference
 */
export declare class Reference extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    /**
     * The element that is being referenced
     */
    get declaration(): Joinpoint;
    /**
     * Name of the element of the reference
     */
    get name(): string;
    /**
     * Type of the element of the reference
     */
    get type(): string;
}
export declare class SnippetExpr extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    setLine(line: number): void;
}
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 endLine(): number;
    get kind(): string;
}
export declare class Switch extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get cases(): Case[];
}
export declare class Ternary extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    /**
     * Alias for attribute 'condition'
     */
    get cond(): Expression;
    /**
     * The condition of the ternary expression
     */
    get condition(): Expression;
    get else(): Expression;
    get then(): Expression;
}
export declare class This extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
export declare class Throw extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
export declare class Try extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get body(): Body;
    get catches(): Catch[];
}
/**
 * Base join point that class, interface and enum extend
 */
export declare class Type extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    /**
     * List of names of interfaces that this class implements
     */
    get interfaces(): string[];
    /**
     * Returns the interface join points that this class implements
     */
    get interfacesTypes(): InterfaceType[];
    get javadoc(): string;
    /**
     * The simple name of the class
     */
    get name(): string;
    /**
     * Package name of this class
     */
    get packageName(): string;
    /**
     * The qualified name of this class, includes packages
     */
    get qualifiedName(): string;
    /**
     * Name of the superclass this class extends
     */
    get superClass(): string;
    /**
     * The superclass this class extends, or undefined if the class extends java.lang.Object
     */
    get superClassJp(): TypeReference;
    /**
     * Verify if the type is extends OR implements the given type
     */
    isSubtypeOf(type: string): boolean;
    /**
     * Insert a given class inside the target
     */
    addClass(newClass: Class): void;
    addImplement(interfaceType: InterfaceType): void;
    addInterface(newInterface: InterfaceType): void;
    insertCode(code: string): void;
    insertMethod(code: string): void;
    newField(modifiers: string[], type: string, name: string, defaultValue?: string): Field;
    newField(modifiers: string[], type: string, name: string): Field;
    /**
     * Add a new method inside the class
     */
    newMethod(modifiers: string[], returnType: string, name: string, paramLeft: string[], paramRight: string[], code: string): Method;
    /**
     * Overload which accepts 4 parameters (code is empty string)
     */
    newMethod(modifiers: string[], returnType: string, name: string, paramLeft: string[], paramRight: string[]): Method;
    removeInterface(interfaceName: string): InterfaceType;
}
/**
 * Reference to a type
 */
export declare class TypeReference extends Reference {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    /**
     * True if this is a reference to an array type, false otherwise
     */
    get isArray(): boolean;
    /**
     * True if this is a reference to a boolean type, primitive or class (i.e., boolean, Boolean)
     */
    get isBoolean(): boolean;
    /**
     * True if this is a reference to a numeric type, primitive or class (i.e., byte, Byte, char, Character, short, Short, int, Integer, long, Long, float, Float, double and Double)
     */
    get isNumeric(): boolean;
    /**
     * True if this is a reference to a primitive type, false otherwise
     */
    get isPrimitive(): boolean;
    /**
     * Package name of this type
     */
    get packageName(): string;
    /**
     * The package name of this type as an array, where each element is a part of the package
     */
    get packageNames(): string[];
    /**
     * Fully qualified name of the type
     */
    get qualifiedName(): string;
}
export declare class UnaryExpression extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get operand(): Expression;
    get operator(): string;
    set operator(value: string);
    /**
     * Sets the operator of the unary expression. To distinguish between postfix and prefix operator, add an underscore signalling the place of the variable (e.g., _++ for postfix incremment). If no underscore is specified, postfix is assumed.
     */
    setOperator(operator: string): void;
}
export declare class Var extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get declaration(): Joinpoint;
    /**
     * Equivalent to the global attribute 'isInsideLoopHeader'
     */
    get inLoopHeader(): boolean;
    get isArray(): boolean;
    get isField(): boolean;
    get isPrimitive(): boolean;
    get name(): string;
    get reference(): RefType;
    /**
     * The chain of references of this variable (e.g., this.field)
     */
    get referenceChain(): Joinpoint[];
}
export declare class XmlNode extends Joinpoint {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get elements(): XmlElement[];
    get text(): string;
    set text(value: string);
    elementsByName(name: string): XmlElement[];
    setText(text: string): string;
}
export declare class AndroidManifest extends XmlNode {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get asJson(): object;
}
export declare class Annotation extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
export declare class AnonymousExec extends Executable {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
export declare class ArrayAccess extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get reference(): RefType;
}
export declare class Assert extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
export declare class Assignment extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get lhs(): Expression;
    set lhs(value: Expression);
    get operator(): string;
    get rhs(): Expression;
    set rhs(value: Expression);
    setLhs(lhs: Expression): void;
    setRhs(rhs: Expression): void;
}
export declare class BinaryExpression extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get lhs(): Expression;
    get operands(): Expression[];
    get operator(): string;
    set operator(value: string);
    get rhs(): Expression;
    setOperator(operator: string): void;
}
export declare class Body extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    /**
     * The last statement of the body, or undefined if it has no statements
     */
    get lastStmt(): Statement;
    insertBegin(code: string): void;
    insertBegin(statement: Statement): void;
}
export declare class Break extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
export declare class Call extends Expression {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get arguments(): Expression[];
    set arguments(value: Expression[]);
    get decl(): Method;
    get declarator(): string;
    get executable(): string;
    set executable(value: Method);
    get name(): string;
    get qualifiedDecl(): string;
    get returnType(): string;
    get returnTypeJp(): TypeReference;
    get simpleDecl(): string;
    get target(): string;
    set target(value: Expression | string);
    get targetType(): Type;
    clone(location: Statement, position: string): Call;
    setArgument(newArgument: Expression, index: number): void;
    setArguments(newArguments: Expression[]): void;
    setExecutable(executable: Method): Call;
    setTarget(target?: Expression): Call;
    setTarget(target?: string): Call;
}
export declare class CallStatement extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get call(): Call;
}
export declare class Case extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    /**
     * The expression associated with this case, of undefined if it is the default case
     */
    get expr(): Expression;
    /**
     * True if this is the default case, false otherwise
     */
    get isDefault(): boolean;
    /**
     * The statements of this case
     */
    get stmts(): Statement[];
}
/**
 * Join point representation of a class
 */
export declare class Class extends Type {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get isTopLevel(): boolean;
    extractInterface(name: string, packageName: string, method: Method, associate: boolean | undefined, newFile: boolean): InterfaceType;
    insertStatic(code: string): void;
    mapVersions(name: string, keyType: string, interfaceType: InterfaceType, methodName: string): Class;
    newConstructor(modifiers?: string[], paramLeft?: string[], paramRight?: string[]): Constructor;
    newFunctionalClass(interfaceMethod: Method, generatorMethod: Method): Method;
}
export declare class Comment extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get content(): string;
    get type(): CommentType;
}
export declare class Constructor extends Executable {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get declarator(): string;
}
export declare class Continue extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
export declare class Enum extends Class {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
export declare class EnumValue extends Field {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
export declare class FieldAccess extends Var {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
export declare class If extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get cond(): Expression;
    get else(): Body;
    get rank(): string;
    get then(): Body;
}
export declare class InterfaceType extends Type {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
export declare class LocalVariable extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get completeType(): string;
    /**
     * Initialization of this variable, if present, or undefined of unintialized
     */
    get init(): Expression;
    /**
     * Initialization of this variable, if present, or undefined of unintialized
     */
    set init(value: Expression);
    get isArray(): boolean;
    get isPrimitive(): boolean;
    get name(): string;
    get type(): string;
    get typeReference(): TypeReference;
    setInit(init: Expression): void;
}
export declare class Loop extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get cond(): Expression;
    get controlVar(): string;
    get isInnermost(): boolean;
    get isOutermost(): boolean;
    get nestedLevel(): number;
    get rank(): string;
    get type(): LoopType;
    interchange(loop2: Loop): void;
    tile(tileName: string, block: string, unique: boolean, around?: Joinpoint): Field;
    tile(block: number): void;
}
export declare class OpAssignment extends Assignment {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    setOperator(operator: string): void;
}
export declare class Pragma extends Comment {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    get name(): string;
}
export declare class Return extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
}
export declare class SnippetStmt extends Statement {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    setLine(line: number): void;
}
export declare class XmlElement extends XmlNode {
    /**
     * @internal
     */
    static readonly _defaultAttributeInfo: {
        readonly map?: DefaultAttributeMap;
        readonly name: string | null;
        readonly type?: PrivateMapper;
        readonly jpMapper?: typeof JoinpointMapper;
    };
    /**
     * A list of available attributes in this element
     */
    get attributeNames(): string[];
    /**
     * The name (i.e., tag) of this element
     */
    get name(): string;
    /**
     * The value associated with the given attribute
     */
    attribute(name: string): string;
    setAttribute(name: string, value: string): string;
}
export declare enum LoopType {
    DOWHILE = "dowhile",
    FOR = "for",
    FOREACH = "foreach",
    WHILE = "while"
}
export declare enum CommentType {
    BLOCK = "block",
    FILE = "file",
    INLINE = "inline",
    JAVADOC = "javadoc",
    PRAGMA = "pragma"
}
export declare enum RefType {
    DECL = "decl",
    READ = "read",
    READWRITE = "readwrite",
    WRITE = "write"
}
declare const JoinpointMapper: {
    joinpoint: typeof Joinpoint;
    NamedType: typeof NamedType;
    app: typeof App;
    catch: typeof Catch;
    declaration: typeof Declaration;
    executable: typeof Executable;
    expression: typeof Expression;
    field: typeof Field;
    file: typeof FileJp;
    libClass: typeof LibClass;
    libMethod: typeof LibMethod;
    literal: typeof Literal;
    method: typeof Method;
    new: typeof New;
    reference: typeof Reference;
    snippetExpr: typeof SnippetExpr;
    statement: typeof Statement;
    switch: typeof Switch;
    ternary: typeof Ternary;
    this: typeof This;
    throw: typeof Throw;
    try: typeof Try;
    type: typeof Type;
    typeReference: typeof TypeReference;
    unaryExpression: typeof UnaryExpression;
    var: typeof Var;
    xmlNode: typeof XmlNode;
    androidManifest: typeof AndroidManifest;
    annotation: typeof Annotation;
    anonymousExec: typeof AnonymousExec;
    arrayAccess: typeof ArrayAccess;
    assert: typeof Assert;
    assignment: typeof Assignment;
    binaryExpression: typeof BinaryExpression;
    body: typeof Body;
    break: typeof Break;
    call: typeof Call;
    callStatement: typeof CallStatement;
    case: typeof Case;
    class: typeof Class;
    comment: typeof Comment;
    constructor: typeof Constructor;
    continue: typeof Continue;
    enum: typeof Enum;
    enumValue: typeof EnumValue;
    fieldAccess: typeof FieldAccess;
    if: typeof If;
    interfaceType: typeof InterfaceType;
    localVariable: typeof LocalVariable;
    loop: typeof Loop;
    opAssignment: typeof OpAssignment;
    pragma: typeof Pragma;
    return: typeof Return;
    snippetStmt: typeof SnippetStmt;
    xmlElement: typeof XmlElement;
};
export {};
//# sourceMappingURL=Joinpoints.d.ts.map