1 package org.jacorb.test.notification; 2 3 import java.io.PrintWriter ; 4 import java.io.StringWriter ; 5 import java.util.StringTokenizer ; 6 7 public class CallerResolver { 8 9 public String getCaller() { 10 String stackTrace = makeStackTrace(); 11 StringTokenizer lineTokenizer = new StringTokenizer (stackTrace, "\n"); 12 while (lineTokenizer.hasMoreTokens()) { 13 String line = lineTokenizer.nextToken().trim(); 14 if (line.startsWith("at " + getClass().getName() + ".getCaller")) { 15 if (lineTokenizer.hasMoreTokens()) { 16 return extractClassName(lineTokenizer.nextToken()); 17 } 18 } 19 } 20 return null; 21 } 22 23 24 public String makeStackTrace() { 25 try { 26 throw new RuntimeException ("INTENTIONAL"); 27 } catch (RuntimeException re) { 28 StringWriter sw = new StringWriter (); 29 re.printStackTrace(new PrintWriter (sw)); 30 return sw.toString(); 31 } 32 } 33 34 35 String extractClassName(String stackTraceLine) { 36 String className = stackTraceLine.trim(); 38 className = className.substring(3); 40 className = className.substring(0, className.indexOf('(')); 42 className = className.substring(0, className.lastIndexOf('.')); 44 45 return className; 46 } 47 } 48 | Popular Tags |