From f275d0de62f7b499358267cb9ed0b7157bea04db Mon Sep 17 00:00:00 2001 From: Shautvast Date: Sun, 23 Jun 2024 20:28:00 +0200 Subject: [PATCH] moderner this way --- .../github/shautvast/exceptional/Agent.java | 25 ++++--------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/agent/src/main/java/com/github/shautvast/exceptional/Agent.java b/agent/src/main/java/com/github/shautvast/exceptional/Agent.java index ebd4473..c5b77eb 100644 --- a/agent/src/main/java/com/github/shautvast/exceptional/Agent.java +++ b/agent/src/main/java/com/github/shautvast/exceptional/Agent.java @@ -1,8 +1,5 @@ package com.github.shautvast.exceptional; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.classfile.ClassElement; import java.lang.classfile.ClassFile; import java.lang.classfile.ClassModel; @@ -27,34 +24,22 @@ public class Agent { instrumentation.addTransformer(new ClassFileTransformer() { @Override public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) { - return instrumentTheThrowable(className, classfileBuffer); + return instrumentThrowable(className, classfileBuffer); } @Override public byte[] transform(Module module, ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { - return instrumentTheThrowable(className, classfileBuffer); + return instrumentThrowable(className, classfileBuffer); } }, true); - InputStream stream = Agent.class.getResourceAsStream("/java/lang/Throwable.class"); - byte[] bytecode = readFully(stream); + byte[] bytecode = Files.readAllBytes( + Path.of(Agent.class.getResource("/java/lang/Throwable.class").toURI())); instrumentation.redefineClasses(new ClassDefinition(Throwable.class, bytecode)); } - private static byte[] readFully(InputStream stream) throws IOException { - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - int nRead; - byte[] data = new byte[1024]; - while ((nRead = stream.read(data, 0, data.length)) != -1) { - buffer.write(data, 0, nRead); - } - - buffer.flush(); - return buffer.toByteArray(); - } - - private static byte[] instrumentTheThrowable(String className, byte[] classfileBuffer) { + private static byte[] instrumentThrowable(String className, byte[] classfileBuffer) { if (className.equals("java/lang/Throwable")) { ClassFile classFile = ClassFile.of(); ClassModel classModel = classFile.parse(classfileBuffer);