Getting the current method name in Java 1.5

You are not authorized to post comments.

Example of how to write functions that return the name of the calling method (only works in Java 1.5):

	public static String getCallingMethod() {
		return trace(Thread.currentThread().getStackTrace(), 2);
	}
 
	public static String getCallingMethod(int level) {
		return trace(Thread.currentThread().getStackTrace(), 2 + level);
	}
 
	private static String trace(StackTraceElement e[], int level) {
		if(e != null && e.length >= level) {
			StackTraceElement s = e[level];
			if(s != null) {
				return s.getMethodName();
			}
		}
		return null;
	}

JUnit test for this (assuming the methods above were written in a class called StackUtil):

public class StackUtilTests extends TestCase {
 
	public void testGetCallingMethod() {
		String callingMethod = StackUtil.getCallingMethod();
		System.out.println("callingMethod = " + callingMethod);
		assertEquals("testGetCallingMethod", callingMethod);		
	}
 
	public void testGetCallingMethodWithLevel() {
		String callingMethod = StackUtil.getCallingMethod(0);
		System.out.println("callingMethod = " + callingMethod);
		assertEquals("testGetCallingMethodWithLevel", callingMethod);		
	}
 
	public void testGetCallingMethodOneLevel() {
		String callingMethod = testGetCallingMethodOneLevelPrivate();
		assertEquals("testGetCallingMethodOneLevel", callingMethod);
	}
 
	private String testGetCallingMethodOneLevelPrivate() {
		String callingMethod = StackUtil.getCallingMethod(1);
		System.out.println("callingMethod = " + callingMethod);
		return callingMethod;
	}	
 
}