qReal::Id GeneratorForElementIdentifierNode::neededElementId( const QSharedPointer<ElementIdentifier> &elementIdentifierNode , const GeneratorConfigurer &generatorConfigurer , ScopeInfo &scopeInfo) { const auto identifierPart = elementIdentifierNode->identifierPart(); const auto optionalTransitionPart = elementIdentifierNode->optionalTransitionPart(); const auto logicalModelInterface = generatorConfigurer.logicalModelInterface(); qReal::Id elementId; if (identifierPart->is<Identifier>()) { elementId = scopeInfo.variablesTable().currentId(qrtext::as<Identifier>(identifierPart)->name()); } else { elementId = scopeInfo.currentScope().currentId(); } if (optionalTransitionPart) { // we have to return transitionEnd or transitionStart for this element if (optionalTransitionPart->is<TransitionEnd>()) { return logicalModelInterface->to(elementId); } else if (optionalTransitionPart->is<TransitionStart>()) { return logicalModelInterface->from(elementId); } else { // TODO: throw exception qDebug() << "ERROR"; return qReal::Id::rootId(); } } else { return elementId; } }
QVariant GeneratorForComplexIdentifierNode::generatedResult(const QSharedPointer<ComplexIdentifier> &complexIdentifierNode , const GeneratorConfigurer &generatorConfigurer , ScopeInfo &scopeInfo) { const auto identifierPart = qrtext::as<ElementIdentifier>(complexIdentifierNode->identifierPart()); const auto elementId = GeneratorForElementIdentifierNode::neededElementId(identifierPart , generatorConfigurer, scopeInfo); const auto propertyPart = qrtext::as<Identifier>(complexIdentifierNode->propertyPart()); const auto logicalModelInterface = generatorConfigurer.logicalModelInterface(); return logicalModelInterface->propertyByRoleName(elementId, propertyPart->name()); }