QWeakPointer: purge deprecated API

Since 5.0: assignment/construction from QObject pointer
Since 5.14: data() to recover the packaged pointer

Change-Id: I5d6ab561ce39bc0d9d3e5035eb2ca38139cd76b6
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Edward Welbourne 2020-07-16 17:14:30 +02:00
parent 860c68522b
commit e40320c552
4 changed files with 0 additions and 238 deletions

View File

@ -63,9 +63,6 @@ QT_END_NAMESPACE
#include <new>
#include <QtCore/qatomic.h>
#include <QtCore/qobject.h> // for qobject_cast
#if QT_DEPRECATED_SINCE(5, 6)
#include <QtCore/qhash.h>
#endif
#include <QtCore/qhashfunctions.h>
#include <memory>
@ -555,29 +552,9 @@ public:
explicit operator bool() const noexcept { return !isNull(); }
bool operator !() const noexcept { return isNull(); }
#if QT_DEPRECATED_SINCE(5, 14)
QT_DEPRECATED_X("Use toStrongRef() instead, and data() on the returned QSharedPointer")
T *data() const noexcept { return internalData(); }
#endif
inline QWeakPointer() noexcept : d(nullptr), value(nullptr) { }
inline ~QWeakPointer() { if (d && !d->weakref.deref()) delete d; }
#ifndef QT_NO_QOBJECT
// special constructor that is enabled only if X derives from QObject
#if QT_DEPRECATED_SINCE(5, 0)
template <class X, IfCompatible<X> = true>
QT_DEPRECATED inline QWeakPointer(X *ptr) : d(ptr ? Data::getAndRef(ptr) : nullptr), value(ptr)
{ }
#endif
#endif
#if QT_DEPRECATED_SINCE(5, 0)
template <class X, IfCompatible<X> = true>
QT_DEPRECATED inline QWeakPointer &operator=(X *ptr)
{ return *this = QWeakPointer(ptr); }
#endif
QWeakPointer(const QWeakPointer &other) noexcept : d(other.d), value(other.value)
{ if (d) d->weakref.ref(); }
QWeakPointer(QWeakPointer &&other) noexcept

View File

@ -1938,13 +1938,6 @@ void tst_QMetaType::automaticTemplateRegistration()
QCOMPARE(extractedPtr.data()->objectName(), sp.data()->objectName()); \
}
#if QT_DEPRECATED_SINCE(5, 0)
TEST_NONOWNING_SMARTPOINTER(QWeakPointer, QObject, WeakPointerToQObject, qWeakPointerFromVariant)
TEST_NONOWNING_SMARTPOINTER(QWeakPointer, QFile, WeakPointerToQObject, qWeakPointerFromVariant)
TEST_NONOWNING_SMARTPOINTER(QWeakPointer, QTemporaryFile, WeakPointerToQObject, qWeakPointerFromVariant)
TEST_NONOWNING_SMARTPOINTER(QWeakPointer, MyObject, WeakPointerToQObject, qWeakPointerFromVariant)
#endif
TEST_NONOWNING_SMARTPOINTER(QPointer, QObject, TrackingPointerToQObject, qPointerFromVariant)
TEST_NONOWNING_SMARTPOINTER(QPointer, QFile, TrackingPointerToQObject, qPointerFromVariant)
TEST_NONOWNING_SMARTPOINTER(QPointer, QTemporaryFile, TrackingPointerToQObject, qPointerFromVariant)

View File

