code: @Override
      public Object visitExpressionStatement(final ExpressionStatementTree node, final ScannerParams scannerParams) {
  
          final JCTree.JCExpressionStatement statement = (JCTree.JCExpressionStatement) getCurrentPath().getLeaf();
  
          final StatementInfo statementInfo = new StatementInfo(
                  scannerParams.getCompilationUnitTree().getLineMap().getLineNumber(statement.pos),
                  scannerParams.getTypeElement().getQualifiedName().toString(),
                  statement
          );
  
          //inner scanner to go through statement methods
          final TreePathScanner scanner = new TreePathScanner<Object, ScannerParams>() {
              Stack<MethodAndParameter> stack = new Stack<>();
  
              @Override
              public Object visitMethodInvocation(final MethodInvocationTree node, final ScannerParams o) {
                  if (node.getMethodSelect() instanceof JCTree.JCFieldAccess) { // if is call on field
                      try {
                          final JCTree.JCFieldAccess methodSelect = (JCTree.JCFieldAccess) node.getMethodSelect();
                          ExpressionTree parameter = null;
                          if (!node.getArguments().isEmpty()) {
                              parameter = node.getArguments().get(0);
                          }
                          // each method invocation on field is added to stack
                          stack.add(new MethodAndParameter(methodSelect.name, parameter));
                          handle(methodSelect, stack, node, statementInfo, scannerParams);
                      } catch (Exception e) {
                          e.printStackTrace();
                      }
                  }
  
                  return super.visitMethodInvocation(node, o);
              }
  
          };
  
          scanner.scan(getCurrentPath(), scannerParams);
  
          return super.visitExpressionStatement(node, scannerParams);
      }
docs: Checks expressions, if expression is method call on {@link StructLogger} field, it is considered structured log statement and is
  expression is transformed in such way, that method chain is replaced with one call to corresponding infoEvent, errorEvent,... method
  with instance of generated class of Event based on method chain