RefactoringActionRule.h revision 327952
1//===--- RefactoringActionRule.h - Clang refactoring library -------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef LLVM_CLANG_TOOLING_REFACTOR_REFACTORING_ACTION_RULE_H 11#define LLVM_CLANG_TOOLING_REFACTOR_REFACTORING_ACTION_RULE_H 12 13#include "clang/Basic/LLVM.h" 14#include "llvm/ADT/Optional.h" 15#include "llvm/ADT/StringRef.h" 16#include <vector> 17 18namespace clang { 19namespace tooling { 20 21class RefactoringOptionVisitor; 22class RefactoringResultConsumer; 23class RefactoringRuleContext; 24 25struct RefactoringDescriptor { 26 /// A unique identifier for the specific refactoring. 27 StringRef Name; 28 /// A human readable title for the refactoring. 29 StringRef Title; 30 /// A human readable description of what the refactoring does. 31 StringRef Description; 32}; 33 34/// A common refactoring action rule interface that defines the 'invoke' 35/// function that performs the refactoring operation (either fully or 36/// partially). 37class RefactoringActionRuleBase { 38public: 39 virtual ~RefactoringActionRuleBase() {} 40 41 /// Initiates and performs a specific refactoring action. 42 /// 43 /// The specific rule will invoke an appropriate \c handle method on a 44 /// consumer to propagate the result of the refactoring action. 45 virtual void invoke(RefactoringResultConsumer &Consumer, 46 RefactoringRuleContext &Context) = 0; 47 48 /// Returns the structure that describes the refactoring. 49 // static const RefactoringDescriptor &describe() = 0; 50}; 51 52/// A refactoring action rule is a wrapper class around a specific refactoring 53/// action rule (SourceChangeRefactoringRule, etc) that, in addition to invoking 54/// the action, describes the requirements that determine when the action can be 55/// initiated. 56class RefactoringActionRule : public RefactoringActionRuleBase { 57public: 58 /// Returns true when the rule has a source selection requirement that has 59 /// to be fullfilled before refactoring can be performed. 60 virtual bool hasSelectionRequirement() = 0; 61 62 /// Traverses each refactoring option used by the rule and invokes the 63 /// \c visit callback in the consumer for each option. 64 /// 65 /// Options are visited in the order of use, e.g. if a rule has two 66 /// requirements that use options, the options from the first requirement 67 /// are visited before the options in the second requirement. 68 virtual void visitRefactoringOptions(RefactoringOptionVisitor &Visitor) = 0; 69}; 70 71} // end namespace tooling 72} // end namespace clang 73 74#endif // LLVM_CLANG_TOOLING_REFACTOR_REFACTORING_ACTION_RULE_H 75