languageutils: improve dumping of fakemetaobjects

adding functions to get a string description of fakemetaobjects
and related fakemeta* objects

Change-Id: Ic65033a245c028993dba1e8c65168a58fbdd8fbc
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
This commit is contained in:
Fawzi Mohamed
2014-05-21 16:04:52 +02:00
parent fc58d0abc8
commit 56080c4df2
2 changed files with 213 additions and 0 deletions

View File

@@ -81,6 +81,29 @@ void FakeMetaEnum::addToHash(QCryptographicHash &hash) const
hash.addData(reinterpret_cast<const char *>(&value), sizeof(value)); hash.addData(reinterpret_cast<const char *>(&value), sizeof(value));
} }
QString FakeMetaEnum::describe(int baseIndent) const
{
QString newLine = QString::fromLatin1("\n") + QString::fromLatin1(" ").repeated(baseIndent);
QString res = QLatin1String("Enum ");
res += name();
res += QLatin1String(":{");
for (int i = 0; i < keyCount(); ++i) {
res += newLine;
res += QLatin1String(" ");
res += key(i);
res += QLatin1String(": ");
res += QString::number(m_values.value(i, -1));
}
res += newLine;
res += QLatin1String("}");
return res;
}
QString FakeMetaEnum::toString() const
{
return describe();
}
FakeMetaMethod::FakeMetaMethod(const QString &name, const QString &returnType) FakeMetaMethod::FakeMetaMethod(const QString &name, const QString &returnType)
: m_name(name) : m_name(name)
, m_returnType(returnType) , m_returnType(returnType)
@@ -155,6 +178,42 @@ void FakeMetaMethod::addToHash(QCryptographicHash &hash) const
hash.addData(reinterpret_cast<const char *>(m_returnType.constData()), len * sizeof(QChar)); hash.addData(reinterpret_cast<const char *>(m_returnType.constData()), len * sizeof(QChar));
} }
QString FakeMetaMethod::describe(int baseIndent) const
{
QString newLine = QString::fromLatin1("\n") + QString::fromLatin1(" ").repeated(baseIndent);
QString res = QLatin1String("Method {");
res += newLine;
res += QLatin1String(" methodName:");
res += methodName();
res += newLine;
res += QLatin1String(" methodType:");
res += methodType();
res += newLine;
res += QLatin1String(" parameterNames:[");
foreach (const QString &pName, parameterNames()) {
res += newLine;
res += QLatin1String(" ");
res += pName;
}
res += QLatin1String("]");
res += newLine;
res += QLatin1String(" parameterTypes:[");
foreach (const QString &pType, parameterTypes()) {
res += newLine;
res += QLatin1String(" ");
res += pType;
}
res += QLatin1String("]");
res += newLine;
res += QLatin1String("}");
return res;
}
QString FakeMetaMethod::toString() const
{
return describe();
}
FakeMetaProperty::FakeMetaProperty(const QString &name, const QString &type, bool isList, FakeMetaProperty::FakeMetaProperty(const QString &name, const QString &type, bool isList,
bool isWritable, bool isPointer, int revision) bool isWritable, bool isPointer, int revision)
@@ -199,6 +258,38 @@ void FakeMetaProperty::addToHash(QCryptographicHash &hash) const
hash.addData(reinterpret_cast<const char *>(m_type.constData()), len * sizeof(QChar)); hash.addData(reinterpret_cast<const char *>(m_type.constData()), len * sizeof(QChar));
} }
QString FakeMetaProperty::describe(int baseIndent) const
{
QString newLine = QString::fromLatin1("\n") + QString::fromLatin1(" ").repeated(baseIndent);
QString res = QLatin1String("Property {");
res += newLine;
res += QLatin1String(" name:");
res += name();
res += newLine;
res += QLatin1String(" typeName:");
res += typeName();
res += newLine;
res += QLatin1String(" typeName:");
res += QString::number(revision());
res += newLine;
res += QLatin1String(" isList:");
res += isList();
res += newLine;
res += QLatin1String(" isPointer:");
res += isPointer();
res += newLine;
res += QLatin1String(" isWritable:");
res += isWritable();
res += newLine;
res += QLatin1String("}");
return res;
}
QString FakeMetaProperty::toString() const
{
return describe();
}
FakeMetaObject::FakeMetaObject() : m_isSingleton(false), m_isCreatable(true), m_isComposite(false) FakeMetaObject::FakeMetaObject() : m_isSingleton(false), m_isCreatable(true), m_isComposite(false)
{ {
@@ -382,6 +473,85 @@ void FakeMetaObject::setIsComposite(bool value)
m_isSingleton = value; m_isSingleton = value;
} }
QString FakeMetaObject::toString() const
{
return describe();
}
QString FakeMetaObject::describe(bool printDetails, int baseIndent) const
{
QString res = QString::fromLatin1("FakeMetaObject@%1")
.arg((quintptr)(void *)this, 0, 16);
if (!printDetails)
return res;
QString newLine = QString::fromLatin1("\n") + QString::fromLatin1(" ").repeated(baseIndent);
res += QLatin1String("{");
res += newLine;
res += QLatin1String("className:");
res += className();
res += newLine;
res += QLatin1String("superClassName:");
res += superclassName();
res += newLine;
res += QLatin1String("isSingleton:");
res += isSingleton();
res += newLine;
res += QLatin1String("isCreatable:");
res += isCreatable();
res += newLine;
res += QLatin1String("isComposite:");
res += isComposite();
res += newLine;
res += QLatin1String("defaultPropertyName:");
res += defaultPropertyName();
res += newLine;
res += QLatin1String("attachedTypeName:");
res += attachedTypeName();
res += newLine;
res += QLatin1String("fingerprint:");
res += QString::fromUtf8(fingerprint());
res += newLine;
res += QLatin1String("exports:[");
foreach (const Export &e, exports()) {
res += newLine;
res += QLatin1String(" ");
res += e.describe(baseIndent + 2);
}
res += QLatin1String("]");
res += newLine;
res += QLatin1String("enums:[");
for (int iEnum = 0; iEnum < enumeratorCount() ; ++ iEnum) {
FakeMetaEnum e = enumerator(enumeratorOffset() + iEnum);
res += newLine;
res += QLatin1String(" ");
res += e.describe(baseIndent + 2);
}
res += QLatin1String("]");
res += newLine;
res += QLatin1String("properties:[");
for (int iProp = 0; iProp < propertyCount() ; ++ iProp) {
FakeMetaProperty prop = property(propertyOffset() + iProp);
res += newLine;
res += QLatin1String(" ");
res += prop.describe(baseIndent + 2);
}
res += QLatin1String("]");
res += QLatin1String("methods:[");
for (int iMethod = 0; iMethod < methodOffset() ; ++ iMethod) {
FakeMetaMethod m = method(methodOffset() + iMethod);
res += newLine;
res += QLatin1String(" ");
m.describe(baseIndent + 2);
}
res += QLatin1String("]");
res += newLine;
res += QLatin1String("}");
return res;
}
FakeMetaObject::Export::Export() FakeMetaObject::Export::Export()
: metaObjectRevision(0) : metaObjectRevision(0)
{} {}
@@ -399,3 +569,32 @@ void FakeMetaObject::Export::addToHash(QCryptographicHash &hash) const
version.addToHash(hash); version.addToHash(hash);
hash.addData(reinterpret_cast<const char *>(&metaObjectRevision), sizeof(metaObjectRevision)); hash.addData(reinterpret_cast<const char *>(&metaObjectRevision), sizeof(metaObjectRevision));
} }
QString FakeMetaObject::Export::describe(int baseIndent) const
{
QString newLine = QString::fromLatin1("\n") + QString::fromLatin1(" ").repeated(baseIndent);
QString res = QLatin1String("Export {");
res += newLine;
res += QLatin1String(" package:");
res += package;
res += newLine;
res += QLatin1String(" type:");
res += type;
res += newLine;
res += QLatin1String(" version:");
res += version.toString();
res += newLine;
res += QLatin1String(" metaObjectRevision:");
res += QString::number(metaObjectRevision);
res += newLine;
res += QLatin1String(" isValid:");
res += QString::number(isValid());
res += newLine;
res += QLatin1String("}");
return res;
}
QString FakeMetaObject::Export::toString() const
{
return describe();
}

