whitlock 2002/10/30 09:42:45
Modified: java/src/org/apache/wsif/logging Tag: pre1_2_0-patches
Trc.java
Log:
Fix calculation of method names
Revision Changes Path
No revision
No revision
1.7.2.1 +31 -17 xml-axis-wsif/java/src/org/apache/wsif/logging/Trc.java
Index: Trc.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/logging/Trc.java,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -u -r1.7 -r1.7.2.1
--- Trc.java 18 Sep 2002 15:38:19 -0000 1.7
+++ Trc.java 30 Oct 2002 17:42:45 -0000 1.7.2.1
@@ -1114,19 +1114,20 @@
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
String stack = sw.getBuffer().toString();
-
+
// The next while loop tries to find the method that called
- // Trc. The method name will have (...parmeters...) after it
- // and will be after the last call to Trc.
- StringTokenizer st1 = new StringTokenizer(stack);
+ // Trc. The line with the method name will be after the last
+ // call to Trc.
+ StringTokenizer st1 =
+ new StringTokenizer(
+ stack,
+ System.getProperty("line.separator", "\n"));
boolean foundWsifLogging = false;
- String tok = null;
+ String tok1 = null;
while (st1.hasMoreTokens()) {
- tok = st1.nextToken();
- if (tok.indexOf("(") == -1)
- continue;
+ tok1 = st1.nextToken();
- if (tok.startsWith(wsifPackageName + ".logging")) {
+ if (tok1.indexOf(wsifPackageName + ".logging") != -1) {
foundWsifLogging = true;
continue;
}
@@ -1135,22 +1136,35 @@
break;
}
+ // Now find the first word which contains a (. This should be
+ // prefixed by the method name. If there isn't a (, which
+ // is unlikely, use the whole line.
+ StringTokenizer st2 = new StringTokenizer(tok1);
+ String tok2 = null;
+ while (st2.hasMoreTokens()) {
+ tok2 = st2.nextToken();
+ if (tok2.indexOf("(") != -1)
+ break;
+ }
+ if (tok2.indexOf("(") == -1)
+ tok2 = tok1;
+
// Indent the method name by the number of WSIF calls
// higher up the stack. This improves readability. There
// were various other ways of calculating the indentation
// but this seemed the most reliable (and simplest).
buff.append(" ");
while (st1.hasMoreTokens()) {
- if (st1.nextToken().startsWith(wsifPackageName))
+ if (st1.nextToken().indexOf(wsifPackageName) != -1)
buff.append(" ");
}
// Strip off the (... parameters...). I expect there will
// always be a ( in the token, but this code copes even if
// there isn't.
- int idx = tok.indexOf("(");
+ int idx = tok2.indexOf("(");
if (idx != -1)
- tok = tok.substring(0, idx);
+ tok2 = tok2.substring(0, idx);
// Now strip off the WSIF package name off the front of
// the class name. All WSIF class names are unique, so
@@ -1159,17 +1173,17 @@
// WSIF (unlikely) then output the whole
// packagename.classname.methodname.
String result = null;
- if (tok.startsWith(wsifPackageName)) {
- StringTokenizer st2 = new StringTokenizer(tok, ".");
+ if (tok2.startsWith(wsifPackageName)) {
+ StringTokenizer st3 = new StringTokenizer(tok2, ".");
String previous = null;
- while (st2.hasMoreTokens()) {
+ while (st3.hasMoreTokens()) {
previous = result;
- result = st2.nextToken();
+ result = st3.nextToken();
}
if (previous != null)
result = previous + "." + result;
} else
- result = tok;
+ result = tok2;
buff.append(result);
}