//=------ unittest/Tooling/RecursiveASTVisitorTests/CXXMethodDecl.cpp ------=//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "TestVisitor.h"
#include "clang/AST/Expr.h"

using namespace clang;

namespace {

class CXXMethodDeclVisitor
    : public ExpectedLocationVisitor<CXXMethodDeclVisitor> {
public:
  CXXMethodDeclVisitor(bool VisitImplicitCode)
      : VisitImplicitCode(VisitImplicitCode) {}

  bool shouldVisitImplicitCode() const { return VisitImplicitCode; }

  bool VisitDeclRefExpr(DeclRefExpr *D) {
    Match("declref", D->getLocation());
    return true;
  }
  bool VisitParmVarDecl(ParmVarDecl *P) {
    Match("parm", P->getLocation());
    return true;
  }

private:
  bool VisitImplicitCode;
};

TEST(RecursiveASTVisitor, CXXMethodDeclNoDefaultBodyVisited) {
  for (bool VisitImplCode : {false, true}) {
    CXXMethodDeclVisitor Visitor(VisitImplCode);
    if (VisitImplCode)
      Visitor.ExpectMatch("declref", 8, 28);
    else
      Visitor.DisallowMatch("declref", 8, 28);

    Visitor.ExpectMatch("parm", 8, 27);
    llvm::StringRef Code = R"cpp(
      struct B {};
      struct A {
        B BB;
        A &operator=(A &&O);
      };

      A &A::operator=(A &&O) = default;
    )cpp";
    EXPECT_TRUE(Visitor.runOver(Code, CXXMethodDeclVisitor::Lang_CXX11));
  }
}
} // end anonymous namespace
