< prev index next >
src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornException.java
Print this page
@@ -172,23 +172,37 @@
if (ECMAErrors.isScriptFrame(st)) {
final String className = "<" + st.getFileName() + ">";
String methodName = st.getMethodName();
if (methodName.equals(CompilerConstants.PROGRAM.symbolName())) {
methodName = "<program>";
- }
-
- if (methodName.contains(CompilerConstants.ANON_FUNCTION_PREFIX.symbolName())) {
- methodName = "<anonymous>";
+ } else {
+ methodName = stripMethodName(methodName);
}
filtered.add(new StackTraceElement(className, methodName,
st.getFileName(), st.getLineNumber()));
}
}
return filtered.toArray(new StackTraceElement[0]);
}
+ private static String stripMethodName(final String methodName) {
+ String name = methodName;
+
+ final int nestedSeparator = name.lastIndexOf(CompilerConstants.NESTED_FUNCTION_SEPARATOR.symbolName());
+ if (nestedSeparator >= 0) {
+ name = name.substring(nestedSeparator + 1);
+ }
+
+ final int idSeparator = name.indexOf(CompilerConstants.ID_FUNCTION_SEPARATOR.symbolName());
+ if (idSeparator >= 0) {
+ name = name.substring(0, idSeparator);
+ }
+
+ return name.contains(CompilerConstants.ANON_FUNCTION_PREFIX.symbolName()) ? "<anonymous>" : name;
+ }
+
/**
* Return a formatted script stack trace string with frames information separated by '\n'
*
* @param exception exception for which script stack string is returned
* @return formatted stack trace string
< prev index next >