void QrsMetamodelLoader::parseLinksOnDiagram(const qrRepo::RepoApi &repo, Metamodel &metamodel, const Id &diagram) { QHash<QPair<ElementType *, ElementType *>, QString> overridingProperties; QSet<ElementType *> elements; const QString diagramName = validateName(repo, diagram); for (const Id &id : repo.children(diagram)) { const Id elementType = id.type(); if ((elementType == metamodelNodeType || elementType == metamodelEdgeType || elementType == metamodelImportType) && repo.isLogicalElement(id)) { const IdList inLinks = repo.incomingLinks(id); for (const Id &inLink : inLinks) { if (!repo.isLogicalElement(inLink)) { continue; } if (inLink.type() == metamodelInheritanceLinkType) { ElementType *from = nullptr; ElementType *to = nullptr; QString overridingProperty; parseGeneralization(repo, metamodel, inLink, diagramName, from, to, overridingProperty); overridingProperties[qMakePair(from, to)] = overridingProperty; elements.insert(from); elements.insert(to); } else if (inLink.type() == metamodelContainmentLinkType) { parseContainer(repo, metamodel, inLink, diagramName); } else if (inLink.type() == metamodelExplosionLinkType) { parseExplosion(repo, metamodel, inLink, diagramName); } } } } resolveInheritance(elements, overridingProperties); }