docs: private byte[] doClass(String name, Class<?> clazz, byte[] b) {
          ClassPool pool = ClassPool.getDefault();
          CtClass cl = null;
          try {
              cl = pool.makeClass(new ByteArrayInputStream(b));
              if (cl.isInterface() == false) {
  
                  loggerName = "_____log";
  
                  // We have to declare the log variable.
  
                  String pattern1 = "private static org.slf4j.Logger {};";
                  String loggerDefinition = format(pattern1, loggerName).getMessage();
                  CtField field = CtField.make(loggerDefinition, cl);
  
                  // and assign it the appropriate value.
  
                  String pattern2 = "org.slf4j.LoggerFactory.getLogger({}.class);";
                  String replace = name.replace('/', '.');
                  String getLogger = format(pattern2, replace).getMessage();
  
                  cl.addField(field, getLogger);
  
                  // then check every behaviour (which includes methods). We are
                  // only
                  // interested in non-empty ones, as they have code.
                  // NOTE: This will be changed, as empty methods should be
                  // instrumented too.
  
                  CtBehavior[] methods = cl.getDeclaredBehaviors();
                  for (int i = 0; i < methods.length; i++) {
                      if (methods[i].isEmpty() == false) {
                          doMethod(methods[i]);
                      }
                  }
                  b = cl.toBytecode();
              }
          } catch (Exception e) {
              System.err.println("Could not instrument " + name + ", " + e);
              e.printStackTrace(System.err);
          } finally {
              if (cl != null) {
                  cl.detach();
              }
          }
          return b;
      }