Package jodd.asm

Examples of jodd.asm.MethodAdapter


            throw new ProxettaException("Invalid static initialization block description for advice: " + advice.getName());
          }
          name = clinitMethodName + methodDivider + aspectIndex;
          access |= AsmUtil.ACC_PRIVATE | AsmUtil.ACC_FINAL;
          wd.addAdviceClinitMethod(name);
          return new MethodAdapter(wd.dest.visitMethod(access, name, desc, signature, exceptions)) {

            @Override
            public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) {
            }

            @Override
            public void visitLineNumber(int line, Label start) {
            }

            @Override
            public void visitMethodInsn(int opcode, String owner, String name, String desc) {
              if (opcode == INVOKESTATIC) {
                if (owner.equals(adviceReference)) {
                  owner = wd.thisReference;
                  name = adviceMethodName(name, aspectIndex);
                }
              }
              super.visitMethodInsn(opcode, owner, name, desc);
            }

            @Override
            public void visitFieldInsn(int opcode, String owner, String name, String desc) { // [F6]
              if (owner.equals(adviceReference)) {
                owner = wd.thisReference;              // [F5]
                name = adviceFieldName(name, aspectIndex);
              }
              super.visitFieldInsn(opcode, owner, name, desc);
            }
          };
        } else

        if (name.equals(INIT) == true) { // [A7]
          if (desc.equals(DESC_VOID) == false) {
            throw new ProxettaException("Advices can have only default constructors. Invalid advice: " + advice.getName());
          }

          name = initMethodName + methodDivider + aspectIndex;
          access = ProxettaAsmUtil.makePrivateFinalAccess(access);
          wd.addAdviceInitMethod(name);
          return new MethodAdapter(wd.dest.visitMethod(access, name, desc, signature, exceptions)) {
            @Override
            public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) {
            }

            @Override
            public void visitLineNumber(int line, Label start) {
            }

            int state; // used to detect and to ignore the first super call()

            @Override
            public void visitVarInsn(int opcode, int var) {                      // [F7]
              if ((state == 0) && (opcode == ALOAD) && (var == 0)) {
                state++;
                return;
              }
              super.visitVarInsn(opcode, var);
            }

            @Override
            public void visitMethodInsn(int opcode, String owner, String name, String desc) {
              if ((state == 1) && (opcode == INVOKESPECIAL)) {
                  state++;
                return;
              }
              if ((opcode == INVOKEVIRTUAL) || (opcode == INVOKEINTERFACE)) {
                if (owner.equals(adviceReference)) {
                  owner = wd.thisReference;
                  name = adviceMethodName(name, aspectIndex);
                }
              } else

              if (opcode == INVOKESTATIC) {
                if (owner.equals(adviceReference)) {
                  owner = wd.thisReference;
                  name = adviceMethodName(name, aspectIndex);
                }
              }
              super.visitMethodInsn(opcode, owner, name, desc);
            }

            @Override
            public void visitFieldInsn(int opcode, String owner, String name, String desc) { // [F7]
              if (owner.equals(adviceReference)) {
                owner = wd.thisReference;              // [F5]
                name = adviceFieldName(name, aspectIndex);
              }
              super.visitFieldInsn(opcode, owner, name, desc);
            }
          };

        } else

        // other methods
        if (name.equals(executeMethodName) == false) {
          name = adviceMethodName(name, aspectIndex);
          return new MethodAdapter(wd.dest.visitMethod(access, name, desc, signature, exceptions)) {

            @Override
            public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) {
            }
View Full Code Here


            throw new ProxettaException("Invalid static initialization block description for advice: " + advice.getName());
          }
          name = clinitMethodName + methodDivider + aspectIndex;
          access |= AsmUtil.ACC_PRIVATE | AsmUtil.ACC_FINAL;
          wd.addAdviceClinitMethod(name);
          return new MethodAdapter(wd.dest.visitMethod(access, name, desc, signature, exceptions)) {

            @Override
            public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) {
            }

            @Override
            public void visitLineNumber(int line, Label start) {
            }

            @Override
            public void visitMethodInsn(int opcode, String owner, String name, String desc) {
              if (opcode == INVOKESTATIC) {
                if (owner.equals(adviceReference)) {
                  owner = wd.thisReference;
                  name = adviceMethodName(name, aspectIndex);
                }
              }
              super.visitMethodInsn(opcode, owner, name, desc);
            }

            @Override
            public void visitFieldInsn(int opcode, String owner, String name, String desc) { // [F6]
              if (owner.equals(adviceReference)) {
                owner = wd.thisReference;              // [F5]
                name = adviceFieldName(name, aspectIndex);
              }
              super.visitFieldInsn(opcode, owner, name, desc);
            }
          };
        } else

        if (name.equals(INIT) == true) { // [A7]
          if (desc.equals(DESC_VOID) == false) {
            throw new ProxettaException("Advices can have only default constructors. Invalid advice: " + advice.getName());
          }

          name = initMethodName + methodDivider + aspectIndex;
          access = ProxettaAsmUtil.makePrivateFinalAccess(access);
          wd.addAdviceInitMethod(name);
          return new MethodAdapter(wd.dest.visitMethod(access, name, desc, signature, exceptions)) {
            @Override
            public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) {
            }

            @Override
            public void visitLineNumber(int line, Label start) {
            }

            int state; // used to detect and to ignore the first super call()

            @Override
            public void visitVarInsn(int opcode, int var) {                      // [F7]
              if ((state == 0) && (opcode == ALOAD) && (var == 0)) {
                state++;
                return;
              }
              super.visitVarInsn(opcode, var);
            }

            @Override
            public void visitMethodInsn(int opcode, String owner, String name, String desc) {
              if ((state == 1) && (opcode == INVOKESPECIAL)) {
                  state++;
                return;
              }
              if ((opcode == INVOKEVIRTUAL) || (opcode == INVOKEINTERFACE)) {
                if (owner.equals(adviceReference)) {
                  owner = wd.thisReference;
                  name = adviceMethodName(name, aspectIndex);
                }
              } else

              if (opcode == INVOKESTATIC) {
                if (owner.equals(adviceReference)) {
                  owner = wd.thisReference;
                  name = adviceMethodName(name, aspectIndex);
                }
              }
              super.visitMethodInsn(opcode, owner, name, desc);
            }

            @Override
            public void visitFieldInsn(int opcode, String owner, String name, String desc) { // [F7]
              if (owner.equals(adviceReference)) {
                owner = wd.thisReference;              // [F5]
                name = adviceFieldName(name, aspectIndex);
              }
              super.visitFieldInsn(opcode, owner, name, desc);
            }
          };

        } else

        // other methods
        if (name.equals(executeMethodName) == false) {
          name = adviceMethodName(name, aspectIndex);
          return new MethodAdapter(wd.dest.visitMethod(access, name, desc, signature, exceptions)) {

            @Override
            public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) {
            }
View Full Code Here

TOP

Related Classes of jodd.asm.MethodAdapter

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.