diff options
Diffstat (limited to 'clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp')
-rw-r--r-- | clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp deleted file mode 100644 index 134318ed386..00000000000 --- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp +++ /dev/null @@ -1,101 +0,0 @@ -//===-- AddOverride/AddOverrideActions.cpp - add C++11 override -----------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -/// -/// \file -/// \brief This file contains the definition of the AddOverrideFixer class -/// which is used as an ASTMatcher callback. -/// -//===----------------------------------------------------------------------===// - -#include "AddOverrideActions.h" -#include "AddOverrideMatchers.h" -#include "Core/Transform.h" - -#include "clang/Basic/CharInfo.h" -#include "clang/AST/ASTContext.h" -#include "clang/AST/Attr.h" -#include "clang/AST/RecursiveASTVisitor.h" -#include "clang/Lex/Lexer.h" -#include "clang/Lex/Preprocessor.h" - -using namespace clang::ast_matchers; -using namespace clang::tooling; -using namespace clang; - -namespace { - -SourceLocation -backwardSkipWhitespacesAndComments(const SourceManager &SM, - const clang::ASTContext &Context, - SourceLocation Loc) { - for (;;) { - do { - Loc = Loc.getLocWithOffset(-1); - } while (isWhitespace(*FullSourceLoc(Loc, SM).getCharacterData())); - - Token Tok; - SourceLocation Beginning = - Lexer::GetBeginningOfToken(Loc, SM, Context.getLangOpts()); - const bool Invalid = - Lexer::getRawToken(Beginning, Tok, SM, Context.getLangOpts()); - - assert(!Invalid && "Expected a valid token."); - if (Invalid || Tok.getKind() != tok::comment) - return Loc.getLocWithOffset(1); - } -} - -} // end anonymous namespace - -void AddOverrideFixer::run(const MatchFinder::MatchResult &Result) { - SourceManager &SM = *Result.SourceManager; - - const CXXMethodDecl *M = Result.Nodes.getDeclAs<CXXMethodDecl>(MethodId); - assert(M && "Bad Callback. No node provided"); - - if (const FunctionDecl *TemplateMethod = M->getTemplateInstantiationPattern()) - M = cast<CXXMethodDecl>(TemplateMethod); - - if (!Owner.isFileModifiable(SM, M->getLocStart())) - return; - - // First check that there isn't already an override attribute. - if (M->hasAttr<OverrideAttr>()) - return; - - // FIXME: Pure methods are not supported yet as it is difficult to track down - // the location of '= 0'. - if (M->isPure()) - return; - - if (M->getParent()->hasAnyDependentBases()) - return; - - SourceLocation StartLoc; - if (M->hasInlineBody()) { - // Insert the override specifier before the function body. - StartLoc = backwardSkipWhitespacesAndComments(SM, *Result.Context, - M->getBody()->getLocStart()); - } else { - StartLoc = SM.getSpellingLoc(M->getLocEnd()); - StartLoc = Lexer::getLocForEndOfToken(StartLoc, 0, SM, LangOptions()); - } - - std::string ReplacementText = " override"; - if (DetectMacros) { - assert(PP != 0 && "No access to Preprocessor object for macro detection"); - clang::TokenValue Tokens[] = { PP->getIdentifierInfo("override") }; - llvm::StringRef MacroName = PP->getLastMacroWithSpelling(StartLoc, Tokens); - if (!MacroName.empty()) - ReplacementText = (" " + MacroName).str(); - } - Owner.addReplacementForCurrentTU( - tooling::Replacement(SM, StartLoc, 0, ReplacementText)); - ++AcceptedChanges; -} |