@@ -31,6 +31,10 @@ pub struct ParsedCxxQtData {
3131 pub qobjects : BTreeMap < Ident , ParsedQObject > ,
3232 /// List of QEnums defined in the module, that aren't associated with a QObject
3333 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 > ,
3438 /// List of QNamespace declarations
3539 pub qnamespaces : Vec < ParsedQNamespace > ,
3640 /// Blocks of extern "C++Qt"
@@ -47,6 +51,8 @@ impl ParsedCxxQtData {
4751 Self {
4852 qobjects : BTreeMap :: < Ident , ParsedQObject > :: default ( ) ,
4953 qenums : vec ! [ ] ,
54+ methods : vec ! [ ] ,
55+ signals : vec ! [ ] ,
5056 qnamespaces : vec ! [ ] ,
5157 extern_cxxqt_blocks : Vec :: < ParsedExternCxxQt > :: default ( ) ,
5258 module_ident,
@@ -204,31 +210,38 @@ impl ParsedCxxQtData {
204210 if let ForeignItem :: Fn ( mut foreign_fn) = item {
205211 // Test if the function is a signal
206212 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) ;
208217
209218 self . with_qobject ( & parsed_signal_method. qobject_ident ) ?
210219 . signals
211220 . 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
215225 } else if attribute_take_path ( & mut foreign_fn. attrs , & [ "inherit" ] ) . is_some ( ) {
216226 let parsed_inherited_method =
217227 ParsedInheritedMethod :: parse ( foreign_fn, safe_call) ?;
218228
219229 self . with_qobject ( & parsed_inherited_method. qobject_ident ) ?
220230 . inherited_methods
221231 . push ( parsed_inherited_method) ;
222- // Remaining methods are either C++ methods or invokables
232+ // Remaining methods are either C++ methods or invokables
223233 } 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+
225239 self . with_qobject ( & parsed_method. qobject_ident ) ?
226240 . methods
227241 . push ( parsed_method) ;
228242 }
229243 }
230244 }
231-
232245 Ok ( ( ) )
233246 }
234247
@@ -468,9 +481,10 @@ mod tests {
468481 } ;
469482 let result = cxx_qt_data. parse_cxx_qt_item ( item) . unwrap ( ) ;
470483 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)
474488 }
475489
476490 #[ test]
@@ -623,10 +637,7 @@ mod tests {
623637 }
624638 } ;
625639 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 ;
630641 assert_eq ! ( signals. len( ) , 2 ) ;
631642 assert ! ( signals[ 0 ] . mutable) ;
632643 assert ! ( signals[ 1 ] . mutable) ;
@@ -653,7 +664,8 @@ mod tests {
653664 fn ready( self : Pin <& mut UnknownObj >) ;
654665 }
655666 } ;
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( ) ) ;
657669 }
658670
659671 #[ test]
@@ -667,9 +679,7 @@ mod tests {
667679 } ;
668680 cxxqtdata. parse_cxx_qt_item ( block) . unwrap ( ) ;
669681
670- let qobject = cxxqtdata. qobjects . get ( & qobject_ident ( ) ) . unwrap ( ) ;
671-
672- let signals = & qobject. signals ;
682+ let signals = & cxxqtdata. signals ;
673683 assert_eq ! ( signals. len( ) , 1 ) ;
674684 assert ! ( signals[ 0 ] . mutable) ;
675685 assert ! ( !signals[ 0 ] . safe) ;
0 commit comments