View File

@@ -65,6 +65,9 @@ public:
QStringList keys() const; QStringList keys() const;
bool hasKey(const QString &key) const; bool hasKey(const QString &key) const;
void addToHash(QCryptographicHash &hash) const; void addToHash(QCryptographicHash &hash) const;
QString describe(int baseIndent = 0) const;
QString toString() const;
}; };
class LANGUAGEUTILS_EXPORT FakeMetaMethod { class LANGUAGEUTILS_EXPORT FakeMetaMethod {
@@ -103,6 +106,8 @@ public:
void setRevision(int r); void setRevision(int r);
void addToHash(QCryptographicHash &hash) const; void addToHash(QCryptographicHash &hash) const;
QString describe(int baseIndent = 0) const;
QString toString() const;
private: private:
QString m_name; QString m_name;
QString m_returnType; QString m_returnType;
@@ -132,6 +137,9 @@ public:
bool isPointer() const; bool isPointer() const;
int revision() const; int revision() const;
void addToHash(QCryptographicHash &hash) const; void addToHash(QCryptographicHash &hash) const;
QString describe(int baseIndent = 0) const;
QString toString() const;
}; };
class LANGUAGEUTILS_EXPORT FakeMetaObject { class LANGUAGEUTILS_EXPORT FakeMetaObject {
@@ -152,6 +160,9 @@ public:
bool isValid() const; bool isValid() const;
void addToHash(QCryptographicHash &hash) const; void addToHash(QCryptographicHash &hash) const;
QString describe(int baseIndent = 0) const;
QString toString() const;
}; };
private: private:
@@ -217,6 +228,9 @@ public:
void setIsSingleton(bool value); void setIsSingleton(bool value);
void setIsCreatable(bool value); void setIsCreatable(bool value);
void setIsComposite(bool value); void setIsComposite(bool value);
QString describe(bool printDetails = true, int baseIndent = 0) const;
QString toString() const;
}; };
} // namespace LanguageUtils } // namespace LanguageUtils