docs: private void processStructLogExpressions(final RoundEnvironment roundEnv) {
          for (Element element : roundEnv.getRootElements()) {
              final Map<Name, StructLoggerFieldContext> fields = new HashMap<>();
  
              for (Element enclosed : element.getEnclosedElements()) {
                  if (enclosed.getKind().isField()) {
                          final LoggerContext annotation = enclosed.getAnnotation(LoggerContext.class);
                          if (annotation != null) {
                              final TypeMirror typeMirrorOfField = enclosed.asType();
                              final TypeMirror typeMirrorOfStructlogger = elements.getTypeElement(StructLogger.class.getCanonicalName()).asType();
  
                              if (!types.isSubtype(typeMirrorOfField, types.erasure(typeMirrorOfStructlogger))) { //check that annotated field is of type StructLogger
                                  messager.printMessage(
                                          Diagnostic.Kind.ERROR,
                                          format("field %s in %s should be of type StructLogger", enclosed, element),
                                          enclosed
                                  );
                                  return;
                              }
  
                              try {
                                  annotation.context(); //throws exception
                                  //TODO class is already compiled
                              } catch (MirroredTypeException ex) {
                                  final TypeMirror contextProviderTypeMirror = ex.getTypeMirror();
  
                                  //check that type specified by @LoggerContext annotation matches type specified by generic parameter
                                  final List<? extends TypeMirror> typeArguments = ((DeclaredType) typeMirrorOfField).getTypeArguments();
                                  if (typeArguments.size() != 1) {
                                      messager.printMessage(
                                              Diagnostic.Kind.ERROR,
                                              format("Expected 1 type argument specified in field %s in %s", enclosed, element),
                                              enclosed
                                      );
                                      return;
                                  }
  
                                  if (!types.isSameType(typeArguments.get(0), contextProviderTypeMirror)) {
                                      messager.printMessage(
                                              Diagnostic.Kind.ERROR,
                                              format("Generic type of field %s in class %s differs from type specified in @LoggerContext annotation", enclosed, element),
                                              enclosed
                                      );
                                      return;
                                  }
  
                                  if (!checkVarContextProvider(contextProviderTypeMirror)) {
                                      return;
                                  }
                                  fields.put(enclosed.getSimpleName(), new StructLoggerFieldContext(contextProviderTypeMirror));
                              }
                          }
  
                  }
              }
  
              final TypeElement typeElement = (TypeElement) element;
              final TreePath path = trees.getPath(element);
  
              // do not do any code replacement in such class which do not specify any LoggerContext annotated StructLogger
              if (!fields.isEmpty()) {
                  logInvocationScanner.scan(
                          path,
                          new ScannerParams(
                                  typeElement,
                                  path.getCompilationUnit(),
                                  varsHashMap,
                                  fields,
                                  generatedClassesInfo
                          )
                  );
  
              }
          }
      }