Skip to content

Commit 1964982

Browse files
Move java_generic_symbol_typet definitions to cpp
1 parent 704093e commit 1964982

File tree

2 files changed

+44
-29
lines changed

2 files changed

+44
-29
lines changed

src/java_bytecode/java_types.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -835,3 +835,45 @@ void get_dependencies_from_generic_parameters(
835835
{
836836
get_dependencies_from_generic_parameters_rec(t, refs);
837837
}
838+
839+
/// Construct a generic symbol type from base_ref and class_name_prefix which
840+
/// must correspond to a generic type
841+
/// (see \ref java_generic_symbol_typet::java_type_from_string).
842+
/// For instance `java_generic_symbol_typet(symbol_typet("Map"),
843+
/// "Ljava/util/Map<TK;TV;>;", "java/util/Map")` will generate a symbol type
844+
/// with identifier "Map", and two generic types with identifier
845+
/// "java/util/Map::K" and "java/util/Map::V" respectively.
846+
java_generic_symbol_typet::java_generic_symbol_typet(
847+
const symbol_typet &type,
848+
const std::string &base_ref,
849+
const std::string &class_name_prefix)
850+
: symbol_typet(type)
851+
{
852+
set(ID_C_java_generic_symbol, true);
853+
const typet &base_type = java_type_from_string(base_ref, class_name_prefix);
854+
PRECONDITION(is_java_generic_type(base_type));
855+
const java_generic_typet gen_base_type = to_java_generic_type(base_type);
856+
generic_types().insert(
857+
generic_types().end(),
858+
gen_base_type.generic_type_arguments().begin(),
859+
gen_base_type.generic_type_arguments().end());
860+
}
861+
862+
/// Check if this symbol has the given generic type. If yes, return its index
863+
/// in the vector of generic types.
864+
/// \param type The type we are looking for.
865+
/// \return The index of the type in the vector of generic types.
866+
optionalt<size_t> java_generic_symbol_typet::generic_type_index(
867+
const java_generic_parametert &type) const
868+
{
869+
const auto &type_variable = type.type_variable();
870+
const auto &generics = generic_types();
871+
for(std::size_t i = 0; i < generics.size(); ++i)
872+
{
873+
if(
874+
is_java_generic_parameter(generics[i]) &&
875+
to_java_generic_parameter(generics[i]).type_variable() == type_variable)
876+
return i;
877+
}
878+
return {};
879+
}

src/java_bytecode/java_types.h

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -582,18 +582,7 @@ class java_generic_symbol_typet : public symbol_typet
582582
java_generic_symbol_typet(
583583
const symbol_typet &type,
584584
const std::string &base_ref,
585-
const std::string &class_name_prefix)
586-
: symbol_typet(type)
587-
{
588-
set(ID_C_java_generic_symbol, true);
589-
const typet &base_type = java_type_from_string(base_ref, class_name_prefix);
590-
PRECONDITION(is_java_generic_type(base_type));
591-
const java_generic_typet gen_base_type = to_java_generic_type(base_type);
592-
generic_types().insert(
593-
generic_types().end(),
594-
gen_base_type.generic_type_arguments().begin(),
595-
gen_base_type.generic_type_arguments().end());
596-
}
585+
const std::string &class_name_prefix);
597586

598587
const generic_typest &generic_types() const
599588
{
@@ -605,24 +594,8 @@ class java_generic_symbol_typet : public symbol_typet
605594
return (generic_typest &)(add(ID_generic_types).get_sub());
606595
}
607596

608-
/// Check if this symbol has the given generic type. If yes, return its index
609-
/// in the vector of generic types.
610-
/// \param type The type we are looking for.
611-
/// \return The index of the type in the vector of generic types.
612597
optionalt<size_t>
613-
generic_type_index(const java_generic_parametert &type) const
614-
{
615-
const auto &type_variable = type.type_variable();
616-
const auto &generics = generic_types();
617-
for(std::size_t i = 0; i < generics.size(); ++i)
618-
{
619-
if(
620-
is_java_generic_parameter(generics[i]) &&
621-
to_java_generic_parameter(generics[i]).type_variable() == type_variable)
622-
return i;
623-
}
624-
return {};
625-
}
598+
generic_type_index(const java_generic_parametert &type) const;
626599
};
627600

628601
/// \param type: the type to check

0 commit comments

Comments
 (0)