]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Add GenericType.get_actual_type()
authorRico Tzschichholz <ricotz@ubuntu.com>
Wed, 5 Dec 2018 15:01:13 +0000 (16:01 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Wed, 19 Dec 2018 23:51:37 +0000 (00:51 +0100)
vala/valadatatype.vala
vala/valagenerictype.vala

index 09209a7fd8a42ba46c85611b5f22570ee77f97ec..85d8fb87bcde86268a6b7d837f239ccd5393f3a3 100644 (file)
@@ -463,11 +463,7 @@ public abstract class Vala.DataType : CodeNode {
                        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);
index d964ab63ace9bd6b6e53801e2566c8de6601c8fa..0a229a43ebd206e0cd183d5024532105054609ee 100644 (file)
@@ -47,6 +47,18 @@ public class Vala.GenericType : DataType {
                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 ();