1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #ifndef RefCountedInsideLambdaChecker_h__ 6 #define RefCountedInsideLambdaChecker_h__ 7 8 #include "plugin.h" 9 10 class RefCountedInsideLambdaChecker : public BaseCheck { 11 public: 12 RefCountedInsideLambdaChecker(StringRef CheckName, 13 ContextType *Context = nullptr) BaseCheck(CheckName,Context)14 : BaseCheck(CheckName, Context) {} 15 void registerMatchers(MatchFinder *AstMatcher) override; 16 void check(const MatchFinder::MatchResult &Result) override; 17 18 void emitDiagnostics(SourceLocation Loc, StringRef Name, QualType Type); 19 20 private: 21 class ThisVisitor : public RecursiveASTVisitor<ThisVisitor> { 22 public: ThisVisitor(RefCountedInsideLambdaChecker & Checker)23 explicit ThisVisitor(RefCountedInsideLambdaChecker &Checker) 24 : Checker(Checker) {} 25 26 bool VisitCXXThisExpr(CXXThisExpr *This); 27 28 private: 29 RefCountedInsideLambdaChecker &Checker; 30 }; 31 }; 32 33 #endif 34