55 premain(args, inst); |
55 premain(args, inst); |
56 } |
56 } |
57 |
57 |
58 |
58 |
59 static class SimpleTransformer implements ClassFileTransformer { |
59 static class SimpleTransformer implements ClassFileTransformer { |
60 public byte[] transform(ClassLoader loader, String name, Class<?> classBeingRedefined, |
60 public byte[] transform(ClassLoader loader, String name, Class<?> classBeingRedefined, |
61 ProtectionDomain pd, byte[] buffer) throws IllegalClassFormatException { |
61 ProtectionDomain pd, byte[] buffer) throws IllegalClassFormatException { |
|
62 try { |
|
63 log("SimpleTransformer called for: " + name + "@" + incrCounter(name)); |
|
64 if (!shouldTransform(name)) |
|
65 return null; |
62 |
66 |
63 log("SimpleTransformer called for: " + name + "@" + incrCounter(name)); |
67 log("transforming: class name = " + name); |
64 if (!shouldTransform(name)) |
68 int nrOfReplacements = TransformUtil.replace(buffer, TransformUtil.BeforePattern, |
65 return null; |
69 TransformUtil.AfterPattern); |
66 |
70 log("replaced the string, nrOfReplacements = " + nrOfReplacements); |
67 log("transforming: class name = " + name); |
71 } catch (Throwable t) { |
68 int nrOfReplacements = TransformUtil.replace(buffer, TransformUtil.BeforePattern, |
72 // The retransform native code that called this method does not propagate |
69 TransformUtil.AfterPattern); |
73 // exceptions. Instead of getting an uninformative generic error, catch |
70 log("replaced the string, nrOfReplacements = " + nrOfReplacements); |
74 // problems here and print it, then exit. |
|
75 log("Transformation failed!"); |
|
76 t.printStackTrace(); |
|
77 System.exit(1); |
|
78 } |
71 return buffer; |
79 return buffer; |
72 } |
80 } |
73 |
81 |
74 // Check class name pattern, since test should only transform certain classes |
82 // Check class name pattern, since test should only transform certain classes |
75 private static boolean shouldTransform(String name) { |
83 private static boolean shouldTransform(String name) { |