A solution is to programmatically generate a stack trace:
private static String getCallerName() {
StackTraceElement[] stElements = Thread.currentThread().getStackTrace();
for (int i=1; i<stElements.length; i++) {
StackTraceElement ste = stElements[i];
if (!ste.getClassName().equals("B") && ste.getClassName().indexOf("java.lang.Thread")!=0) {
return ste.getClassName();
// you could also use ste.getMethodName() or ste.getLineNumber()
}
}
return null;
}
You would use it like this, for example :
public void something() {
System.out.println("called by " + getCallerName());
}