How to determine current procedure/class name

In perl i can user the caller() function to give me the name of the current (or even better the callers) class and procedure name, in gcc theres __PRETTY_FUNCTION__, is there any way of doing this in java.

e.g. I want to do this
String x = "I got called by class " + getcallerclass() + " method " + getcallermethod()


time4teaAsked:
Who is Participating?
 
chintal_studConnect With a Mentor Commented:
class test
{
      
public static void a(Object  
         obj,String name,Class[] params)
{
  try
  {
  System.out.println(obj.getClass()  
   .toString()+obj.getClass() .getMethod
     (name,params));
  }catch(Exception e)
  {
     System.out.println(e);
  }
}
      
}

public class trial2{
public static void main(String args[])
{
trial2 trial=new trial2();
trial.b();
}

public void b()
{
      String name="b";
      Class[] cl=null;
      test.a(this,name,cl);
}

}

run this and see.
at any time the function "a(...)" of class "test"
displyas you  the class and the method of the class which is invoking this method a(..);  

if you are not clear you can ask again.

0
 
_lychee_Commented:
a method is to generate an exception, catch it and parse the stack trace....
refer to

http://www.experts-exchange.com/jsp/qShow.jsp?ta=java&qid=10222663 

look at the last comment made so far (by heyhey_)

special emphasis goes to the fact that the stack trace may vary between jvms...

0
 
time4teaAuthor Commented:
This is quite a nice solution.. however would be (I guess) quite slow...especially if I'm gonna call the function lots of times... I'm looking for something than can tell me where my debug statements are coming from...

However, I'll check this out - So thanks for the pointer!

I'd be interested if there are any other possible ideas before closing this one....
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
JodCommented:
The easiest way to do this is to just pass in the callers class as a parameter to the method:

//call method
c.calling("bbb",this.class);

then at the other end you will receive a class object as a parameter, so define your method as:

public class c {

  calling (String s, Class c) {
    String x = "I got called by class " + c.toString();
  }

this.class gets you the class object for the class you are currently in. It is returned as a class object and you can use as you would any other object.


0
 
_lychee_Commented:
hmmm.... if u're gonna do that y dun u just do something like

public static void a(Object b, String n) {
   System.out.println(b.getClass(), n);
}

and instead of passing in the method name and param list, just pass in the whole thing as a string? seems alot more convenient...
ie.
test.a(this, "b()");
0
 
Ravindra76Commented:
Difficult to judge the points winner
0
 
jsridharCommented:
there is support for such debugging in JDI (Java Debug Interface)

http://java.sun.com/products/jpda/doc/jdi/overview-summary.html

look at com.sun.jdi.*

it provides api to access the stack frames
0
 
time4teaAuthor Commented:
Theres a lot of info here... so thanks to you all.... !
0
All Courses

From novice to tech pro — start learning today.