Skip to content

Commit 54df3a1

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 6d691d7 commit 54df3a1

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
@@ -708,6 +708,15 @@ static void find_and_replace_parameters(
708708
find_and_replace_parameters(argument, replacement_parameters);
709709
}
710710
}
711+
else if(is_java_generic_symbol_type(type))
712+
{
713+
java_generic_symbol_typet &generic_base = to_java_generic_symbol_type(type);
714+
std::vector<reference_typet> &gen_types = generic_base.generic_types();
715+
for(auto &gen_type : gen_types)
716+
{
717+
find_and_replace_parameters(gen_type, replacement_parameters);
718+
}
719+
}
711720
}
712721

713722
/// Checks if the class is implicitly generic, i.e., it is an inner class of
@@ -785,5 +794,11 @@ void mark_java_implicitly_generic_class_type(
785794
find_and_replace_parameters(
786795
field.type(), implicit_generic_type_parameters);
787796
}
797+
798+
for(auto &base : class_type.bases())
799+
{
800+
find_and_replace_parameters(
801+
base.type(), implicit_generic_type_parameters);
802+
}
788803
}
789804
}

0 commit comments

Comments
 (0)