@ -2487,18 +2487,6 @@ void tst_QVariant::qvariant_cast_QObject_wrapper()
QVERIFY(spVar.canConvert<QObject*>());
QCOMPARE(f, spVar.value<QObject*>());
}
#if QT_DEPRECATED_SINCE(5, 0)
{
QFile *f = new QFile(this);
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QWeakPointer<QFile> sp(f);
QT_WARNING_POP
QVariant spVar = QVariant::fromValue(sp);
QVERIFY(spVar.canConvert<QObject*>());
QCOMPARE(f, spVar.value<QObject*>());
}
#endif
{
QFile *f = new QFile(this);
QSharedPointer<QObject> sp(f);

View File

@ -77,10 +77,6 @@ private slots:
void functionCallDownCast();
void upCast();
void qobjectWeakManagement();
#if QT_DEPRECATED_SINCE(5, 0)
void noSharedPointerFromWeakQObject();
void sharedPointerFromQObjectWithWeak();
#endif
void weakQObjectFromSharedPointer();
void objectCast();
void objectCastStdSharedPtr();
@ -956,156 +952,10 @@ void tst_QSharedPointer::qobjectWeakManagement()
QVERIFY(weak.isNull());
}
safetyCheck();
#if QT_DEPRECATED_SINCE(5, 0)
{
QWeakPointer<QObject> weak;
weak = QWeakPointer<QObject>();
QVERIFY(weak.isNull());
QVERIFY(!weak.data());
}
{
QObject *obj = new QObject;
QWeakPointer<QObject> weak(obj);
QVERIFY(!weak.isNull());
QVERIFY(weak.data() == obj);
// now delete
delete obj;
QVERIFY(weak.isNull());
}
safetyCheck();
{
// same, bit with operator=
QObject *obj = new QObject;
QWeakPointer<QObject> weak;
weak = obj;
QVERIFY(!weak.isNull());
QVERIFY(weak.data() == obj);
// now delete
delete obj;
QVERIFY(weak.isNull());
}
safetyCheck();
{
// delete triggered by parent
QObject *obj, *parent;
parent = new QObject;
obj = new QObject(parent);
QWeakPointer<QObject> weak(obj);
// now delete the parent
delete parent;
QVERIFY(weak.isNull());
}
safetyCheck();
{
// same as above, but set the parent after QWeakPointer is created
QObject *obj, *parent;
obj = new QObject;
QWeakPointer<QObject> weak(obj);
parent = new QObject;
obj->setParent(parent);
// now delete the parent
delete parent;
QVERIFY(weak.isNull());
}
safetyCheck();
{
// with two QWeakPointers
QObject *obj = new QObject;
QWeakPointer<QObject> weak(obj);
{
QWeakPointer<QObject> weak2(obj);
QVERIFY(!weak2.isNull());
QVERIFY(weak == weak2);
}
QVERIFY(!weak.isNull());
delete obj;
QVERIFY(weak.isNull());
}
safetyCheck();
{
// same, but delete the pointer while two QWeakPointers exist
QObject *obj = new QObject;
QWeakPointer<QObject> weak(obj);
{
QWeakPointer<QObject> weak2(obj);
QVERIFY(!weak2.isNull());
delete obj;
QVERIFY(weak.isNull());
QVERIFY(weak2.isNull());
}
QVERIFY(weak.isNull());
}
safetyCheck();
#endif
}
#if QT_DEPRECATED_SINCE(5, 0)
void tst_QSharedPointer::noSharedPointerFromWeakQObject()
{
// you're not allowed to create a QSharedPointer from an unmanaged QObject
QObject obj;
QWeakPointer<QObject> weak(&obj);
{
QTest::ignoreMessage(QtWarningMsg , "QSharedPointer: cannot create a QSharedPointer from a QObject-tracking QWeakPointer");
QSharedPointer<QObject> strong = weak.toStrongRef();
QVERIFY(strong.isNull());
}
{
QTest::ignoreMessage(QtWarningMsg , "QSharedPointer: cannot create a QSharedPointer from a QObject-tracking QWeakPointer");
QSharedPointer<QObject> strong = weak;
QVERIFY(strong.isNull());
}
QCOMPARE(weak.data(), &obj);
// if something went wrong, we'll probably crash here
}
void tst_QSharedPointer::sharedPointerFromQObjectWithWeak()
{
QObject *ptr = new QObject;
QWeakPointer<QObject> weak = ptr;
{
QSharedPointer<QObject> shared(ptr);
QVERIFY(!weak.isNull());
QCOMPARE(shared.data(), ptr);
QCOMPARE(weak.data(), ptr);
}
QVERIFY(weak.isNull());
}
#endif
void tst_QSharedPointer::weakQObjectFromSharedPointer()
{
#if QT_DEPRECATED_SINCE(5, 0)
{
// this is the inverse of the above: you're allowed to create a QWeakPointer
// from a managed QObject
QSharedPointer<QObject> shared(new QObject);
QWeakPointer<QObject> weak = shared.data();
QVERIFY(!weak.isNull());
// delete:
shared.clear();
QVERIFY(weak.isNull());
}
#endif
{
QSharedPointer<QObject> shared(new QObject);
QWeakPointer<QObject> weak = shared;
@ -2507,52 +2357,6 @@ void tst_QSharedPointer::qvariantCast()
}
// Intentionally does not compile.
// QSharedPointer<int> sop = qSharedPointerFromVariant<int>(v);
#if QT_DEPRECATED_SINCE(5, 0)
v = QVariant::fromValue(sp.toWeakRef());
{
QWeakPointer<QObject> other = qWeakPointerFromVariant<QObject>(v);
QCOMPARE(other.data()->objectName(), QString::fromLatin1("A test name"));
}
{
QWeakPointer<QIODevice> other = qWeakPointerFromVariant<QIODevice>(v);
QCOMPARE(other.data()->objectName(), QString::fromLatin1("A test name"));
}
{
QWeakPointer<QFile> other = qWeakPointerFromVariant<QFile>(v);
QCOMPARE(other.data()->objectName(), QString::fromLatin1("A test name"));
}
{
QWeakPointer<QThread> other = qWeakPointerFromVariant<QThread>(v);
QVERIFY(!other);
}
// Intentionally does not compile.
// QWeakPointer<int> sop = qWeakPointerFromVariant<int>(v);
QFile file;
QWeakPointer<QFile> tracking = &file;
tracking.data()->setObjectName("A test name");
v = QVariant::fromValue(tracking);
{
QWeakPointer<QObject> other = qWeakPointerFromVariant<QObject>(v);
QCOMPARE(other.data()->objectName(), QString::fromLatin1("A test name"));
}
{
QWeakPointer<QIODevice> other = qWeakPointerFromVariant<QIODevice>(v);
QCOMPARE(other.data()->objectName(), QString::fromLatin1("A test name"));
}
{
QWeakPointer<QFile> other = qWeakPointerFromVariant<QFile>(v);
QCOMPARE(other.data()->objectName(), QString::fromLatin1("A test name"));
}
{
QWeakPointer<QThread> other = qWeakPointerFromVariant<QThread>(v);
QVERIFY(!other);
}
#endif
}
class SomeClass : public QEnableSharedFromThis<SomeClass>