From 2eb1a72f731f99de8f87a9e70c2e4a0354876f3e Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Tue, 31 Oct 2023 16:10:55 +0100 Subject: [PATCH] Replace confusing member variable with a predicate The Converter class, in the eponymous example, had a null member variable that wasn't a nullptr - it pointed to an instance of NullConverter - so that other converters could test whether a Converter * they'd been passed was null (in the sense of pointing to a NullConverter). This, however, was susceptible to misreading - I misread one such comparison as a nullptr check and thus thought it redundant with an earlier actual nullptr check. To spare future readers similar confusion, replace the public static member variable with a protected (since only other derived classes need it) static predicate, to at least give the reader a clue that this is using the word null in a class-specific sense. Pick-to: 6.5 Task-number: QTBUG-111228 Change-Id: I1e4f494b303d1bf90107f8c6fa3a4a22f6d81b90 Reviewed-by: Thiago Macieira (cherry picked from commit 0b1670134b43ba390f35b52d2458e4269a804de3) Reviewed-by: Qt Cherry-pick Bot --- examples/corelib/serialization/convert/cborconverter.cpp | 2 +- examples/corelib/serialization/convert/converter.h | 2 +- examples/corelib/serialization/convert/jsonconverter.cpp | 2 +- examples/corelib/serialization/convert/nullconverter.cpp | 5 ++++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/examples/corelib/serialization/convert/cborconverter.cpp b/examples/corelib/serialization/convert/cborconverter.cpp index 1b96da44fac..c3a36618a37 100644 --- a/examples/corelib/serialization/convert/cborconverter.cpp +++ b/examples/corelib/serialization/convert/cborconverter.cpp @@ -249,7 +249,7 @@ QVariant CborConverter::loadFile(QIODevice *f, const Converter *&outputConverter if (outputConverter == nullptr) outputConverter = &cborDiagnosticDumper; - else if (outputConverter == null) + else if (isNull(outputConverter)) return QVariant(); else if (!outputConverter->outputOptions().testFlag(SupportsArbitraryMapKeys)) return contents.toVariant(); diff --git a/examples/corelib/serialization/convert/converter.h b/examples/corelib/serialization/convert/converter.h index 300f8379598..8cbf3f4f4f7 100644 --- a/examples/corelib/serialization/convert/converter.h +++ b/examples/corelib/serialization/convert/converter.h @@ -28,9 +28,9 @@ class Converter { protected: Converter(); + static bool isNull(const Converter *converter); // in nullconverter.cpp public: - static Converter *null; enum class Direction { In = 1, Out = 2, InOut = In | Out }; Q_DECLARE_FLAGS(Directions, Direction) diff --git a/examples/corelib/serialization/convert/jsonconverter.cpp b/examples/corelib/serialization/convert/jsonconverter.cpp index 6c307cdb8cd..611061705b6 100644 --- a/examples/corelib/serialization/convert/jsonconverter.cpp +++ b/examples/corelib/serialization/convert/jsonconverter.cpp @@ -76,7 +76,7 @@ QVariant JsonConverter::loadFile(QIODevice *f, const Converter *&outputConverter qFatal("Could not parse JSON content: offset %d: %s", error.offset, qPrintable(error.errorString())); } - if (outputConverter == null) + if (isNull(outputConverter)) return QVariant(); return doc.toVariant(); } diff --git a/examples/corelib/serialization/convert/nullconverter.cpp b/examples/corelib/serialization/convert/nullconverter.cpp index 7c499efd738..00ae47a0861 100644 --- a/examples/corelib/serialization/convert/nullconverter.cpp +++ b/examples/corelib/serialization/convert/nullconverter.cpp @@ -6,7 +6,10 @@ using namespace Qt::StringLiterals; static NullConverter nullConverter; -Converter *Converter::null = &nullConverter; +bool Converter::isNull(const Converter *converter) +{ + return converter == &nullConverter; +} QString NullConverter::name() const {