The help system states that it's possible to call methods through reflection
Quote:
> Calling Java methods
>
> [ <alias> . ] @<method>( [ <expression>, <expression> ] ) ...
>
> Adding ( ) forces OQL to interpret this as a Java method call. The call is executed via reflection. Common Java methods.
But I can't get it working. For example, this is the result when trying to call getTime() from the java.util.Date
Quote:
> Executed Query:
> SELECT d.@getTime() FROM java.util.Date d
>
> Problem reported:
> Method getTime not found in object java.util.Date [id=0x647cd5e8]
The same happens with all methods that don't belong to the java.lang.Object class.
Am I doing something wrong or is this feature not supported yet?
It doesn't work like that - the methods are on the MAT objects representing the objects or classes in the dump, not your actual methods in your program.
E.g.
IObject is the interface giving access to the MAT view of any object in the dump.
IClass is the interface giving access to the MAT view of any class in the dump.
See the API doc -
help -> reference -> API Reference
to see the methods on IClass, IObject etc.
Try:
SELECT d.getObjectId() FROM java.util.Date d
SELECT toHex(d.getObjectAddress()) FROM java.util.Date d
We should improve the help and provide links to the API doc.
I know this is an old thread, but I just thought I'd mention that I've actually implemented the ability to invoke the methods in the problem your heap dump is from. It's still in progress (and has taken a long time!) but so far it seems to work very well with a few caveats.
I'm curious as to the context of your original question. What kind of heap dump analysis were you trying to write?