Refactor payeeIdentifier
AbandonedPublic

Authored by wojnilowicz on May 8 2018, 2:43 PM.

Details

Reviewers
tbaumgart
Group Reviewers
KMyMoney
Summary

The refactoring consists of:

  1. renaming KMyMoneyPlugin::storagePlugin to KMyMoneyPlugin::SQLStorageExtension as purpose of this plugin type is to create a table in SQL database,
  2. changing kmm_payeeidentifier_loader from STATIC to SHARED, as it was used in multiple places and linked only in one, which is not good if class is considered singleton,
  3. changing build dependencies, so there is less redundant linking of libraries.

I hope, that in effect of this refactoring multiple definitions of payeeIdentifierLoader::createPayeeIdentifierFromSqlDatabase will be fixed on MSVC.

Diff Detail

Repository
R261 KMyMoney
Lint
Lint Skipped
Unit
Unit Tests Skipped
wojnilowicz requested review of this revision.May 8 2018, 2:43 PM
wojnilowicz created this revision.
tbaumgart requested changes to this revision.May 8 2018, 7:57 PM

Fails for me with

In file included from /home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.cpp:19:0:
/home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.h: In member function ‘T* payeeIdentifier::data()’:
/home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.h:152:11: error: ‘bad_cast’ is not a member of ‘std’
     throw std::bad_cast();
           ^~~
/home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.h: In member function ‘const T* payeeIdentifier::data() const’:
/home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.h:162:11: error: ‘bad_cast’ is not a member of ‘std’
     throw std::bad_cast();
           ^~~
/home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.cpp: In constructor ‘payeeIdentifier::payeeIdentifier(payeeIdentifierData*)’:
/home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.cpp:40:64: warning: declaration of ‘data’ shadows a member of ‘payeeIdentifier’ [-Wshadow]
 payeeIdentifier::payeeIdentifier(payeeIdentifierData*const data)
                                                                ^
In file included from /home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.cpp:19:0:
/home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.h:79:12: note: shadowed declaration is here
   const T* data() const;
            ^~~~
/home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.cpp: In constructor ‘payeeIdentifier::payeeIdentifier(const id_t&, payeeIdentifierData*)’:
/home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.cpp:46:97: warning: declaration of ‘data’ shadows a member of ‘payeeIdentifier’ [-Wshadow]
 ayeeIdentifier(const payeeIdentifier::id_t& id, payeeIdentifierData*const data)
                                                                               ^
In file included from /home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.cpp:19:0:
/home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.h:79:12: note: shadowed declaration is here
   const T* data() const;
            ^~~~
/home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.cpp: In constructor ‘payeeIdentifier::payeeIdentifier(const QString&, payeeIdentifierData*)’:
/home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.cpp:52:83: warning: declaration of ‘data’ shadows a member of ‘payeeIdentifier’ [-Wshadow]
 eIdentifier::payeeIdentifier(const QString& id, payeeIdentifierData*const data)
                                                                               ^
In file included from /home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.cpp:19:0:
/home/thb/devel/kmymoney/kmymoney/mymoney/payeeidentifier/payeeidentifier.h:79:12: note: shadowed declaration is here
   const T* data() const;
            ^~~~
