void TypeDescriptionReader::readComponent(UiObjectDefinition *ast) { FakeMetaObject::Ptr fmo(new FakeMetaObject); for (UiObjectMemberList *it = ast->initializer->members; it; it = it->next) { UiObjectMember *member = it->member; UiObjectDefinition *component = dynamic_cast<UiObjectDefinition *>(member); UiScriptBinding *script = dynamic_cast<UiScriptBinding *>(member); if (component) { QString name = toString(component->qualifiedTypeNameId); if (name == "Property") { readProperty(component, fmo); } else if (name == "Method" || name == "Signal") { readSignalOrMethod(component, name == "Method", fmo); } else if (name == "Enum") { readEnum(component, fmo); } else { addWarning(component->firstSourceLocation(), "Expected only Property, Method, Signal and Enum object definitions"); } } else if (script) { QString name = toString(script->qualifiedId); if (name == "name") { fmo->setClassName(readStringBinding(script)); } else if (name == "prototype") { fmo->setSuperclassName(readStringBinding(script)); } else if (name == "defaultProperty") { fmo->setDefaultPropertyName(readStringBinding(script)); } else if (name == "exports") { readExports(script, fmo); } else if (name == "exportMetaObjectRevisions") { readMetaObjectRevisions(script, fmo); } else if (name == "attachedType") { fmo->setAttachedTypeName(readStringBinding(script)); } else { addWarning(script->firstSourceLocation(), "Expected only name, prototype, defaultProperty, attachedType, exports" "and exportMetaObjectRevisions script bindings"); } } else { addWarning(member->firstSourceLocation(), "Expected only script bindings and object definitions"); } } if (fmo->className().isEmpty()) { addError(ast->firstSourceLocation(), "Component definition is missing a name binding"); return; } // ### add implicit export into the package of c++ types fmo->addExport(fmo->className(), QmlJS::CppQmlTypes::cppPackage, ComponentVersion()); _objects->insert(fmo->className(), fmo); }
void TypeDescriptionReader::readSignalOrMethod(UiObjectDefinition *ast, bool isMethod, FakeMetaObject::Ptr fmo) { FakeMetaMethod fmm; // ### confusion between Method and Slot. Method should be removed. if (isMethod) fmm.setMethodType(FakeMetaMethod::Slot); else fmm.setMethodType(FakeMetaMethod::Signal); for (UiObjectMemberList *it = ast->initializer->members; it; it = it->next) { UiObjectMember *member = it->member; UiObjectDefinition *component = dynamic_cast<UiObjectDefinition *>(member); UiScriptBinding *script = dynamic_cast<UiScriptBinding *>(member); if (component) { QString name = toString(component->qualifiedTypeNameId); if (name == "Parameter") { readParameter(component, &fmm); } else { addWarning(component->firstSourceLocation(), "Expected only Parameter object definitions"); } } else if (script) { QString name = toString(script->qualifiedId); if (name == "name") { fmm.setMethodName(readStringBinding(script)); } else if (name == "type") { fmm.setReturnType(readStringBinding(script)); } else if (name == "revision") { fmm.setRevision(readIntBinding(script)); } else { addWarning(script->firstSourceLocation(), "Expected only name and type script bindings"); } } else { addWarning(member->firstSourceLocation(), "Expected only script bindings and object definitions"); } } if (fmm.methodName().isEmpty()) { addError(ast->firstSourceLocation(), "Method or Signal is missing a name script binding"); return; } fmo->addMethod(fmm); }
void TypeDescriptionReader::readComponent(UiObjectDefinition *ast) { FakeMetaObject::Ptr fmo(new FakeMetaObject); for (UiObjectMemberList *it = ast->initializer->members; it; it = it->next) { UiObjectMember *member = it->member; UiObjectDefinition *component = dynamic_cast<UiObjectDefinition *>(member); UiScriptBinding *script = dynamic_cast<UiScriptBinding *>(member); if (component) { QString name = toString(component->qualifiedTypeNameId); if (name == QLatin1String("Property")) readProperty(component, fmo); else if (name == QLatin1String("Method") || name == QLatin1String("Signal")) readSignalOrMethod(component, name == QLatin1String("Method"), fmo); else if (name == QLatin1String("Enum")) readEnum(component, fmo); else addWarning(component->firstSourceLocation(), tr("Expected only Property, Method, Signal and Enum object definitions, not \"%1\".") .arg(name)); } else if (script) { QString name = toString(script->qualifiedId); if (name == QLatin1String("name")) { fmo->setClassName(readStringBinding(script)); } else if (name == QLatin1String("prototype")) { fmo->setSuperclassName(readStringBinding(script)); } else if (name == QLatin1String("defaultProperty")) { fmo->setDefaultPropertyName(readStringBinding(script)); } else if (name == QLatin1String("exports")) { readExports(script, fmo); } else if (name == QLatin1String("exportMetaObjectRevisions")) { readMetaObjectRevisions(script, fmo); } else if (name == QLatin1String("attachedType")) { fmo->setAttachedTypeName(readStringBinding(script)); } else if (name == QLatin1String("isSingleton")) { fmo->setIsSingleton(readBoolBinding(script)); } else if (name == QLatin1String("isCreatable")) { fmo->setIsCreatable(readBoolBinding(script)); } else if (name == QLatin1String("isComposite")) { fmo->setIsComposite(readBoolBinding(script)); } else { addWarning(script->firstSourceLocation(), tr("Expected only name, prototype, defaultProperty, attachedType, exports " "isSingleton, isCreatable, isComposite and exportMetaObjectRevisions " "script bindings, not \"%1\".").arg(name)); } } else { addWarning(member->firstSourceLocation(), tr("Expected only script bindings and object definitions.")); } } if (fmo->className().isEmpty()) { addError(ast->firstSourceLocation(), tr("Component definition is missing a name binding.")); return; } // ### add implicit export into the package of c++ types fmo->addExport(fmo->className(), QmlJS::CppQmlTypes::cppPackage, ComponentVersion()); fmo->updateFingerprint(); _objects->insert(fmo->className(), fmo); }