sig
  type error =
      Invalid_class_query of Utils.UTF8.t
    | Cannot_find_class of Utils.UTF8.t
    | Generic_arity_mismatch of Utils.UTF8.t * int * int
    | Generic_cannot_be_parametrized
    | Primitive_cannot_be_generic_argument
    | Wildcard_cannot_be_generic_argument
    | Generic_variable_bound_to_different_values of Utils.UTF8.t
    | Void_cannot_be_an_array_element_type
    | Invalid_generic_bound
    | Ambiguity_in_generic_bound
    | No_class_match
    | Several_class_matches of Name.for_class list
    | Invalid_field_query of Utils.UTF8.t
    | No_field_match
    | Several_field_matches of (Name.for_class * Name.for_field) list
    | Invalid_constructor_query of Utils.UTF8.t
    | No_constructor_match
    | Several_constructor_matches of
        (Name.for_class * Descriptor.for_parameter list) list
    | Invalid_regular_method_query of Utils.UTF8.t
    | No_regular_method_match
    | Several_regular_method_matches of
        (Name.for_class * Name.for_method * Descriptor.for_method) list
  exception Exception of Lookup.error
  val string_of_error : Lookup.error -> string
  type java_type =
      [ `Array of Lookup.non_void_java_type
      | `Boolean
      | `Byte
      | `Char
      | `Class of ClassDefinition.t
      | `Double
      | `Float
      | `Generic of Utils.UTF8.t
      | `Int
      | `Long
      | `Short
      | `Void
      | `Wildcard ]
  and non_void_java_type =
      [ `Array of Lookup.non_void_java_type
      | `Boolean
      | `Byte
      | `Char
      | `Class of ClassDefinition.t
      | `Double
      | `Float
      | `Generic of Utils.UTF8.t
      | `Int
      | `Long
      | `Short
      | `Wildcard ]
  type substitution = Lookup.java_type Utils.UTF8Map.t
  type 'a result = {
    value : 'a;
    with_generics : bool;
    substitution : Lookup.substitution;
  }
  val equal_java_type : Lookup.java_type -> Lookup.java_type -> bool
  val matches_descriptor :
    Lookup.substitution -> Lookup.java_type -> Descriptor.java_type -> bool
  type for_class
  val utf8_for_class : Lookup.for_class -> Utils.UTF8.t
  val make_for_class_from_utf8 : bool -> Utils.UTF8.t -> Lookup.for_class
  val search_for_classes :
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t -> Lookup.for_class -> ClassDefinition.t Lookup.result list
  val search_for_class :
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t -> Lookup.for_class -> ClassDefinition.t Lookup.result
  val for_classes :
    bool ->
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t -> Utils.UTF8.t -> ClassDefinition.t Lookup.result list
  val for_class :
    bool ->
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t -> Utils.UTF8.t -> ClassDefinition.t Lookup.result
  type for_field
  val utf8_for_field : Lookup.for_field -> Utils.UTF8.t
  val make_for_field_from_utf8 : bool -> Utils.UTF8.t -> Lookup.for_field
  val search_for_fields :
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t ->
    Lookup.for_field -> (ClassDefinition.t * Field.t) Lookup.result list
  val search_for_field :
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t ->
    Lookup.for_field -> (ClassDefinition.t * Field.t) Lookup.result
  val for_fields :
    bool ->
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t ->
    Utils.UTF8.t -> (ClassDefinition.t * Field.t) Lookup.result list
  val for_field :
    bool ->
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t ->
    Utils.UTF8.t -> (ClassDefinition.t * Field.t) Lookup.result
  type for_constructor
  val utf8_for_constructor : Lookup.for_constructor -> Utils.UTF8.t
  val make_for_constructor_from_utf8 :
    bool -> Utils.UTF8.t -> Lookup.for_constructor
  val search_for_constructors :
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t ->
    Lookup.for_constructor ->
    (ClassDefinition.t * Method.constructor) Lookup.result list
  val search_for_constructor :
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t ->
    Lookup.for_constructor ->
    (ClassDefinition.t * Method.constructor) Lookup.result
  val for_constructors :
    bool ->
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t ->
    Utils.UTF8.t ->
    (ClassDefinition.t * Method.constructor) Lookup.result list
  val for_constructor :
    bool ->
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t ->
    Utils.UTF8.t -> (ClassDefinition.t * Method.constructor) Lookup.result
  type for_regular_method
  val utf8_for_regular_method : Lookup.for_regular_method -> Utils.UTF8.t
  val make_for_regular_method_from_utf8 :
    bool -> Utils.UTF8.t -> Lookup.for_regular_method
  val search_for_regular_methods :
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t ->
    Lookup.for_regular_method ->
    (ClassDefinition.t * Method.regular) Lookup.result list
  val search_for_regular_method :
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t ->
    Lookup.for_regular_method ->
    (ClassDefinition.t * Method.regular) Lookup.result
  val for_regular_methods :
    bool ->
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t ->
    Utils.UTF8.t -> (ClassDefinition.t * Method.regular) Lookup.result list
  val for_regular_method :
    bool ->
    ?open_packages:Utils.UTF8.t list ->
    ClassLoader.t ->
    Utils.UTF8.t -> (ClassDefinition.t * Method.regular) Lookup.result
end