[lineage] Save location for undef functions
[lineage] Save location for undef functions

Summary:
The code `f(X) -> foo:bar(X) ...` generates an edge `(f,X)->(foo:bar,$arg0)`.
Before this diff, the vertex (foo:bar,$arg0) appeared in the edge as an
ID that was not further described. The typical "description" includes
"foo:bar", "$arg0", but also the location (file and line number) where
the function foo:bar is defined. Thus, the output of the description was
left for when the definition of `foo:bar` was processed. BUT, `foo:bar`
was sometimes a function without a definition: either builtin, or from a
library not seen by the analysis.

This commit outputs a partial description of for the ID, containing
"foo:bar" and "$arg0", but saying "unknown" for the filename and "null"
for the line number.

Side-effect: the ID for (foo:bar,$arg0) may include in the output a description
 with "unknown" file AND a description with the proper file, one dumped
 when processing some call to `foo:bar`, the other dumped when the
 definition of `foo:bar` is seen.

Note that even before it was possible to have repeated descriptions of
the same ID, because the analysis done in parallel might schedule the
same procedure for analysis more than once, in separate workers. What is
different now is that (a) there will be more duplication and (b) the
descriptions will not be exactly equal -- some may lack filename and
linenumber.

Differential Revision: D34418645

fbshipit-source-id: 05499cf4fb

facebook/infer,facebook/infer,facebook/infer,facebook/infer,facebook/infer,facebook/infer,facebook/infer