You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.6 KiB

(*
* Copyright (c) 2009-2013, Monoidics ltd.
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*)
open! IStd
open Javalib_pack
(** Translate an annotation. *)
let translate a : Annot.t =
let class_name = JBasics.cn_name a.JBasics.kind in
let rec translate_value_pair acc (x, value) =
match value with
| JBasics.EVArray (JBasics.EVCstString s :: l) ->
translate_value_pair (s :: acc) (x, JBasics.EVArray l)
| JBasics.EVCstString s ->
s :: acc
| JBasics.EVCstBoolean 0 ->
(* just translate bools as strings. means we can't distinguish between a boolean false
literal parameter and string literal "false" parameter, but that's ok. *)
"false" :: acc
| JBasics.EVCstBoolean 1 ->
"true" :: acc
| _ ->
acc
in
let parameters =
List.fold ~f:translate_value_pair ~init:[] a.JBasics.element_value_pairs |> List.rev
in
{Annot.class_name; parameters}
(** Translate an item annotation. *)
let translate_item avlist : Annot.Item.t =
let trans_vis = function Javalib.RTVisible -> true | Javalib.RTInvisible -> false in
let trans (a, v) = (translate a, trans_vis v) in
List.map ~f:trans avlist
(** Translate a method annotation. *)
let translate_method ann : Annot.Method.t =
let global_ann = ann.Javalib.ma_global in
let param_ann = ann.Javalib.ma_parameters in
let return = translate_item global_ann in
let params = List.map ~f:translate_item param_ann in
{return; params}