41 public class StackTraceElementCompositeData extends LazyCompositeData { 42 private final StackTraceElement ste; 43 44 private StackTraceElementCompositeData(StackTraceElement ste) { 45 this.ste = ste; 46 } 47 48 public StackTraceElement getStackTraceElement() { 49 return ste; 50 } 51 52 public static StackTraceElement from(CompositeData cd) { 53 validateCompositeData(cd); 54 55 if (stackTraceElementV6CompositeType.equals(cd.getCompositeType())) { 56 return new StackTraceElement(getString(cd, CLASS_NAME), 57 getString(cd, METHOD_NAME), 58 getString(cd, FILE_NAME), 59 getInt(cd, LINE_NUMBER)); 60 } else { 61 return new StackTraceElement(getString(cd, MODULE_NAME), 62 getString(cd, MODULE_VERSION), 63 getString(cd, CLASS_NAME), 64 getString(cd, METHOD_NAME), 65 getString(cd, FILE_NAME), 66 getInt(cd, LINE_NUMBER)); 67 } 68 } 69 70 public static CompositeData toCompositeData(StackTraceElement ste) { 71 StackTraceElementCompositeData cd = new StackTraceElementCompositeData(ste); 72 return cd.getCompositeData(); 73 } 74 75 protected CompositeData getCompositeData() { 76 // CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH 77 // stackTraceElementItemNames! 78 final Object[] stackTraceElementItemValues = { 79 ste.getClassName(), 80 ste.getMethodName(), 81 ste.getFileName(), 82 ste.getLineNumber(), 83 ste.isNativeMethod(), 84 ste.getModuleName(), 85 ste.getModuleVersion(), 86 }; 87 try { 88 return new CompositeDataSupport(stackTraceElementCompositeType, 89 stackTraceElementItemNames, 90 stackTraceElementItemValues); 91 } catch (OpenDataException e) { 92 // Should never reach here 93 throw new AssertionError(e); 94 } 95 } 96 97 // Attribute names 98 private static final String CLASS_NAME = "className"; 99 private static final String METHOD_NAME = "methodName"; 100 private static final String FILE_NAME = "fileName"; 101 private static final String LINE_NUMBER = "lineNumber"; 102 private static final String NATIVE_METHOD = "nativeMethod"; 103 private static final String MODULE_NAME = "moduleName"; 104 private static final String MODULE_VERSION = "moduleVersion"; 105 106 private static final String[] stackTraceElementItemNames = { 107 CLASS_NAME, 108 METHOD_NAME, 109 FILE_NAME, 110 LINE_NUMBER, 111 NATIVE_METHOD, 112 MODULE_NAME, 113 MODULE_VERSION, 114 }; 115 116 private static final String[] stackTraceElementV9ItemNames = { 117 MODULE_NAME, 118 MODULE_VERSION, 119 }; 120 121 private static final CompositeType stackTraceElementCompositeType; 122 private static final CompositeType stackTraceElementV6CompositeType; 123 static { 124 try { 125 stackTraceElementCompositeType = (CompositeType) 126 MappedMXBeanType.toOpenType(StackTraceElement.class); 127 stackTraceElementV6CompositeType = 128 TypeVersionMapper.getInstance().getVersionedCompositeType( 129 stackTraceElementCompositeType, 130 TypeVersionMapper.V6 131 ); 132 } catch (OpenDataException e) { 133 // Should never reach here 134 throw new AssertionError(e); 135 } 136 } | 41 public class StackTraceElementCompositeData extends LazyCompositeData { 42 private final StackTraceElement ste; 43 44 private StackTraceElementCompositeData(StackTraceElement ste) { 45 this.ste = ste; 46 } 47 48 public StackTraceElement getStackTraceElement() { 49 return ste; 50 } 51 52 public static StackTraceElement from(CompositeData cd) { 53 validateCompositeData(cd); 54 55 if (stackTraceElementV6CompositeType.equals(cd.getCompositeType())) { 56 return new StackTraceElement(getString(cd, CLASS_NAME), 57 getString(cd, METHOD_NAME), 58 getString(cd, FILE_NAME), 59 getInt(cd, LINE_NUMBER)); 60 } else { 61 return new StackTraceElement(getString(cd, CLASS_LOADER_NAME), 62 getString(cd, MODULE_NAME), 63 getString(cd, MODULE_VERSION), 64 getString(cd, CLASS_NAME), 65 getString(cd, METHOD_NAME), 66 getString(cd, FILE_NAME), 67 getInt(cd, LINE_NUMBER)); 68 } 69 } 70 71 public static CompositeData toCompositeData(StackTraceElement ste) { 72 StackTraceElementCompositeData cd = new StackTraceElementCompositeData(ste); 73 return cd.getCompositeData(); 74 } 75 76 protected CompositeData getCompositeData() { 77 // CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH 78 // stackTraceElementItemNames! 79 final Object[] stackTraceElementItemValues = { 80 ste.getClassLoaderName(), 81 ste.getModuleName(), 82 ste.getModuleVersion(), 83 ste.getClassName(), 84 ste.getMethodName(), 85 ste.getFileName(), 86 ste.getLineNumber(), 87 ste.isNativeMethod(), 88 }; 89 try { 90 return new CompositeDataSupport(stackTraceElementCompositeType, 91 stackTraceElementItemNames, 92 stackTraceElementItemValues); 93 } catch (OpenDataException e) { 94 // Should never reach here 95 throw new AssertionError(e); 96 } 97 } 98 99 // Attribute names 100 private static final String CLASS_LOADER_NAME = "classLoaderName"; 101 private static final String MODULE_NAME = "moduleName"; 102 private static final String MODULE_VERSION = "moduleVersion"; 103 private static final String CLASS_NAME = "className"; 104 private static final String METHOD_NAME = "methodName"; 105 private static final String FILE_NAME = "fileName"; 106 private static final String LINE_NUMBER = "lineNumber"; 107 private static final String NATIVE_METHOD = "nativeMethod"; 108 109 110 private static final String[] stackTraceElementItemNames = { 111 CLASS_LOADER_NAME, 112 MODULE_NAME, 113 MODULE_VERSION, 114 CLASS_NAME, 115 METHOD_NAME, 116 FILE_NAME, 117 LINE_NUMBER, 118 NATIVE_METHOD, 119 }; 120 121 private static final String[] stackTraceElementV9ItemNames = { 122 CLASS_LOADER_NAME, 123 MODULE_NAME, 124 MODULE_VERSION, 125 }; 126 127 private static final CompositeType stackTraceElementCompositeType; 128 private static final CompositeType stackTraceElementV6CompositeType; 129 static { 130 try { 131 stackTraceElementCompositeType = (CompositeType) 132 MappedMXBeanType.toOpenType(StackTraceElement.class); 133 stackTraceElementV6CompositeType = 134 TypeVersionMapper.getInstance().getVersionedCompositeType( 135 stackTraceElementCompositeType, 136 TypeVersionMapper.V6 137 ); 138 } catch (OpenDataException e) { 139 // Should never reach here 140 throw new AssertionError(e); 141 } 142 } |