From c989b328249c7ad22fb61ac102a22142578b4081 Mon Sep 17 00:00:00 2001 From: Jason Fager Date: Fri, 28 Jul 2017 13:36:03 -0400 Subject: [PATCH] abbreviate package names --- .../test/java/stackparam/ThrowableTest.java | 6 ++- .../java/stackparam/StackParamNative.java | 37 ++++++++++++++++++- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/javalib/agent-tests/src/test/java/stackparam/ThrowableTest.java b/javalib/agent-tests/src/test/java/stackparam/ThrowableTest.java index 7484cb7..0a5c7e1 100644 --- a/javalib/agent-tests/src/test/java/stackparam/ThrowableTest.java +++ b/javalib/agent-tests/src/test/java/stackparam/ThrowableTest.java @@ -9,10 +9,12 @@ public class ThrowableTest { @Test public void testStackTraceElementToString() throws Exception { - String expected = "[this=" + this + ", boolArg=true, byteArg=100, " + + String expected = "[this=" + this.toString().replace("stackparam.", "s.") + + ", boolArg=true, byteArg=100, " + "charArg=e, shortArg=102, intArg=103, longArg=104, " + "floatArg=105.6, doubleArg=106.7, nullArg=null, " + - "objectExactArg=" + CONST_OBJ + ", stringVarArgs=[foo, bar, baz]]"; + "objectExactArg=" + CONST_OBJ.toString().replace("java.lang", "j.l") + + ", stringVarArgs=[foo, bar, baz]]"; StackTraceElement elem = getTestElement(); String traceStr = elem.toString(); traceStr = traceStr.substring(traceStr.indexOf('[')); diff --git a/javalib/native/src/main/java/stackparam/StackParamNative.java b/javalib/native/src/main/java/stackparam/StackParamNative.java index 0bdd9e0..58b2b8d 100644 --- a/javalib/native/src/main/java/stackparam/StackParamNative.java +++ b/javalib/native/src/main/java/stackparam/StackParamNative.java @@ -1,6 +1,7 @@ package stackparam; import java.util.Arrays; +import java.lang.reflect.Method; public class StackParamNative { @@ -10,6 +11,15 @@ public class StackParamNative { */ public static int MAX_PARAM_STR_LEN = 50; + public static Method DEFAULT_TO_STRING; + static { + try { + DEFAULT_TO_STRING = Object.class.getMethod("toString"); + } catch (Exception e) { + //can't happen + } + } + /** * Returns the stack params of the given thread for the given depth. It is * returned with closest depth first. @@ -60,14 +70,18 @@ public static String appendParamsToFrameString(String frameString, Object[] para if (param.length() <= MAX_PARAM_STR_LEN) ret.append(param); else ret.append(param, 0, MAX_PARAM_STR_LEN).append("..."); } - return ret.append("]").toString(); + return ret.append("]").toString().replace("\n", "\\n"); } catch (Exception e) { return frameString + "[failed getting params: " + e + "]"; } } private static String paramValToString(Object paramVal) { - if (paramVal != null && paramVal.getClass().isArray()) { + if (paramVal == null) { + return "null"; + } + + if (paramVal.getClass().isArray()) { if (paramVal instanceof boolean[]) return Arrays.toString((boolean[]) paramVal); else if (paramVal instanceof byte[]) return Arrays.toString((byte[]) paramVal); else if (paramVal instanceof char[]) return Arrays.toString((char[]) paramVal); @@ -78,6 +92,25 @@ private static String paramValToString(Object paramVal) { else if (paramVal instanceof double[]) return Arrays.toString((double[]) paramVal); else return Arrays.toString((Object[]) paramVal); } + + // Collapse package names to first letters when using default toString for objects + try { + Method toStringMethod = paramVal.getClass().getMethod("toString"); + if (DEFAULT_TO_STRING.equals(toStringMethod)) { + String tmp = paramVal.toString(); + String[] split = tmp.split("\\."); + StringBuilder out = new StringBuilder(); + for(int i=0; i