import { ClassDeclaration, ConstructorDeclaration, MethodDeclaration, PropertyDeclaration, TypeChecker } from "ts-morph";
import { UI5TSParser } from "../../../../parser/UI5TSParser";
import { IUIAssociation, IUIProperty } from "../AbstractBaseClass";
import { AbstractCustomClass, ICustomClassField, ICustomClassMethod, IUIDefine, IViewsAndFragmentsCache } from "../AbstractCustomClass";
export interface ICustomClassTSField extends ICustomClassField<PropertyDeclaration> {
}
export interface ICustomClassTSMethod extends ICustomClassMethod<MethodDeclaration> {
}
export interface ICustomClassTSConstructor extends ICustomClassMethod<ConstructorDeclaration> {
}
export declare class CustomTSClass extends AbstractCustomClass<MethodDeclaration, PropertyDeclaration, ClassDeclaration, ClassInfo> {
    parentClassNameDotNotation: string;
    readonly typeChecker: TypeChecker;
    protected _fillIsAbstract(): void;
    protected _getUIDefine(): IUIDefine<any>[];
    protected _fillParentClassName(): void;
    methods: ICustomClassTSMethod[];
    fields: ICustomClassTSField[];
    constructors: ICustomClassTSConstructor[];
    fsPath: string;
    defaultModelClassName?: string;
    readonly classText: string;
    UIDefine: IUIDefine[];
    relatedViewsAndFragments?: IViewsAndFragmentsCache[];
    readonly node: ClassDeclaration;
    private readonly _sourceFile;
    constructor(classDeclaration: ClassDeclaration, parser: UI5TSParser, typeChecker: TypeChecker);
    private _fillClassJSDoc;
    private _fillDefaultModelClassName;
    private _fillClassDescription;
    loadTypes(): void;
    _fillUIDefine(): void;
    private _generateClassNameDotNotationFor;
    private _guessTypeFromUIDefine;
    protected _fillFields(metadata?: ClassInfo, fillTypes?: boolean): ICustomClassTSField[];
    private _guessTypeFromInitialization;
    protected _fillMethods(metadata?: ClassInfo, fillTypes?: boolean): ICustomClassTSMethod[];
    private _modifyType;
    protected _fillUI5Metadata(classInfo?: ClassInfo, fillTypes?: boolean): void;
    private _fillConstructors;
    protected _fillInterfaces(metadata: ClassInfo): string[];
    protected _fillAggregations(metadata: ClassInfo): {
        name: string;
        type: string;
        multiple: boolean;
        singularName: string;
        description: string;
        visibility: string;
        default: boolean;
    }[];
    protected _fillEvents(metadata: ClassInfo): {
        name: string;
        description: string;
        visibility: string;
        params: {
            name: string;
            type: string;
        }[];
    }[];
    protected _fillProperties(metadata: ClassInfo): IUIProperty[];
    protected _fillAssociations(metadata: ClassInfo): IUIAssociation[];
}
interface APIMember {
    name: string;
    doc?: string;
    since?: string;
    deprecation?: string;
    experimental?: string;
    visibility?: string;
}
interface APIMemberWithMethods extends APIMember {
    methods: {
        [key: string]: string;
    };
}
interface APIMemberWithType extends APIMember {
    type: string;
}
interface Property extends APIMemberWithMethods, APIMemberWithType {
    defaultValue?: any;
    bindable?: boolean;
}
interface Aggregation extends APIMemberWithMethods, APIMemberWithType {
    cardinality: "0..1" | "0..n";
    altTypes: [string];
    singularName: string;
    bindable: boolean;
}
interface Association extends APIMemberWithMethods, APIMemberWithType {
    cardinality: "0..1" | "0..n";
    singularName: string;
}
interface UI5Event extends APIMemberWithMethods {
    allowPreventDefault: boolean;
    enableEventBubbling: boolean;
    parameters: {
        [key: string]: EventParameter;
    };
}
interface EventParameter {
    name: string;
    doc: string;
    deprecation: string;
    since: string;
    experimental: string;
    type: string;
}
type SpecialSetting = APIMemberWithType;
interface ClassInfo {
    name?: string;
    interfaces?: string[];
    doc?: string;
    deprecation?: string;
    since?: string;
    experimental?: string;
    specialSettings?: {
        [key: string]: SpecialSetting;
    };
    properties?: {
        [key: string]: Property;
    };
    defaultProperty?: string;
    aggregations?: {
        [key: string]: Aggregation;
    };
    defaultAggregation?: string;
    associations?: {
        [key: string]: Association;
    };
    events?: {
        [key: string]: UI5Event;
    };
    methods?: Record<string, unknown>;
    annotations?: Record<string, unknown>;
    designtime?: boolean | string;
    designTime?: boolean | string;
    stereotype?: null;
    metadataClass?: undefined;
    library?: string;
    abstract?: boolean;
    final?: boolean;
}
export {};
