import { TypeExpression, Generic, FunctionType } from "../gir.js";
import { IntrospectedBase, IntrospectedClassMember, IntrospectedNamespaceMember, Options } from "./base.js";
import { GirFunctionElement, GirMethodElement, GirDirection, GirCallableParamElement, GirCallbackElement, GirVirtualMethodElement, GirConstructorElement, GirModule } from "../index.js";
import { IntrospectedNamespace } from "./namespace.js";
import { IntrospectedClass } from "./class.js";
import { IntrospectedEnum } from "./enum.js";
import { IntrospectedSignal } from "./signal.js";
import { FormatGenerator } from "../generators/generator.js";
import { GirVisitor } from "../visitor.js";
import { IntrospectedField } from "./property.js";
import { IntrospectedBaseClass } from "./nodes.js";
import type { OptionsLoad } from "../types/index.js";
export declare class IntrospectedFunction extends IntrospectedNamespaceMember {
    readonly parameters: IntrospectedFunctionParameter[];
    readonly output_parameters: IntrospectedFunctionParameter[];
    readonly return_type: TypeExpression;
    readonly raw_name: string;
    generics: Generic[];
    returnTypeDoc: string | null;
    constructor({ name, raw_name, return_type, parameters, output_parameters, namespace, ...args }: Options<{
        name: string;
        raw_name: string;
        return_type?: TypeExpression;
        parameters?: IntrospectedFunctionParameter[];
        output_parameters?: IntrospectedFunctionParameter[];
        namespace: GirModule;
    }>);
    copy({ parent, outputParameters, parameters, return_type }?: {
        parent?: GirModule;
        parameters?: IntrospectedFunctionParameter[];
        outputParameters?: IntrospectedFunctionParameter[];
        return_type?: TypeExpression;
    }): IntrospectedFunction;
    accept(visitor: GirVisitor): IntrospectedFunction;
    static fromXML(element: GirFunctionElement | GirMethodElement, ns: IntrospectedNamespace, options: OptionsLoad): IntrospectedFunction;
    return(): TypeExpression;
    asCallback(): IntrospectedCallback;
    asClassFunction(parent: IntrospectedBaseClass | IntrospectedEnum): IntrospectedClassFunction;
    asVirtualClassFunction(parent: IntrospectedBaseClass): IntrospectedVirtualClassFunction;
    asStaticClassFunction(parent: IntrospectedBaseClass | IntrospectedEnum): IntrospectedStaticClassFunction;
    asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateFunction"]>;
}
export declare class IntrospectedDirectAllocationConstructor extends IntrospectedClassMember {
    parameters: IntrospectedFunctionParameter[];
    constructor(parameters: IntrospectedFunctionParameter[], parent: IntrospectedBaseClass | null);
    static fromFields(fields: IntrospectedField[], parent: IntrospectedBaseClass): IntrospectedDirectAllocationConstructor;
    asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateDirectAllocationConstructor"]>;
    copy(options?: {
        parent?: IntrospectedBaseClass | undefined;
        parameters?: IntrospectedFunctionParameter[];
    }): IntrospectedDirectAllocationConstructor;
    accept(visitor: GirVisitor): IntrospectedDirectAllocationConstructor;
}
export declare class IntrospectedConstructor extends IntrospectedClassMember {
    readonly parameters: IntrospectedFunctionParameter[];
    readonly return_type: TypeExpression;
    generics: Generic[];
    constructor({ name, parameters, return_type, parent, ...args }: Options<{
        name: string;
        parent: IntrospectedBaseClass | null;
        parameters?: IntrospectedFunctionParameter[];
        return_type: TypeExpression;
    }>);
    copy({ parent, parameters, return_type }?: {
        parent?: IntrospectedBaseClass;
        parameters?: IntrospectedFunctionParameter[];
        return_type?: TypeExpression;
    }): IntrospectedConstructor;
    static fromXML(m: GirConstructorElement, parent: IntrospectedBaseClass, options: OptionsLoad): IntrospectedConstructor;
    accept(visitor: GirVisitor): IntrospectedConstructor;
    return(): TypeExpression;
    asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateConstructor"]>;
}
export declare class IntrospectedFunctionParameter extends IntrospectedBase<IntrospectedClassFunction | IntrospectedFunction | IntrospectedSignal | IntrospectedConstructor | IntrospectedDirectAllocationConstructor | null> {
    readonly type: TypeExpression;
    readonly direction: GirDirection;
    readonly isVarArgs: boolean;
    readonly isOptional: boolean;
    readonly isNullable: boolean;
    constructor({ name, direction, type, parent, doc, isVarArgs, isOptional, isNullable, ...args }: Options<{
        name: string;
        parent?: IntrospectedClassFunction | IntrospectedFunction | IntrospectedSignal | IntrospectedConstructor | IntrospectedDirectAllocationConstructor | null;
        type: TypeExpression;
        direction: GirDirection;
        doc?: string | null;
        isVarArgs?: boolean;
        isOptional?: boolean;
        isNullable?: boolean;
    }>);
    get namespace(): GirModule;
    asField(): IntrospectedField;
    copy(options?: {
        parent?: IntrospectedClassFunction | IntrospectedFunction | IntrospectedSignal | IntrospectedConstructor | IntrospectedDirectAllocationConstructor | null;
        type?: TypeExpression;
        isOptional?: boolean;
        isNullable?: boolean;
    }): IntrospectedFunctionParameter;
    accept(visitor: GirVisitor): IntrospectedFunctionParameter;
    asString<T>(generator: FormatGenerator<T>): T;
    static fromXML<Parent extends IntrospectedSignal | IntrospectedClassFunction | IntrospectedFunction | IntrospectedConstructor>(parameter: GirCallableParamElement & {
        $: {
            name: string;
        };
    }, parent: Parent, options: OptionsLoad): IntrospectedFunctionParameter;
}
export declare class IntrospectedClassFunction<Parent extends IntrospectedBaseClass | IntrospectedEnum = IntrospectedBaseClass | IntrospectedEnum> extends IntrospectedBase<Parent> {
    readonly parameters: IntrospectedFunctionParameter[];
    protected readonly return_type: TypeExpression;
    readonly output_parameters: IntrospectedFunctionParameter[];
    protected _anyify: boolean;
    protected _generify: boolean;
    interfaceParent: IntrospectedBaseClass | IntrospectedEnum | null;
    returnTypeDoc?: string | null;
    generics: Generic[];
    constructor({ name, parameters, output_parameters, return_type, parent, doc, ...args }: Options<{
        name: string;
        parameters?: IntrospectedFunctionParameter[];
        output_parameters?: IntrospectedFunctionParameter[];
        return_type?: TypeExpression;
        parent: Parent;
        originalParent?: Parent | null;
        doc?: string | null;
    }>);
    get namespace(): GirModule;
    asCallback(): IntrospectedClassCallback;
    asConstructor(): IntrospectedConstructor;
    asStaticClassFunction(parent: IntrospectedClass): IntrospectedStaticClassFunction;
    copy({ parent, name, interfaceParent, parameters, outputParameters, returnType }?: {
        parent?: Parent;
        name?: string;
        interfaceParent?: IntrospectedBaseClass | IntrospectedEnum;
        parameters?: IntrospectedFunctionParameter[];
        outputParameters?: IntrospectedFunctionParameter[];
        returnType?: TypeExpression;
    }): IntrospectedClassFunction<Parent>;
    accept(visitor: GirVisitor): IntrospectedClassFunction<Parent>;
    anyify(): this;
    shouldAnyify(): boolean;
    static fromXML(element: GirFunctionElement | GirMethodElement, parent: IntrospectedBaseClass | IntrospectedEnum, options: OptionsLoad): IntrospectedClassFunction;
    return(): TypeExpression;
    asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateClassFunction"]>;
}
export declare class IntrospectedVirtualClassFunction extends IntrospectedClassFunction<IntrospectedBaseClass> {
    constructor({ name, parameters, output_parameters, return_type, parent, doc, ...args }: Options<{
        name: string;
        parameters: IntrospectedFunctionParameter[];
        output_parameters?: IntrospectedFunctionParameter[];
        return_type?: TypeExpression;
        parent: IntrospectedBaseClass;
        doc?: string | null;
    }>);
    copy({ parent, interfaceParent, parameters, outputParameters, returnType }: {
        parent?: IntrospectedBaseClass;
        interfaceParent?: IntrospectedBaseClass | IntrospectedEnum | undefined;
        parameters?: IntrospectedFunctionParameter[] | undefined;
        outputParameters?: IntrospectedFunctionParameter[] | undefined;
        returnType?: TypeExpression | undefined;
    }): IntrospectedVirtualClassFunction;
    return(): TypeExpression;
    accept(visitor: GirVisitor): IntrospectedVirtualClassFunction;
    static fromXML(m: GirVirtualMethodElement, parent: IntrospectedBaseClass, options: OptionsLoad): IntrospectedVirtualClassFunction;
    asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateVirtualClassFunction"]>;
}
export declare class IntrospectedStaticClassFunction extends IntrospectedClassFunction {
    asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateStaticClassFunction"]>;
    copy({ parent, interfaceParent, parameters, outputParameters, returnType }?: {
        parent?: IntrospectedBaseClass | IntrospectedEnum;
        interfaceParent?: IntrospectedBaseClass | IntrospectedEnum | undefined;
        parameters?: IntrospectedFunctionParameter[] | undefined;
        outputParameters?: IntrospectedFunctionParameter[] | undefined;
        returnType?: TypeExpression | undefined;
    }): IntrospectedStaticClassFunction;
    accept(visitor: GirVisitor): IntrospectedStaticClassFunction;
    asClassFunction(parent: IntrospectedBaseClass): IntrospectedClassFunction;
    static fromXML(m: GirFunctionElement, parent: IntrospectedBaseClass | IntrospectedEnum, options: OptionsLoad): IntrospectedStaticClassFunction;
}
export declare class IntrospectedCallback extends IntrospectedFunction {
    asFunctionType(): FunctionType;
    copy({ parameters, returnType, outputParameters, parent }?: {
        parent?: GirModule;
        parameters?: IntrospectedFunctionParameter[];
        outputParameters?: IntrospectedFunctionParameter[];
        returnType?: TypeExpression;
    }): IntrospectedCallback;
    accept(visitor: GirVisitor): IntrospectedCallback;
    static fromXML(element: GirCallbackElement, namespace: GirModule, options: OptionsLoad): IntrospectedCallback;
    asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateCallback"]>;
}
export declare class IntrospectedClassCallback extends IntrospectedClassFunction {
    asFunctionType(): FunctionType;
    copy({ parameters, returnType, outputParameters, parent }?: {
        parent?: IntrospectedBaseClass;
        parameters?: IntrospectedFunctionParameter[];
        outputParameters?: IntrospectedFunctionParameter[];
        returnType?: TypeExpression;
    }): IntrospectedClassCallback;
    accept(visitor: GirVisitor): IntrospectedClassCallback;
    static fromXML(element: GirCallbackElement, parent: IntrospectedBaseClass, options: OptionsLoad): IntrospectedClassCallback;
    asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateClassCallback"]>;
}
