ClassAdapter.groovy 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package com.gradle.ares
  2. import org.gradle.api.Project
  3. import org.gradle.api.logging.Logger
  4. import org.gradle.api.logging.Logging
  5. import org.objectweb.asm.ClassVisitor
  6. import org.objectweb.asm.MethodVisitor
  7. import org.objectweb.asm.Opcodes
  8. /**
  9. * Created by Glen on 2017/2/8.
  10. */
  11. public class ClassAdapter extends ClassVisitor {
  12. private Project project;
  13. private Logger logger;
  14. private boolean modify;
  15. private int access;
  16. private String superName;
  17. private String[] interfaces;
  18. public ClassAdapter(ClassVisitor cv, Project project) {
  19. super(Opcodes.ASM5, cv)
  20. this.project = project
  21. this.logger = Logging.getLogger(ClassAdapter.class)
  22. }
  23. @Override
  24. public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
  25. super.visit(version, access, name, signature, superName, interfaces)
  26. this.access = access
  27. this.superName = superName
  28. this.interfaces = interfaces
  29. debug("class:" + name + "_" + superName + "_" + interfaces)
  30. }
  31. @Override
  32. public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
  33. MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions)
  34. def agent = MethodAgentVisitor.getAgent(access, name, desc)
  35. if (agent != null) {
  36. modify = true
  37. debug("method:" + access + "_" + name + "_" + desc)
  38. return new MethodAgentVisitor(mv, agent)
  39. }
  40. return mv
  41. }
  42. boolean getModify() {
  43. return modify
  44. }
  45. private void debug(def msg) {
  46. this.logger.lifecycle(":" + this.project.name + ":" + msg)
  47. }
  48. }