Skip to content

Commit 2c8fc0f

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 fe79891 commit 2c8fc0f

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

src/java_bytecode/java_bytecode_convert_class.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,15 @@ static void find_and_replace_parameters(
690690
find_and_replace_parameters(argument, replacement_parameters);
691691
}
692692
}
693+
else if(is_java_generic_symbol_type(type))
694+
{
695+
java_generic_symbol_typet &generic_base = to_java_generic_symbol_type(type);
696+
std::vector<reference_typet> &gen_types = generic_base.generic_types();
697+
for(auto &gen_type : gen_types)
698+
{
699+
find_and_replace_parameters(gen_type, replacement_parameters);
700+
}
701+
}
693702
}
694703

695704
/// Checks if the class is implicitly generic, i.e., it is an inner class of
@@ -767,5 +776,11 @@ void mark_java_implicitly_generic_class_type(
767776
find_and_replace_parameters(
768777
field.type(), implicit_generic_type_parameters);
769778
}
779+
780+
for(auto &base : class_type.bases())
781+
{
782+
find_and_replace_parameters(
783+
base.type(), implicit_generic_type_parameters);
784+
}
770785
}
771786
}

0 commit comments

Comments
 (0)