summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@samsung.com>2019-09-30 19:45:45 +0200
committerDaniel Kolesa <d.kolesa@samsung.com>2019-09-30 20:12:35 +0200
commit71c83d2005e060daee8df97ad267e1954f12ff83 (patch)
tree51c2aaa8cdda3e2655127424b296b41e70e71936 /src
parent835e230f2fefa14cdfae7af84dc5afbc40bca985 (diff)
efl: add code to enforce presence of @since tags
This is not yet enabled because there's too many instances where this is broken. Ref T7704
Diffstat (limited to 'src')
-rw-r--r--src/lib/efl/interfaces/efl_gfx_types.eot7
-rw-r--r--src/lib/efl/interfaces/efl_input_device.eo4
-rw-r--r--src/lib/efl/interfaces/efl_model.eo7
-rw-r--r--src/lib/efl/interfaces/efl_pack.eo2
-rw-r--r--src/lib/efl/interfaces/efl_player.eo5
-rw-r--r--src/lib/efl/interfaces/efl_text_types.eot5
-rw-r--r--src/lib/efl/interfaces/efl_ui_property_bind.eo9
-rw-r--r--src/lib/elementary/efl_ui.eot5
-rw-r--r--src/lib/eo/efl_object.eo15
-rw-r--r--src/lib/eo/eina_types.eot40
-rw-r--r--src/lib/eolian/database_validate.c108
-rw-r--r--src/lib/evas/canvas/efl_canvas_object.eo5
-rw-r--r--src/lib/evas/canvas/efl_input_event.eo2
-rw-r--r--src/lib/evas/canvas/efl_input_interface.eo2
14 files changed, 192 insertions, 24 deletions
diff --git a/src/lib/efl/interfaces/efl_gfx_types.eot b/src/lib/efl/interfaces/efl_gfx_types.eot
index 2a4e668..7522b21 100644
--- a/src/lib/efl/interfaces/efl_gfx_types.eot
+++ b/src/lib/efl/interfaces/efl_gfx_types.eot
@@ -24,7 +24,10 @@ enum @beta Efl.Gfx.Colorspace {
24} 24}
25 25
26enum Efl.Gfx.Render_Op { 26enum Efl.Gfx.Render_Op {
27 [[Graphics render operation mode]] 27 [[Graphics render operation mode
28
29 @since 1.23
30 ]]
28 blend = 0, [[Alpha blending onto destination (default); d = d*(1-sa) + s.]] 31 blend = 0, [[Alpha blending onto destination (default); d = d*(1-sa) + s.]]
29 copy = 1, [[Copy source to destination; d = s.]] 32 copy = 1, [[Copy source to destination; d = s.]]
30 last [[Sentinel value to indicate last enum field during iteration]] 33 last [[Sentinel value to indicate last enum field during iteration]]
@@ -182,6 +185,8 @@ enum Efl.Gfx.Hint_Aspect
182 [[Aspect types/policies for scaling size hints. 185 [[Aspect types/policies for scaling size hints.
183 186
184 See also @Efl.Gfx.Hint.hint_aspect. 187 See also @Efl.Gfx.Hint.hint_aspect.
188
189 @since 1.23
185 ]] 190 ]]
186 191
187 none = 0, [[No preference on either direction of the container 192 none = 0, [[No preference on either direction of the container
diff --git a/src/lib/efl/interfaces/efl_input_device.eo b/src/lib/efl/interfaces/efl_input_device.eo
index 783b261..dda39b1 100644
--- a/src/lib/efl/interfaces/efl_input_device.eo
+++ b/src/lib/efl/interfaces/efl_input_device.eo
@@ -3,6 +3,8 @@ enum Efl.Input.Device_Type
3 [[General type of input device. 3 [[General type of input device.
4 4
5 Legacy support since 1.8 as $Evas_Device_Class. 5 Legacy support since 1.8 as $Evas_Device_Class.
6
7 @since 1.23
6 ]] 8 ]]
7 none, [[Not a device.]] 9 none, [[Not a device.]]
8 seat, [[The user/seat (the user themselves).]] 10 seat, [[The user/seat (the user themselves).]]
@@ -22,6 +24,8 @@ enum Efl.Input.Device_Type
22class Efl.Input.Device extends Efl.Object 24class Efl.Input.Device extends Efl.Object
23{ 25{
24 [[Represents a pointing device such as a touch finger, pen or mouse. 26 [[Represents a pointing device such as a touch finger, pen or mouse.
27
28 @since 1.23
25 ]] 29 ]]
26 methods { 30 methods {
27 @property device_type { 31 @property device_type {
diff --git a/src/lib/efl/interfaces/efl_model.eo b/src/lib/efl/interfaces/efl_model.eo
index 477e9e1..6492f76 100644
--- a/src/lib/efl/interfaces/efl_model.eo
+++ b/src/lib/efl/interfaces/efl_model.eo
@@ -1,5 +1,8 @@
1struct Efl.Model_Property_Event { 1struct Efl.Model_Property_Event {
2 [[EFL model property event data structure]] 2 [[EFL model property event data structure
3
4 @since 1.23
5 ]]
3 changed_properties: array<stringshare>; [[List of changed properties]] 6 changed_properties: array<stringshare>; [[List of changed properties]]
4 invalidated_properties: array<stringshare>; [[Removed properties identified by name]] 7 invalidated_properties: array<stringshare>; [[Removed properties identified by name]]
5} 8}
@@ -22,6 +25,8 @@ interface Efl.Model
22 25
23 Additionally a model can have a list of children. The fetching of the children is asynchronous, this has the advantage of 26 Additionally a model can have a list of children. The fetching of the children is asynchronous, this has the advantage of
24 having as few data sets as possible in the memory itself. 27 having as few data sets as possible in the memory itself.
28
29 @since 1.23
25 ]] 30 ]]
26 c_prefix: efl_model; 31 c_prefix: efl_model;
27 methods { 32 methods {
diff --git a/src/lib/efl/interfaces/efl_pack.eo b/src/lib/efl/interfaces/efl_pack.eo
index 7c65928..0c7b330 100644
--- a/src/lib/efl/interfaces/efl_pack.eo
+++ b/src/lib/efl/interfaces/efl_pack.eo
@@ -2,6 +2,8 @@ interface Efl.Pack extends Efl.Container
2{ 2{
3 [[Common interface for objects (containers) with multiple contents 3 [[Common interface for objects (containers) with multiple contents
4 (sub-objects) which can be added and removed at runtime. 4 (sub-objects) which can be added and removed at runtime.
5
6 @since 1.23
5 ]] 7 ]]
6 methods 8 methods
7 { 9 {
diff --git a/src/lib/efl/interfaces/efl_player.eo b/src/lib/efl/interfaces/efl_player.eo
index 3157715..afeb7c2 100644
--- a/src/lib/efl/interfaces/efl_player.eo
+++ b/src/lib/efl/interfaces/efl_player.eo
@@ -1,6 +1,9 @@
1interface Efl.Player 1interface Efl.Player
2{ 2{
3 [[Efl media player interface]] 3 [[Efl media player interface
4
5 @since 1.23
6 ]]
4 c_prefix: efl_player; 7 c_prefix: efl_player;
5 methods { 8 methods {
6 @property playing { 9 @property playing {
diff --git a/src/lib/efl/interfaces/efl_text_types.eot b/src/lib/efl/interfaces/efl_text_types.eot
index f50e0d5..b712720 100644
--- a/src/lib/efl/interfaces/efl_text_types.eot
+++ b/src/lib/efl/interfaces/efl_text_types.eot
@@ -1,5 +1,8 @@
1enum Efl.Text_Bidirectional_Type { 1enum Efl.Text_Bidirectional_Type {
2 [[Bidirectionaltext type]] 2 [[Bidirectionaltext type
3
4 @since 1.23
5 ]]
3 natural = 0, [[Natural text type, same as neutral]] 6 natural = 0, [[Natural text type, same as neutral]]
4 neutral = 0, [[Neutral text type, same as natural]] 7 neutral = 0, [[Neutral text type, same as natural]]
5 ltr, [[Left to right text type]] 8 ltr, [[Left to right text type]]
diff --git a/src/lib/efl/interfaces/efl_ui_property_bind.eo b/src/lib/efl/interfaces/efl_ui_property_bind.eo
index aafd772..d0249ae 100644
--- a/src/lib/efl/interfaces/efl_ui_property_bind.eo
+++ b/src/lib/efl/interfaces/efl_ui_property_bind.eo
@@ -2,7 +2,10 @@ import eina_types;
2 2
3struct Efl.Ui.Property_Event { 3struct Efl.Ui.Property_Event {
4 [[EFL Ui property event data structure triggered when an object property change due 4 [[EFL Ui property event data structure triggered when an object property change due
5 to the interaction on the object.]] 5 to the interaction on the object.
6
7 @since 1.23
8 ]]
6 changed_properties: array<stringshare>; [[List of changed properties]] 9 changed_properties: array<stringshare>; [[List of changed properties]]
7} 10}
8 11
@@ -12,7 +15,9 @@ interface Efl.Ui.Property_Bind
12 view object can have @Efl.Model to manage the data, 15 view object can have @Efl.Model to manage the data,
13 the interface can help loading and tracking child data from the model property. 16 the interface can help loading and tracking child data from the model property.
14 see @Efl.Model 17 see @Efl.Model
15 see @Efl.Ui.Factory]] 18 see @Efl.Ui.Factory
19
20 @since 1.23]]
16 methods { 21 methods {
17 property_bind { 22 property_bind {
18 [[bind property data with the given key string. when the data is ready or changed, 23 [[bind property data with the given key string. when the data is ready or changed,
diff --git a/src/lib/elementary/efl_ui.eot b/src/lib/elementary/efl_ui.eot
index eaa4ae4..e9c2fbc 100644
--- a/src/lib/elementary/efl_ui.eot
+++ b/src/lib/elementary/efl_ui.eot
@@ -17,7 +17,10 @@ error Efl.Ui.Theme.Apply_Error.VERSION = "The widget attempted to load a theme t
17 17
18enum Efl.Ui.Focus.Direction 18enum Efl.Ui.Focus.Direction
19{ 19{
20 [[ Focus directions. ]] 20 [[ Focus directions.
21
22 @since 1.23
23 ]]
21 previous = 0, [[ previous direction ]] 24 previous = 0, [[ previous direction ]]
22 next = 1, [[ next direction ]] 25 next = 1, [[ next direction ]]
23 up = 2, [[ up direction ]] 26 up = 2, [[ up direction ]]
diff --git a/src/lib/eo/efl_object.eo b/src/lib/eo/efl_object.eo
index 68082f5..b336a4e 100644
--- a/src/lib/eo/efl_object.eo
+++ b/src/lib/eo/efl_object.eo
@@ -26,11 +26,20 @@ type Efl.Callback_Priority : short;
26]] 26]]
27 27
28const Efl.Callback_Priority_Before : Efl.Callback_Priority = -100; 28const Efl.Callback_Priority_Before : Efl.Callback_Priority = -100;
29[[Slightly more prioritized than default.]] 29[[Slightly more prioritized than default.
30
31 @since 1.22
32]]
30const Efl.Callback_Priority_Default : Efl.Callback_Priority = 0; 33const Efl.Callback_Priority_Default : Efl.Callback_Priority = 0;
31[[Default priority.]] 34[[Default priority.
35
36 @since 1.22
37]]
32const Efl.Callback_Priority_After : Efl.Callback_Priority = 100; 38const Efl.Callback_Priority_After : Efl.Callback_Priority = 100;
33[[Slightly less prioritized than default.]] 39[[Slightly less prioritized than default.
40
41 @since 1.22
42]]
34 43
35abstract Efl.Object 44abstract Efl.Object
36{ 45{
diff --git a/src/lib/eo/eina_types.eot b/src/lib/eo/eina_types.eot
index d936901..5c31e5b 100644
--- a/src/lib/eo/eina_types.eot
+++ b/src/lib/eo/eina_types.eot
@@ -1,6 +1,9 @@
1/* FIXME: Move to Eina when we decide they are handled properly. */ 1/* FIXME: Move to Eina when we decide they are handled properly. */
2struct @extern @free(eina_rectangle_free) Eina.Rect { 2struct @extern @free(eina_rectangle_free) Eina.Rect {
3 [[A rectangle in pixel dimensions.]] 3 [[A rectangle in pixel dimensions.
4
5 @since 1.22
6 ]]
4 x: int; [[X coordinate of the rectangle, from the top-left corner.]] 7 x: int; [[X coordinate of the rectangle, from the top-left corner.]]
5 y: int; [[Y coordinate of the rectangle, from the top-left corner.]] 8 y: int; [[Y coordinate of the rectangle, from the top-left corner.]]
6 w: int; [[Width of the rectangle in pixels.]] 9 w: int; [[Width of the rectangle in pixels.]]
@@ -8,27 +11,42 @@ struct @extern @free(eina_rectangle_free) Eina.Rect {
8} 11}
9 12
10struct @extern Eina.Position2D { 13struct @extern Eina.Position2D {
11 [[A 2D location in pixels.]] 14 [[A 2D location in pixels.
15
16 @since 1.22
17 ]]
12 x: int; [[X position in pixels, from the top-left corner.]] 18 x: int; [[X position in pixels, from the top-left corner.]]
13 y: int; [[Y position in pixels, from the top-left corner.]] 19 y: int; [[Y position in pixels, from the top-left corner.]]
14} 20}
15 21
16struct @extern Eina.Size2D { 22struct @extern Eina.Size2D {
17 [[A 2D size in pixels.]] 23 [[A 2D size in pixels.
24
25 @since 1.22
26 ]]
18 w: int; [[X position in pixels, from the top-left corner.]] 27 w: int; [[X position in pixels, from the top-left corner.]]
19 h: int; [[Y position in pixels, from the top-left corner.]] 28 h: int; [[Y position in pixels, from the top-left corner.]]
20} 29}
21 30
22struct @extern Eina.File; [[Eina file data structure]] 31struct @extern Eina.File; [[Eina file data structure
32
33 @since 1.22
34]]
23 35
24struct @extern Eina.Vector2 { 36struct @extern Eina.Vector2 {
25 [[A simple 2D vector type using floating point values.]] 37 [[A simple 2D vector type using floating point values.
38
39 @since 1.22
40 ]]
26 x: double; [[X coordinate.]] 41 x: double; [[X coordinate.]]
27 y: double; [[Y coordinate.]] 42 y: double; [[Y coordinate.]]
28} 43}
29 44
30struct @extern Eina.Matrix3 { 45struct @extern Eina.Matrix3 {
31 [[Eina 3x3 Matrix]] 46 [[Eina 3x3 Matrix
47
48 @since 1.22
49 ]]
32 xx: double; [[XX matrix value]] 50 xx: double; [[XX matrix value]]
33 xy: double; [[XY matrix value]] 51 xy: double; [[XY matrix value]]
34 xz: double; [[XZ matrix value]] 52 xz: double; [[XZ matrix value]]
@@ -60,7 +78,10 @@ enum @extern @beta Eina.Xattr.Flags {
60 created [[This will only succeed if the extended attribute wasn't previously set]] 78 created [[This will only succeed if the extended attribute wasn't previously set]]
61} 79}
62 80
63type @extern Eina.Error: int; [[Eina error type]] 81type @extern Eina.Error: int; [[Eina error type
82
83 @since 1.22
84]]
64 85
65struct @extern @beta @free(eina_binbuf_free) Eina.Binbuf; [[Eina binbuf data structure]] 86struct @extern @beta @free(eina_binbuf_free) Eina.Binbuf; [[Eina binbuf data structure]]
66struct @extern @beta @free(eina_strbuf_free) Eina.Strbuf; [[Eina strbuf data structure]] 87struct @extern @beta @free(eina_strbuf_free) Eina.Strbuf; [[Eina strbuf data structure]]
@@ -100,7 +121,10 @@ struct @extern @beta Eina.Stat {
100 ctimensec: ulong; [[The nano version of the timestmap when the file was created]] 121 ctimensec: ulong; [[The nano version of the timestmap when the file was created]]
101} 122}
102 123
103struct @extern @free(eina_promise_free) Eina.Promise; [[Eina promise type]] 124struct @extern @free(eina_promise_free) Eina.Promise; [[Eina promise type
125
126 @since 1.22
127]]
104 128
105/* FIXME: This definitely shouldn't be here. */ 129/* FIXME: This definitely shouldn't be here. */
106type @beta Efl.Event_Cb: __undefined_type; [[Efl event callback type]] 130type @beta Efl.Event_Cb: __undefined_type; [[Efl event callback type]]
diff --git a/src/lib/eolian/database_validate.c b/src/lib/eolian/database_validate.c
index c1de7ec..4e51718 100644
--- a/src/lib/eolian/database_validate.c
+++ b/src/lib/eolian/database_validate.c
@@ -1,5 +1,6 @@
1#include <ctype.h> 1#include <ctype.h>
2#include <assert.h> 2#include <assert.h>
3#include <stdlib.h>
3 4
4#ifdef HAVE_CONFIG_H 5#ifdef HAVE_CONFIG_H
5# include "config.h" 6# include "config.h"
@@ -12,7 +13,10 @@ typedef struct _Validate_State
12{ 13{
13 Eina_Bool warned; 14 Eina_Bool warned;
14 Eina_Bool stable; 15 Eina_Bool stable;
16 Eina_Bool in_tree;
15 Eina_Bool unimplemented_beta; 17 Eina_Bool unimplemented_beta;
18 Eina_Bool verify_since;
19 const char *since_ver;
16} Validate_State; 20} Validate_State;
17 21
18static Eina_Bool 22static Eina_Bool
@@ -88,6 +92,60 @@ _validate_docstr(Eina_Stringshare *str, const Eolian_Object *info, Eina_List **r
88} 92}
89 93
90static Eina_Bool 94static Eina_Bool
95_validate_doc_since(Validate_State *vals, Eolian_Documentation *doc)
96{
97 if (!doc || !vals->stable || !vals->verify_since)
98 return EINA_TRUE;
99
100 if (doc->since)
101 {
102 if (!doc->since[0])
103 {
104 /* this should not really happen */
105 _eo_parser_log(&doc->base, "empty @since tag");
106 return EINA_FALSE;
107 }
108 /* this is EFL; check the numbers */
109 if (vals->in_tree)
110 {
111 const char *snum = doc->since;
112 if (strncmp(snum, "1.", 2))
113 {
114 _eo_parser_log(&doc->base, "invalid EFL version in @since");
115 return EINA_FALSE;
116 }
117 snum += 2;
118 unsigned long min = strtoul(snum, NULL, 10);
119 if (min < 22)
120 {
121 _eo_parser_log(&doc->base, "stable APIs must be 1.22 or higher");
122 return EINA_FALSE;
123 }
124 }
125 vals->since_ver = doc->since;
126 }
127 else if (!vals->since_ver)
128 {
129 _eo_parser_log(&doc->base, "missing @since tag");
130 return EINA_FALSE;
131 }
132
133 return EINA_TRUE;
134}
135
136static Eina_Bool
137_validate_doc_since_reset(Validate_State *vals, Eolian_Documentation *doc)
138{
139 if (!doc || !doc->since)
140 return EINA_TRUE;
141
142 const char *old_since = vals->since_ver;
143 Eina_Bool ret = _validate_doc_since(vals, doc);
144 vals->since_ver = old_since;
145 return ret;
146}
147
148static Eina_Bool
91_validate_doc(Eolian_Documentation *doc) 149_validate_doc(Eolian_Documentation *doc)
92{ 150{
93 if (!doc) 151 if (!doc)
@@ -133,6 +191,7 @@ _sf_map_cb(const Eina_Hash *hash EINA_UNUSED, const void *key EINA_UNUSED,
133 return EINA_FALSE; 191 return EINA_FALSE;
134 192
135 sc->succ = _validate_doc(sf->doc); 193 sc->succ = _validate_doc(sf->doc);
194 if (sc->succ) sc->succ = _validate_doc_since_reset(sc->vals, sf->doc);
136 195
137 return sc->succ; 196 return sc->succ;
138} 197}
@@ -150,6 +209,7 @@ _ef_map_cb(const Eina_Hash *hash EINA_UNUSED, const void *key EINA_UNUSED,
150 return EINA_FALSE; 209 return EINA_FALSE;
151 210
152 sc->succ = _validate_doc(ef->doc); 211 sc->succ = _validate_doc(ef->doc);
212 if (sc->succ) sc->succ = _validate_doc_since_reset(sc->vals, ef->doc);
153 213
154 return sc->succ; 214 return sc->succ;
155} 215}
@@ -160,12 +220,18 @@ _validate_typedecl(Validate_State *vals, Eolian_Typedecl *tp)
160 if (tp->base.validated) 220 if (tp->base.validated)
161 return EINA_TRUE; 221 return EINA_TRUE;
162 222
163 if (!_validate_doc(tp->doc)) 223 const char *old_since = vals->since_ver;
164 return EINA_FALSE; 224 vals->since_ver = NULL;
165 225
166 /* for the time being assume all typedecls are beta unless overridden */ 226 /* for the time being assume all typedecls are beta unless overridden */
167 Eina_Bool was_stable = _set_stable(vals, !tp->base.is_beta); 227 Eina_Bool was_stable = _set_stable(vals, !tp->base.is_beta);
168 228
229 if (!_validate_doc(tp->doc))
230 return EINA_FALSE;
231
232 if (!_validate_doc_since(vals, tp->doc))
233 return EINA_FALSE;
234
169 switch (tp->type) 235 switch (tp->type)
170 { 236 {
171 case EOLIAN_TYPEDECL_ALIAS: 237 case EOLIAN_TYPEDECL_ALIAS:
@@ -174,6 +240,7 @@ _validate_typedecl(Validate_State *vals, Eolian_Typedecl *tp)
174 if (tp->base_type->ownable) 240 if (tp->base_type->ownable)
175 tp->ownable = EINA_TRUE; 241 tp->ownable = EINA_TRUE;
176 _reset_stable(vals, was_stable, EINA_TRUE); 242 _reset_stable(vals, was_stable, EINA_TRUE);
243 vals->since_ver = old_since;
177 return _validate(&tp->base); 244 return _validate(&tp->base);
178 case EOLIAN_TYPEDECL_STRUCT: 245 case EOLIAN_TYPEDECL_STRUCT:
179 { 246 {
@@ -182,10 +249,12 @@ _validate_typedecl(Validate_State *vals, Eolian_Typedecl *tp)
182 if (!rt.succ) 249 if (!rt.succ)
183 return _reset_stable(vals, was_stable, EINA_FALSE); 250 return _reset_stable(vals, was_stable, EINA_FALSE);
184 _reset_stable(vals, was_stable, EINA_TRUE); 251 _reset_stable(vals, was_stable, EINA_TRUE);
252 vals->since_ver = old_since;
185 return _validate(&tp->base); 253 return _validate(&tp->base);
186 } 254 }
187 case EOLIAN_TYPEDECL_STRUCT_OPAQUE: 255 case EOLIAN_TYPEDECL_STRUCT_OPAQUE:
188 _reset_stable(vals, was_stable, EINA_TRUE); 256 _reset_stable(vals, was_stable, EINA_TRUE);
257 vals->since_ver = old_since;
189 return _validate(&tp->base); 258 return _validate(&tp->base);
190 case EOLIAN_TYPEDECL_ENUM: 259 case EOLIAN_TYPEDECL_ENUM:
191 { 260 {
@@ -199,12 +268,14 @@ _validate_typedecl(Validate_State *vals, Eolian_Typedecl *tp)
199 if (!rt.succ) 268 if (!rt.succ)
200 return _reset_stable(vals, was_stable, EINA_FALSE); 269 return _reset_stable(vals, was_stable, EINA_FALSE);
201 _reset_stable(vals, was_stable, EINA_TRUE); 270 _reset_stable(vals, was_stable, EINA_TRUE);
271 vals->since_ver = old_since;
202 return _validate(&tp->base); 272 return _validate(&tp->base);
203 } 273 }
204 case EOLIAN_TYPEDECL_FUNCTION_POINTER: 274 case EOLIAN_TYPEDECL_FUNCTION_POINTER:
205 if (!_validate_function(vals, tp->function_pointer, NULL)) 275 if (!_validate_function(vals, tp->function_pointer, NULL))
206 return _reset_stable(vals, was_stable, EINA_FALSE); 276 return _reset_stable(vals, was_stable, EINA_FALSE);
207 _reset_stable(vals, was_stable, EINA_TRUE); 277 _reset_stable(vals, was_stable, EINA_TRUE);
278 vals->since_ver = old_since;
208 return _validate(&tp->base); 279 return _validate(&tp->base);
209 default: 280 default:
210 return _reset_stable(vals, was_stable, EINA_FALSE); 281 return _reset_stable(vals, was_stable, EINA_FALSE);
@@ -576,6 +647,8 @@ _validate_part(Validate_State *vals, Eolian_Part *part, Eina_Hash *phash)
576 647
577 if (!_validate_doc(part->doc)) 648 if (!_validate_doc(part->doc))
578 return _reset_stable(vals, was_stable, EINA_FALSE); 649 return _reset_stable(vals, was_stable, EINA_FALSE);
650 if (!_validate_doc_since_reset(vals, part->doc))
651 return _reset_stable(vals, was_stable, EINA_FALSE);
579 652
580 /* switch the class name for class */ 653 /* switch the class name for class */
581 Eolian_Class *pcl = eina_hash_find(part->base.unit->classes, part->klass_name); 654 Eolian_Class *pcl = eina_hash_find(part->base.unit->classes, part->klass_name);
@@ -695,6 +768,8 @@ _validate_event(Validate_State *vals, Eolian_Event *event, Eina_Hash *nhash)
695 768
696 if (!_validate_doc(event->doc)) 769 if (!_validate_doc(event->doc))
697 return _reset_stable(vals, was_stable, EINA_FALSE); 770 return _reset_stable(vals, was_stable, EINA_FALSE);
771 if (!_validate_doc_since_reset(vals, event->doc))
772 return _reset_stable(vals, was_stable, EINA_FALSE);
698 773
699 eina_hash_set(nhash, &event->base.name, &event->base); 774 eina_hash_set(nhash, &event->base.name, &event->base);
700 775
@@ -1346,7 +1421,7 @@ _db_fill_inherits(Validate_State *vals, Eolian_Class *cl, Eina_Hash *fhash,
1346} 1421}
1347 1422
1348static Eina_Bool 1423static Eina_Bool
1349_validate_implement(Eolian_Implement *impl) 1424_validate_implement(Validate_State *vals, Eolian_Implement *impl)
1350{ 1425{
1351 if (impl->base.validated) 1426 if (impl->base.validated)
1352 return EINA_TRUE; 1427 return EINA_TRUE;
@@ -1358,6 +1433,16 @@ _validate_implement(Eolian_Implement *impl)
1358 if (!_validate_doc(impl->set_doc)) 1433 if (!_validate_doc(impl->set_doc))
1359 return EINA_FALSE; 1434 return EINA_FALSE;
1360 1435
1436 /* common doc inherits @since into get/set doc */
1437 const char *old_since = vals->since_ver;
1438 if (impl->common_doc && !_validate_doc_since(vals, impl->common_doc))
1439 return EINA_FALSE;
1440 if (!_validate_doc_since_reset(vals, impl->get_doc))
1441 return EINA_FALSE;
1442 if (!_validate_doc_since_reset(vals, impl->set_doc))
1443 return EINA_FALSE;
1444 vals->since_ver = old_since;
1445
1361 return _validate(&impl->base); 1446 return _validate(&impl->base);
1362} 1447}
1363 1448
@@ -1485,6 +1570,10 @@ _validate_class(Validate_State *vals, Eolian_Class *cl,
1485 } 1570 }
1486 1571
1487 _set_stable(vals, !cl->base.is_beta); 1572 _set_stable(vals, !cl->base.is_beta);
1573 vals->since_ver = NULL;
1574
1575 if (!_validate_doc_since(vals, cl->doc))
1576 return EINA_FALSE;
1488 1577
1489 EINA_LIST_FOREACH(cl->properties, l, func) 1578 EINA_LIST_FOREACH(cl->properties, l, func)
1490 if (!_validate_function(vals, func, nhash)) 1579 if (!_validate_function(vals, func, nhash))
@@ -1503,7 +1592,7 @@ _validate_class(Validate_State *vals, Eolian_Class *cl,
1503 return EINA_FALSE; 1592 return EINA_FALSE;
1504 1593
1505 EINA_LIST_FOREACH(cl->implements, l, impl) 1594 EINA_LIST_FOREACH(cl->implements, l, impl)
1506 if (!_validate_implement(impl)) 1595 if (!_validate_implement(vals, impl))
1507 return EINA_FALSE; 1596 return EINA_FALSE;
1508 1597
1509 /* all the checks that need to be done every time are performed now */ 1598 /* all the checks that need to be done every time are performed now */
@@ -1529,8 +1618,14 @@ _validate_constant(Validate_State *vals, Eolian_Constant *var)
1529 if (var->base.validated) 1618 if (var->base.validated)
1530 return EINA_TRUE; 1619 return EINA_TRUE;
1531 1620
1621 const char *old_since = vals->since_ver;
1622 vals->since_ver = NULL;
1623
1532 Eina_Bool was_stable = _set_stable(vals, !var->base.is_beta && vals->stable); 1624 Eina_Bool was_stable = _set_stable(vals, !var->base.is_beta && vals->stable);
1533 1625
1626 if (!_validate_doc_since(vals, var->doc))
1627 return EINA_FALSE;
1628
1534 if (!_validate_type(vals, var->base_type, EINA_FALSE, EINA_FALSE)) 1629 if (!_validate_type(vals, var->base_type, EINA_FALSE, EINA_FALSE))
1535 return _reset_stable(vals, was_stable, EINA_FALSE); 1630 return _reset_stable(vals, was_stable, EINA_FALSE);
1536 1631
@@ -1541,6 +1636,7 @@ _validate_constant(Validate_State *vals, Eolian_Constant *var)
1541 return _reset_stable(vals, was_stable, EINA_FALSE); 1636 return _reset_stable(vals, was_stable, EINA_FALSE);
1542 1637
1543 _reset_stable(vals, was_stable, EINA_TRUE); 1638 _reset_stable(vals, was_stable, EINA_TRUE);
1639 vals->since_ver = old_since;
1544 return _validate(&var->base); 1640 return _validate(&var->base);
1545} 1641}
1546 1642
@@ -1566,7 +1662,9 @@ database_validate(const Eolian_Unit *src)
1566 Validate_State vals = { 1662 Validate_State vals = {
1567 EINA_FALSE, 1663 EINA_FALSE,
1568 EINA_TRUE, 1664 EINA_TRUE,
1569 !!getenv("EOLIAN_CLASS_UNIMPLEMENTED_BETA_WARN") 1665 !!getenv("EFL_RUN_IN_TREE"),
1666 !!getenv("EOLIAN_CLASS_UNIMPLEMENTED_BETA_WARN"),
1667 !!getenv("EOLIAN_ENFORCE_SINCE")
1570 }; 1668 };
1571 1669
1572 /* do an initial pass to refill inherits */ 1670 /* do an initial pass to refill inherits */
diff --git a/src/lib/evas/canvas/efl_canvas_object.eo b/src/lib/evas/canvas/efl_canvas_object.eo
index ab51da1..48b67e7 100644
--- a/src/lib/evas/canvas/efl_canvas_object.eo
+++ b/src/lib/evas/canvas/efl_canvas_object.eo
@@ -2,7 +2,10 @@ import efl_text_types;
2 2
3struct @beta Efl.Canvas.Object_Animation_Event; [[Information of animation events]] 3struct @beta Efl.Canvas.Object_Animation_Event; [[Information of animation events]]
4struct Efl.Event_Animator_Tick { 4struct Efl.Event_Animator_Tick {
5 [[EFL event animator tick data structure]] 5 [[EFL event animator tick data structure
6
7 @since 1.22
8 ]]
6 update_area: Eina.Rect; [[Area of the canvas that will be pushed to screen.]] 9 update_area: Eina.Rect; [[Area of the canvas that will be pushed to screen.]]
7} 10}
8 11
diff --git a/src/lib/evas/canvas/efl_input_event.eo b/src/lib/evas/canvas/efl_input_event.eo
index 9194b0b..080ef90 100644
--- a/src/lib/evas/canvas/efl_input_event.eo
+++ b/src/lib/evas/canvas/efl_input_event.eo
@@ -7,6 +7,8 @@ mixin Efl.Input.Event requires Efl.Object extends Efl.Duplicate
7 Note: Most Efl Events do not carry Efl Objects, rather simple data 7 Note: Most Efl Events do not carry Efl Objects, rather simple data
8 structures. This class is intended to carry more complex event 8 structures. This class is intended to carry more complex event
9 data, such as pointer events. 9 data, such as pointer events.
10
11 @since 1.23
10 ]] 12 ]]
11 c_prefix: efl_input; 13 c_prefix: efl_input;
12 data: null; 14 data: null;
diff --git a/src/lib/evas/canvas/efl_input_interface.eo b/src/lib/evas/canvas/efl_input_interface.eo
index fde39c1..1a89206 100644
--- a/src/lib/evas/canvas/efl_input_interface.eo
+++ b/src/lib/evas/canvas/efl_input_interface.eo
@@ -18,6 +18,8 @@ interface Efl.Input.Interface
18 A "key" is a key press from a keyboard or equivalent type of input device. 18 A "key" is a key press from a keyboard or equivalent type of input device.
19 Long, repeated, key presses will always happen like this: 19 Long, repeated, key presses will always happen like this:
20 down...up,down...up,down...up (not down...up or down...down...down...up). 20 down...up,down...up,down...up (not down...up or down...down...down...up).
21
22 @since 1.23
21 ]] 23 ]]
22 c_prefix: efl_input; 24 c_prefix: efl_input;
23 event_c_prefix: efl; 25 event_c_prefix: efl;