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 19 namespace clang { 20 21 class Stmt; 22 class FunctionDecl; 23 class 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. 35 class CodeInjector { 36 public: 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