Skip to content

Commit 41b3a6a

Browse files
Move java_generic_symbol_typet definitions to cpp
1 parent 0afbe0f commit 41b3a6a

File tree

2 files changed

+46
-29
lines changed

2 files changed

+46
-29
lines changed

src/java_bytecode/java_types.cpp

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

src/java_bytecode/java_types.h

+2-29
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)