docs: @Nullable
    private Element getInvokeOfSafeInitMethod(
        StatementTree stmt, final Symbol.ClassSymbol enclosingClassSymbol, VisitorState state) {
      Matcher<ExpressionTree> invokeMatcher =
          (expressionTree, s) -> {
            if (!(expressionTree instanceof MethodInvocationTree)) {
              return false;
            }
            MethodInvocationTree methodInvocationTree = (MethodInvocationTree) expressionTree;
            Symbol.MethodSymbol symbol = ASTHelpers.getSymbol(methodInvocationTree);
            Set<Modifier> modifiers = symbol.getModifiers();
            if ((symbol.isPrivate() || modifiers.contains(Modifier.FINAL))
                && !symbol.isStatic()
                && !modifiers.contains(Modifier.NATIVE)) {
              // check it's the same class (could be an issue with inner classes)
              if (ASTHelpers.enclosingClass(symbol).equals(enclosingClassSymbol)) {
                // make sure the receiver is 'this'
                ExpressionTree receiver = ASTHelpers.getReceiver(expressionTree);
                return receiver == null || isThisIdentifier(receiver);
              }
            }
            return false;
          };
      if (stmt.getKind().equals(EXPRESSION_STATEMENT)) {
        ExpressionTree expression = ((ExpressionStatementTree) stmt).getExpression();
        if (invokeMatcher.matches(expression, state)) {
          return ASTHelpers.getSymbol(expression);
        }
      }
      return null;
    }