eolian_cxx: Add documentation field to property_def
authorLauro Moura <lauromoura@expertisesolutions.com.br>
Tue, 4 Dec 2018 17:50:48 +0000 (15:50 -0200)
committerHermet Park <hermetpark@gmail.com>
Wed, 5 Dec 2018 05:54:38 +0000 (14:54 +0900)
Test Plan: run eolian_cxx suite

Reviewers: vitor.sousa, felipealmeida

Reviewed By: vitor.sousa

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7414

src/lib/eolian_cxx/grammar/klass_def.hpp
src/tests/eolian_cxx/eolian_cxx_test_documentation.cc

index 1db9324..08240b6 100644 (file)
@@ -802,6 +802,7 @@ struct property_def
 {
   klass_name klass;
   std::string name;
+  documentation_def documentation;
 
   efl::eina::optional<function_def> getter;
   efl::eina::optional<function_def> setter;
@@ -810,6 +811,7 @@ struct property_def
   {
     return lhs.klass == rhs.klass
       && lhs.name == rhs.name
+      && lhs.documentation == rhs.documentation
       && lhs.getter == rhs.getter
       && lhs.setter == rhs.setter;
   }
@@ -828,6 +830,14 @@ struct property_def
 
     const Eolian_Class *eolian_klass = eolian_function_class_get(function);
     klass = klass_name(eolian_klass, {attributes::qualifier_info::is_none, std::string()});
+
+    Eolian_Implement const* implement = ::eolian_function_implement_get(function);
+    if (!implement)
+      return;
+
+    Eolian_Function_Type type = ::eolian_function_type_get(function);
+    if (type == EOLIAN_PROP_GET || type == EOLIAN_PROP_SET || type == EOLIAN_PROPERTY)
+      documentation = eolian_implement_documentation_get(implement, EOLIAN_PROPERTY);
   }
 };
 
index 4690f45..d3908ff 100644 (file)
@@ -144,6 +144,12 @@ EFL_START_TEST(eolian_cxx_test_property_docs)
    ck_assert_str_eq(doc.summary.c_str(), "Set documentation.");
    ck_assert_str_eq(doc.description.c_str(), "");
    ck_assert_str_eq(doc.since.c_str(), "1.17"); // Members inherit from parent *class*
+
+   auto property_iter = klass.properties.begin();
+   auto property = *property_iter;
+   doc = property.documentation;
+   ck_assert_str_eq(doc.summary.c_str(), "Property common documentation.");
+   ck_assert_str_eq(doc.since.c_str(), "1.18");
 }
 EFL_END_TEST