< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/GraphPrinter.java
Print this page
@@ -33,10 +33,11 @@
import org.graalvm.compiler.debug.DebugContext;
import org.graalvm.compiler.debug.DebugContext.Scope;
import org.graalvm.compiler.graph.Graph;
import org.graalvm.compiler.nodes.ConstantNode;
import org.graalvm.compiler.nodes.StructuredGraph;
+import org.graalvm.compiler.nodes.util.JavaConstantFormatter;
import org.graalvm.compiler.phases.schedule.SchedulePhase;
import org.graalvm.compiler.serviceprovider.JDK9Method;
import jdk.vm.ci.meta.JavaConstant;
import jdk.vm.ci.meta.JavaKind;
@@ -44,11 +45,11 @@
import jdk.vm.ci.meta.MetaUtil;
import jdk.vm.ci.meta.ResolvedJavaMethod;
import jdk.vm.ci.runtime.JVMCI;
import jdk.vm.ci.services.Services;
-interface GraphPrinter extends Closeable {
+interface GraphPrinter extends Closeable, JavaConstantFormatter {
/**
* Starts a new group of graphs with the given name, short name and method byte code index (BCI)
* as properties.
*/
@@ -114,37 +115,51 @@
if (JVMCI_MODULE == module || (Boolean) JDK9Method.isOpenTo.invoke(JVMCI_MODULE, JVMCI_RUNTIME_PACKAGE, module)) {
// Can access non-statically-exported package in JVMCI
return true;
}
}
+ if (c.getClassLoader() == GraphPrinter.class.getClassLoader()) {
+ return true;
+ }
return false;
}
/**
- * Sets or updates the {@code "rawvalue"} and {@code "toString"} properties in {@code props} for
- * {@code cn} if it's a boxed Object value and {@code snippetReflection} can access the raw
- * value.
+ * Use the real {@link Object#toString()} method for {@link JavaConstant JavaConstants} that are
+ * wrapping trusted types, other just return the results of {@link JavaConstant#toString()}.
*/
- default void updateStringPropertiesForConstant(Map<Object, Object> props, ConstantNode cn) {
+ @Override
+ default String format(JavaConstant constant) {
SnippetReflectionProvider snippetReflection = getSnippetReflectionProvider();
- if (snippetReflection != null && cn.getValue() instanceof JavaConstant) {
- JavaConstant constant = (JavaConstant) cn.getValue();
+ if (snippetReflection != null) {
if (constant.getJavaKind() == JavaKind.Object) {
Object obj = snippetReflection.asObject(Object.class, constant);
if (obj != null) {
- String toString = GraphPrinter.constantToString(obj);
+ return GraphPrinter.constantToString(obj);
+ }
+ }
+ }
+ return constant.toString();
+ }
+
+ /**
+ * Sets or updates the {@code "rawvalue"} and {@code "toString"} properties in {@code props} for
+ * {@code cn} if it's a boxed Object value and {@code snippetReflection} can access the raw
+ * value.
+ */
+ default void updateStringPropertiesForConstant(Map<Object, Object> props, ConstantNode cn) {
+ if (cn.isJavaConstant() && cn.getStackKind().isObject()) {
+ String toString = format(cn.asJavaConstant());
String rawvalue = GraphPrinter.truncate(toString);
// Overwrite the value inserted by
// ConstantNode.getDebugProperties()
props.put("rawvalue", rawvalue);
if (!rawvalue.equals(toString)) {
props.put("toString", toString);
}
}
}
- }
- }
/**
* Replaces all {@link JavaType} elements in {@code args} with the result of
* {@link JavaType#getUnqualifiedName()}.
*
< prev index next >