Skip to content

Commit 5f59734

Browse files
committed
Introduce alias names for types
Add an entry "aliases" to a type entry in the type database, these types will automatically be changed to the main type in the generated code. This fixes the problem that in Qt 6.7 QAudio enums are used under the QtAudio alias. These enum names are now automatically mapped to the QAudio name with the right alias entries in the type database. This doesn't make QAudio available as QtAudio in Python, though.
1 parent bf1219a commit 5f59734

File tree

3 files changed

+26
-6
lines changed

3 files changed

+26
-6
lines changed

generator/typesystem.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,7 @@ bool Handler::startElement(const QString &, const QString &n,
540540

541541
QHash<QString, QString> attributes;
542542
attributes["name"] = QString();
543+
attributes["aliases"] = QString();
543544

544545
switch (element->type) {
545546
case StackElement::PrimitiveTypeEntry:
@@ -586,15 +587,20 @@ bool Handler::startElement(const QString &, const QString &n,
586587
fetchAttributeValues(tagName, atts, &attributes);
587588

588589
QString name = attributes["name"];
590+
QStringList aliases = attributes["aliases"].split(',', Qt::SkipEmptyParts);
589591

590592
// We need to be able to have duplicate primitive type entries, or it's not possible to
591593
// cover all primitive java types (which we need to do in order to support fake
592594
// meta objects)
593595
if (element->type != StackElement::PrimitiveTypeEntry) {
594-
TypeEntry *tmp = m_database->findType(name);
595-
if (tmp != 0) {
596+
if (m_database->findType(name)) {
596597
ReportHandler::warning(QString("Duplicate type entry: '%1'").arg(name));
597598
}
599+
for (const QString& alias : aliases) {
600+
if (m_database->findType(alias)) {
601+
ReportHandler::warning(QString("Duplicate alias type entry: '%1'").arg(alias));
602+
}
603+
}
598604
}
599605

600606
if (name.isEmpty()) {
@@ -758,6 +764,7 @@ bool Handler::startElement(const QString &, const QString &n,
758764
Q_ASSERT(false);
759765
};
760766

767+
element->entry->setAliases(aliases); // also add type under given aliases into type database
761768
if (element->entry)
762769
m_database->addType(element->entry);
763770
else
@@ -1831,6 +1838,14 @@ bool TypeDatabase::isFieldRejected(const QString &class_name, const QString &fie
18311838
return false;
18321839
}
18331840

1841+
void TypeDatabase::addType(TypeEntry* e)
1842+
{
1843+
m_entries[e->qualifiedCppName()].append(e);
1844+
for (const QString& alias : e->aliases()) {
1845+
m_entries[alias].append(e);
1846+
}
1847+
}
1848+
18341849
FlagsTypeEntry *TypeDatabase::findFlagsType(const QString &name) const
18351850
{
18361851
FlagsTypeEntry *fte = (FlagsTypeEntry *) findType(name);

generator/typesystem.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,10 @@ class TypeEntry
513513
// The type's name in C++, fully qualified
514514
QString name() const { return m_name; }
515515

516+
//! Alias names for this type (need to be fully qualified)
517+
QStringList aliases() const { return m_aliases; }
518+
void setAliases(const QStringList& aliases) { m_aliases = aliases; }
519+
516520
uint codeGeneration() const { return m_code_generation; }
517521
void setCodeGeneration(uint cg) { m_code_generation = cg; }
518522

@@ -553,6 +557,7 @@ class TypeEntry
553557

554558
private:
555559
QString m_name;
560+
QStringList m_aliases;
556561
Type m_type;
557562
uint m_code_generation;
558563
CustomFunction m_customConstructor;
@@ -1187,7 +1192,7 @@ class TypeDatabase
11871192
bool isFieldRejected(const QString &class_name, const QString &field_name);
11881193
bool isEnumRejected(const QString &class_name, const QString &enum_name);
11891194

1190-
void addType(TypeEntry *e) { m_entries[e->qualifiedCppName()].append(e); }
1195+
void addType(TypeEntry* e);
11911196

11921197
SingleTypeEntryHash flagsEntries() const { return m_flags_entries; }
11931198
FlagsTypeEntry *findFlagsType(const QString &name) const;

generator/typesystem_multimedia.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,10 @@
6868
<enum-type name="QMediaPlayer::MediaStatus"/>
6969
<enum-type name="QMediaPlayer::Error"/>
7070
<enum-type name="QMediaPlayer::Flag" flags="QMediaPlayer::Flags"/>
71-
<enum-type name="QAudio::Error"/>
71+
<enum-type name="QAudio::Error" aliases="QtAudio::Error"/>
72+
<enum-type name="QAudio::State" aliases="QtAudio::State"/>
73+
<enum-type name="QAudio::VolumeScale" aliases="QtAudio::VolumeScale"/>
7274
<enum-type name="QAudio::Mode"/>
73-
<enum-type name="QAudio::State"/>
7475
<enum-type name="QAudio::Role"/>
7576
<enum-type name="QMultimedia::SupportEstimate"/>
7677
<enum-type name="QMultimedia::EncodingQuality"/>
@@ -192,7 +193,6 @@
192193
<object-type name="QVideoRendererControl"/>
193194
<object-type name="QVideoWidgetControl"/>
194195
<object-type name="QVideoWindowControl"/>
195-
<enum-type name="QAudio::VolumeScale"/>
196196

197197
<object-type name="QMediaServiceProviderPlugin"/>
198198

0 commit comments

Comments
 (0)