/**
 * .NET Semantic Registry — Loaded from tsbindgen `<Namespace>/bindings.json`
 *
 * This is a lightweight semantic index used by a few compiler passes
 * (e.g., override/shadow detection against CLR base classes).
 *
 * NOTE: tsbindgen no longer emits `.metadata.json`. All CLR semantics needed
 * by the compiler live in `bindings.json`.
 */
/**
 * Metadata for a single .NET type member (method, property, etc.)
 */
export type DotnetMemberMetadata = {
    readonly kind: "method" | "property" | "field" | "event";
    readonly virtual?: boolean;
    readonly sealed?: boolean;
    readonly abstract?: boolean;
    /**
     * CLR visibility for this member.
     *
     * Used for airplane-grade override emission: C# does not allow changing
     * accessibility when overriding. TypeScript cannot express `protected internal`,
     * so we infer it from bindings and emit correct C# when TS uses `protected`.
     */
    readonly visibility?: "public" | "protected" | "internal" | "protected internal" | "private";
};
/**
 * Metadata for a complete .NET type (class, interface, struct, etc.)
 */
export type DotnetTypeMetadata = {
    readonly kind: "class" | "interface" | "struct" | "enum";
    readonly baseType?: string;
    readonly interfaces?: readonly string[];
    /**
     * Methods indexed by:
     * - CLR method name
     * - parameter count
     * - signature key: "Type1,Type2|mods=1:out,3:ref"
     *
     * NOTE: We intentionally include parameter modifiers because CLR signatures
     * encode ref/out/in via byref + attributes; tsbindgen exposes this as
     * `parameterModifiers` for deterministic matching.
     */
    readonly methods: ReadonlyMap<string, ReadonlyMap<number, ReadonlyMap<string, DotnetMemberMetadata>>>;
    readonly properties: ReadonlyMap<string, DotnetMemberMetadata>;
};
/**
 * Minimal shape of tsbindgen `<Namespace>/bindings.json` (only fields we use here).
 */
export type TsbindgenBindingsFile = {
    readonly namespace: string;
    readonly types: readonly TsbindgenBindingsType[];
};
export type TsbindgenBindingsType = {
    readonly clrName: string;
    readonly kind?: string;
    readonly baseType?: {
        readonly clrName: string;
    };
    readonly interfaces?: readonly {
        readonly clrName: string;
    }[];
    readonly methods?: readonly TsbindgenBindingsMethod[];
    readonly properties?: readonly TsbindgenBindingsProperty[];
};
export type TsbindgenBindingsMethod = {
    readonly clrName: string;
    readonly isStatic?: boolean;
    readonly isVirtual?: boolean;
    readonly isSealed?: boolean;
    readonly isAbstract?: boolean;
    readonly parameterCount?: number;
    readonly visibility?: string;
    readonly canonicalSignature?: string;
    readonly parameterModifiers?: readonly {
        index: number;
        modifier: string;
    }[];
};
export type TsbindgenBindingsProperty = {
    readonly clrName: string;
    readonly isStatic?: boolean;
    readonly isVirtual?: boolean;
    readonly isSealed?: boolean;
    readonly isAbstract?: boolean;
    readonly visibility?: string;
};
/**
 * Registry of all loaded .NET metadata
 * Maps fully-qualified type names to their metadata
 */
export declare class DotnetMetadataRegistry {
    private readonly metadata;
    private buildModifiersKey;
    private buildSignatureKey;
    private parseCanonicalParamTypes;
    /**
     * Load a tsbindgen bindings.json file and add its types to the registry.
     */
    loadBindingsFile(_filePath: string, content: TsbindgenBindingsFile): void;
    /**
     * Look up metadata for a .NET type by fully-qualified name
     */
    getTypeMetadata(qualifiedName: string): DotnetTypeMetadata | undefined;
    /**
     * Look up metadata for a specific CLR method overload by signature.
     *
     * Airplane-grade: requires a deterministic match by full parameter types + modifiers.
     */
    getMethodMetadata(qualifiedTypeName: string, methodName: string, parameterTypes: readonly string[], modifiersKey: string): DotnetMemberMetadata | undefined;
    getMethodOverloadCount(qualifiedTypeName: string, methodName: string, parameterCount: number): number;
    getPropertyMetadata(qualifiedTypeName: string, propertyName: string): DotnetMemberMetadata | undefined;
    /**
     * Get all loaded type names
     */
    getAllTypeNames(): readonly string[];
    /**
     * Clear all loaded metadata
     */
    clear(): void;
}
/**
 * Build a method signature string for metadata lookup
 * Format: "MethodName(type1,type2,...)"
 * @param methodName The method name
 * @param parameterTypes Array of parameter type names (e.g., ["string", "number"])
 * @returns Signature string for metadata lookup
 */
export declare const buildMethodSignature: (methodName: string, parameterTypes: readonly string[]) => string;
//# sourceMappingURL=dotnet-metadata.d.ts.map