aboutsummaryrefslogtreecommitdiffstats
path: root/z3/buildSrc/src/main/java/tools/refinery/z3/gradle/ClassFilePatcher.java
diff options
context:
space:
mode:
Diffstat (limited to 'z3/buildSrc/src/main/java/tools/refinery/z3/gradle/ClassFilePatcher.java')
-rw-r--r--z3/buildSrc/src/main/java/tools/refinery/z3/gradle/ClassFilePatcher.java48
1 files changed, 48 insertions, 0 deletions
diff --git a/z3/buildSrc/src/main/java/tools/refinery/z3/gradle/ClassFilePatcher.java b/z3/buildSrc/src/main/java/tools/refinery/z3/gradle/ClassFilePatcher.java
new file mode 100644
index 00000000..5ac56005
--- /dev/null
+++ b/z3/buildSrc/src/main/java/tools/refinery/z3/gradle/ClassFilePatcher.java
@@ -0,0 +1,48 @@
1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6package tools.refinery.z3.gradle;
7
8import org.objectweb.asm.*;
9
10import java.io.File;
11import java.io.FileInputStream;
12import java.io.FileOutputStream;
13import java.io.IOException;
14
15public final class ClassFilePatcher {
16 private ClassFilePatcher() {
17 throw new IllegalStateException("This is a static utility class and should not be instantiated directly");
18 }
19
20 public static void removeClassInitializer(File classFile) throws IOException {
21 byte[] resultBytes;
22 try (var fileReader = new FileInputStream(classFile)) {
23 var classReader = new ClassReader(fileReader);
24 var classWriter = new ClassWriter(classReader, 0);
25 var classVisitor = new Visitor(classWriter);
26 classReader.accept(classVisitor, 0);
27 resultBytes = classWriter.toByteArray();
28 }
29 try (var fileWriter = new FileOutputStream(classFile)) {
30 fileWriter.write(resultBytes);
31 }
32 }
33
34 private static class Visitor extends ClassVisitor {
35 protected Visitor(ClassVisitor classVisitor) {
36 super(Opcodes.ASM9, classVisitor);
37 }
38
39 @Override
40 public MethodVisitor visitMethod(int access, String name, String descriptor, String signature,
41 String[] exceptions) {
42 if (name.equals("<clinit>")) {
43 return null;
44 }
45 return super.visitMethod(access, name, descriptor, signature, exceptions);
46 }
47 }
48}