docs: public static Matcher<? super MethodInvocationTree> receiverSameAsArgument(final int argNum) {
      return new Matcher<MethodInvocationTree>() {
        @Override
        public boolean matches(MethodInvocationTree t, VisitorState state) {
          List<? extends ExpressionTree> args = t.getArguments();
          if (args.size() <= argNum) {
            return false;
          }
          ExpressionTree arg = args.get(argNum);
  
          JCExpression methodSelect = (JCExpression) t.getMethodSelect();
          if (methodSelect instanceof JCFieldAccess) {
            JCFieldAccess fieldAccess = (JCFieldAccess) methodSelect;
            return ASTHelpers.sameVariable(fieldAccess.getExpression(), arg);
          } else if (methodSelect instanceof JCIdent) {
            // A bare method call: "equals(foo)".  Receiver is implicitly "this".
            return "this".equals(arg.toString());
          }
  
          return false;
        }
      };
    }