File tree Expand file tree Collapse file tree 2 files changed +38
-0
lines changed
unit/java_bytecode/java_types Expand file tree Collapse file tree 2 files changed +38
-0
lines changed Original file line number Diff line number Diff line change @@ -579,6 +579,13 @@ class java_generic_symbol_typet : public symbol_typet
579579public:
580580 typedef std::vector<reference_typet> generic_typest;
581581
582+ // / Construct a generic symbol type from base_ref and class_name_prefix which
583+ // / must correspond to a generic type
584+ // / (see \ref java_generic_symbol_typet::java_type_from_string).
585+ // / For instance `java_generic_symbol_typet(symbol_typet("Map"),
586+ // / "Ljava/util/Map<TK;TV;>;", "java/util/Map")` will generate a symbol type
587+ // / with identifier "Map", and two generic types with identifier
588+ // / "java/util/Map::K" and "java/util/Map::V" respectively.
582589 java_generic_symbol_typet (
583590 const symbol_typet &type,
584591 const std::string &base_ref,
Original file line number Diff line number Diff line change 1+ /* ******************************************************************\
2+
3+ Module: Unit tests for java_types
4+
5+ Author: Diffblue Ltd.
6+
7+ \*******************************************************************/
8+
9+ #include < testing-utils/catch.hpp>
10+ #include < java_types.h>
11+
12+ SCENARIO (" java_generic_symbol_type" , " [core][java_types]" )
13+ {
14+ WHEN (" MyType is LGenericClass<TX;TY;>;" )
15+ {
16+ auto symbol_type = symbol_typet (" MyType" );
17+ const auto generic_symbol_type = java_generic_symbol_typet (
18+ symbol_type, " LGenericClass<TX;TY;>;" , " PrefixClassName" );
19+
20+ REQUIRE (generic_symbol_type.get_identifier () == " MyType" );
21+
22+ auto types = generic_symbol_type.generic_types ();
23+ REQUIRE (types.size () == 2 );
24+
25+ auto generic_var0 = to_java_generic_parameter (types[0 ]).type_variable ();
26+ REQUIRE (generic_var0.get_identifier () == " PrefixClassName::X" );
27+
28+ auto generic_var1 = to_java_generic_parameter (types[1 ]).type_variable ();
29+ REQUIRE (generic_var1.get_identifier () == " PrefixClassName::Y" );
30+ }
31+ }
You can’t perform that action at this time.
0 commit comments