I expected from the documentation that there would be significantly more information in the XREF than previously, but I am beginning to be more impressed by what is not there. For example, given the following program:
define variable hnFoo as handle no-undo. run foo.p persistent set hnFoo. run xyx in hnFoo.
I would have expected the reference for run xyx to show me that it was being run *in* something else. I can see that foo.p is being run persistently, but nothing about the run reference for xyz tells me that it isn't simply a program.
<Reference Reference-type="RUN" Object-identifier="foo.p"> <Source-guid>7CZDg+a0fovhE6poZGFutQ</Source-guid> <File-num>1</File-num> <Ref-seq>5</Ref-seq> <Line-num>2</Line-num> <Object-context>PERSISTENT</Object-context> <Access-mode/> <Data-member-ref/> <Temp-ref/> <Detail/> <Is-static>false</Is-static> <Is-abstract>false</Is-abstract> </Reference> <Reference Reference-type="RUN" Object-identifier="xyx"> <Source-guid>7CZDg+a0fovhE6poZGFutQ</Source-guid> <File-num>1</File-num> <Ref-seq>6</Ref-seq> <Line-num>3</Line-num> <Object-context/> <Access-mode/> <Data-member-ref/> <Temp-ref/> <Detail/> <Is-static>false</Is-static> <Is-abstract>false</Is-abstract> </Reference>
For those kind of analysis you should use proparse.
Even though that means you have to get into using .NET from GUI Progress ;-)
I was, in fact, going to do just that, but the lack of support for 11.x syntax is a deal breaker. I have, as it happens, done some proof of concept work on this a while back, but stopped for this reason.
But, no reason not to have these things in XREF too.