diff options
Diffstat (limited to 'vala')
-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; } |