cprover
java_class_loader.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module:
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
9 
10 #ifndef CPROVER_JAVA_BYTECODE_JAVA_CLASS_LOADER_H
11 #define CPROVER_JAVA_BYTECODE_JAVA_CLASS_LOADER_H
12 
13 #include <map>
14 #include <regex>
15 #include <set>
16 
18 
19 #include "jar_file.h"
21 #include "java_class_loader_base.h"
23 
27 {
28 public:
30  typedef std::list<java_bytecode_parse_treet> parse_tree_with_overlayst;
33  typedef std::map<irep_idt, parse_tree_with_overlayst>
35 
37  typedef std::function<std::vector<irep_idt>(const irep_idt &)>
39 
41  {
42  }
43 
44  parse_tree_with_overlayst &operator()(const irep_idt &class_name);
45 
48  bool can_load_class(const irep_idt &class_name);
49 
51  java_class_loader_limitt &class_loader_limit,
52  const irep_idt &class_name);
53 
56  void set_java_cp_include_files(const std::string &cp_include_files)
57  {
58  java_cp_include_files = cp_include_files;
59  }
65  {
66  get_extra_class_refs = func;
67  }
71  void add_load_classes(const std::vector<irep_idt> &classes)
72  {
73  for(const auto &id : classes)
74  java_load_classes.push_back(id);
75  }
76 
77  std::vector<irep_idt> load_entire_jar(const std::string &jar_path);
78 
82  {
84  }
86  const irep_idt &class_name)
87  {
88  return class_map.at(class_name).front();
89  }
90 
91 private:
97  std::string java_cp_include_files;
98 
100  std::vector<irep_idt> java_load_classes;
102 
105 
106  optionalt<std::vector<irep_idt>> read_jar_file(const std::string &jar_path);
107 };
108 
109 #endif // CPROVER_JAVA_BYTECODE_JAVA_CLASS_LOADER_H
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:37
java_class_loadert::java_cp_include_files
std::string java_cp_include_files
Either a regular expression matching files that will be allowed to be loaded or a string of the form ...
Definition: java_class_loader.h:97
java_class_loadert::get_original_class
const java_bytecode_parse_treet & get_original_class(const irep_idt &class_name)
Definition: java_class_loader.h:85
java_bytecode_parse_treet
Definition: java_bytecode_parse_tree.h:24
fixed_keys_map_wrapper.h
A wrapper for maps that gives read-write access to elements but without allowing addition or removal ...
java_class_loadert::get_extra_class_refs
get_extra_class_refs_functiont get_extra_class_refs
Definition: java_class_loader.h:101
java_class_loadert::get_extra_class_refs_functiont
std::function< std::vector< irep_idt >const irep_idt &)> get_extra_class_refs_functiont
A function that yields a list of extra dependencies based on a class name.
Definition: java_class_loader.h:38
java_class_loadert::load_entire_jar
std::vector< irep_idt > load_entire_jar(const std::string &jar_path)
Load all class files from a .jar file.
Definition: java_class_loader.cpp:202
fixed_keys_map_wrappert
Definition: fixed_keys_map_wrapper.h:12
jar_file.h
java_class_loadert::read_jar_file
optionalt< std::vector< irep_idt > > read_jar_file(const std::string &jar_path)
Definition: java_class_loader.cpp:221
java_class_loadert::java_load_classes
std::vector< irep_idt > java_load_classes
Classes to be explicitly loaded.
Definition: java_class_loader.h:100
java_class_loader_baset
Base class for maintaining classpath.
Definition: java_class_loader_base.h:19
java_class_loadert::parse_tree_with_overlayst
std::list< java_bytecode_parse_treet > parse_tree_with_overlayst
A list of parse trees supporting overlay classes.
Definition: java_class_loader.h:30
java_class_loadert::set_java_cp_include_files
void set_java_cp_include_files(const std::string &cp_include_files)
Set the argument of the class loader limit java_class_loader_limitt.
Definition: java_class_loader.h:56
java_class_loadert::get_parse_tree
parse_tree_with_overlayst & get_parse_tree(java_class_loader_limitt &class_loader_limit, const irep_idt &class_name)
Check through all the places class parse trees can appear and returns the first implementation it fin...
Definition: java_class_loader.cpp:130
java_bytecode_parse_tree.h
java_class_loader_limit.h
limit class path loading
java_class_loadert::parse_tree_with_overridest_mapt
std::map< irep_idt, parse_tree_with_overlayst > parse_tree_with_overridest_mapt
A map from class names to list of parse tree where multiple entries can exist in case of overlay clas...
Definition: java_class_loader.h:34
java_class_loadert::can_load_class
bool can_load_class(const irep_idt &class_name)
Checks whether class_name is parseable from the classpath, ignoring class loading limits.
Definition: java_class_loader.cpp:106
optionalt
nonstd::optional< T > optionalt
Definition: optional.h:35
java_class_loadert::set_extra_class_refs_function
void set_extra_class_refs_function(get_extra_class_refs_functiont func)
Sets a function that provides extra dependencies for a particular class.
Definition: java_class_loader.h:64
java_class_loadert::java_class_loadert
java_class_loadert()
Definition: java_class_loader.h:40
java_class_loadert
Class responsible to load .class files.
Definition: java_class_loader.h:27
java_class_loader_limitt
Class representing a filter for class file loading.
Definition: java_class_loader_limit.h:23
java_class_loadert::class_map
parse_tree_with_overridest_mapt class_map
Map from class names to the bytecode parse trees.
Definition: java_class_loader.h:104
java_class_loadert::add_load_classes
void add_load_classes(const std::vector< irep_idt > &classes)
Adds the list of classes to the load queue, forcing them to be loaded even without explicit reference...
Definition: java_class_loader.h:71
java_class_loadert::get_class_with_overlays_map
fixed_keys_map_wrappert< parse_tree_with_overridest_mapt > get_class_with_overlays_map()
Map from class names to the bytecode parse trees.
Definition: java_class_loader.h:81
java_class_loader_base.h
java_class_loadert::operator()
parse_tree_with_overlayst & operator()(const irep_idt &class_name)
Definition: java_class_loader.cpp:19