Skip to content

Commit

Permalink
libvaladoc: Fix parameter and property ownership declarations
Browse files Browse the repository at this point in the history
  • Loading branch information
ricotz committed Oct 14, 2019
1 parent 37bcb59 commit e1d7a30
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 6 deletions.
28 changes: 22 additions & 6 deletions libvaladoc/api/typereference.vala
Expand Up @@ -126,12 +126,28 @@ public class Valadoc.Api.TypeReference : Item {
}

Ownership get_type_reference_ownership (Vala.DataType? element) {
if (is_type_reference_owned (element)) {
return Ownership.OWNED;
} else if (is_type_reference_weak (element)) {
return Ownership.WEAK;
} else if (is_type_reference_unowned (element)) {
return Ownership.UNOWNED;
unowned Vala.DataType? type = element;
if (type != null) {
if (type.parent_node is Vala.Parameter) {
if (((Vala.Parameter) type.parent_node).direction == Vala.ParameterDirection.IN) {
if (type.value_owned) {
return Ownership.OWNED;
}
} else {
if (type.is_weak ()) {
return Ownership.UNOWNED;
}
}
return Ownership.DEFAULT;
} else if (type.parent_node is Vala.PropertyAccessor) {
if (((Vala.PropertyAccessor) type.parent_node).value_type.value_owned) {
return Ownership.OWNED;
}
return Ownership.DEFAULT;
}
if (type.is_weak ()) {
return Ownership.UNOWNED;
}
}

return Ownership.DEFAULT;
Expand Down
2 changes: 2 additions & 0 deletions valadoc/tests/drivers/api-test.data.vapi
Expand Up @@ -95,7 +95,9 @@ namespace ParamTest {
public void test_function_param_1 ();
public void test_function_param_2 (int a);
public void test_function_param_3 (ref int a);
public void test_function_param_3a (ref unowned string? a);
public void test_function_param_4 (out int a);
public void test_function_param_4a (out unowned string? a);
public void test_function_param_5 (owned Object o);
public void test_function_param_6 (int? a);
public void test_function_param_7 (...);
Expand Down
74 changes: 74 additions & 0 deletions valadoc/tests/drivers/generic-api-test.vala
Expand Up @@ -1541,7 +1541,9 @@ public static void param_test (Api.Namespace ns, Api.Package pkg) {
bool func1 = false;
bool func2 = false;
bool func3 = false;
bool func3a = false;
bool func4 = false;
bool func4a = false;
bool func5 = false;
bool func6 = false;
bool func7 = false;
Expand Down Expand Up @@ -1663,6 +1665,41 @@ public static void param_test (Api.Namespace ns, Api.Package pkg) {
func3 = true;
break;

case "test_function_param_3a":
assert (params.size == 1);

Api.FormalParameter param = params.get (0) as Api.FormalParameter;
assert (param != null);
// (.FormalParameter)
assert (param.default_value == null);
assert (param.is_out == false);
assert (param.is_ref == true);
assert (param.has_default_value == false);
assert (param.parameter_type != null);
assert (param.ellipsis == false);
// (.Symbol check)
assert (param.is_deprecated == false);
assert (param.accessibility == Vala.SymbolAccessibility.PUBLIC);
// (.Node)
assert (param.get_full_name () == "ParamTest.test_function_param_3a.a");
assert (param.get_filename () == "api-test.data.vapi");
assert (param.nspace == ns);
assert (param.package == pkg);
assert (param.name == "a");
// param type:
assert (param.parameter_type.data_type != null);
assert (param.parameter_type.data_type is Api.Class);
assert (((Api.Symbol) param.parameter_type.data_type).get_full_name () == "string");
assert (param.parameter_type.get_type_arguments ().size == 0);
assert (param.parameter_type.is_owned == false);
assert (param.parameter_type.is_unowned == true);
assert (param.parameter_type.is_weak == false);
assert (param.parameter_type.is_dynamic == false);
assert (param.parameter_type.is_nullable == true);

func3a = true;
break;

case "test_function_param_4":
assert (params.size == 1);

Expand Down Expand Up @@ -1699,6 +1736,41 @@ public static void param_test (Api.Namespace ns, Api.Package pkg) {
func4 = true;
break;

case "test_function_param_4a":
assert (params.size == 1);

Api.FormalParameter param = params.get (0) as Api.FormalParameter;
assert (param != null);
// (.FormalParameter)
assert (param.default_value == null);
assert (param.is_out == true);
assert (param.is_ref == false);
assert (param.has_default_value == false);
assert (param.parameter_type != null);
assert (param.ellipsis == false);
// (.Symbol check)
assert (param.is_deprecated == false);
assert (param.accessibility == Vala.SymbolAccessibility.PUBLIC);
// (.Node)
assert (param.get_full_name () == "ParamTest.test_function_param_4a.a");
assert (param.get_filename () == "api-test.data.vapi");
assert (param.nspace == ns);
assert (param.package == pkg);
assert (param.name == "a");
// param type:
assert (param.parameter_type.data_type != null);
assert (param.parameter_type.data_type is Api.Class);
assert (((Api.Symbol) param.parameter_type.data_type).get_full_name () == "string");
assert (param.parameter_type.get_type_arguments ().size == 0);
assert (param.parameter_type.is_owned == false);
assert (param.parameter_type.is_unowned == true);
assert (param.parameter_type.is_weak == false);
assert (param.parameter_type.is_dynamic == false);
assert (param.parameter_type.is_nullable == true);

func4a = true;
break;

case "test_function_param_5":
assert (params.size == 1);

Expand Down Expand Up @@ -2257,7 +2329,9 @@ public static void param_test (Api.Namespace ns, Api.Package pkg) {
assert (func1 == true);
assert (func2 == true);
assert (func3 == true);
assert (func3a == true);
assert (func4 == true);
assert (func4a == true);
assert (func5 == true);
assert (func6 == true);
assert (func7 == true);
Expand Down

0 comments on commit e1d7a30

Please sign in to comment.