return result;
}
- if (result is GenericType) {
- result = SemanticAnalyzer.get_actual_type (derived_instance_type, method_type_arguments, (GenericType) result, node_reference);
- // don't try to resolve type arguments of returned actual type
- // they can never be resolved and are not related to the instance type
- } else if (result.type_argument_list != null) {
+ if (result.type_argument_list != null) {
// recursely get actual types for type arguments
for (int i = 0; i < result.type_argument_list.size; i++) {
result.type_argument_list[i] = result.type_argument_list[i].get_actual_type (derived_instance_type, method_type_arguments, node_reference);
return result;
}
+ public override DataType get_actual_type (DataType? derived_instance_type, List<DataType>? method_type_arguments, CodeNode node_reference) {
+ var result = this.copy ();
+
+ if (derived_instance_type == null && method_type_arguments == null) {
+ return result;
+ }
+
+ result = SemanticAnalyzer.get_actual_type (derived_instance_type, method_type_arguments, (GenericType) result, node_reference);
+
+ return result;
+ }
+
public override DataType? infer_type_argument (TypeParameter type_param, DataType value_type) {
if (type_parameter == type_param) {
var ret = value_type.copy ();