QStringList PrimitiveTypeStringComponents::components() { QStringList result; if (!exp_) return result; switch(exp_->typeValue()) { case OOModel::PrimitiveTypeExpression::PrimitiveTypes::INT : result << "int"; break; case OOModel::PrimitiveTypeExpression::PrimitiveTypes::LONG : result << "long"; break; case OOModel::PrimitiveTypeExpression::PrimitiveTypes::UNSIGNED_INT : result << "uint"; break; case OOModel::PrimitiveTypeExpression::PrimitiveTypes::UNSIGNED_LONG : result << "ulong"; break; case OOModel::PrimitiveTypeExpression::PrimitiveTypes::FLOAT : result << "float"; break; case OOModel::PrimitiveTypeExpression::PrimitiveTypes::DOUBLE : result << "double"; break; case OOModel::PrimitiveTypeExpression::PrimitiveTypes::BOOLEAN : result << "bool"; break; case OOModel::PrimitiveTypeExpression::PrimitiveTypes::CHAR : result << "char"; break; case OOModel::PrimitiveTypeExpression::PrimitiveTypes::VOID : result << "void"; break; default: throw OOInteractionException("Unknown primitive type"); } return result; }
void OOExpressionBuilder::visit(Interaction::Value* val) { if (val->text().isEmpty()) throw OOInteractionException("Trying to create an expression from an empty Value"); bool isInt = false; int value = val->text().toInt(&isInt); // TODO: this should be done in a more extensible way if (isInt) expression = new OOModel::IntegerLiteral(value); else if (val->text() == "true" || val->text() == "false") expression = new OOModel::BooleanLiteral( val->text() == "true" ); else if (val->text() == "null") expression = new OOModel::NullLiteral(); else if (val->text() == "this") expression = new OOModel::ThisExpression(); else if (val->text() == "int") expression = new OOModel::PrimitiveTypeExpression(OOModel::PrimitiveTypeExpression::PrimitiveTypes::INT); else if (val->text() == "long") expression = new OOModel::PrimitiveTypeExpression(OOModel::PrimitiveTypeExpression::PrimitiveTypes::LONG); else if (val->text() == "uint") expression = new OOModel::PrimitiveTypeExpression(OOModel::PrimitiveTypeExpression::PrimitiveTypes::UNSIGNED_INT); else if (val->text() == "ulong") expression = new OOModel::PrimitiveTypeExpression(OOModel::PrimitiveTypeExpression::PrimitiveTypes::UNSIGNED_LONG); else if (val->text() == "float") expression = new OOModel::PrimitiveTypeExpression(OOModel::PrimitiveTypeExpression::PrimitiveTypes::FLOAT); else if (val->text() == "double") expression = new OOModel::PrimitiveTypeExpression(OOModel::PrimitiveTypeExpression::PrimitiveTypes::DOUBLE); else if (val->text() == "bool") expression = new OOModel::PrimitiveTypeExpression(OOModel::PrimitiveTypeExpression::PrimitiveTypes::BOOLEAN); else if (val->text() == "char") expression = new OOModel::PrimitiveTypeExpression(OOModel::PrimitiveTypeExpression::PrimitiveTypes::CHAR); else if (val->text() == "void") expression = new OOModel::PrimitiveTypeExpression(OOModel::PrimitiveTypeExpression::PrimitiveTypes::VOID); else if (val->text().startsWith('"')) expression = new OOModel::StringLiteral(val->text().mid(1, val->text().size()-2)); else expression = new OOModel::ReferenceExpression(val->text()); }