Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===--- RefactoringRuleContext.h - Clang refactoring library -------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
 
9
#ifndef LLVM_CLANG_TOOLING_REFACTORING_REFACTORINGRULECONTEXT_H
10
#define LLVM_CLANG_TOOLING_REFACTORING_REFACTORINGRULECONTEXT_H
11
 
12
#include "clang/Basic/DiagnosticError.h"
13
#include "clang/Basic/SourceManager.h"
14
#include "clang/Tooling/Refactoring/ASTSelection.h"
15
 
16
namespace clang {
17
 
18
class ASTContext;
19
 
20
namespace tooling {
21
 
22
/// The refactoring rule context stores all of the inputs that might be needed
23
/// by a refactoring action rule. It can create the specialized
24
/// \c ASTRefactoringOperation or \c PreprocessorRefactoringOperation values
25
/// that can be used by the refactoring action rules.
26
///
27
/// The following inputs are stored by the operation:
28
///
29
///   - SourceManager: a reference to a valid source manager.
30
///
31
///   - SelectionRange: an optional source selection ranges that can be used
32
///     to represent a selection in an editor.
33
class RefactoringRuleContext {
34
public:
35
  RefactoringRuleContext(const SourceManager &SM) : SM(SM) {}
36
 
37
  const SourceManager &getSources() const { return SM; }
38
 
39
  /// Returns the current source selection range as set by the
40
  /// refactoring engine. Can be invalid.
41
  SourceRange getSelectionRange() const { return SelectionRange; }
42
 
43
  void setSelectionRange(SourceRange R) { SelectionRange = R; }
44
 
45
  bool hasASTContext() const { return AST; }
46
 
47
  ASTContext &getASTContext() const {
48
    assert(AST && "no AST!");
49
    return *AST;
50
  }
51
 
52
  void setASTContext(ASTContext &Context) { AST = &Context; }
53
 
54
  /// Creates an llvm::Error value that contains a diagnostic.
55
  ///
56
  /// The errors should not outlive the context.
57
  llvm::Error createDiagnosticError(SourceLocation Loc, unsigned DiagID) {
58
    return DiagnosticError::create(Loc, PartialDiagnostic(DiagID, DiagStorage));
59
  }
60
 
61
  llvm::Error createDiagnosticError(unsigned DiagID) {
62
    return createDiagnosticError(SourceLocation(), DiagID);
63
  }
64
 
65
  void setASTSelection(std::unique_ptr<SelectedASTNode> Node) {
66
    ASTNodeSelection = std::move(Node);
67
  }
68
 
69
private:
70
  /// The source manager for the translation unit / file on which a refactoring
71
  /// action might operate on.
72
  const SourceManager &SM;
73
  /// An optional source selection range that's commonly used to represent
74
  /// a selection in an editor.
75
  SourceRange SelectionRange;
76
  /// An optional AST for the translation unit on which a refactoring action
77
  /// might operate on.
78
  ASTContext *AST = nullptr;
79
  /// The allocator for diagnostics.
80
  PartialDiagnostic::DiagStorageAllocator DiagStorage;
81
 
82
  // FIXME: Remove when memoized.
83
  std::unique_ptr<SelectedASTNode> ASTNodeSelection;
84
};
85
 
86
} // end namespace tooling
87
} // end namespace clang
88
 
89
#endif // LLVM_CLANG_TOOLING_REFACTORING_REFACTORINGRULECONTEXT_H