Skip to content

Commit ef3084b

Browse files
author
svorenova
committed
Correcting generic parameters in bases for implicitly generic classes
If the superclass or interface uses a generic parameter inherited from an outer class, make sure that the parameter for the base points to the parameter of the outer class.
1 parent d415e73 commit ef3084b

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

src/java_bytecode/java_bytecode_convert_class.cpp

+15
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,15 @@ static void find_and_replace_parameters(
709709
find_and_replace_parameters(argument, replacement_parameters);
710710
}
711711
}
712+
else if(is_java_generic_base_type(type))
713+
{
714+
java_generic_base_typet &generic_base = to_java_generic_base_type(type);
715+
std::vector<reference_typet> &gen_types = generic_base.generic_types();
716+
for(auto &gen_type : gen_types)
717+
{
718+
find_and_replace_parameters(gen_type, replacement_parameters);
719+
}
720+
}
712721
}
713722

714723
/// Checks if the class is implicitly generic, i.e., it is an inner class of
@@ -786,5 +795,11 @@ void mark_java_implicitly_generic_class_type(
786795
find_and_replace_parameters(
787796
field.type(), implicit_generic_type_parameters);
788797
}
798+
799+
for(auto &base : class_type.bases())
800+
{
801+
find_and_replace_parameters(
802+
base.type(), implicit_generic_type_parameters);
803+
}
789804
}
790805
}

0 commit comments

Comments
 (0)