@@ -31,6 +31,10 @@ pub struct ParsedCxxQtData {
31
31
pub qobjects : BTreeMap < Ident , ParsedQObject > ,
32
32
/// List of QEnums defined in the module, that aren't associated with a QObject
33
33
pub qenums : Vec < ParsedQEnum > ,
34
+ /// List of methods and Q_INVOKABLES found
35
+ pub methods : Vec < ParsedMethod > ,
36
+ /// List of the Q_SIGNALS found
37
+ pub signals : Vec < ParsedSignal > ,
34
38
/// List of QNamespace declarations
35
39
pub qnamespaces : Vec < ParsedQNamespace > ,
36
40
/// Blocks of extern "C++Qt"
@@ -47,6 +51,8 @@ impl ParsedCxxQtData {
47
51
Self {
48
52
qobjects : BTreeMap :: < Ident , ParsedQObject > :: default ( ) ,
49
53
qenums : vec ! [ ] ,
54
+ methods : vec ! [ ] ,
55
+ signals : vec ! [ ] ,
50
56
qnamespaces : vec ! [ ] ,
51
57
extern_cxxqt_blocks : Vec :: < ParsedExternCxxQt > :: default ( ) ,
52
58
module_ident,
@@ -204,31 +210,38 @@ impl ParsedCxxQtData {
204
210
if let ForeignItem :: Fn ( mut foreign_fn) = item {
205
211
// Test if the function is a signal
206
212
if attribute_take_path ( & mut foreign_fn. attrs , & [ "qsignal" ] ) . is_some ( ) {
207
- let parsed_signal_method = ParsedSignal :: parse ( foreign_fn, safe_call) ?;
213
+ let parsed_signal_method = ParsedSignal :: parse ( foreign_fn. clone ( ) , safe_call) ?;
214
+
215
+ let parsed_signal_method_self = ParsedSignal :: parse ( foreign_fn, safe_call) ?;
216
+ self . signals . push ( parsed_signal_method_self) ;
208
217
209
218
self . with_qobject ( & parsed_signal_method. qobject_ident ) ?
210
219
. signals
211
220
. push ( parsed_signal_method) ;
212
- // Test if the function is an inheritance method
213
- //
214
- // Note that we need to test for qsignal first as qsignals have their own inherit meaning
221
+
222
+ // Test if the function is an inheritance method
223
+ //
224
+ // Note that we need to test for qsignal first as qsignals have their own inherit meaning
215
225
} else if attribute_take_path ( & mut foreign_fn. attrs , & [ "inherit" ] ) . is_some ( ) {
216
226
let parsed_inherited_method =
217
227
ParsedInheritedMethod :: parse ( foreign_fn, safe_call) ?;
218
228
219
229
self . with_qobject ( & parsed_inherited_method. qobject_ident ) ?
220
230
. inherited_methods
221
231
. push ( parsed_inherited_method) ;
222
- // Remaining methods are either C++ methods or invokables
232
+ // Remaining methods are either C++ methods or invokables
223
233
} else {
224
- let parsed_method = ParsedMethod :: parse ( foreign_fn, safe_call) ?;
234
+ let parsed_method = ParsedMethod :: parse ( foreign_fn. clone ( ) , safe_call) ?;
235
+
236
+ let parsed_method_self = ParsedMethod :: parse ( foreign_fn, safe_call) ?;
237
+ self . methods . push ( parsed_method_self) ;
238
+
225
239
self . with_qobject ( & parsed_method. qobject_ident ) ?
226
240
. methods
227
241
. push ( parsed_method) ;
228
242
}
229
243
}
230
244
}
231
-
232
245
Ok ( ( ) )
233
246
}
234
247
@@ -468,9 +481,10 @@ mod tests {
468
481
} ;
469
482
let result = cxx_qt_data. parse_cxx_qt_item ( item) . unwrap ( ) ;
470
483
assert ! ( result. is_none( ) ) ;
471
- assert_eq ! ( cxx_qt_data. qobjects[ & qobject_ident( ) ] . methods. len( ) , 2 ) ;
472
- assert ! ( cxx_qt_data. qobjects[ & qobject_ident( ) ] . methods[ 0 ] . is_qinvokable) ;
473
- assert ! ( !cxx_qt_data. qobjects[ & qobject_ident( ) ] . methods[ 1 ] . is_qinvokable) ;
484
+
485
+ assert_eq ! ( cxx_qt_data. methods. len( ) , 2 ) ;
486
+ assert ! ( cxx_qt_data. methods[ 0 ] . is_qinvokable) ;
487
+ assert ! ( !cxx_qt_data. methods[ 1 ] . is_qinvokable)
474
488
}
475
489
476
490
#[ test]
@@ -623,10 +637,7 @@ mod tests {
623
637
}
624
638
} ;
625
639
cxxqtdata. parse_cxx_qt_item ( block) . unwrap ( ) ;
626
-
627
- let qobject = cxxqtdata. qobjects . get ( & qobject_ident ( ) ) . unwrap ( ) ;
628
-
629
- let signals = & qobject. signals ;
640
+ let signals = & cxxqtdata. signals ;
630
641
assert_eq ! ( signals. len( ) , 2 ) ;
631
642
assert ! ( signals[ 0 ] . mutable) ;
632
643
assert ! ( signals[ 1 ] . mutable) ;
@@ -653,7 +664,8 @@ mod tests {
653
664
fn ready( self : Pin <& mut UnknownObj >) ;
654
665
}
655
666
} ;
656
- assert ! ( cxxqtdata. parse_cxx_qt_item( block) . is_err( ) ) ;
667
+ let parsed_block = cxxqtdata. parse_cxx_qt_item ( block) ;
668
+ assert ! ( parsed_block. is_err( ) ) ;
657
669
}
658
670
659
671
#[ test]
@@ -667,9 +679,7 @@ mod tests {
667
679
} ;
668
680
cxxqtdata. parse_cxx_qt_item ( block) . unwrap ( ) ;
669
681
670
- let qobject = cxxqtdata. qobjects . get ( & qobject_ident ( ) ) . unwrap ( ) ;
671
-
672
- let signals = & qobject. signals ;
682
+ let signals = & cxxqtdata. signals ;
673
683
assert_eq ! ( signals. len( ) , 1 ) ;
674
684
assert ! ( signals[ 0 ] . mutable) ;
675
685
assert ! ( !signals[ 0 ] . safe) ;
0 commit comments