code: @Override
     public void visit(Class<?> clazz)
     {
  
        ClassContextImpl context = new ClassContextImpl(builder, clazz);
        context.put(clazz, payload);
  
        if (log.isTraceEnabled())
        {
           log.trace("Scanning class: {}", clazz.getName());
        }
  
        // first process the class
        visit(clazz, context);
  
        // only process fields and classes if a rule building has been started
        if (context.hasRuleBuildingStarted()) {
  
           // walk up the inheritance hierarchy
           Class<?> currentType = clazz;
           while (currentType != null) {
  
              // then process the fields
              for (Field field : currentType.getDeclaredFields())
              {
                 visit(field, new FieldContextImpl(context, field));
              }
  
              // then the methods
              for (Method method : currentType.getDeclaredMethods())
              {
                 MethodContextImpl methodContext = new MethodContextImpl(context, method);
                 visit(method, methodContext);
  
                 // then the method parameters
                 for (int i = 0; i < method.getParameterTypes().length; i++)
                 {
                    ParameterImpl parameter = new ParameterImpl(method, method.getParameterTypes()[i],
                             method.getParameterAnnotations()[i], i);
                    visit(parameter, new ParameterContextImpl(methodContext, parameter));
                 }
              }
  
              currentType = currentType.getSuperclass();
  
           }
        }
  
     }
docs: Processes the annotation on the supplied class.