56 std::optional<resolve_inherited_componentt::inherited_componentt>
57 cprover_nondet_initialize = resolve_inherited_component(
58 class_id,
"cproverNondetInitialize:()V",
true);
60 if(cprover_nondet_initialize)
63 cprover_nondet_initialize->get_full_component_identifier());
83 const auto &class_type =
85 if(class_type.get_base(
"java::java.lang.Enum"))
121 const auto ¶m_classid = class_type.get_identifier();
134 const auto &generic_args =
136 for(
const auto &generic_arg : generic_args)
151 const auto &underlying_type = ns.
follow_tag(class_type);
157 element_type.
id() == ID_pointer &&
166 for(
const auto &field : underlying_type.components())
168 if(field.type().id() == ID_struct_tag)
170 else if(field.type().id() == ID_struct)
172 else if(field.type().id() == ID_pointer)
187 "struct types should be referred to by symbol at this stage");
pointer_typet pointer_type(const typet &subtype)
Context-insensitive lazy methods container.
std::unordered_set< irep_idt > & instantiated_classes
void initialize_instantiated_classes_from_pointer(const pointer_typet &pointer_type, const namespacet &ns)
Build up list of methods for types for a specific pointer type.
const select_pointer_typet & pointer_type_selector
void gather_field_types(const struct_tag_typet &class_type, const namespacet &ns)
For a given type, gather all fields referenced by that type.
void add_needed_method(const irep_idt &)
Notes method_symbol_name is referenced from some reachable function, and should therefore be elaborat...
void add_all_needed_classes(const pointer_typet &pointer_type)
Add to the needed classes all classes specified, the replacement type if it will be replaced,...
std::unordered_set< irep_idt > & callable_methods
const symbol_table_baset & symbol_table
bool add_needed_class(const irep_idt &)
Notes class class_symbol_name will be instantiated, or a static field belonging to it will be accesse...
void add_cprover_nondet_initialize_if_it_exists(const irep_idt &class_id)
For a given class id, if cproverNondetInitialize exists on it or any of its ancestors then note that ...
void add_clinit_call(const irep_idt &class_id)
For a given class id, note that its static initializer is needed.
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
const irep_idt & id() const
const generic_type_argumentst & generic_type_arguments() const
const union_typet & follow_tag(const union_tag_typet &) const
Follow type tag of union type.
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
bool lookup(const irep_idt &name, const symbolt *&symbol) const override
See documentation for namespace_baset::lookup().
The pointer type These are both 'bitvector_typet' (they have a width) and 'type_with_subtypet' (they ...
const typet & base_type() const
The type of the data what we point to.
virtual pointer_typet convert_pointer_type(const pointer_typet &pointer_type, const generic_parameter_specialization_mapt &generic_parameter_specialization_map, const namespacet &ns) const
Select what type should be used for a given pointer type.
A struct tag type, i.e., struct_typet with an identifier.
const symbolst & symbols
Read-only field, used to look up symbols given their names.
The type of an expression, extends irept.
irep_idt clinit_wrapper_name(const irep_idt &class_name)
Get the Java static initializer wrapper name for a given class (the wrapper checks if static initiali...
const typet & java_array_element_type(const struct_tag_typet &array_symbol)
Return a const reference to the element type of a given java array type.
bool is_java_array_tag(const irep_idt &tag)
See above.
const java_class_typet & to_java_class_type(const typet &type)
bool is_java_generic_type(const typet &type)
bool is_java_generic_parameter(const typet &type)
Checks whether the type is a java generic parameter/variable, e.g., T in List<T>.
const java_generic_typet & to_java_generic_type(const typet &type)
const pointer_typet & to_pointer_type(const typet &type)
Cast a typet to a pointer_typet.
Given a class and a component (either field or method), find the closest parent that defines that com...
Handle selection of correct pointer type (for example changing abstract classes to concrete versions)...
#define UNREACHABLE
This should be used to mark dead code.
const struct_tag_typet & to_struct_tag_type(const typet &type)
Cast a typet to a struct_tag_typet.