Skip to content

abbreviate package names #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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('['));
Expand Down
37 changes: 35 additions & 2 deletions javalib/native/src/main/java/stackparam/StackParamNative.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package stackparam;

import java.util.Arrays;
import java.lang.reflect.Method;

public class StackParamNative {

Expand All @@ -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.
Expand Down Expand Up @@ -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);
Expand All @@ -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<split.length - 1; i++) {
String s = split[i];
out.append(s.charAt(0)).append(".");
}
out.append(split[split.length-1]);
return out.toString();
}
} catch(Exception e) {
//all objects have toString methods, so can't happen
throw new RuntimeException("Can't happen", e);
}
return String.valueOf(paramVal);
}
}