Coverage Report

Created: 2020-09-19 12:23

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/include/clang/Tooling/Refactoring/RefactoringOptionVisitor.h
Line
Count
Source
1
//===--- RefactoringOptionVisitor.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_REFACTOR_REFACTORING_OPTION_VISITOR_H
10
#define LLVM_CLANG_TOOLING_REFACTOR_REFACTORING_OPTION_VISITOR_H
11
12
#include "clang/Basic/LLVM.h"
13
#include <type_traits>
14
15
namespace clang {
16
namespace tooling {
17
18
class RefactoringOption;
19
20
/// An interface that declares functions that handle different refactoring
21
/// option types.
22
///
23
/// A valid refactoring option type must have a corresponding \c visit
24
/// declaration in this interface.
25
class RefactoringOptionVisitor {
26
public:
27
87
  virtual ~RefactoringOptionVisitor() {}
28
29
  virtual void visit(const RefactoringOption &Opt,
30
                     Optional<std::string> &Value) = 0;
31
};
32
33
namespace traits {
34
namespace internal {
35
36
template <typename T> struct HasHandle {
37
private:
38
  template <typename ClassT>
39
  static auto check(ClassT *) -> typename std::is_same<
40
      decltype(std::declval<RefactoringOptionVisitor>().visit(
41
          std::declval<RefactoringOption>(), *std::declval<Optional<T> *>())),
42
      void>::type;
43
44
  template <typename> static std::false_type check(...);
45
46
public:
47
  using Type = decltype(check<RefactoringOptionVisitor>(nullptr));
48
};
49
50
} // end namespace internal
51
52
/// A type trait that returns true iff the given type is a type that can be
53
/// stored in a refactoring option.
54
template <typename T>
55
struct IsValidOptionType : internal::HasHandle<T>::Type {};
56
57
} // end namespace traits
58
} // end namespace tooling
59
} // end namespace clang
60
61
#endif // LLVM_CLANG_TOOLING_REFACTOR_REFACTORING_OPTION_VISITOR_H