summaryrefslogtreecommitdiff
path: root/vala
diff options
context:
space:
mode:
Diffstat (limited to 'vala')
-rw-r--r--vala/valamemberaccess.vala14
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;
}