export declare enum TypeKind { OBJECT = 0, PRIMITIVE = 1, METHOD = 2, ARRAY = 3, TYPE_VARIABLE = 4, TYPE_PARAMETER = 5, PARAMETERIZED = 6, WILDCARD = 7, CLASS = 8 } export interface Type { kind: TypeKind; name: string; value: string; } export declare const PrimitiveType: { VOID: Type; BOOLEAN: Type; BYTE: Type; CHAR: Type; SHORT: Type; INT: Type; LONG: Type; FLOAT: Type; DOUBLE: Type; }; export interface ArrayType extends Type { kind: TypeKind.ARRAY; dimensions: number; elementType: Type; } export interface TypeVariable extends Type { kind: TypeKind.TYPE_VARIABLE; identifier: string; } export interface TypeParameter extends Type { kind: TypeKind.TYPE_PARAMETER; identifier: string; classBound?: Type; interfaceBounds?: Type[]; } export interface ParameterizedType extends Type { kind: TypeKind.PARAMETERIZED; rawType: Type; typeArguments: Type[]; } export declare enum WildcardBoundType { UNBOUNDED = 0, EXTENDS = 1, SUPER = 2 } export interface WildcardType extends Type { kind: TypeKind.WILDCARD; bound?: Type; boundType: WildcardBoundType; } export interface MethodType extends Type { kind: TypeKind.METHOD; parameters: Type[]; returnType: Type; typeParameters?: TypeParameter[]; } export interface ClassType extends Type { kind: TypeKind.CLASS; typeParameters: TypeParameter[]; superClass: Type; interfaces: Type[]; } export declare const objectType: (desc: string) => Type; export declare const arrayType: (elementType: Type, dimensions: number) => ArrayType; export declare const methodType: (parameters: Type[], returnType: Type, typeParameters?: TypeParameter[]) => MethodType; export declare const classType: (superClass: Type, interfaces: Type[], typeParameters: TypeParameter[]) => ClassType; export declare const typeParameter: (identifier: string, classBound?: Type, interfaceBounds?: Type[]) => TypeParameter; export declare const wildcard: (boundType: WildcardBoundType, bound?: Type) => WildcardType; export declare const typeVariable: (identifier: string) => TypeVariable; export declare const parameterized: (rawType: Type, typeArguments: Type[]) => ParameterizedType; export declare const parseType: (desc: string) => Type; export declare const tryParseType: (desc: string) => Type | null;