code: @Override
      public void visitMethod(Method obj) {
  
          if (getMethod().isSynthetic()) {
              return;
          }
          methodTransType = getTransactionalType(obj);
          if ((methodTransType != TransactionalType.NONE) && !obj.isPublic()) {
              bugReporter
                      .reportBug(new BugInstance(this, BugType.JPAI_TRANSACTION_ON_NON_PUBLIC_METHOD.name(), NORMAL_PRIORITY).addClass(this).addMethod(cls, obj));
          }
  
          if ((methodTransType == TransactionalType.WRITE) && (runtimeExceptionClass != null)) {
              try {
                  Set<JavaClass> annotatedRollBackExceptions = getAnnotatedRollbackExceptions(obj);
                  Set<JavaClass> declaredExceptions = getDeclaredExceptions(obj);
                  reportExceptionMismatch(obj, annotatedRollBackExceptions, declaredExceptions, false, BugType.JPAI_NON_SPECIFIED_TRANSACTION_EXCEPTION_HANDLING);
                  reportExceptionMismatch(obj, declaredExceptions, annotatedRollBackExceptions, true, BugType.JPAI_UNNECESSARY_TRANSACTION_EXCEPTION_HANDLING);
              } catch (ClassNotFoundException cnfe) {
                  bugReporter.reportMissingClass(cnfe);
              }
          }
  
          super.visitMethod(obj);
      }
docs: implements the visitor to look for non public methods that have an @Transactional annotation applied to it. Spring only scans public methods for special
  handling. It also looks to see if the exceptions thrown by the method line up with the declared exceptions handled in the @Transactional annotation.
  
  @param obj
  the currently parse method