kmymoney/mymoney/payeeidentifier/CMakeFiles/kmm_payeeidentifier.dir/build.make:62: recipe for target 'kmymoney/mymoney/payeeidentifier/CMakeFiles/kmm_payeeidentifier.dir/payeeidentifier.cpp.o' failed
make[2]: *** [kmymoney/mymoney/payeeidentifier/CMakeFiles/kmm_payeeidentifier.dir/payeeidentifier.cpp.o] Error 1
CMakeFiles/Makefile2:939: recipe for target 'kmymoney/mymoney/payeeidentifier/CMakeFiles/kmm_payeeidentifier.dir/all' failed
make[1]: *** [kmymoney/mymoney/payeeidentifier/CMakeFiles/kmm_payeeidentifier.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
This revision now requires changes to proceed.May 8 2018, 7:57 PM
wojnilowicz updated this revision to Diff 33874.May 9 2018, 9:49 AM
wojnilowicz edited the summary of this revision. (Show Details)

I think d-pointer is not possible (too many objects and pointer passing). Those templates with exception throwing were redundant. This payeeIdentifier thing looks like overengineered. I think we need to simplify it and integrate maybe into kmm_mymoney.

tbaumgart requested changes to this revision.May 9 2018, 12:29 PM

This now compiles, but when I do the following

  1. start KMyMoney with the last file open
  2. select the ledger of an account which has a mapped online account (KBanking)
  3. select Account/New credit transfer

which works fine in master it crashes with the following BT:

#0  0x00007fffef97b8e3 in malloc_consolidate () at /lib64/libc.so.6
#1  0x00007fffef97d315 in _int_malloc () at /lib64/libc.so.6
#2  0x00007fffef97f3d0 in malloc () at /lib64/libc.so.6
#3  0x00007fffc5d3b08e in GWEN_Memory_malloc (wsize=wsize@entry=1064)
    at memory.c:425
#4  0x00007fffc5d433d2 in GWEN_FastBuffer_new (bsize=bsize@entry=1024, io=io@entry=0x2cc4b00) at fastbuffer.c:32
#5  0x00007fffc5d8957a in GWEN_DB_ReadFromIo (n=n@entry=0x2cd62f0, sio=sio@entry=0x2cc4b00, dbflags=dbflags@entry=284721184) at dbrw.c:971
#6  0x00007fffc5d89699 in GWEN_DB_ReadFile (n=n@entry=0x2cd62f0, fname=<optimized out>, dbflags=dbflags@entry=284721184) at dbrw.c:1006
#7  0x00007fffc376d83c in GWEN_ConfigMgrDir_GetGroup (cfg=<optimized out>, groupName=0x7fffc569ba4c "apps", subGroupName=<optimized out>, pDb=0x7fffffffb178)
    at cfgdir.c:358
#8  0x00007fffc5660787 in AB_Banking_LoadAppConfig (ab=ab@entry=0x11c1000, pDb=pDb@entry=0x7fffffffb178) at banking_cfg.c:161
#9  0x00007fffc5660854 in AB_Banking__GetAccount (ab=0x11c1000, accountId=0x2cc64b8 "f9151897-04c9-4dc1-8a28-f2927b3a3073-A000001") at banking.c:475
#10 0x00007fffc602f142 in KBanking::aqbAccount(MyMoneyAccount const&) const ()
    at /usr/lib64/qt5/plugins/kmymoney/kbanking.so
#11 0x00007fffc602f41d in KBanking::aqbAccount(QString const&) const ()
    at /usr/lib64/qt5/plugins/kmymoney/kbanking.so
#12 0x00007fffc603113e in KBanking::settings(QString, QString) ()
    at /usr/lib64/qt5/plugins/kmymoney/kbanking.so
#13 0x00007ffff5c9a1c8 in onlineJobAdministration::taskSettings(QString const&, QString const&) const () at /usr/lib64/libkmm_mymoney.so.5
#14 0x00007fffc020c2bb in QSharedPointer<sepaOnlineTransfer::settings> onlineJobAdministration::taskSettings<sepaOnlineTransfer::settings>(QString const&, QString const&) const () at /usr/lib64/qt5/plugins/kmymoney/konlinetasks_sepa.so
#15 0x00007fffc0208955 in sepaOnlineTransferImpl::getSettings() const ()
    at /usr/lib64/qt5/plugins/kmymoney/konlinetasks_sepa.so
#16 0x00007fffc020826b in sepaOnlineTransferImpl::isValid() const ()
    at /usr/lib64/qt5/plugins/kmymoney/konlinetasks_sepa.so
#17 0x00007ffff5c957d6 in onlineJob::isValid() const ()
    at /usr/lib64/libkmm_mymoney.so.5
#18 0x00007fffc0217c94 in sepaCreditTransferEdit::isValid() const ()
    at /usr/lib64/qt5/plugins/kmymoney/konlinetasks_sepa.so
#19 0x00007ffff7980ebc in KMandatoryFieldGroup::changed() ()
    at /usr/lib64/libkmm_widgets.so.5
#20 0x00007ffff79a59b3 in KMandatoryFieldGroup::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) () at /usr/lib64/libkmm_widgets.so.5
#21 0x00007ffff07de7d1 in QMetaObject::activate(QObject*, int, int, void**) ()
    at /usr/lib64/libQt5Core.so.5
#22 0x00007fffc0218ece in IonlineJobEdit::validityChanged(bool) ()
    at /usr/lib64/qt5/plugins/kmymoney/konlinetasks_sepa.so
#23 0x00007fffc0217d45 in sepaCreditTransferEdit::requiredFieldsCompleted(bool const&) () at /usr/lib64/qt5/plugins/kmymoney/konlinetasks_sepa.so
#24 0x00007fffc0217663 in sepaCreditTransferEdit::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) ()
    at /usr/lib64/qt5/plugins/kmymoney/konlinetasks_sepa.so
#25 0x00007ffff07de7d1 in QMetaObject::activate(QObject*, int, int, void**) ()
    at /usr/lib64/libQt5Core.so.5
#26 0x00007ffff79a5c26 in KMandatoryFieldGroup::stateChanged(bool) ()
    at /usr/lib64/libkmm_widgets.so.5
#27 0x00007ffff7980f4b in KMandatoryFieldGroup::changed() ()
    at /usr/lib64/libkmm_widgets.so.5
#28 0x00007ffff7980955 in KMandatoryFieldGroup::add(QWidget*) ()
    at /usr/lib64/libkmm_widgets.so.5
#29 0x00007fffc020f74c in sepaCreditTransferEdit::updateSettings() ()
    at /usr/lib64/qt5/plugins/kmymoney/konlinetasks_sepa.so
#30 0x00007fffc020f212 in sepaCreditTransferEdit::setOriginAccount(QString const&) () at /usr/lib64/qt5/plugins/kmymoney/konlinetasks_sepa.so
#31 0x00007fffc0ea62de in kOnlineTransferForm::accountChanged() ()
    at /usr/lib64/qt5/plugins/kmymoney/onlinejoboutboxview.so
#32 0x00007fffc0eac371 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (kOnlineTransferForm::*)()>::call(void (kOnlineTransferForm::*)(), kOnlineTransferForm*, void**) ()
    at /usr/lib64/qt5/plugins/kmymoney/onlinejoboutboxview.so
#33 0x00007fffc0eac234 in void QtPrivate::FunctionPointer<void (kOnlineTransferForm::*)()>::call<QtPrivate::List<>, void>(void (kOnlineTransferForm::*)(), kOnlineTransferForm*, void**) ()
    at /usr/lib64/qt5/plugins/kmymoney/onlinejoboutboxview.so
#34 0x00007fffc0eabe58 in QtPrivate::QSlotObject<void (kOnlineTransferForm::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) () at /usr/lib64/qt5/plugins/kmymoney/onlinejoboutboxview.so
#35 0x00007ffff07dede3 in QMetaObject::activate(QObject*, int, int, void**) ()
    at /usr/lib64/libQt5Core.so.5
#36 0x00007fffc0eb4413 in KMyMoneyAccountCombo::accountSelected(QString const&)() at /usr/lib64/qt5/plugins/kmymoney/onlinejoboutboxview.so
#37 0x00007fffc0eb0bca in KMyMoneyAccountCombo::setSelected(QString const&) ()
    at /usr/lib64/qt5/plugins/kmymoney/onlinejoboutboxview.so
#38 0x00007fffc0ea6589 in kOnlineTransferForm::setCurrentAccount(QString const&) () at /usr/lib64/qt5/plugins/kmymoney/onlinejoboutboxview.so
#39 0x00007fffc0e9992f in KOnlineJobOutboxView::slotNewCreditTransfer() ()
    at /usr/lib64/qt5/plugins/kmymoney/onlinejoboutboxview.so
#40 0x00007fffc0ea3713 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (KOnlineJobOutboxView::*)()>::call(void (KOnlineJobOutboxView::*)(), KOnlineJobOutboxView*, void**) ()
    at /usr/lib64/qt5/plugins/kmymoney/onlinejoboutboxview.so
#41 0x00007fffc0ea2ad3 in void QtPrivate::FunctionPointer<void (KOnlineJobOutboxView::*)()>::call<QtPrivate::List<>, void>(void (KOnlineJobOutboxView::*)(), KOnlineJobOutboxView*, void**) ()
    at /usr/lib64/qt5/plugins/kmymoney/onlinejoboutboxview.so
#42 0x00007fffc0ea165c in QtPrivate::QSlotObject<void (KOnlineJobOutboxView::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) () at /usr/lib64/qt5/plugins/kmymoney/onlinejoboutboxview.so
#43 0x00007ffff07dede3 in QMetaObject::activate(QObject*, int, int, void**) ()
    at /usr/lib64/libQt5Core.so.5
#44 0x00007ffff1a84ce2 in QAction::triggered(bool) ()
    at /usr/lib64/libQt5Widgets.so.5
#45 0x00007ffff1a8787d in QAction::activate(QAction::ActionEvent) ()
    at /usr/lib64/libQt5Widgets.so.5
#46 0x00007ffff1b86a05 in  () at /usr/lib64/libQt5Widgets.so.5
#47 0x00007ffff1b86b44 in QAbstractButton::mouseReleaseEvent(QMouseEvent*) ()
    at /usr/lib64/libQt5Widgets.so.5
#48 0x00007ffff1c4b2ea in QToolButton::mouseReleaseEvent(QMouseEvent*) ()
    at /usr/lib64/libQt5Widgets.so.5
#49 0x00007ffff1ad046a in QWidget::event(QEvent*) ()
    at /usr/lib64/libQt5Widgets.so.5
#50 0x00007ffff1c4b3c9 in QToolButton::event(QEvent*) ()
    at /usr/lib64/libQt5Widgets.so.5
#51 0x00007ffff1a8e28c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQt5Widgets.so.5
#52 0x00007ffff1a93164 in QApplication::notify(QObject*, QEvent*) ()
    at /usr/lib64/libQt5Widgets.so.5
#53 0x00007ffff07b4be5 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib64/libQt5Core.so.5
#54 0x00007ffff1a91e60 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) ()
    at /usr/lib64/libQt5Widgets.so.5
#55 0x00007ffff1ae9601 in  () at /usr/lib64/libQt5Widgets.so.5
#56 0x00007ffff1aebba3 in  () at /usr/lib64/libQt5Widgets.so.5
#57 0x00007ffff1a8e28c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQt5Widgets.so.5
#58 0x00007ffff1a928ea in QApplication::notify(QObject*, QEvent*) ()
    at /usr/lib64/libQt5Widgets.so.5
#59 0x00007ffff07b4be5 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib64/libQt5Core.so.5
#60 0x00007ffff12d886b in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () at /usr/lib64/libQt5Gui.so.5
#61 0x00007ffff12da005 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () at /usr/lib64/libQt5Gui.so.5
#62 0x00007ffff12bbeab in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib64/libQt5Gui.so.5
#63 0x00007fffda0618a0 in  () at /usr/lib64/libQt5XcbQpa.so.5
#64 0x00007fffe77cf134 in g_main_context_dispatch ()
    at /usr/lib64/libglib-2.0.so.0
#65 0x00007fffe77cf388 in  () at /usr/lib64/libglib-2.0.so.0
#66 0x00007fffe77cf42c in g_main_context_iteration ()
    at /usr/lib64/libglib-2.0.so.0
#67 0x00007ffff080518c in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib64/libQt5Core.so.5
#68 0x00007ffff07b2bfb in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib64/libQt5Core.so.5
#69 0x00007ffff07baae6 in QCoreApplication::exec() ()
    at /usr/lib64/libQt5Core.so.5
#70 0x000000000049979d in runKMyMoney(QApplication&, std::unique_ptr<QSplashScreen, std::default_delete<QSplashScreen> >, QUrl const&, bool) ()
#71 0x0000000000498ddf in main ()

I don't know if it matters, but I do this with a DebugFull build.

This revision now requires changes to proceed.May 9 2018, 12:29 PM
wojnilowicz abandoned this revision.May 9 2018, 2:45 PM

What a mess... I give up.