Custom conversion rewrites as gradle tasks
Bug: 222647019
Change-Id: Ifdddc41a608ec11044c50923843b126672925372
diff --git a/buildSrc/src/main/java/desugaredlibrary/AsmRewriter.java b/buildSrc/src/main/java/desugaredlibrary/AsmRewriter.java
new file mode 100644
index 0000000..cc1fcf2
--- /dev/null
+++ b/buildSrc/src/main/java/desugaredlibrary/AsmRewriter.java
@@ -0,0 +1,53 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package desugaredlibrary;
+
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+
+public abstract class AsmRewriter {
+
+ public static int ASM_VERSION = Opcodes.ASM9;
+
+ public static byte[] transformInvoke(byte[] bytes, MethodTransformer transformer) {
+ ClassReader reader = new ClassReader(bytes);
+ ClassWriter writer = new ClassWriter(reader, 0);
+ ClassVisitor subvisitor = new InvokeTransformer(writer, transformer);
+ reader.accept(subvisitor, 0);
+ return writer.toByteArray();
+ }
+
+ public static class InvokeTransformer extends ClassVisitor {
+
+ private final MethodTransformer transformer;
+
+ InvokeTransformer(ClassWriter writer, MethodTransformer transformer) {
+ super(ASM_VERSION, writer);
+ this.transformer = transformer;
+ }
+
+ @Override
+ public MethodVisitor visitMethod(
+ int access, String name, String descriptor, String signature, String[] exceptions) {
+ MethodVisitor sub = super.visitMethod(access, name, descriptor, signature, exceptions);
+ transformer.setMv(sub);
+ return transformer;
+ }
+ }
+
+ public static class MethodTransformer extends MethodVisitor {
+
+ protected MethodTransformer(int api) {
+ super(api);
+ }
+
+ public void setMv(MethodVisitor visitor) {
+ this.mv = visitor;
+ }
+ }
+}