Coverage Report

Created: 2022-07-16 07:03

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/include/clang/ExtractAPI/FrontendActions.h
Line
Count
Source
1
//===- ExtractAPI/FrontendActions.h -----------------------------*- C++ -*-===//
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
/// \file
10
/// This file defines the ExtractAPIAction frontend action.
11
///
12
//===----------------------------------------------------------------------===//
13
14
#ifndef LLVM_CLANG_EXTRACTAPI_FRONTEND_ACTIONS_H
15
#define LLVM_CLANG_EXTRACTAPI_FRONTEND_ACTIONS_H
16
17
#include "clang/ExtractAPI/API.h"
18
#include "clang/Frontend/FrontendAction.h"
19
20
namespace clang {
21
22
/// ExtractAPIAction sets up the output file and creates the ExtractAPIVisitor.
23
class ExtractAPIAction : public ASTFrontendAction {
24
protected:
25
  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
26
                                                 StringRef InFile) override;
27
28
private:
29
  /// A representation of the APIs this action extracts.
30
  std::unique_ptr<extractapi::APISet> API;
31
32
  /// A stream to the output file of this action.
33
  std::unique_ptr<raw_pwrite_stream> OS;
34
35
  /// The product this action is extracting API information for.
36
  std::string ProductName;
37
38
  /// The synthesized input buffer that contains all the provided input header
39
  /// files.
40
  std::unique_ptr<llvm::MemoryBuffer> Buffer;
41
42
  /// The input file originally provided on the command line.
43
  ///
44
  /// This captures the spelling used to include the file and whether the
45
  /// include is quoted or not.
46
  SmallVector<std::pair<SmallString<32>, bool>> KnownInputFiles;
47
48
  /// Prepare to execute the action on the given CompilerInstance.
49
  ///
50
  /// This is called before executing the action on any inputs. This generates a
51
  /// single header that includes all of CI's inputs and replaces CI's input
52
  /// list with it before actually executing the action.
53
  bool PrepareToExecuteAction(CompilerInstance &CI) override;
54
55
  /// Called after executing the action on the synthesized input buffer.
56
  ///
57
  /// Note: Now that we have gathered all the API definitions to surface we can
58
  /// emit them in this callback.
59
  void EndSourceFileAction() override;
60
61
  static std::unique_ptr<llvm::raw_pwrite_stream>
62
  CreateOutputFile(CompilerInstance &CI, StringRef InFile);
63
64
18
  static StringRef getInputBufferName() { return "<extract-api-includes>"; }
65
};
66
67
} // namespace clang
68
69
#endif // LLVM_CLANG_EXTRACTAPI_FRONTEND_ACTIONS_H