@@ -80,40 +80,42 @@ void generic_parameter_specialization_map_keyst::insert_pairs_for_pointer(
80
80
const pointer_typet &pointer_type,
81
81
const typet &pointer_subtype_struct)
82
82
{
83
- if (is_java_generic_type (pointer_type))
83
+ if (!is_java_generic_type (pointer_type))
84
+ return ;
85
+ // The supplied type must be the full type of the pointer's subtype
86
+ PRECONDITION (
87
+ pointer_type.subtype ().get (ID_identifier) ==
88
+ pointer_subtype_struct.get (ID_name));
89
+
90
+ // If the pointer points to:
91
+ // - an incomplete class or
92
+ // - a class that is neither generic nor implicitly generic (this
93
+ // may be due to unsupported class signature)
94
+ // then ignore the generic types in the pointer and do not add any pairs.
95
+ // TODO TG-1996 should decide how mocking and generics should work
96
+ // together. Currently an incomplete class is never marked as generic. If
97
+ // this changes in TG-1996 then the condition below should be updated.
98
+ if (to_java_class_type (pointer_subtype_struct).get_is_stub ())
99
+ return ;
100
+ if (
101
+ !is_java_generic_class_type (pointer_subtype_struct) &&
102
+ !is_java_implicitly_generic_class_type (pointer_subtype_struct))
84
103
{
85
- // The supplied type must be the full type of the pointer's subtype
86
- PRECONDITION (
87
- pointer_type.subtype ().get (ID_identifier) ==
88
- pointer_subtype_struct.get (ID_name));
104
+ return ;
105
+ }
89
106
90
- // If the pointer points to:
91
- // - an incomplete class or
92
- // - a class that is neither generic nor implicitly generic (this
93
- // may be due to unsupported class signature)
94
- // then ignore the generic types in the pointer and do not add any pairs.
95
- // TODO TG-1996 should decide how mocking and generics should work
96
- // together. Currently an incomplete class is never marked as generic. If
97
- // this changes in TG-1996 then the condition below should be updated.
98
- if (
99
- !to_java_class_type (pointer_subtype_struct).get_is_stub () &&
100
- (is_java_generic_class_type (pointer_subtype_struct) ||
101
- is_java_implicitly_generic_class_type (pointer_subtype_struct)))
102
- {
103
- const java_generic_typet &generic_pointer =
104
- to_java_generic_type (pointer_type);
105
- const std::vector<java_generic_parametert> &generic_parameters =
106
- get_all_generic_parameters (pointer_subtype_struct);
107
+ const java_generic_typet &generic_pointer =
108
+ to_java_generic_type (pointer_type);
107
109
108
- INVARIANT (
109
- generic_pointer.generic_type_arguments ().size () ==
110
- generic_parameters.size (),
111
- " All generic parameters of the pointer type need to be specified" );
110
+ const std::vector<java_generic_parametert> &generic_parameters =
111
+ get_all_generic_parameters (pointer_subtype_struct);
112
+ const java_generic_typet::generic_type_argumentst &type_args =
113
+ generic_pointer.generic_type_arguments ();
114
+ INVARIANT (
115
+ type_args.size () == generic_parameters.size (),
116
+ " All generic parameters of the pointer type need to be specified" );
112
117
113
- insert_pairs (
114
- generic_parameters, generic_pointer.generic_type_arguments ());
115
- }
116
- }
118
+ insert_pairs (generic_parameters, type_args);
117
119
}
118
120
119
121
// / Add a pair of a parameter and its types for each generic parameter of the
@@ -137,24 +139,29 @@ void generic_parameter_specialization_map_keyst::insert_pairs_for_symbol(
137
139
// then ignore the generic types in the struct_tag_type and do not add any
138
140
// pairs.
139
141
// TODO TG-1996 should decide how mocking and generics should work
140
- // together. Currently an incomplete class is never marked as generic. If
141
- // this changes in TG-1996 then the condition below should be updated.
142
+ // together. Currently an incomplete class is never marked as generic. If
143
+ // this changes in TG-1996 then the condition below should be updated.
144
+ if (!is_java_generic_struct_tag_type (struct_tag_type))
145
+ return ;
146
+ if (to_java_class_type (symbol_struct).get_is_stub ())
147
+ return ;
142
148
if (
143
- is_java_generic_struct_tag_type (struct_tag_type) &&
144
- !to_java_class_type (symbol_struct).get_is_stub () &&
145
- (is_java_generic_class_type (symbol_struct) ||
146
- is_java_implicitly_generic_class_type (symbol_struct)))
149
+ !is_java_generic_class_type (symbol_struct) &&
150
+ !is_java_implicitly_generic_class_type (symbol_struct))
147
151
{
148
- const java_generic_struct_tag_typet &generic_symbol =
149
- to_java_generic_struct_tag_type (struct_tag_type);
152
+ return ;
153
+ }
154
+ const java_generic_struct_tag_typet &generic_symbol =
155
+ to_java_generic_struct_tag_type (struct_tag_type);
150
156
151
- const std::vector<java_generic_parametert> &generic_parameters =
152
- get_all_generic_parameters (symbol_struct);
157
+ const std::vector<java_generic_parametert> &generic_parameters =
158
+ get_all_generic_parameters (symbol_struct);
159
+ const java_generic_typet::generic_type_argumentst &type_args =
160
+ generic_symbol.generic_types ();
153
161
154
- INVARIANT (
155
- generic_symbol. generic_types () .size () == generic_parameters.size (),
156
- " All generic parameters of the superclass need to be concretized" );
162
+ INVARIANT (
163
+ type_args .size () == generic_parameters.size (),
164
+ " All generic parameters of the superclass need to be concretized" );
157
165
158
- insert_pairs (generic_parameters, generic_symbol.generic_types ());
159
- }
166
+ insert_pairs (generic_parameters, type_args);
160
167
}
0 commit comments