import * as abaplint from "@abaplint/core";
import { Chunk } from "./chunk";
import { ITranspilerOptions } from "./types";
export declare class Traversal {
    private readonly spaghetti;
    private readonly file;
    private readonly obj;
    readonly reg: abaplint.IRegistry;
    readonly options: ITranspilerOptions | undefined;
    constructor(spaghetti: abaplint.ISpaghettiScope, file: abaplint.ABAPFile, obj: abaplint.ABAPObject, reg: abaplint.IRegistry, options?: ITranspilerOptions);
    static escapeNamespace(name: string | undefined): string | undefined;
    static prefixVariable(name: string | undefined): string;
    getCurrentObject(): abaplint.ABAPObject;
    traverse(node: abaplint.INode | undefined): Chunk;
    getFilename(): string;
    getFile(): abaplint.ABAPFile;
    getSpaghetti(): abaplint.ISpaghettiScope;
    /** finds a statement in the _current_ file given a position */
    findStatementInFile(pos: abaplint.Position): abaplint.Nodes.StatementNode | undefined;
    private scopeCache;
    findCurrentScopeByToken(token: abaplint.Token): abaplint.ISpaghettiScopeNode | undefined;
    private fuctionGroupWorkaround;
    getInterfaceDefinition(token: abaplint.Token): abaplint.IInterfaceDefinition | undefined;
    getClassDefinition(token: abaplint.Token): abaplint.IClassDefinition | undefined;
    private isClassAttribute;
    prefixAndName(t: abaplint.Token, filename?: string): string;
    private isStaticClassAttribute;
    buildMethods(def: abaplint.IClassDefinition | abaplint.IInterfaceDefinition | undefined, _scope: abaplint.ISpaghettiScopeNode | undefined): string[];
    private mapVisibility;
    buildAttributes(def: abaplint.IClassDefinition | abaplint.IInterfaceDefinition | undefined, scope: abaplint.ISpaghettiScopeNode | undefined, prefix?: string): Set<string>;
    isBuiltinMethod(token: abaplint.Token): boolean;
    isSQLConversion(token: abaplint.Token): string | undefined;
    findMethodReference(token: abaplint.Token, scope: abaplint.ISpaghettiScopeNode | undefined): undefined | {
        def: abaplint.Types.MethodDefinition;
        name: string;
    };
    private isBuiltinVariable;
    isTypePool(token: abaplint.Token): string | undefined;
    isInterfaceAttribute(token: abaplint.Token): string | undefined;
    private findReadOrWriteReference;
    private buildThisAttributes;
    private buildFriendsAccess;
    buildConstructorContents(scope: abaplint.ISpaghettiScopeNode | undefined, def: abaplint.IClassDefinition): string;
    findInterfaceDefinition(name: string, scope: abaplint.ISpaghettiScopeNode | undefined): abaplint.IInterfaceDefinition | undefined;
    findTable(name: string): abaplint.Objects.Table | undefined;
    findClassDefinition(name: string | undefined, scope: abaplint.ISpaghettiScopeNode | undefined): abaplint.IClassDefinition | undefined;
    private dataFromInterfaces;
    private aliasesFromInterfaces;
    determineType(node: abaplint.Nodes.ExpressionNode | abaplint.Nodes.StatementNode, scope: abaplint.ISpaghettiScopeNode | undefined): abaplint.AbstractType | undefined;
    isInsideLoop(node: abaplint.Nodes.StatementNode): boolean;
    isInsideDoOrWhile(node: abaplint.Nodes.StatementNode): boolean;
    registerClassOrInterface(def: abaplint.IClassDefinition | abaplint.IInterfaceDefinition | undefined): string;
    setValues(identifier: abaplint.TypedIdentifier, name: string): string;
    static setValues(identifier: abaplint.TypedIdentifier, name: string): string;
    buildInternalName(name: string, def: abaplint.IClassDefinition | abaplint.IInterfaceDefinition | undefined): string;
    lookupClassOrInterface(name: string | undefined, token: abaplint.Token | undefined, directGlobal?: boolean): string;
    buildPrefix(): string;
    protected traverseStructure(node: abaplint.Nodes.StructureNode): Chunk;
    protected traverseStatement(node: abaplint.Nodes.StatementNode): Chunk;
    protected traverseExpression(node: abaplint.Nodes.ExpressionNode): Chunk;
}
