1//===-- CodeInjector.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/// Defines the clang::CodeInjector interface which is responsible for 11/// injecting AST of function definitions that may not be available in the 12/// original source. 13/// 14//===----------------------------------------------------------------------===// 15 16#ifndef LLVM_CLANG_ANALYSIS_CODEINJECTOR_H 17#define LLVM_CLANG_ANALYSIS_CODEINJECTOR_H 18 19namespace clang { 20 21class Stmt; 22class FunctionDecl; 23class ObjCMethodDecl; 24 25/// CodeInjector is an interface which is responsible for injecting AST 26/// of function definitions that may not be available in the original source. 27/// 28/// The getBody function will be called each time the static analyzer examines a 29/// function call that has no definition available in the current translation 30/// unit. If the returned statement is not a null pointer, it is assumed to be 31/// the body of a function which will be used for the analysis. The source of 32/// the body can be arbitrary, but it is advised to use memoization to avoid 33/// unnecessary reparsing of the external source that provides the body of the 34/// functions. 35class CodeInjector { 36public: 37 CodeInjector(); 38 virtual ~CodeInjector(); 39 40 virtual Stmt *getBody(const FunctionDecl *D) = 0; 41 virtual Stmt *getBody(const ObjCMethodDecl *D) = 0; 42}; 43} 44 45#endif 46