Skip to content

Commit 0ff8e6d

Browse files
committed
[GR-36491] Show module name and version in stacktraces
PullRequest: graal/10854
2 parents bd1a47f + 8bc1760 commit 0ff8e6d

File tree

3 files changed

+24
-11
lines changed

3 files changed

+24
-11
lines changed

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

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
*/
2525
package com.oracle.svm.core.code;
2626

27+
import jdk.internal.loader.BuiltinClassLoader;
2728
import org.graalvm.nativeimage.c.function.CodePointer;
2829

2930
import com.oracle.svm.core.CalleeSavedRegisters;
@@ -39,6 +40,9 @@
3940
import jdk.vm.ci.meta.JavaConstant;
4041
import jdk.vm.ci.meta.JavaKind;
4142

43+
import java.lang.module.ModuleDescriptor;
44+
import java.util.Optional;
45+
4246
public class FrameInfoQueryResult {
4347

4448
public enum ValueType {
@@ -328,13 +332,24 @@ public int getSourceLineNumber() {
328332
* Returns the name and source code location of the method.
329333
*/
330334
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);
335+
if (sourceClass == null) {
336+
return new StackTraceElement("", sourceMethodName, null, sourceLineNumber);
337+
}
338+
339+
ClassLoader classLoader = sourceClass.getClassLoader();
340+
String classLoaderName = null;
341+
if (classLoader != null && !(classLoader instanceof BuiltinClassLoader)) {
342+
classLoaderName = classLoader.getName();
343+
}
344+
Module module = sourceClass.getModule();
345+
String moduleName = module.getName();
346+
String moduleVersion = Optional.ofNullable(module.getDescriptor())
347+
.flatMap(ModuleDescriptor::version)
348+
.map(ModuleDescriptor.Version::toString)
349+
.orElse(null);
350+
String className = sourceClass.getName();
351+
String sourceFileName = DynamicHub.fromClass(sourceClass).getSourceFileName();
352+
return new StackTraceElement(classLoaderName, moduleName, moduleVersion, className, sourceMethodName, sourceFileName, sourceLineNumber);
338353
}
339354

340355
public boolean isNativeMethod() {

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/DynamicHub.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,7 @@ public final class DynamicHub implements JavaKind.FormatWithToString, AnnotatedE
306306

307307
@Platforms(Platform.HOSTED_ONLY.class)
308308
public void setModule(Module module) {
309+
assert module != null;
309310
this.module = module;
310311
}
311312

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/SVMHost.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@
6161
import org.graalvm.compiler.phases.OptimisticOptimizations;
6262
import org.graalvm.compiler.phases.common.BoxNodeIdentityPhase;
6363
import org.graalvm.compiler.phases.common.CanonicalizerPhase;
64-
import org.graalvm.compiler.serviceprovider.JavaVersionUtil;
6564
import org.graalvm.compiler.virtual.phases.ea.PartialEscapePhase;
6665
import org.graalvm.nativeimage.Platform;
6766
import org.graalvm.nativeimage.Platforms;
@@ -391,9 +390,7 @@ private DynamicHub createHub(AnalysisType type) {
391390
isLocalClass(javaClass), isAnonymousClass(javaClass), superHub, componentHub, sourceFileName,
392391
modifiers, hubClassLoader, isHidden, isRecord, nestHost, assertionStatus, type.hasDefaultMethods(),
393392
type.declaresDefaultMethods(), isSealed);
394-
if (JavaVersionUtil.JAVA_SPEC > 8) {
395-
ModuleAccess.extractAndSetModule(dynamicHub, javaClass);
396-
}
393+
ModuleAccess.extractAndSetModule(dynamicHub, javaClass);
397394
return dynamicHub;
398395
}
399396

0 commit comments

Comments
 (0)