]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Support static methods in generic classes
authorJürg Billeter <j@bitron.ch>
Tue, 14 Aug 2012 12:12:58 +0000 (14:12 +0200)
committerJürg Billeter <j@bitron.ch>
Tue, 14 Aug 2012 12:12:58 +0000 (14:12 +0200)
vala/valamemberaccess.vala

index de970b87a27a27905cf5239e5d3933c501e66648..af9f51f383c171500f3b9985ecb49320e6853409 100644 (file)
@@ -799,6 +799,18 @@ public class Vala.MemberAccess : Expression {
                                Report.error (source_reference, "Access to instance member `%s' from nullable reference denied".printf (symbol_reference.get_full_name ()));
                        }
 
+                       var m = symbol_reference as Method;
+                       var inner_ma = inner as MemberAccess;
+                       if (m != null && m.binding == MemberBinding.STATIC && m.parent_symbol is ObjectTypeSymbol &&
+                           inner != null && inner.value_type == null && inner_ma.type_argument_list.size > 0) {
+                               // support static methods in generic classes
+                               inner.value_type = new ObjectType ((ObjectTypeSymbol) m.parent_symbol);
+
+                               foreach (var type_argument in inner_ma.type_argument_list) {
+                                       inner.value_type.add_type_argument (type_argument);
+                               }
+                       }
+
                        formal_value_type = context.analyzer.get_value_type_for_symbol (symbol_reference, lvalue);
                        if (inner != null && formal_value_type != null) {
                                value_type = formal_value_type.get_actual_type (inner.value_type, null, this);
@@ -807,8 +819,6 @@ public class Vala.MemberAccess : Expression {
                        }
 
                        if (symbol_reference is Method) {
-                               var m = (Method) symbol_reference;
-
                                if (target_type != null) {
                                        value_type.value_owned = target_type.value_owned;
                                }