aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/ApiExtractor/typesystem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken2/ApiExtractor/typesystem.cpp')
-rw-r--r--sources/shiboken2/ApiExtractor/typesystem.cpp446
1 files changed, 286 insertions, 160 deletions
diff --git a/sources/shiboken2/ApiExtractor/typesystem.cpp b/sources/shiboken2/ApiExtractor/typesystem.cpp
index a1b98cd45..5634aa515 100644
--- a/sources/shiboken2/ApiExtractor/typesystem.cpp
+++ b/sources/shiboken2/ApiExtractor/typesystem.cpp
@@ -34,6 +34,7 @@
#include <QtCore/QSet>
#include <algorithm>
+#include <limits>
static QString strings_Object = QLatin1String("Object");
static QString strings_String = QLatin1String("String");
@@ -43,17 +44,13 @@ static QString strings_jobject = QLatin1String("jobject");
static inline QString callOperator() { return QStringLiteral("operator()"); }
-PrimitiveTypeEntry::PrimitiveTypeEntry(const QString &name, const QVersionNumber &vr) :
- TypeEntry(name, PrimitiveType, vr),
+PrimitiveTypeEntry::PrimitiveTypeEntry(const QString &entryName, const QVersionNumber &vr,
+ const TypeEntry *parent) :
+ TypeEntry(entryName, PrimitiveType, vr, parent),
m_preferredTargetLangType(true)
{
}
-QString PrimitiveTypeEntry::targetLangName() const
-{
- return m_targetLangName;
-}
-
QString PrimitiveTypeEntry::targetLangApiName() const
{
return m_targetLangApiName;
@@ -80,6 +77,12 @@ CodeSnipList TypeEntry::codeSnips() const
return m_codeSnips;
}
+void TypeEntry::addExtraInclude(const Include &newInclude)
+{
+ if (!m_extraIncludes.contains(newInclude))
+ m_extraIncludes.append(newInclude);
+}
+
QString Modification::accessModifierString() const
{
if (isPrivate()) return QLatin1String("private");
@@ -112,12 +115,6 @@ FieldModification ComplexTypeEntry::fieldModification(const QString &name) const
return mod;
}
-QString ComplexTypeEntry::targetLangName() const
-{
- return m_targetLangName.isEmpty() ?
- TypeEntry::targetLangName() : m_targetLangName;
-}
-
void ComplexTypeEntry::setDefaultConstructor(const QString& defaultConstructor)
{
m_defaultConstructor = defaultConstructor;
@@ -141,39 +138,14 @@ void ComplexTypeEntry::useAsTypedef(const ComplexTypeEntry *source)
{
TypeEntry::useAsTypedef(source);
m_qualifiedCppName = source->m_qualifiedCppName;
- m_targetLangName = source->m_targetLangName;
- m_lookupName = source->m_lookupName;
m_targetType = source->m_targetType;
}
ComplexTypeEntry::ComplexTypeEntry(const ComplexTypeEntry &) = default;
-QString ContainerTypeEntry::targetLangName() const
-{
-
- switch (m_type) {
- case StringListContainer: return QLatin1String("QStringList");
- case ListContainer: return QLatin1String("QList");
- case LinkedListContainer: return QLatin1String("QLinkedList");
- case VectorContainer: return QLatin1String("QVector");
- case StackContainer: return QLatin1String("QStack");
- case QueueContainer: return QLatin1String("QQueue");
- case SetContainer: return QLatin1String("QSet");
- case MapContainer: return QLatin1String("QMap");
- case MultiMapContainer: return QLatin1String("QMultiMap");
- case HashContainer: return QLatin1String("QHash");
- case MultiHashContainer: return QLatin1String("QMultiHash");
- case PairContainer: return QLatin1String("QPair");
- default:
- qWarning("bad type... %d", m_type);
- break;
- }
- return QString();
-}
-
QString ContainerTypeEntry::qualifiedCppName() const
{
- if (m_type == StringListContainer)
+ if (m_containerKind == StringListContainer)
return QLatin1String("QStringList");
return ComplexTypeEntry::qualifiedCppName();
}
@@ -187,23 +159,19 @@ ContainerTypeEntry::ContainerTypeEntry(const ContainerTypeEntry &) = default;
QString EnumTypeEntry::targetLangQualifier() const
{
- TypeEntry *te = TypeDatabase::instance()->findType(m_qualifier);
- return te ? te->targetLangName() : m_qualifier;
+ const QString q = qualifier();
+ if (!q.isEmpty()) {
+ if (auto te = TypeDatabase::instance()->findType(q))
+ return te->targetLangName();
+ }
+ return q;
}
-QString EnumTypeEntry::qualifiedTargetLangName() const
+QString EnumTypeEntry::qualifier() const
{
- QString qualifiedName;
- QString pkg = targetLangPackage();
- QString qualifier = targetLangQualifier();
-
- if (!pkg.isEmpty())
- qualifiedName += pkg + QLatin1Char('.');
- if (!qualifier.isEmpty())
- qualifiedName += qualifier + QLatin1Char('.');
- qualifiedName += targetLangName();
-
- return qualifiedName;
+ auto parentEntry = parent();
+ return parentEntry && parentEntry->type() != TypeEntry::TypeSystemType ?
+ parentEntry->name() : QString();
}
QString EnumTypeEntry::targetLangApiName() const
@@ -230,17 +198,6 @@ TypeEntry *FlagsTypeEntry::clone() const
FlagsTypeEntry::FlagsTypeEntry(const FlagsTypeEntry &) = default;
-QString FlagsTypeEntry::qualifiedTargetLangName() const
-{
- return targetLangPackage() + QLatin1Char('.') + m_enum->targetLangQualifier()
- + QLatin1Char('.') + targetLangName();
-}
-
-QString FlagsTypeEntry::targetLangName() const
-{
- return m_targetLangName;
-}
-
QString TemplateInstance::expandCode() const
{
TemplateEntry *templateEntry = TypeDatabase::instance()->findTemplate(m_name);
@@ -256,7 +213,7 @@ QString TemplateInstance::expandCode() const
if (!code.startsWith(QLatin1Char('\n')))
result += QLatin1Char('\n');
result += code;
- result += QLatin1String("\n// TEMPLATE - ") + m_name + QLatin1String(" - END");
+ result += QLatin1String("\n// TEMPLATE - ") + m_name + QLatin1String(" - END\n");
return result;
}
@@ -270,6 +227,82 @@ QString CodeSnipAbstract::code() const
return res;
}
+void CodeSnipAbstract::addCode(const QString &code)
+{
+ codeList.append(CodeSnipFragment(fixSpaces(code)));
+}
+
+template <class String> // QString, QStringRef
+static inline int firstNonBlank(const String &s)
+{
+ const auto it = std::find_if(s.cbegin(), s.cend(),
+ [] (QChar c) { return !c.isSpace(); });
+ return int(it - s.cbegin());
+}
+
+template <class String> // QString, QStringRef
+static inline bool isEmpty(const String &s)
+{
+ return s.isEmpty()
+ || std::all_of(s.cbegin(), s.cend(),
+ [] (QChar c) { return c.isSpace(); });
+}
+
+QString CodeSnipAbstract::dedent(const QString &code)
+{
+ if (code.isEmpty())
+ return code;
+ // Right trim if indent=0, or trim if single line
+ if (!code.at(0).isSpace() || !code.contains(QLatin1Char('\n')))
+ return code.trimmed();
+ const auto lines = code.splitRef(QLatin1Char('\n'));
+ int spacesToRemove = std::numeric_limits<int>::max();
+ for (const auto &line : lines) {
+ if (!isEmpty(line)) {
+ const int nonSpacePos = firstNonBlank(line);
+ if (nonSpacePos < spacesToRemove)
+ spacesToRemove = nonSpacePos;
+ if (spacesToRemove == 0)
+ return code;
+ }
+ }
+ QString result;
+ for (const auto &line : lines) {
+ if (!isEmpty(line) && spacesToRemove < line.size())
+ result += line.mid(spacesToRemove).toString();
+ result += QLatin1Char('\n');
+ }
+ return result;
+}
+
+QString CodeSnipAbstract::fixSpaces(QString code)
+{
+ code.remove(QLatin1Char('\r'));
+ // Check for XML <tag>\n<space>bla...
+ if (code.startsWith(QLatin1String("\n ")))
+ code.remove(0, 1);
+ while (!code.isEmpty() && code.back().isSpace())
+ code.chop(1);
+ code = dedent(code);
+ if (!code.isEmpty() && !code.endsWith(QLatin1Char('\n')))
+ code.append(QLatin1Char('\n'));
+ return code;
+}
+
+// Prepend a line to the code, observing indentation
+void CodeSnipAbstract::prependCode(QString *code, QString firstLine)
+{
+ while (!code->isEmpty() && code->front() == QLatin1Char('\n'))
+ code->remove(0, 1);
+ if (!code->isEmpty() && code->front().isSpace()) {
+ const int indent = firstNonBlank(*code);
+ firstLine.prepend(QString(indent, QLatin1Char(' ')));
+ }
+ if (!firstLine.endsWith(QLatin1Char('\n')))
+ firstLine += QLatin1Char('\n');
+ code->prepend(firstLine);
+}
+
QString CodeSnipFragment::code() const
{
return m_instance ? m_instance->expandCode() : m_code;
@@ -477,7 +510,7 @@ QDebug operator<<(QDebug d, const CodeSnip &s)
void Modification::formatDebug(QDebug &d) const
{
- d << "modifiers=" << hex << showbase << modifiers << noshowbase << dec;
+ d << "modifiers=" << Qt::hex << Qt::showbase << modifiers << Qt::noshowbase << Qt::dec;
if (removal)
d << ", removal";
if (!renamedToName.isEmpty())
@@ -610,10 +643,17 @@ AddedFunction::TypeInfo AddedFunction::TypeInfo::fromSignature(const QString& si
return parseType(signature);
}
-ComplexTypeEntry::ComplexTypeEntry(const QString &name, TypeEntry::Type t,
- const QVersionNumber &vr) :
- TypeEntry(name, t, vr),
- m_qualifiedCppName(name),
+static QString buildName(const QString &entryName, const TypeEntry *parent)
+{
+ return parent == nullptr || parent->type() == TypeEntry::TypeSystemType
+ ? entryName : parent->name() + QLatin1String("::") + entryName;
+}
+
+ComplexTypeEntry::ComplexTypeEntry(const QString &entryName, TypeEntry::Type t,
+ const QVersionNumber &vr,
+ const TypeEntry *parent) :
+ TypeEntry(entryName, t, vr, parent),
+ m_qualifiedCppName(buildName(entryName, parent)),
m_polymorphicBase(false),
m_genericClass(false),
m_deleteInMainThread(false)
@@ -625,11 +665,6 @@ bool ComplexTypeEntry::isComplex() const
return true;
}
-QString ComplexTypeEntry::lookupName() const
-{
- return m_lookupName.isEmpty() ? targetLangName() : m_lookupName;
-}
-
QString ComplexTypeEntry::targetLangApiName() const
{
return strings_jobject;
@@ -637,7 +672,7 @@ QString ComplexTypeEntry::targetLangApiName() const
QString ContainerTypeEntry::typeName() const
{
- switch(m_type) {
+ switch (m_containerKind) {
case LinkedListContainer:
return QLatin1String("linked-list");
case ListContainer:
@@ -711,10 +746,13 @@ bool TypeEntry::isCppPrimitive() const
return typeName.contains(QLatin1Char(' ')) || primitiveCppTypes().contains(typeName);
}
-TypeEntry::TypeEntry(const QString &name, TypeEntry::Type t, const QVersionNumber &vr) :
- m_name(name),
- m_type(t),
- m_version(vr)
+TypeEntry::TypeEntry(const QString &entryName, TypeEntry::Type t, const QVersionNumber &vr,
+ const TypeEntry *parent) :
+ m_parent(parent),
+ m_name(buildName(entryName, parent)),
+ m_entryName(entryName),
+ m_version(vr),
+ m_type(t)
{
}
@@ -723,6 +761,82 @@ TypeEntry::~TypeEntry()
delete m_customConversion;
}
+bool TypeEntry::isChildOf(const TypeEntry *p) const
+{
+ for (auto e = m_parent; e; e = e->parent()) {
+ if (e == p)
+ return true;
+ }
+ return false;
+}
+
+const TypeSystemTypeEntry *TypeEntry::typeSystemTypeEntry() const
+{
+ for (auto e = this; e; e = e->parent()) {
+ if (e->type() == TypeEntry::TypeSystemType)
+ return static_cast<const TypeSystemTypeEntry *>(e);
+ }
+ return nullptr;
+}
+
+const TypeEntry *TypeEntry::targetLangEnclosingEntry() const
+{
+ auto result = m_parent;
+ while (result && result->type() != TypeEntry::TypeSystemType
+ && !NamespaceTypeEntry::isVisibleScope(result)) {
+ result = result->parent();
+ }
+ return result;
+}
+
+QString TypeEntry::targetLangName() const
+{
+ if (m_cachedTargetLangName.isEmpty())
+ m_cachedTargetLangName = buildTargetLangName();
+ return m_cachedTargetLangName;
+}
+
+QString TypeEntry::buildTargetLangName() const
+{
+ QString result = m_entryName;
+ for (auto p = parent(); p && p->type() != TypeEntry::TypeSystemType; p = p->parent()) {
+ if (NamespaceTypeEntry::isVisibleScope(p)) {
+ if (!result.isEmpty())
+ result.prepend(QLatin1Char('.'));
+ QString n = p->m_entryName;
+ n.replace(QLatin1String("::"), QLatin1String(".")); // Primitive types may have "std::"
+ result.prepend(n);
+ }
+ }
+ return result;
+}
+
+SourceLocation TypeEntry::sourceLocation() const
+{
+ return m_sourceLocation;
+}
+
+void TypeEntry::setSourceLocation(const SourceLocation &sourceLocation)
+{
+ m_sourceLocation = sourceLocation;
+}
+
+QString TypeEntry::targetLangEntryName() const
+{
+ if (m_cachedTargetLangEntryName.isEmpty()) {
+ m_cachedTargetLangEntryName = targetLangName();
+ const int lastDot = m_cachedTargetLangEntryName.lastIndexOf(QLatin1Char('.'));
+ if (lastDot != -1)
+ m_cachedTargetLangEntryName.remove(0, lastDot + 1);
+ }
+ return m_cachedTargetLangEntryName;
+}
+
+QString TypeEntry::qualifiedTargetLangName() const
+{
+ return targetLangPackage() + QLatin1Char('.') + targetLangName();
+}
+
bool TypeEntry::hasCustomConversion() const
{
return m_customConversion != nullptr;
@@ -746,6 +860,9 @@ TypeEntry *TypeEntry::clone() const
// Take over parameters relevant for typedefs
void TypeEntry::useAsTypedef(const TypeEntry *source)
{
+ // XML Typedefs are in the global namespace for now.
+ m_parent = source->typeSystemTypeEntry();
+ m_entryName = source->m_entryName;
m_name = source->m_name;
m_targetLangPackage = source->m_targetLangPackage;
m_codeGeneration = source->m_codeGeneration;
@@ -754,8 +871,9 @@ void TypeEntry::useAsTypedef(const TypeEntry *source)
TypeEntry::TypeEntry(const TypeEntry &) = default;
-TypeSystemTypeEntry::TypeSystemTypeEntry(const QString &name, const QVersionNumber &vr) :
- TypeEntry(name, TypeSystemType, vr)
+TypeSystemTypeEntry::TypeSystemTypeEntry(const QString &entryName, const QVersionNumber &vr,
+ const TypeEntry *parent) :
+ TypeEntry(entryName, TypeSystemType, vr, parent)
{
}
@@ -767,7 +885,7 @@ TypeEntry *TypeSystemTypeEntry::clone() const
TypeSystemTypeEntry::TypeSystemTypeEntry(const TypeSystemTypeEntry &) = default;
VoidTypeEntry::VoidTypeEntry() :
- TypeEntry(QLatin1String("void"), VoidType, QVersionNumber(0, 0))
+ TypeEntry(QLatin1String("void"), VoidType, QVersionNumber(0, 0), nullptr)
{
}
@@ -779,7 +897,7 @@ TypeEntry *VoidTypeEntry::clone() const
VoidTypeEntry::VoidTypeEntry(const VoidTypeEntry &) = default;
VarargsTypeEntry::VarargsTypeEntry() :
- TypeEntry(QLatin1String("..."), VarargsType, QVersionNumber(0, 0))
+ TypeEntry(QLatin1String("..."), VarargsType, QVersionNumber(0, 0), nullptr)
{
}
@@ -790,8 +908,9 @@ TypeEntry *VarargsTypeEntry::clone() const
VarargsTypeEntry::VarargsTypeEntry(const VarargsTypeEntry &) = default;
-TemplateArgumentEntry::TemplateArgumentEntry(const QString &name, const QVersionNumber &vr) :
- TypeEntry(name, TemplateArgumentType, vr)
+TemplateArgumentEntry::TemplateArgumentEntry(const QString &entryName, const QVersionNumber &vr,
+ const TypeEntry *parent) :
+ TypeEntry(entryName, TemplateArgumentType, vr, parent)
{
}
@@ -802,14 +921,15 @@ TypeEntry *TemplateArgumentEntry::clone() const
TemplateArgumentEntry::TemplateArgumentEntry(const TemplateArgumentEntry &) = default;
-ArrayTypeEntry::ArrayTypeEntry(const TypeEntry *nested_type, const QVersionNumber &vr) :
- TypeEntry(QLatin1String("Array"), ArrayType, vr),
+ArrayTypeEntry::ArrayTypeEntry(const TypeEntry *nested_type, const QVersionNumber &vr,
+ const TypeEntry *parent) :
+ TypeEntry(QLatin1String("Array"), ArrayType, vr, parent),
m_nestedType(nested_type)
{
Q_ASSERT(m_nestedType);
}
-QString ArrayTypeEntry::targetLangName() const
+QString ArrayTypeEntry::buildTargetLangName() const
{
return m_nestedType->targetLangName() + QLatin1String("[]");
}
@@ -828,24 +948,19 @@ TypeEntry *ArrayTypeEntry::clone() const
ArrayTypeEntry::ArrayTypeEntry(const ArrayTypeEntry &) = default;
-EnumTypeEntry::EnumTypeEntry(const QString &nspace, const QString &enumName,
- const QVersionNumber &vr) :
- TypeEntry(nspace.isEmpty() ? enumName : nspace + QLatin1String("::") + enumName,
- EnumType, vr),
- m_qualifier(nspace),
- m_targetLangName(enumName)
+EnumTypeEntry::EnumTypeEntry(const QString &entryName,
+ const QVersionNumber &vr,
+ const TypeEntry *parent) :
+ TypeEntry(entryName, EnumType, vr, parent)
{
}
-QString EnumTypeEntry::targetLangName() const
-{
- return m_targetLangName;
-}
-
EnumValueTypeEntry::EnumValueTypeEntry(const QString &name, const QString &value,
const EnumTypeEntry *enclosingEnum,
+ bool isScopedEnum,
const QVersionNumber &vr) :
- TypeEntry(name, TypeEntry::EnumValue, vr),
+ TypeEntry(name, TypeEntry::EnumValue, vr,
+ isScopedEnum ? enclosingEnum : enclosingEnum->parent()),
m_value(value),
m_enclosingEnum(enclosingEnum)
{
@@ -858,16 +973,37 @@ TypeEntry *EnumValueTypeEntry::clone() const
EnumValueTypeEntry::EnumValueTypeEntry(const EnumValueTypeEntry &) = default;
-FlagsTypeEntry::FlagsTypeEntry(const QString &name, const QVersionNumber &vr) :
- TypeEntry(name, FlagsType, vr)
+FlagsTypeEntry::FlagsTypeEntry(const QString &entryName, const QVersionNumber &vr,
+ const TypeEntry *parent) :
+ TypeEntry(entryName, FlagsType, vr, parent)
+{
+}
+
+QString FlagsTypeEntry::buildTargetLangName() const
{
+ QString on = m_originalName;
+ on.replace(QLatin1String("::"), QLatin1String("."));
+ return on;
}
+ConstantValueTypeEntry::ConstantValueTypeEntry(const QString& name,
+ const TypeEntry *parent) :
+ TypeEntry(name, ConstantValueType, QVersionNumber(0, 0), parent)
+{
+}
+
+TypeEntry *ConstantValueTypeEntry::clone() const
+{
+ return new ConstantValueTypeEntry(*this);
+}
+
+ConstantValueTypeEntry::ConstantValueTypeEntry(const ConstantValueTypeEntry &) = default;
+
/* A typedef entry allows for specifying template specializations in the
* typesystem XML file. */
-TypedefEntry::TypedefEntry(const QString &name, const QString &sourceType,
- const QVersionNumber &vr) :
- ComplexTypeEntry(name, TypedefType, vr),
+TypedefEntry::TypedefEntry(const QString &entryName, const QString &sourceType,
+ const QVersionNumber &vr, const TypeEntry *parent) :
+ ComplexTypeEntry(entryName, TypedefType, vr, parent),
m_sourceType(sourceType)
{
}
@@ -879,20 +1015,21 @@ TypeEntry *TypedefEntry::clone() const
TypedefEntry::TypedefEntry(const TypedefEntry &) = default;
-ContainerTypeEntry::ContainerTypeEntry(const QString &name, Type type,
- const QVersionNumber &vr) :
- ComplexTypeEntry(name, ContainerType, vr),
- m_type(type)
+ContainerTypeEntry::ContainerTypeEntry(const QString &entryName, ContainerKind containerKind,
+ const QVersionNumber &vr,
+ const TypeEntry *parent) :
+ ComplexTypeEntry(entryName, ContainerType, vr, parent),
+ m_containerKind(containerKind)
{
setCodeGeneration(GenerateForSubclass);
}
-SmartPointerTypeEntry::SmartPointerTypeEntry(const QString &name,
+SmartPointerTypeEntry::SmartPointerTypeEntry(const QString &entryName,
const QString &getterName,
const QString &smartPointerType,
const QString &refCountMethodName,
- const QVersionNumber &vr) :
- ComplexTypeEntry(name, SmartPointerType, vr),
+ const QVersionNumber &vr, const TypeEntry *parent) :
+ ComplexTypeEntry(entryName, SmartPointerType, vr, parent),
m_getterName(getterName),
m_smartPointerType(smartPointerType),
m_refCountMethodName(refCountMethodName)
@@ -906,8 +1043,14 @@ TypeEntry *SmartPointerTypeEntry::clone() const
SmartPointerTypeEntry::SmartPointerTypeEntry(const SmartPointerTypeEntry &) = default;
-NamespaceTypeEntry::NamespaceTypeEntry(const QString &name, const QVersionNumber &vr) :
- ComplexTypeEntry(name, NamespaceType, vr)
+bool SmartPointerTypeEntry::matchesInstantiation(const TypeEntry *e) const
+{
+ return m_instantiations.isEmpty() || m_instantiations.contains(e);
+}
+
+NamespaceTypeEntry::NamespaceTypeEntry(const QString &entryName, const QVersionNumber &vr,
+ const TypeEntry *parent) :
+ ComplexTypeEntry(entryName, NamespaceType, vr, parent)
{
}
@@ -931,17 +1074,25 @@ bool NamespaceTypeEntry::matchesFile(const QString &needle) const
return m_filePattern.match(needle).hasMatch();
}
-ValueTypeEntry::ValueTypeEntry(const QString &name, const QVersionNumber &vr) :
- ComplexTypeEntry(name, BasicValueType, vr)
+bool NamespaceTypeEntry::isVisible() const
{
+ return m_visibility == TypeSystem::Visibility::Visible
+ || (m_visibility == TypeSystem::Visibility::Auto && !m_inlineNamespace);
}
-bool ValueTypeEntry::isValue() const
+bool NamespaceTypeEntry::isVisibleScope(const TypeEntry *e)
{
- return true;
+ return e->type() != TypeEntry::NamespaceType
+ || static_cast<const NamespaceTypeEntry *>(e)->isVisible();
}
-bool ValueTypeEntry::isNativeIdBased() const
+ValueTypeEntry::ValueTypeEntry(const QString &entryName, const QVersionNumber &vr,
+ const TypeEntry *parent) :
+ ComplexTypeEntry(entryName, BasicValueType, vr, parent)
+{
+}
+
+bool ValueTypeEntry::isValue() const
{
return true;
}
@@ -953,8 +1104,9 @@ TypeEntry *ValueTypeEntry::clone() const
ValueTypeEntry::ValueTypeEntry(const ValueTypeEntry &) = default;
-ValueTypeEntry::ValueTypeEntry(const QString &name, Type t, const QVersionNumber &vr) :
- ComplexTypeEntry(name, t, vr)
+ValueTypeEntry::ValueTypeEntry(const QString &entryName, Type t, const QVersionNumber &vr,
+ const TypeEntry *parent) :
+ ComplexTypeEntry(entryName, t, vr, parent)
{
}
@@ -1092,32 +1244,10 @@ void CustomConversion::TargetToNativeConversion::setConversion(const QString& co
m_d->conversion = conversion;
}
-InterfaceTypeEntry::InterfaceTypeEntry(const QString &name, const QVersionNumber &vr) :
- ComplexTypeEntry(name, InterfaceType, vr)
-{
-}
-
-bool InterfaceTypeEntry::isNativeIdBased() const
-{
- return true;
-}
-
-QString InterfaceTypeEntry::qualifiedCppName() const
-{
- const int len = ComplexTypeEntry::qualifiedCppName().length() - interfaceName(QString()).length();
- return ComplexTypeEntry::qualifiedCppName().left(len);
-}
-
-TypeEntry *InterfaceTypeEntry::clone() const
-{
- return new InterfaceTypeEntry(*this);
-}
-
-InterfaceTypeEntry::InterfaceTypeEntry(const InterfaceTypeEntry &) = default;
-
-FunctionTypeEntry::FunctionTypeEntry(const QString &name, const QString &signature,
- const QVersionNumber &vr) :
- TypeEntry(name, FunctionType, vr)
+FunctionTypeEntry::FunctionTypeEntry(const QString &entryName, const QString &signature,
+ const QVersionNumber &vr,
+ const TypeEntry *parent) :
+ TypeEntry(entryName, FunctionType, vr, parent)
{
addSignature(signature);
}
@@ -1129,19 +1259,10 @@ TypeEntry *FunctionTypeEntry::clone() const
FunctionTypeEntry::FunctionTypeEntry(const FunctionTypeEntry &) = default;
-ObjectTypeEntry::ObjectTypeEntry(const QString &name, const QVersionNumber &vr)
- : ComplexTypeEntry(name, ObjectType, vr)
-{
-}
-
-InterfaceTypeEntry *ObjectTypeEntry::designatedInterface() const
-{
- return m_interface;
-}
-
-bool ObjectTypeEntry::isNativeIdBased() const
+ObjectTypeEntry::ObjectTypeEntry(const QString &entryName, const QVersionNumber &vr,
+ const TypeEntry *parent)
+ : ComplexTypeEntry(entryName, ObjectType, vr, parent)
{
- return true;
}
TypeEntry *ObjectTypeEntry::clone() const
@@ -1150,3 +1271,8 @@ TypeEntry *ObjectTypeEntry::clone() const
}
ObjectTypeEntry::ObjectTypeEntry(const ObjectTypeEntry &) = default;
+
+void DocModification::setCode(const QString &code)
+{
+ m_code = CodeSnipAbstract::fixSpaces(code);
+}