in sapp/pipeline/mariana_trench_parser.py [0:0]
def _parse_postconditions(self, model: Dict[str, Any]) -> Iterable[Postcondition]:
caller = Method.from_json(model["method"])
caller_position = Position.from_json(model["position"], caller)
for generation in model.get("generations", []):
generations = Parser._normalize_frame(generation, caller)
for generation in generations:
yield Postcondition(
caller=Call(
method=caller,
port=Port.from_json(generation["caller_port"], "source"),
position=caller_position,
),
callee=Call.from_json(
method=_get_frame_callee(generation),
port=generation["callee_port"],
position=generation.get("call_position"),
default_position=caller_position,
leaf_kind="source",
),
kind=generation["kind"],
distance=generation.get("distance", 0),
local_positions=LocalPositions.from_json(
generation.get("local_positions", []), caller
),
features=Features.from_json(generation.get("local_features", {})),
)