Skip to content

Commit e760d6b

Browse files
author
Matthias Güdemann
committed
Catch unsupported generics exception in superclass ref extraction
This catches `unsupported_java_class_signature_exceptiont` that is thrown in case of a non-parseable signature returned from the `extract_generic_superclass` or `extract_generic_interface methods`.
1 parent b0eb45e commit e760d6b

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

src/java_bytecode/java_bytecode_convert_class.cpp

+26-6
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,19 @@ void java_bytecode_convert_classt::convert(const classt &c)
239239
extract_generic_superclass_reference(c.signature);
240240
if(superclass_ref.has_value())
241241
{
242-
const java_generic_symbol_typet generic_base(
243-
base, superclass_ref.value(), qualified_classname);
244-
class_type.add_base(generic_base);
242+
try
243+
{
244+
const java_generic_symbol_typet generic_base(
245+
base, superclass_ref.value(), qualified_classname);
246+
class_type.add_base(generic_base);
247+
}
248+
catch(unsupported_java_class_signature_exceptiont)
249+
{
250+
debug() << "unsupported generic superclass signature "
251+
<< id2string(*superclass_ref)
252+
<< " falling back on using the descriptor" << eom;
253+
class_type.add_base(base);
254+
}
245255
}
246256
else
247257
{
@@ -268,9 +278,19 @@ void java_bytecode_convert_classt::convert(const classt &c)
268278
extract_generic_interface_reference(c.signature, id2string(interface));
269279
if(interface_ref.has_value())
270280
{
271-
const java_generic_symbol_typet generic_base(
272-
base, interface_ref.value(), qualified_classname);
273-
class_type.add_base(generic_base);
281+
try
282+
{
283+
const java_generic_symbol_typet generic_base(
284+
base, interface_ref.value(), qualified_classname);
285+
class_type.add_base(generic_base);
286+
}
287+
catch(unsupported_java_class_signature_exceptiont)
288+
{
289+
debug() << "unsupported generic interface signature "
290+
<< id2string(*interface_ref)
291+
<< " falling back on using the descriptor" << eom;
292+
class_type.add_base(base);
293+
}
274294
}
275295
else
276296
{

0 commit comments

Comments
 (0)