|
17 | 17 |
|
18 | 18 | #include <goto-programs/resolve_concrete_function_call.h>
|
19 | 19 |
|
20 |
| - |
| 20 | +/// Constructor for lazy-method loading |
| 21 | +/// \param symbol_table: the symbol table to use |
| 22 | +/// \param main_class: identifier of the entry point / main class |
| 23 | +/// \param main_jar_classes: specify main class of jar if \p main_class is empty |
| 24 | +/// \param lazy_methods_extra_entry_points: entry point functions to use |
| 25 | +/// \param java_class_loader: the Java class loader to use |
| 26 | +/// \param extra_needed_classes: list of class identifiers which are considered |
| 27 | +/// to be required and therefore their methods should not be removed via |
| 28 | +/// `lazy-methods`. Example of use: `ArrayList` as general implementation for |
| 29 | +/// `List` interface. |
| 30 | +/// \param pointer_type_selector: selector to handle correct pointer types |
| 31 | +/// \param message_handler: the message handler to use for output |
21 | 32 | ci_lazy_methodst::ci_lazy_methodst(
|
22 | 33 | const symbol_tablet &symbol_table,
|
23 | 34 | const irep_idt &main_class,
|
24 | 35 | const std::vector<irep_idt> &main_jar_classes,
|
25 | 36 | const std::vector<irep_idt> &lazy_methods_extra_entry_points,
|
26 | 37 | java_class_loadert &java_class_loader,
|
| 38 | + const std::vector<irep_idt> &extra_needed_classes, |
27 | 39 | const select_pointer_typet &pointer_type_selector,
|
28 |
| - message_handlert &message_handler): |
29 |
| - messaget(message_handler), |
| 40 | + message_handlert &message_handler) |
| 41 | + : messaget(message_handler), |
30 | 42 | main_class(main_class),
|
31 | 43 | main_jar_classes(main_jar_classes),
|
32 | 44 | lazy_methods_extra_entry_points(lazy_methods_extra_entry_points),
|
33 | 45 | java_class_loader(java_class_loader),
|
| 46 | + extra_needed_classes(extra_needed_classes), |
34 | 47 | pointer_type_selector(pointer_type_selector)
|
35 | 48 | {
|
36 | 49 | // build the class hierarchy
|
@@ -279,6 +292,10 @@ void ci_lazy_methodst::initialize_needed_classes(
|
279 | 292 | lazy_methods.add_needed_class("java::java.lang.String");
|
280 | 293 | lazy_methods.add_needed_class("java::java.lang.Class");
|
281 | 294 | lazy_methods.add_needed_class("java::java.lang.Object");
|
| 295 | + |
| 296 | + // As in class_loader, ensure these classes stay available |
| 297 | + for(const auto &id : extra_needed_classes) |
| 298 | + lazy_methods.add_needed_class("java::" + id2string(id)); |
282 | 299 | }
|
283 | 300 |
|
284 | 301 | /// Build up list of methods for types for a pointer and any types it
|
|
0 commit comments