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.6 6.5
Task-number: QTBUG-111228
Change-Id: I1e4f494b303d1bf90107f8c6fa3a4a22f6d81b90
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Edward Welbourne 2023-10-31 16:10:55 +01:00
parent 0de55973d3
commit 0b1670134b
4 changed files with 7 additions and 4 deletions

View File

@ -250,7 +250,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();

View File

@ -12,9 +12,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)

View File

@ -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();
}

View File

@ -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
{