docs: public static boolean isAutoValueAccessor(Tree tree) {
      if (!(tree instanceof MethodInvocationTree)) {
        return false;
      }
  
      JCMethodInvocation invocationTree = (JCMethodInvocation) tree;
      // methodSelect is always either a field access (e.g. `obj.foo()`) or identifier (e.g. `foo()`)
      JCExpression methodSelect = invocationTree.getMethodSelect();
      Type rcvrType =
          (methodSelect instanceof JCFieldAccess)
              ? ((JCFieldAccess) methodSelect).selected.type
              : ((JCIdent) methodSelect).sym.owner.type;
  
      return invocationTree.getArguments().isEmpty() // 0 arguments
          && // abstract
          TreeUtils.elementFromUse(invocationTree).getModifiers().contains(Modifier.ABSTRACT)
          && // class, not interface
          rcvrType.tsym.getKind() == ElementKind.CLASS
          && // annotated @AutoValue
          MoreAnnotations.getDeclarationAndTypeAttributes(rcvrType.tsym)
              .map(Object::toString)
              .anyMatch("@com.google.auto.value.AutoValue"::equals);
    }