q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=d0709d61101bd9f93134b6b49566965078847a65

commit d0709d61101bd9f93134b6b49566965078847a65
Author: Marcel Hollerbach <[email protected]>
Date:   Mon Feb 25 13:59:51 2019 +0100

    eolian: validate betaness
    
    Summary:
    if there is a none beta class, then this class should not depend on beta
    classes in parameters / event types / return types, parent inherits.
    This adds this validation, so we can start to slowly to unbeta more and
    more classes.
    
    Reviewers: q66, zmike, cedric, segfaultxavi
    
    Reviewed By: q66
    
    Subscribers: #reviewers, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D7999
---
 src/lib/elementary/efl_ui_relative_layout.eo |  2 +-
 src/lib/eolian/database_validate.c           | 34 ++++++++++++++++++++++++----
 src/tests/ecore/efl_app_test_cml.eo          |  2 +-
 3 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/src/lib/elementary/efl_ui_relative_layout.eo 
b/src/lib/elementary/efl_ui_relative_layout.eo
index 967f23d623..dff9c60801 100644
--- a/src/lib/elementary/efl_ui_relative_layout.eo
+++ b/src/lib/elementary/efl_ui_relative_layout.eo
@@ -1,4 +1,4 @@
-class Efl.Ui.Relative_Layout extends Efl.Ui.Widget implements Efl.Pack_Layout
+class @beta Efl.Ui.Relative_Layout extends Efl.Ui.Widget implements 
Efl.Pack_Layout
 {
    [[The relative layout class.
 
diff --git a/src/lib/eolian/database_validate.c 
b/src/lib/eolian/database_validate.c
index 7805a407ab..319b45a802 100644
--- a/src/lib/eolian/database_validate.c
+++ b/src/lib/eolian/database_validate.c
@@ -72,6 +72,27 @@ _validate_docstr(Eina_Stringshare *str, const Eolian_Object 
*info, Eina_List **r
    return ret;
 }
 
+static Eina_Bool
+_class_is_legacy(Eolian_Class *klass)
+{
+   return !!strncmp(klass->base.name, "Efl.", strlen("Efl."));
+}
+
+static Eina_Bool
+_validate_beta_usage(Eolian_Class *klass, Eolian_Type *type)
+{
+  if (!klass) return EINA_TRUE;
+  if (_class_is_legacy(klass)) return EINA_TRUE;
+  if (klass->is_beta) return EINA_TRUE;
+
+  if (type->type == EOLIAN_TYPE_CLASS && type->klass->is_beta)
+    {
+       _eo_parser_log(&type->base, "beta class used in public API");
+       return EINA_FALSE;
+    }
+  return EINA_TRUE;
+}
+
 static Eina_Bool
 _validate_doc(Eolian_Documentation *doc)
 {
@@ -378,10 +399,10 @@ _validate_function(Validate_State *vals, Eolian_Function 
*func, Eina_Hash *nhash
         return EINA_TRUE;
      }
 
-   if (func->get_ret_type && !_validate_type(vals, func->get_ret_type))
+   if (func->get_ret_type && (!_validate_type(vals, func->get_ret_type) || 
!_validate_beta_usage(func->klass, func->get_ret_type)))
      return EINA_FALSE;
 
-   if (func->set_ret_type && !_validate_type(vals, func->set_ret_type))
+   if (func->set_ret_type && (!_validate_type(vals, func->set_ret_type) || 
!_validate_beta_usage(func->klass, func->set_ret_type)))
      return EINA_FALSE;
 
    if (func->get_ret_val && !_validate_expr(func->get_ret_val,
@@ -394,7 +415,7 @@ _validate_function(Validate_State *vals, Eolian_Function 
*func, Eina_Hash *nhash
 
 #define EOLIAN_PARAMS_VALIDATE(params) \
    EINA_LIST_FOREACH(params, l, param) \
-     if (!_validate_param(vals, param)) \
+     if (!_validate_param(vals, param) || !_validate_beta_usage(func->klass, 
param->type)) \
        return EINA_FALSE;
 
    EOLIAN_PARAMS_VALIDATE(func->prop_values);
@@ -482,7 +503,7 @@ _validate_event(Validate_State *vals, Eolian_Event *event, 
Eina_Hash *nhash)
         return EINA_TRUE;
      }
 
-   if (!_validate_type(vals, event->type))
+   if (!_validate_type(vals, event->type) || 
!_validate_beta_usage(event->klass, event->type))
      return EINA_FALSE;
 
    if (!_validate_doc(event->doc))
@@ -1159,6 +1180,11 @@ _validate_class(Validate_State *vals, Eolian_Class *cl,
            default:
              break;
           }
+        if (!_class_is_legacy(cl) && !cl->is_beta && cl->parent->is_beta)
+          {
+             _eo_parser_log(&cl->base, "non-beta class cannot have beta 
parent");
+             return EINA_FALSE;
+          }
         if (!_validate_class(vals, cl->parent, nhash, ehash, chash))
           return EINA_FALSE;
      }
diff --git a/src/tests/ecore/efl_app_test_cml.eo 
b/src/tests/ecore/efl_app_test_cml.eo
index b0877e0cf7..ade7426a89 100644
--- a/src/tests/ecore/efl_app_test_cml.eo
+++ b/src/tests/ecore/efl_app_test_cml.eo
@@ -1,4 +1,4 @@
-class Efl.App.Test.CML extends Efl.Object implements Efl.Core.Command_Line
+class @beta Efl.App.Test.CML extends Efl.Object implements 
Efl.Core.Command_Line
 {
 
 }

-- 


Reply via email to