@@ -50,7 +50,16 @@ class java_bytecode_convert_classt:public messaget
50
50
convert (parse_tree.parsed_class );
51
51
else if (string_refinement_enabled &&
52
52
parse_tree.parsed_class .name ==" java.lang.String" )
53
- add_string_type ();
53
+ add_string_type (" java.lang.String" );
54
+ else if (string_refinement_enabled &&
55
+ parse_tree.parsed_class .name ==" java.lang.StringBuilder" )
56
+ add_string_type (" java.lang.StringBuilder" );
57
+ else if (string_refinement_enabled &&
58
+ parse_tree.parsed_class .name ==" java.lang.CharSequence" )
59
+ add_string_type (" java.lang.CharSequence" );
60
+ else if (string_refinement_enabled &&
61
+ parse_tree.parsed_class .name ==" java.lang.StringBuffer" )
62
+ add_string_type (" java.lang.StringBuffer" );
54
63
else
55
64
generate_class_stub (parse_tree.parsed_class .name );
56
65
}
@@ -72,7 +81,7 @@ class java_bytecode_convert_classt:public messaget
72
81
73
82
void generate_class_stub (const irep_idt &class_name);
74
83
void add_array_types ();
75
- void add_string_type ();
84
+ void add_string_type (const irep_idt &class_name );
76
85
};
77
86
78
87
/* ******************************************************************\
@@ -406,15 +415,17 @@ bool java_bytecode_convert_class(
406
415
407
416
Function: java_bytecode_convert_classt::add_string_type
408
417
418
+ Inputs: a name for the class such as "java.lang.String"
419
+
409
420
Purpose: Implements the java.lang.String type in the case that
410
421
we provide an internal implementation.
411
422
412
423
\*******************************************************************/
413
424
414
- void java_bytecode_convert_classt::add_string_type ()
425
+ void java_bytecode_convert_classt::add_string_type (const irep_idt &class_name )
415
426
{
416
427
class_typet string_type;
417
- string_type.set_tag (" java.lang.String " );
428
+ string_type.set_tag (class_name );
418
429
string_type.components ().resize (3 );
419
430
string_type.components ()[0 ].set_name (" @java.lang.Object" );
420
431
string_type.components ()[0 ].set_pretty_name (" @java.lang.Object" );
@@ -432,8 +443,8 @@ void java_bytecode_convert_classt::add_string_type()
432
443
string_type.add_base (symbol_typet (" java::java.lang.Object" ));
433
444
434
445
symbolt string_symbol;
435
- string_symbol.name =" java::java.lang.String " ;
436
- string_symbol.base_name =" java.lang.String " ;
446
+ string_symbol.name =" java::" + id2string (class_name) ;
447
+ string_symbol.base_name =id2string (class_name) ;
437
448
string_symbol.type =string_type;
438
449
string_symbol.is_type =true ;
439
450
@@ -445,8 +456,8 @@ void java_bytecode_convert_classt::add_string_type()
445
456
symbolt string_equals_symbol;
446
457
string_equals_symbol.name =
447
458
" java::java.lang.String.equals:(Ljava/lang/Object;)Z" ;
448
- string_equals_symbol.base_name =" java.lang.String .equals" ;
449
- string_equals_symbol.pretty_name =" java.lang.String .equals" ;
459
+ string_equals_symbol.base_name =id2string (class_name)+ " .equals" ;
460
+ string_equals_symbol.pretty_name =id2string (class_name)+ " .equals" ;
450
461
string_equals_symbol.mode =ID_java;
451
462
452
463
code_typet string_equals_type;
0 commit comments