Skip to content

Commit 25cbb83

Browse files
committed
Show module name and version in stacktraces
1 parent b0dc1b8 commit 25cbb83

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/code/FrameInfoQueryResult.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@
3939
import jdk.vm.ci.meta.JavaConstant;
4040
import jdk.vm.ci.meta.JavaKind;
4141

42+
import java.lang.module.ModuleDescriptor;
43+
import java.util.Optional;
44+
4245
public class FrameInfoQueryResult {
4346

4447
public enum ValueType {
@@ -328,13 +331,22 @@ public int getSourceLineNumber() {
328331
* Returns the name and source code location of the method.
329332
*/
330333
public StackTraceElement getSourceReference() {
331-
/*
332-
* According to StackTraceElement undefined className is denoted by "", undefined fileName
333-
* is denoted by null
334-
*/
335-
final String className = sourceClass != null ? sourceClass.getName() : "";
336-
String sourceFileName = sourceClass != null ? DynamicHub.fromClass(sourceClass).getSourceFileName() : null;
337-
return new StackTraceElement(className, sourceMethodName, sourceFileName, sourceLineNumber);
334+
if (sourceClass == null) {
335+
return new StackTraceElement("", sourceMethodName, null, sourceLineNumber);
336+
}
337+
338+
String classLoaderName = sourceClass.getClassLoader() != null ? sourceClass.getClassLoader().getName() : null;
339+
String moduleName = null;
340+
String moduleVersion = null;
341+
Module module = sourceClass.getModule();
342+
if (module != null) {
343+
moduleName = module.getName();
344+
Optional<ModuleDescriptor.Version> version = module.getDescriptor() != null ? module.getDescriptor().version() : Optional.empty();
345+
moduleVersion = version.map(ModuleDescriptor.Version::toString).orElse(null);
346+
}
347+
String className = sourceClass.getName();
348+
String sourceFileName = DynamicHub.fromClass(sourceClass).getSourceFileName();
349+
return new StackTraceElement(classLoaderName, moduleName, moduleVersion, className, sourceMethodName, sourceFileName, sourceLineNumber);
338350
}
339351

340352
public boolean isNativeMethod() {

0 commit comments

Comments
 (0)