diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2019-01-28 10:36:39 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2019-01-30 12:00:13 +0000 |
commit | 8a465c1f6e156975d25938622e0299e64bf08295 (patch) | |
tree | 4d77775d1434dc8fea8c6f0f6f756c26eba69d42 /sources/shiboken2/tests | |
parent | ff6b6422426ddd69031e2683c039eb1f53fc9df9 (diff) |
shiboken: Make constructor checks more fine-grained
ShibokenGenerator::isValueTypeWithCopyConstructorOnly()
returned false for QWebEngineHistoryItem since the check
for AbstractMetaAttributes::HasRejectedConstructor triggered
on WebEngineHistoryItem(QWebEngineHistoryItemPrivate *priv),
causing the function to bail out.
To prevent this, add a new
AbstractMetaAttributes::HasRejectedDefaultConstructor attribute
and use that in isValueTypeWithCopyConstructorOnly().
Task-number: PYSIDE-906
Change-Id: I4fee83b89f0a4c44e7e8d69e118ed7f2b03ceee1
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'sources/shiboken2/tests')
-rw-r--r-- | sources/shiboken2/tests/libsample/onlycopy.cpp | 32 | ||||
-rw-r--r-- | sources/shiboken2/tests/libsample/onlycopy.h | 18 |
2 files changed, 40 insertions, 10 deletions
diff --git a/sources/shiboken2/tests/libsample/onlycopy.cpp b/sources/shiboken2/tests/libsample/onlycopy.cpp index 75bf23b5c..cfc7c9d99 100644 --- a/sources/shiboken2/tests/libsample/onlycopy.cpp +++ b/sources/shiboken2/tests/libsample/onlycopy.cpp @@ -28,18 +28,44 @@ #include "onlycopy.h" -OnlyCopy::OnlyCopy(const OnlyCopy& other) +class OnlyCopyPrivate +{ +public: + explicit OnlyCopyPrivate(int v = 0) : value(v) {} + + int value; +}; + +OnlyCopy::OnlyCopy(int value) : d(new OnlyCopyPrivate(value)) +{ + +} + +OnlyCopy::OnlyCopy(OnlyCopyPrivate *dIn) : d(dIn) +{ +} + +OnlyCopy::~OnlyCopy() +{ + delete d; +} + +OnlyCopy::OnlyCopy(const OnlyCopy& other) : d(new OnlyCopyPrivate(other.value())) { - m_value = other.m_value; } OnlyCopy& OnlyCopy::operator=(const OnlyCopy& other) { - m_value = other.m_value; + d->value = other.d->value; return *this; } +int OnlyCopy::value() const +{ + return d->value; +} + OnlyCopy FriendOfOnlyCopy::createOnlyCopy(int value) { diff --git a/sources/shiboken2/tests/libsample/onlycopy.h b/sources/shiboken2/tests/libsample/onlycopy.h index 2c1b255fd..84a32a951 100644 --- a/sources/shiboken2/tests/libsample/onlycopy.h +++ b/sources/shiboken2/tests/libsample/onlycopy.h @@ -32,20 +32,24 @@ #include "libsamplemacros.h" #include <list> -// These classes simulate a situation found in -// QtWebKit's QWebDatabase and QWebSecurityOrigin. +// These classes simulate a situation found in QWebEngineHistoryItem. + +class OnlyCopyPrivate; class LIBSAMPLE_API OnlyCopy { public: OnlyCopy(const OnlyCopy& other); OnlyCopy& operator=(const OnlyCopy& other); - int value() const { return m_value; } - static int getValue(OnlyCopy onlyCopy) { return onlyCopy.m_value; } - static int getValueFromReference(const OnlyCopy& onlyCopy) { return onlyCopy.m_value; } + ~OnlyCopy(); + + int value() const; + static int getValue(OnlyCopy onlyCopy) { return onlyCopy.value(); } + static int getValueFromReference(const OnlyCopy& onlyCopy) { return onlyCopy.value(); } private: - int m_value; - OnlyCopy(int value) : m_value(value) {}; + OnlyCopyPrivate *d; + explicit OnlyCopy(int value); + explicit OnlyCopy(OnlyCopyPrivate *d); // rejected due to unknown OnlyCopyPrivate friend class FriendOfOnlyCopy; }; |