From 1929b4ca4adc8a5a56e1b0955f6548c8ebc2ced5 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 15 Nov 2021 08:42:32 +0100 Subject: [PATCH] App: add PropertyLinkSubList::verifyObject() to reduce code duplication --- src/App/PropertyLinks.cpp | 37 +++++++++++++++++-------------------- src/App/PropertyLinks.h | 3 +++ 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/App/PropertyLinks.cpp b/src/App/PropertyLinks.cpp index 6fdc905610..6eb847c1b1 100644 --- a/src/App/PropertyLinks.cpp +++ b/src/App/PropertyLinks.cpp @@ -1599,6 +1599,16 @@ PropertyLinkSubList::~PropertyLinkSubList() #endif } +void PropertyLinkSubList::verifyObject(App::DocumentObject* obj, App::DocumentObject* parent) +{ + if (obj) { + if (!obj->getNameInDocument()) + throw Base::ValueError("PropertyLinkSubList: invalid document object"); + if (!testFlag(LinkAllowExternal) && parent && parent->getDocument() != obj->getDocument()) + throw Base::ValueError("PropertyLinkSubList does not support external object"); + } +} + void PropertyLinkSubList::setSize(int newSize) { _lValueList.resize(newSize); @@ -1614,12 +1624,8 @@ int PropertyLinkSubList::getSize(void) const void PropertyLinkSubList::setValue(DocumentObject* lValue,const char* SubName) { auto parent = Base::freecad_dynamic_cast(getContainer()); - if(lValue) { - if(!lValue->getNameInDocument()) - throw Base::ValueError("PropertyLinkSubList: invalid document object"); - if(!testFlag(LinkAllowExternal) && parent && parent->getDocument()!=lValue->getDocument()) - throw Base::ValueError("PropertyLinkSubList does not support external object"); - } + verifyObject(lValue, parent); + #ifndef USE_OLD_DAG //maintain backlinks if(parent) { @@ -1657,11 +1663,9 @@ void PropertyLinkSubList::setValues(const std::vector& lValue,c { auto parent = Base::freecad_dynamic_cast(getContainer()); for(auto obj : lValue) { - if(!obj || !obj->getNameInDocument()) - throw Base::ValueError("PropertyLinkSubList: invalid document object"); - if(!testFlag(LinkAllowExternal) && parent && parent->getDocument()!=obj->getDocument()) - throw Base::ValueError("PropertyLinkSubList does not support external object"); + verifyObject(obj, parent); } + if (lValue.size() != lSubNames.size()) throw Base::ValueError("PropertyLinkSubList::setValues: size of subelements list != size of objects list"); @@ -1713,10 +1717,7 @@ void PropertyLinkSubList::setValues(std::vector&& lValue, { auto parent = Base::freecad_dynamic_cast(getContainer()); for(auto obj : lValue) { - if(!obj || !obj->getNameInDocument()) - throw Base::ValueError("PropertyLinkSubList: invalid document object"); - if(!testFlag(LinkAllowExternal) && parent && parent->getDocument()!=obj->getDocument()) - throw Base::ValueError("PropertyLinkSubList does not support external object"); + verifyObject(obj, parent); } if (lValue.size() != lSubNames.size()) throw Base::ValueError("PropertyLinkSubList::setValues: size of subelements list != size of objects list"); @@ -1758,12 +1759,8 @@ void PropertyLinkSubList::setValues(std::vector&& lValue, void PropertyLinkSubList::setValue(DocumentObject* lValue, const std::vector &SubList) { auto parent = dynamic_cast(getContainer()); - if(lValue) { - if(!lValue->getNameInDocument()) - throw Base::ValueError("PropertyLinkSubList: invalid document object"); - if(!testFlag(LinkAllowExternal) && parent && parent->getDocument()!=lValue->getDocument()) - throw Base::ValueError("PropertyLinkSubList does not support external object"); - } + verifyObject(lValue, parent); + #ifndef USE_OLD_DAG //maintain backlinks. if(parent) { diff --git a/src/App/PropertyLinks.h b/src/App/PropertyLinks.h index 5bc813d5e0..b0d7dbcdd8 100644 --- a/src/App/PropertyLinks.h +++ b/src/App/PropertyLinks.h @@ -1004,6 +1004,9 @@ public: virtual bool adjustLink(const std::set &inList) override; +private: + void verifyObject(App::DocumentObject *, App::DocumentObject *); + private: //FIXME: Do not make two independent lists because this will lead to some inconsistencies! std::vector _lValueList;