code: @Override
      public void sawOpcode(int seen) {
          JPAUserValue userValue = null;
  
          try {
              switch (seen) {
                  case Const.INVOKEVIRTUAL:
                  case Const.INVOKEINTERFACE: {
                      userValue = processInvoke();
                      break;
                  }
  
                  case Const.POP: {
                      if (stack.getStackDepth() > 0) {
                          OpcodeStack.Item itm = stack.getStackItem(0);
                          if (itm.getUserValue() == JPAUserValue.MERGE) {
                              bugReporter.reportBug(new BugInstance(this, BugType.JPAI_IGNORED_MERGE_RESULT.name(), LOW_PRIORITY).addClass(this).addMethod(this)
                                      .addSourceLine(this));
                          }
                      }
                      break;
                  }
  
                  default:
                  break;
              }
          } finally {
              stack.sawOpcode(this, seen);
              if ((userValue != null) && (stack.getStackDepth() > 0)) {
                  OpcodeStack.Item itm = stack.getStackItem(0);
                  itm.setUserValue(userValue);
              }
          }
      }
docs: implements the visitor to look for calls to @Transactional methods that do not go through a spring proxy. These methods are easily seen as internal class
  calls. There are other cases as well, from external/internal classes but these aren't reported.
  
  @param seen
  the currently parsed opcode