Mercurial > hg > shark
view test/java/dyn/MethodHandlePrinter.java @ 42:1abb32424461
More
author | Gary Benson <gbenson@redhat.com> |
---|---|
date | Mon, 28 Mar 2011 14:58:39 +0100 |
parents | 75c08d56477b |
children | 67e51ee24c47 |
line wrap: on
line source
package test.java.dyn; import java.dyn.MethodHandle; import java.lang.reflect.Field; public class MethodHandlePrinter { static void print(MethodHandle mh) { StringBuilder builder = new StringBuilder(); formatObject(builder, mh, ""); System.out.println(builder.toString()); } private static void formatObject(StringBuilder builder, Object obj, String indent) { Class klass = obj.getClass(); builder.append(indent); builder.append(klass.getName()); builder.append(" {\n"); formatFields(builder, obj, klass, indent + " "); builder.append(indent); builder.append("}"); } private static void formatFields(StringBuilder builder, Object obj, Class klass, String indent) { Class parent = klass.getSuperclass(); if (parent != Object.class) { formatFields(builder, obj, parent, indent); builder.append("\n"); } builder.append(indent); builder.append(klass.getName()); builder.append(":\n"); for (Field field: klass.getDeclaredFields()) { String name = field.getName(); Object value; try { if (!field.isAccessible()) field.setAccessible(true); value = field.get(obj); } catch (Exception e) { throw new RuntimeException(e); } Class type = field.getType(); String typeName = type.getName(); builder.append(indent); builder.append(typeName); builder.append(' '); builder.append(name); builder.append(" = "); builder.append(value); builder.append('\n'); } } }