diff options
Diffstat (limited to 'clang-tools-extra/cpp11-migrate/AddOverride')
6 files changed, 0 insertions, 335 deletions
diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp deleted file mode 100644 index 9a13c044e5d..00000000000 --- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp +++ /dev/null @@ -1,87 +0,0 @@ -//===-- AddOverride/AddOverride.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 provides the implementation of the AddOverrideTransform -/// class. -/// -//===----------------------------------------------------------------------===// - -#include "AddOverride.h" -#include "AddOverrideActions.h" -#include "AddOverrideMatchers.h" - -#include "clang/Frontend/CompilerInstance.h" - -using clang::ast_matchers::MatchFinder; -using namespace clang::tooling; -using namespace clang; -namespace cl = llvm::cl; - -static cl::opt<bool> DetectMacros( - "override-macros", - cl::desc("Detect and use macros that expand to the 'override' keyword."), - cl::cat(TransformsOptionsCategory)); - -int AddOverrideTransform::apply(const FileOverrides &InputStates, - const CompilationDatabase &Database, - const std::vector<std::string> &SourcePaths) { - ClangTool AddOverrideTool(Database, SourcePaths); - unsigned AcceptedChanges = 0; - MatchFinder Finder; - AddOverrideFixer Fixer(AcceptedChanges, DetectMacros, - /*Owner=*/ *this); - Finder.addMatcher(makeCandidateForOverrideAttrMatcher(), &Fixer); - - // Make Fixer available to handleBeginSource(). - this->Fixer = &Fixer; - - setOverrides(InputStates); - - if (int result = AddOverrideTool.run(createActionFactory(Finder))) { - llvm::errs() << "Error encountered during translation.\n"; - return result; - } - - setAcceptedChanges(AcceptedChanges); - return 0; -} - -bool AddOverrideTransform::handleBeginSource(clang::CompilerInstance &CI, - llvm::StringRef Filename) { - assert(Fixer != NULL && "Fixer must be set"); - Fixer->setPreprocessor(CI.getPreprocessor()); - return Transform::handleBeginSource(CI, Filename); -} - -struct AddOverrideFactory : TransformFactory { - AddOverrideFactory() { - // if detecting macros is enabled, do not impose requirements on the - // compiler. It is assumed that the macros use is "C++11-aware", meaning it - // won't expand to override if the compiler doesn't support the specifier. - if (!DetectMacros) { - Since.Clang = Version(3, 0); - Since.Gcc = Version(4, 7); - Since.Icc = Version(14); - Since.Msvc = Version(8); - } - } - - Transform *createTransform(const TransformOptions &Opts) LLVM_OVERRIDE { - return new AddOverrideTransform(Opts); - } -}; - -// Register the factory using this statically initialized variable. -static TransformFactoryRegistry::Add<AddOverrideFactory> -X("add-override", "Make use of override specifier where possible"); - -// This anchor is used to force the linker to link in the generated object file -// and thus register the factory. -volatile int AddOverrideTransformAnchorSource = 0; diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.h b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.h deleted file mode 100644 index 8c39775e48d..00000000000 --- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.h +++ /dev/null @@ -1,45 +0,0 @@ -//===-- AddOverride/AddOverride.h - add C++11 override ----------*- C++ -*-===// -// -// 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 provides the definition of the AddOverrideTransform -/// class which is the main interface to the transform that tries to add the -/// override keyword to declarations of member function that override virtual -/// functions in a base class. -/// -//===----------------------------------------------------------------------===// - -#ifndef CPP11_MIGRATE_ADD_OVERRIDE_H -#define CPP11_MIGRATE_ADD_OVERRIDE_H - -#include "Core/Transform.h" -#include "llvm/Support/Compiler.h" - -class AddOverrideFixer; - -/// \brief Subclass of Transform that adds the C++11 override keyword to -/// member functions overriding base class virtual functions. -class AddOverrideTransform : public Transform { -public: - AddOverrideTransform(const TransformOptions &Options) - : Transform("AddOverride", Options) {} - - /// \see Transform::run(). - virtual int apply(const FileOverrides &InputStates, - const clang::tooling::CompilationDatabase &Database, - const std::vector<std::string> &SourcePaths) LLVM_OVERRIDE; - - virtual bool handleBeginSource(clang::CompilerInstance &CI, - llvm::StringRef Filename) LLVM_OVERRIDE; - -private: - AddOverrideFixer *Fixer; -}; - -#endif // CPP11_MIGRATE_ADD_OVERRIDE_H 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; -} diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.h b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.h deleted file mode 100644 index afcebeffd4b..00000000000 --- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.h +++ /dev/null @@ -1,45 +0,0 @@ -//===-- AddOverride/AddOverrideActions.h - add C++11 override ---*- C++ -*-===// -// -// 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 declaration of the AddOverrideFixer class -/// which is used as a ASTMatcher callback. -/// -//===----------------------------------------------------------------------===// - -#ifndef CPP11_MIGRATE_ADD_OVERRIDE_ACTIONS_H -#define CPP11_MIGRATE_ADD_OVERRIDE_ACTIONS_H - -#include "clang/ASTMatchers/ASTMatchFinder.h" -#include "clang/Tooling/Refactoring.h" - -class Transform; - -/// \brief The callback to be used for add-override migration matchers. -/// -class AddOverrideFixer : public clang::ast_matchers::MatchFinder::MatchCallback { -public: - AddOverrideFixer(unsigned &AcceptedChanges, bool DetectMacros, - Transform &Owner) - : AcceptedChanges(AcceptedChanges), DetectMacros(DetectMacros), - Owner(Owner) {} - - /// \brief Entry point to the callback called when matches are made. - virtual void run(const clang::ast_matchers::MatchFinder::MatchResult &Result); - - void setPreprocessor(clang::Preprocessor &PP) { this->PP = &PP; } - -private: - clang::Preprocessor *PP; - unsigned &AcceptedChanges; - bool DetectMacros; - Transform &Owner; -}; - -#endif // CPP11_MIGRATE_ADD_OVERRIDE_ACTIONS_H diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideMatchers.cpp b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideMatchers.cpp deleted file mode 100644 index e323b5d5726..00000000000 --- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideMatchers.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===-- AddOverride/AddOverrideMatchers.cpp - 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 definitions for matcher-generating functions -/// and a custom AST_MATCHER for identifying casts of type CK_NullTo*. -/// -//===----------------------------------------------------------------------===// - -#include "AddOverrideMatchers.h" -#include "clang/AST/ASTContext.h" - -using namespace clang::ast_matchers; -using namespace clang; - -const char *MethodId = "method"; - -DeclarationMatcher makeCandidateForOverrideAttrMatcher() { - return methodDecl(hasParent(recordDecl()), - isOverride(), - unless(destructorDecl())).bind(MethodId); -} - diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideMatchers.h b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideMatchers.h deleted file mode 100644 index 0a81e546e85..00000000000 --- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideMatchers.h +++ /dev/null @@ -1,28 +0,0 @@ -//===-- AddOverride/AddOverrideMatchers.h - add C++11 override --*- C++ -*-===// -// -// 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 declarations for matcher-generating functions -/// and names for bound nodes found by AST matchers. -/// -//===----------------------------------------------------------------------===// - -#ifndef CPP11_MIGRATE_ADD_OVERRIDE_MATCHERS_H -#define CPP11_MIGRATE_ADD_OVERRIDE_MATCHERS_H - -#include "clang/ASTMatchers/ASTMatchers.h" - -/// Name to bind with matched expressions. -extern const char *MethodId; - -/// \brief Create a matcher that finds member function declarations that are -/// candidates for adding the override attribute. -clang::ast_matchers::DeclarationMatcher makeCandidateForOverrideAttrMatcher(); - -#endif // CPP11_MIGRATE_ADD_OVERRIDE_MATCHERS_H |

