File tree 2 files changed +38
-0
lines changed
unit/java_bytecode/java_types
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
579
579
public:
580
580
typedef std::vector<reference_typet> generic_typest;
581
581
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.
582
589
java_generic_symbol_typet (
583
590
const symbol_typet &type,
584
591
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