diff options
author | Jürg Billeter <j@bitron.ch> | 2012-08-14 14:12:58 +0200 |
---|---|---|
committer | Jürg Billeter <j@bitron.ch> | 2012-08-14 14:12:58 +0200 |
commit | dc692a038403503e43abbb6c7140332b4f274ca1 (patch) | |
tree | 0e8f6e2157d03145d45e0615c0e6e209783d5c50 | |
parent | 810f2926d7884aa3887bd72e9f96dece07bc6e2c (diff) | |
download | vala-dc692a038403503e43abbb6c7140332b4f274ca1.tar.gz |
Support static methods in generic classes
-rw-r--r-- | vala/valamemberaccess.vala | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/vala/valamemberaccess.vala b/vala/valamemberaccess.vala index de970b87a..af9f51f38 100644 --- a/vala/valamemberaccess.vala +++ b/vala/valamemberaccess.vala @@ -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; } |