Skip to content

Commit a647f41

Browse files
Unit test for java_generic_symbol_type
1 parent 3f76403 commit a647f41

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

src/java_bytecode/java_types.h

+7
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,13 @@ class java_generic_symbol_typet : public symbol_typet
579579
public:
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 numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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+
}

0 commit comments

Comments
 (0)