|
39 | 39 | import jdk.vm.ci.meta.JavaConstant; |
40 | 40 | import jdk.vm.ci.meta.JavaKind; |
41 | 41 |
|
| 42 | +import java.lang.module.ModuleDescriptor; |
| 43 | +import java.util.Optional; |
| 44 | + |
42 | 45 | public class FrameInfoQueryResult { |
43 | 46 |
|
44 | 47 | public enum ValueType { |
@@ -328,13 +331,22 @@ public int getSourceLineNumber() { |
328 | 331 | * Returns the name and source code location of the method. |
329 | 332 | */ |
330 | 333 | 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); |
338 | 350 | } |
339 | 351 |
|
340 | 352 | public boolean isNativeMethod() { |
|
0 commit comments