Skip to content

Commit 82845cc

Browse files
committed
Automatically add enums marked with Q_ENUM to TypeDatabase
If this is for a QObject-derived class, they are ignored automatically, but if it is for a Q_GADGET, they obviously are intended for use with scripting
1 parent f33d3b3 commit 82845cc

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

generator/abstractmetabuilder.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -951,9 +951,17 @@ AbstractMetaEnum *AbstractMetaBuilder::traverseEnum(EnumModelItem enum_item, Abs
951951
}
952952

953953
QString qualified_name = enum_item->qualifiedName().join("::");
954+
QString enum_name = enum_item->name();
955+
956+
bool hasQEnumDeclaration = enumsDeclarations.contains(qualified_name)
957+
|| enumsDeclarations.contains(enum_name);
954958

955959
TypeEntry *type_entry = TypeDatabase::instance()->findType(qualified_name);
956-
QString enum_name = enum_item->name();
960+
if (hasQEnumDeclaration && !type_entry) {
961+
// automatically add enum type declared as Q_ENUM
962+
type_entry = new TypeEntry(qualified_name, TypeEntry::EnumType);
963+
TypeDatabase::instance()->addType(type_entry);
964+
}
957965

958966
QString class_name;
959967
if (m_current_class)
@@ -969,12 +977,11 @@ AbstractMetaEnum *AbstractMetaBuilder::traverseEnum(EnumModelItem enum_item, Abs
969977
ReportHandler::warning(QString("enum '%1' does not have a type entry or is not an enum")
970978
.arg(qualified_name));
971979
m_rejected_enums.insert(qualified_name, NotInTypeSystem);
972-
return 0;
980+
return 0;
973981
}
974982

975983
AbstractMetaEnum *meta_enum = createMetaEnum();
976-
if ( enumsDeclarations.contains(qualified_name)
977-
|| enumsDeclarations.contains(enum_name)) {
984+
if (hasQEnumDeclaration) {
978985
meta_enum->setHasQEnumsDeclaration(true);
979986
}
980987

@@ -1124,8 +1131,8 @@ AbstractMetaClass *AbstractMetaBuilder::traverseClass(ClassModelItem class_item)
11241131

11251132
parseQ_Property(meta_class, class_item->propertyDeclarations());
11261133

1127-
traverseFunctions(model_dynamic_cast<ScopeModelItem>(class_item), meta_class);
11281134
traverseEnums(model_dynamic_cast<ScopeModelItem>(class_item), meta_class, class_item->enumsDeclarations());
1135+
traverseFunctions(model_dynamic_cast<ScopeModelItem>(class_item), meta_class);
11291136
traverseFields(model_dynamic_cast<ScopeModelItem>(class_item), meta_class);
11301137

11311138
// Inner classes

0 commit comments

Comments
 (0)