All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.joynr.generator.cpp.provider.InterfaceRequestInterpreterCppTemplate Maven / Gradle / Ivy

There is a newer version: 0.9.3
Show newest version
package io.joynr.generator.cpp.provider;

import com.google.inject.Inject;
import io.joynr.generator.cpp.util.CppStdTypeUtil;
import io.joynr.generator.cpp.util.DatatypeSystemTransformation;
import io.joynr.generator.cpp.util.JoynrCppGeneratorExtensions;
import io.joynr.generator.cpp.util.QtTypeUtil;
import io.joynr.generator.cpp.util.TemplateBase;
import io.joynr.generator.util.InterfaceTemplate;
import java.util.Set;
import org.eclipse.emf.common.util.EList;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.StringExtensions;
import org.franca.core.franca.FArgument;
import org.franca.core.franca.FAttribute;
import org.franca.core.franca.FInterface;
import org.franca.core.franca.FMethod;
import org.franca.core.franca.FType;
import org.franca.core.franca.FTypeRef;

@SuppressWarnings("all")
public class InterfaceRequestInterpreterCppTemplate implements InterfaceTemplate {
  @Inject
  @Extension
  private TemplateBase _templateBase;
  
  @Inject
  private CppStdTypeUtil cppStdTypeUtil;
  
  @Inject
  private QtTypeUtil qtTypeUtil;
  
  @Inject
  @Extension
  private JoynrCppGeneratorExtensions _joynrCppGeneratorExtensions;
  
  public CharSequence generate(final FInterface serviceInterface) {
    StringConcatenation _builder = new StringConcatenation();
    final String interfaceName = this._joynrCppGeneratorExtensions.joynrName(serviceInterface);
    _builder.newLineIfNotEmpty();
    CharSequence _warning = this._templateBase.warning();
    _builder.append(_warning, "");
    _builder.newLineIfNotEmpty();
    _builder.append("#include ");
    _builder.newLine();
    _builder.newLine();
    _builder.append("#include \"");
    String _packagePathWithJoynrPrefix = this._joynrCppGeneratorExtensions.getPackagePathWithJoynrPrefix(serviceInterface, "/");
    _builder.append(_packagePathWithJoynrPrefix, "");
    _builder.append("/");
    _builder.append(interfaceName, "");
    _builder.append("RequestInterpreter.h\"");
    _builder.newLineIfNotEmpty();
    _builder.newLine();
    _builder.append("#include \"joynr/Request.h\"");
    _builder.newLine();
    _builder.append("#include \"");
    String _packagePathWithJoynrPrefix_1 = this._joynrCppGeneratorExtensions.getPackagePathWithJoynrPrefix(serviceInterface, "/");
    _builder.append(_packagePathWithJoynrPrefix_1, "");
    _builder.append("/");
    _builder.append(interfaceName, "");
    _builder.append("RequestCaller.h\"");
    _builder.newLineIfNotEmpty();
    _builder.append("#include \"joynr/DeclareMetatypeUtil.h\"");
    _builder.newLine();
    _builder.append("#include \"joynr/Util.h\"");
    _builder.newLine();
    _builder.append("#include \"joynr/TypeUtil.h\"");
    _builder.newLine();
    _builder.append("#include \"joynr/RequestStatus.h\"");
    _builder.newLine();
    _builder.append("#include ");
    _builder.newLine();
    _builder.newLine();
    {
      Set _requiredIncludesFor = this.qtTypeUtil.getRequiredIncludesFor(serviceInterface);
      for(final String parameterType : _requiredIncludesFor) {
        _builder.append("#include ");
        _builder.append(parameterType, "");
        _builder.newLineIfNotEmpty();
      }
    }
    _builder.newLine();
    String _namespaceStarter = this._joynrCppGeneratorExtensions.getNamespaceStarter(serviceInterface);
    _builder.append(_namespaceStarter, "");
    _builder.newLineIfNotEmpty();
    _builder.newLine();
    _builder.append("joynr::joynr_logging::Logger* ");
    _builder.append(interfaceName, "");
    _builder.append("RequestInterpreter::logger = joynr::joynr_logging::Logging::getInstance()->getLogger(\"SDMO\", \"");
    _builder.append(interfaceName, "");
    _builder.append("RequestInterpreter\");");
    _builder.newLineIfNotEmpty();
    _builder.newLine();
    _builder.append(interfaceName, "");
    _builder.append("RequestInterpreter::");
    _builder.append(interfaceName, "");
    _builder.append("RequestInterpreter()");
    _builder.newLineIfNotEmpty();
    _builder.append("{");
    _builder.newLine();
    {
      Iterable _allComplexAndEnumTypes = this._joynrCppGeneratorExtensions.getAllComplexAndEnumTypes(serviceInterface);
      for(final Object datatype : _allComplexAndEnumTypes) {
        {
          if ((datatype instanceof FType)) {
            _builder.append("\t");
            String _typeName = this.qtTypeUtil.getTypeName(((FType)datatype));
            String _registerMetatypeStatement = this.qtTypeUtil.registerMetatypeStatement(_typeName);
            _builder.append(_registerMetatypeStatement, "\t");
            _builder.newLineIfNotEmpty();
          }
        }
      }
    }
    _builder.append("}");
    _builder.newLine();
    _builder.newLine();
    String _firstLower = StringExtensions.toFirstLower(interfaceName);
    final String requestCallerName = (_firstLower + "RequestCallerVar");
    _builder.newLineIfNotEmpty();
    final EList attributes = this._joynrCppGeneratorExtensions.getAttributes(serviceInterface);
    _builder.newLineIfNotEmpty();
    final EList methods = this._joynrCppGeneratorExtensions.getMethods(serviceInterface);
    _builder.newLineIfNotEmpty();
    _builder.append("void ");
    _builder.append(interfaceName, "");
    _builder.append("RequestInterpreter::execute(");
    _builder.newLineIfNotEmpty();
    _builder.append("\t\t");
    _builder.append("QSharedPointer requestCaller,");
    _builder.newLine();
    _builder.append("\t\t");
    _builder.append("const QString& methodName,");
    _builder.newLine();
    _builder.append("\t\t");
    _builder.append("const QList& paramValues,");
    _builder.newLine();
    _builder.append("\t\t");
    _builder.append("const QList& paramTypes,");
    _builder.newLine();
    _builder.append("\t\t");
    _builder.append("std::function&)> callbackFct");
    _builder.newLine();
    _builder.append(") {");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("Q_UNUSED(paramValues);//if all methods of the interface are empty, the paramValues would not be used and give a warning.");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("Q_UNUSED(paramTypes);//if all methods of the interface are empty, the paramTypes would not be used and give a warning.");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("// cast generic RequestCaller to ");
    _builder.append(interfaceName, "\t");
    _builder.append("Requestcaller");
    _builder.newLineIfNotEmpty();
    _builder.append("\t");
    _builder.append("QSharedPointer<");
    _builder.append(interfaceName, "\t");
    _builder.append("RequestCaller> ");
    _builder.append(requestCallerName, "\t");
    _builder.append(" =");
    _builder.newLineIfNotEmpty();
    _builder.append("\t\t\t");
    _builder.append("requestCaller.dynamicCast<");
    _builder.append(interfaceName, "\t\t\t");
    _builder.append("RequestCaller>();");
    _builder.newLineIfNotEmpty();
    _builder.newLine();
    _builder.append("\t");
    _builder.append("// execute operation");
    _builder.newLine();
    {
      boolean _isEmpty = attributes.isEmpty();
      boolean _not = (!_isEmpty);
      if (_not) {
        {
          for(final FAttribute attribute : attributes) {
            _builder.append("\t");
            _builder.append("\t");
            final String attributeName = this._joynrCppGeneratorExtensions.joynrName(attribute);
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("\t");
            final String returnType = this.cppStdTypeUtil.getTypeName(attribute);
            _builder.newLineIfNotEmpty();
            {
              boolean _isReadable = this._joynrCppGeneratorExtensions.isReadable(attribute);
              if (_isReadable) {
                _builder.append("\t");
                _builder.append("if (methodName == \"get");
                String _firstUpper = StringExtensions.toFirstUpper(attributeName);
                _builder.append(_firstUpper, "\t");
                _builder.append("\"){");
                _builder.newLineIfNotEmpty();
                _builder.append("\t");
                _builder.append("\t");
                _builder.append("std::function onSuccess =");
                _builder.newLineIfNotEmpty();
                _builder.append("\t");
                _builder.append("\t\t\t");
                _builder.append("[callbackFct] (");
                _builder.append(returnType, "\t\t\t\t");
                _builder.append(" ");
                _builder.append(attributeName, "\t\t\t\t");
                _builder.append(") {");
                _builder.newLineIfNotEmpty();
                _builder.append("\t");
                _builder.append("\t\t\t\t");
                final String convertedAttribute = this.qtTypeUtil.fromStdTypeToQTType(attribute, attributeName, true);
                _builder.newLineIfNotEmpty();
                _builder.append("\t");
                _builder.append("\t\t\t\t");
                _builder.append("QVariant singleOutParam(");
                {
                  boolean _isArray = this._joynrCppGeneratorExtensions.isArray(attribute);
                  if (_isArray) {
                    _builder.append("joynr::Util::convertListToVariantList<");
                    FTypeRef _type = attribute.getType();
                    String _typeName_1 = this.qtTypeUtil.getTypeName(_type);
                    _builder.append(_typeName_1, "\t\t\t\t\t");
                    _builder.append(">(");
                    _builder.append(convertedAttribute, "\t\t\t\t\t");
                    _builder.append(")");
                  } else {
                    _builder.append("QVariant::fromValue(");
                    _builder.append(convertedAttribute, "\t\t\t\t\t");
                    _builder.append(")");
                  }
                }
                _builder.append(");");
                _builder.newLineIfNotEmpty();
                _builder.append("\t");
                _builder.append("\t\t\t\t");
                _builder.append("QList outParams;");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t\t\t\t");
                _builder.append("outParams.insert(0, singleOutParam);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t\t\t\t");
                _builder.append("callbackFct(outParams);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t\t\t");
                _builder.append("};");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t");
                _builder.append(requestCallerName, "\t\t");
                _builder.append("->get");
                String _firstUpper_1 = StringExtensions.toFirstUpper(attributeName);
                _builder.append(_firstUpper_1, "\t\t");
                _builder.append("(onSuccess);");
                _builder.newLineIfNotEmpty();
                _builder.append("\t");
                _builder.append("\t");
                _builder.append("return;");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("}");
                _builder.newLine();
              }
            }
            {
              boolean _isWritable = this._joynrCppGeneratorExtensions.isWritable(attribute);
              if (_isWritable) {
                _builder.append("\t");
                _builder.append("if (methodName == \"set");
                String _firstUpper_2 = StringExtensions.toFirstUpper(attributeName);
                _builder.append(_firstUpper_2, "\t");
                _builder.append("\" && paramTypes.size() == 1){");
                _builder.newLineIfNotEmpty();
                _builder.append("\t");
                _builder.append("\t");
                _builder.append("QVariant ");
                _builder.append(attributeName, "\t\t");
                _builder.append("QVar(paramValues.at(0));");
                _builder.newLineIfNotEmpty();
                {
                  FTypeRef _type_1 = attribute.getType();
                  boolean _isEnum = this._joynrCppGeneratorExtensions.isEnum(_type_1);
                  if (_isEnum) {
                    _builder.append("\t");
                    _builder.append("\t");
                    String _typeName_2 = this.qtTypeUtil.getTypeName(attribute);
                    _builder.append(_typeName_2, "\t\t");
                    _builder.append(" typedInput");
                    String _firstUpper_3 = StringExtensions.toFirstUpper(attributeName);
                    _builder.append(_firstUpper_3, "\t\t");
                    _builder.append(" = ");
                    String _joynrGenerationPrefix = this._joynrCppGeneratorExtensions.getJoynrGenerationPrefix();
                    _builder.append(_joynrGenerationPrefix, "\t\t");
                    _builder.append("::Util::convertVariantToEnum<");
                    FTypeRef _type_2 = attribute.getType();
                    String _enumContainer = this._joynrCppGeneratorExtensions.getEnumContainer(_type_2);
                    _builder.append(_enumContainer, "\t\t");
                    _builder.append(">(");
                    _builder.append(attributeName, "\t\t");
                    _builder.append("QVar);");
                    _builder.newLineIfNotEmpty();
                  } else {
                    boolean _and = false;
                    FTypeRef _type_3 = attribute.getType();
                    boolean _isEnum_1 = this._joynrCppGeneratorExtensions.isEnum(_type_3);
                    if (!_isEnum_1) {
                      _and = false;
                    } else {
                      boolean _isArray_1 = this._joynrCppGeneratorExtensions.isArray(attribute);
                      _and = _isArray_1;
                    }
                    if (_and) {
                      _builder.append("\t");
                      _builder.append("\t");
                      String _joynrGenerationPrefix_1 = this._joynrCppGeneratorExtensions.getJoynrGenerationPrefix();
                      String _plus = (_joynrGenerationPrefix_1 + "::Util::convertVariantListToEnumList<");
                      FTypeRef _type_4 = attribute.getType();
                      String _enumContainer_1 = this._joynrCppGeneratorExtensions.getEnumContainer(_type_4);
                      String _plus_1 = (_plus + _enumContainer_1);
                      String _plus_2 = (_plus_1 + ">(");
                      String _plus_3 = (_plus_2 + attributeName);
                      final String attributeRef = (_plus_3 + "QVar.toList())");
                      _builder.newLineIfNotEmpty();
                      _builder.append("\t");
                      _builder.append("\t");
                      String _typeName_3 = this.qtTypeUtil.getTypeName(attribute);
                      _builder.append(_typeName_3, "\t\t");
                      _builder.append(" typedInput");
                      String _firstUpper_4 = StringExtensions.toFirstUpper(attributeName);
                      _builder.append(_firstUpper_4, "\t\t");
                      _builder.append(" =");
                      _builder.newLineIfNotEmpty();
                      _builder.append("\t");
                      _builder.append("\t");
                      _builder.append("\t");
                      _builder.append(attributeRef, "\t\t\t");
                      _builder.append(";");
                      _builder.newLineIfNotEmpty();
                    } else {
                      boolean _isArray_2 = this._joynrCppGeneratorExtensions.isArray(attribute);
                      if (_isArray_2) {
                        _builder.append("\t");
                        _builder.append("\t");
                        String _joynrGenerationPrefix_2 = this._joynrCppGeneratorExtensions.getJoynrGenerationPrefix();
                        String _plus_4 = (_joynrGenerationPrefix_2 + "::Util::convertVariantListToList<");
                        FTypeRef _type_5 = attribute.getType();
                        String _typeName_4 = this.qtTypeUtil.getTypeName(_type_5);
                        String _plus_5 = (_plus_4 + _typeName_4);
                        final String attributeRef_1 = (_plus_5 + ">(paramQList)");
                        _builder.newLineIfNotEmpty();
                        _builder.append("\t");
                        _builder.append("\t");
                        _builder.append("assert(");
                        _builder.append(attributeName, "\t\t");
                        _builder.append("QVar.canConvert >());");
                        _builder.newLineIfNotEmpty();
                        _builder.append("\t");
                        _builder.append("\t");
                        _builder.append("QList paramQList = ");
                        _builder.append(attributeName, "\t\t");
                        _builder.append("QVar.value >();");
                        _builder.newLineIfNotEmpty();
                        _builder.append("\t");
                        _builder.append("\t");
                        String _typeName_5 = this.qtTypeUtil.getTypeName(attribute);
                        _builder.append(_typeName_5, "\t\t");
                        _builder.append(" typedInput");
                        String _firstUpper_5 = StringExtensions.toFirstUpper(attributeName);
                        _builder.append(_firstUpper_5, "\t\t");
                        _builder.append(" = ");
                        _builder.newLineIfNotEmpty();
                        _builder.append("\t");
                        _builder.append("\t");
                        _builder.append("\t\t");
                        _builder.append(attributeRef_1, "\t\t\t\t");
                        _builder.append(";");
                        _builder.newLineIfNotEmpty();
                      } else {
                        _builder.append("\t");
                        _builder.append("\t");
                        String _typeName_6 = this.qtTypeUtil.getTypeName(attribute);
                        String _plus_6 = ((attributeName + "QVar.value<") + _typeName_6);
                        final String attributeRef_2 = (_plus_6 + ">()");
                        _builder.newLineIfNotEmpty();
                        _builder.append("\t");
                        _builder.append("\t");
                        _builder.append("assert(");
                        _builder.append(attributeName, "\t\t");
                        _builder.append("QVar.canConvert<");
                        String _typeName_7 = this.qtTypeUtil.getTypeName(attribute);
                        _builder.append(_typeName_7, "\t\t");
                        _builder.append(">());");
                        _builder.newLineIfNotEmpty();
                        _builder.append("\t");
                        _builder.append("\t");
                        String _typeName_8 = this.qtTypeUtil.getTypeName(attribute);
                        _builder.append(_typeName_8, "\t\t");
                        _builder.append(" typedInput");
                        String _firstUpper_6 = StringExtensions.toFirstUpper(attributeName);
                        _builder.append(_firstUpper_6, "\t\t");
                        _builder.append(" =");
                        _builder.newLineIfNotEmpty();
                        _builder.append("\t");
                        _builder.append("\t");
                        _builder.append("\t\t");
                        _builder.append(attributeRef_2, "\t\t\t\t");
                        _builder.append(";");
                        _builder.newLineIfNotEmpty();
                      }
                    }
                  }
                }
                _builder.append("\t");
                _builder.append("\t");
                _builder.append("std::function onSuccess =");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t\t\t");
                _builder.append("[callbackFct] () {");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t\t\t\t");
                _builder.append("QList outParams;");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t\t\t\t");
                _builder.append("callbackFct(outParams);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t\t\t");
                _builder.append("};");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t");
                _builder.append(requestCallerName, "\t\t");
                _builder.append("->set");
                String _firstUpper_7 = StringExtensions.toFirstUpper(attributeName);
                _builder.append(_firstUpper_7, "\t\t");
                _builder.append("(");
                StringConcatenation _builder_1 = new StringConcatenation();
                _builder_1.append("typedInput");
                String _firstUpper_8 = StringExtensions.toFirstUpper(attributeName);
                _builder_1.append(_firstUpper_8, "");
                String _fromQTTypeToStdType = this.qtTypeUtil.fromQTTypeToStdType(attribute, _builder_1.toString());
                _builder.append(_fromQTTypeToStdType, "\t\t");
                _builder.append(", onSuccess);");
                _builder.newLineIfNotEmpty();
                _builder.append("\t");
                _builder.append("\t");
                _builder.append("return;");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("}");
                _builder.newLine();
              }
            }
          }
        }
      }
    }
    {
      int _size = methods.size();
      boolean _greaterThan = (_size > 0);
      if (_greaterThan) {
        {
          EList _methods = this._joynrCppGeneratorExtensions.getMethods(serviceInterface);
          for(final FMethod method : _methods) {
            _builder.append("\t");
            final String inputUntypedParamList = this.qtTypeUtil.getCommaSeperatedUntypedInputParameterList(method, DatatypeSystemTransformation.FROM_QT_TO_STANDARD);
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            final String methodName = this._joynrCppGeneratorExtensions.joynrName(method);
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            final Iterable inputParams = this._joynrCppGeneratorExtensions.getInputParameters(method);
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            int iterator = (-1);
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("if (methodName == \"");
            _builder.append(methodName, "\t");
            _builder.append("\" && paramTypes.size() == ");
            int _size_1 = IterableExtensions.size(inputParams);
            _builder.append(_size_1, "\t");
            _builder.newLineIfNotEmpty();
            {
              for(final FArgument input : inputParams) {
                _builder.append("\t");
                _builder.append("\t");
                _builder.append("&& paramTypes.at(");
                _builder.append(iterator = (iterator + 1), "\t\t");
                _builder.append(") == \"");
                String _joynrTypeName = this._joynrCppGeneratorExtensions.getJoynrTypeName(input);
                _builder.append(_joynrTypeName, "\t\t");
                _builder.append("\"");
                _builder.newLineIfNotEmpty();
              }
            }
            _builder.append("\t");
            _builder.append(") {");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("\t");
            final String outputTypedParamList = this.cppStdTypeUtil.getCommaSeperatedTypedConstOutputParameterList(method);
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("\t");
            _builder.append("std::function onSuccess =");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("\t\t\t");
            _builder.append("[callbackFct](");
            _builder.append(outputTypedParamList, "\t\t\t\t");
            _builder.append("){");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("\t\t\t\t");
            _builder.append("QList outParams;");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("\t\t\t\t");
            int index = 0;
            _builder.newLineIfNotEmpty();
            {
              Iterable _outputParameters = this._joynrCppGeneratorExtensions.getOutputParameters(method);
              for(final FArgument param : _outputParameters) {
                _builder.append("\t");
                _builder.append("\t\t\t\t");
                String _joynrName = this._joynrCppGeneratorExtensions.joynrName(param);
                final String convertedParameter = this.qtTypeUtil.fromStdTypeToQTType(param, _joynrName, true);
                _builder.newLineIfNotEmpty();
                _builder.append("\t");
                _builder.append("\t\t\t\t");
                _builder.append("outParams.insert(");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t\t\t\t");
                _builder.append("\t\t");
                int _plusPlus = index++;
                _builder.append(_plusPlus, "\t\t\t\t\t\t\t");
                _builder.append(",");
                _builder.newLineIfNotEmpty();
                {
                  boolean _isArray_3 = this._joynrCppGeneratorExtensions.isArray(param);
                  if (_isArray_3) {
                    _builder.append("\t");
                    _builder.append("\t\t\t\t");
                    _builder.append("\t\t");
                    _builder.append("joynr::Util::convertListToVariantList<");
                    FTypeRef _type_6 = param.getType();
                    String _typeName_9 = this.qtTypeUtil.getTypeName(_type_6);
                    _builder.append(_typeName_9, "\t\t\t\t\t\t\t");
                    _builder.append(">(");
                    _builder.append(convertedParameter, "\t\t\t\t\t\t\t");
                    _builder.append(")");
                    _builder.newLineIfNotEmpty();
                  } else {
                    _builder.append("\t");
                    _builder.append("\t\t\t\t");
                    _builder.append("\t\t");
                    _builder.append("QVariant::fromValue(");
                    _builder.append(convertedParameter, "\t\t\t\t\t\t\t");
                    _builder.append(")");
                    _builder.newLineIfNotEmpty();
                  }
                }
                _builder.append("\t");
                _builder.append("\t\t\t\t");
                _builder.append(");");
                _builder.newLine();
              }
            }
            _builder.append("\t");
            _builder.append("\t\t\t\t");
            _builder.append("callbackFct(outParams);");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("\t\t\t");
            _builder.append("};");
            _builder.newLine();
            _builder.newLine();
            _builder.append("\t");
            _builder.append("\t");
            int iterator2 = (-1);
            _builder.newLineIfNotEmpty();
            {
              for(final FArgument input_1 : inputParams) {
                _builder.append("\t");
                _builder.append("\t");
                final String inputName = this._joynrCppGeneratorExtensions.joynrName(input_1);
                _builder.newLineIfNotEmpty();
                _builder.append("\t");
                _builder.append("\t");
                _builder.append("QVariant ");
                _builder.append(inputName, "\t\t");
                _builder.append("QVar(paramValues.at(");
                _builder.append(iterator2 = (iterator2 + 1), "\t\t");
                _builder.append("));");
                _builder.newLineIfNotEmpty();
                {
                  boolean _and_1 = false;
                  FTypeRef _type_7 = input_1.getType();
                  boolean _isEnum_2 = this._joynrCppGeneratorExtensions.isEnum(_type_7);
                  if (!_isEnum_2) {
                    _and_1 = false;
                  } else {
                    boolean _isArray_4 = this._joynrCppGeneratorExtensions.isArray(input_1);
                    _and_1 = _isArray_4;
                  }
                  if (_and_1) {
                    _builder.append("\t");
                    _builder.append("\t");
                    _builder.append("//isEnumArray");
                    _builder.newLine();
                    _builder.append("\t");
                    _builder.append("\t");
                    String _typeName_10 = this.qtTypeUtil.getTypeName(input_1);
                    _builder.append(_typeName_10, "\t\t");
                    _builder.append(" ");
                    _builder.append(inputName, "\t\t");
                    _builder.append(" =");
                    _builder.newLineIfNotEmpty();
                    _builder.append("\t");
                    _builder.append("\t");
                    _builder.append("\t");
                    String _joynrGenerationPrefix_3 = this._joynrCppGeneratorExtensions.getJoynrGenerationPrefix();
                    _builder.append(_joynrGenerationPrefix_3, "\t\t\t");
                    _builder.append("::Util::convertVariantListToEnumList<");
                    FTypeRef _type_8 = input_1.getType();
                    String _enumContainer_2 = this._joynrCppGeneratorExtensions.getEnumContainer(_type_8);
                    _builder.append(_enumContainer_2, "\t\t\t");
                    _builder.append("> (");
                    _builder.append(inputName, "\t\t\t");
                    _builder.append("QVar.toList());");
                    _builder.newLineIfNotEmpty();
                  } else {
                    FTypeRef _type_9 = input_1.getType();
                    boolean _isEnum_3 = this._joynrCppGeneratorExtensions.isEnum(_type_9);
                    if (_isEnum_3) {
                      _builder.append("\t");
                      _builder.append("\t");
                      _builder.append("//isEnum");
                      _builder.newLine();
                      _builder.append("\t");
                      _builder.append("\t");
                      String _typeName_11 = this.qtTypeUtil.getTypeName(input_1);
                      _builder.append(_typeName_11, "\t\t");
                      _builder.append(" ");
                      _builder.append(inputName, "\t\t");
                      _builder.append(" = ");
                      String _joynrGenerationPrefix_4 = this._joynrCppGeneratorExtensions.getJoynrGenerationPrefix();
                      _builder.append(_joynrGenerationPrefix_4, "\t\t");
                      _builder.append("::Util::convertVariantToEnum<");
                      FTypeRef _type_10 = input_1.getType();
                      String _enumContainer_3 = this._joynrCppGeneratorExtensions.getEnumContainer(_type_10);
                      _builder.append(_enumContainer_3, "\t\t");
                      _builder.append(">(");
                      _builder.append(inputName, "\t\t");
                      _builder.append("QVar);");
                      _builder.newLineIfNotEmpty();
                    } else {
                      boolean _isArray_5 = this._joynrCppGeneratorExtensions.isArray(input_1);
                      if (_isArray_5) {
                        _builder.append("\t");
                        _builder.append("\t");
                        _builder.append("//isArray");
                        _builder.newLine();
                        _builder.append("\t");
                        _builder.append("\t");
                        _builder.append("assert(");
                        _builder.append(inputName, "\t\t");
                        _builder.append("QVar.canConvert >());");
                        _builder.newLineIfNotEmpty();
                        _builder.append("\t");
                        _builder.append("\t");
                        _builder.append("QList ");
                        _builder.append(inputName, "\t\t");
                        _builder.append("QVarList = ");
                        _builder.append(inputName, "\t\t");
                        _builder.append("QVar.value >();");
                        _builder.newLineIfNotEmpty();
                        _builder.append("\t");
                        _builder.append("\t");
                        _builder.append("QList<");
                        FTypeRef _type_11 = input_1.getType();
                        String _typeName_12 = this.qtTypeUtil.getTypeName(_type_11);
                        _builder.append(_typeName_12, "\t\t");
                        _builder.append("> ");
                        _builder.append(inputName, "\t\t");
                        _builder.append(" = ");
                        String _joynrGenerationPrefix_5 = this._joynrCppGeneratorExtensions.getJoynrGenerationPrefix();
                        _builder.append(_joynrGenerationPrefix_5, "\t\t");
                        _builder.append("::Util::convertVariantListToList<");
                        FTypeRef _type_12 = input_1.getType();
                        String _typeName_13 = this.qtTypeUtil.getTypeName(_type_12);
                        _builder.append(_typeName_13, "\t\t");
                        _builder.append(">(");
                        _builder.append(inputName, "\t\t");
                        _builder.append("QVarList);");
                        _builder.newLineIfNotEmpty();
                      } else {
                        _builder.append("\t");
                        _builder.append("\t");
                        _builder.append("//");
                        String _typeName_14 = this.qtTypeUtil.getTypeName(input_1);
                        _builder.append(_typeName_14, "\t\t");
                        _builder.newLineIfNotEmpty();
                        _builder.append("\t");
                        _builder.append("\t");
                        _builder.append("assert(");
                        _builder.append(inputName, "\t\t");
                        _builder.append("QVar.canConvert<");
                        String _typeName_15 = this.qtTypeUtil.getTypeName(input_1);
                        _builder.append(_typeName_15, "\t\t");
                        _builder.append(">());");
                        _builder.newLineIfNotEmpty();
                        _builder.append("\t");
                        _builder.append("\t");
                        String _typeName_16 = this.qtTypeUtil.getTypeName(input_1);
                        _builder.append(_typeName_16, "\t\t");
                        _builder.append(" ");
                        _builder.append(inputName, "\t\t");
                        _builder.append(" = ");
                        _builder.append(inputName, "\t\t");
                        _builder.append("QVar.value<");
                        String _typeName_17 = this.qtTypeUtil.getTypeName(input_1);
                        _builder.append(_typeName_17, "\t\t");
                        _builder.append(">();");
                        _builder.newLineIfNotEmpty();
                      }
                    }
                  }
                }
              }
            }
            _builder.newLine();
            _builder.append("\t");
            _builder.append("\t");
            _builder.append(requestCallerName, "\t\t");
            _builder.append("->");
            _builder.append(methodName, "\t\t");
            _builder.append("(");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("\t\t\t");
            {
              Iterable _inputParameters = this._joynrCppGeneratorExtensions.getInputParameters(method);
              boolean _isEmpty_1 = IterableExtensions.isEmpty(_inputParameters);
              boolean _not_1 = (!_isEmpty_1);
              if (_not_1) {
                _builder.append(inputUntypedParamList, "\t\t\t\t");
                _builder.append(",");
              }
            }
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("\t\t\t");
            _builder.append("onSuccess);");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("\t");
            _builder.append("return;");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("}");
            _builder.newLine();
          }
        }
      }
    }
    _builder.newLine();
    _builder.append("\t");
    _builder.append("LOG_FATAL(logger, \"unknown method name for interface ");
    _builder.append(interfaceName, "\t");
    _builder.append(": \" + methodName);");
    _builder.newLineIfNotEmpty();
    _builder.append("\t");
    _builder.append("assert(false);");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("QList outParams;");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("callbackFct(outParams);");
    _builder.newLine();
    _builder.append("}");
    _builder.newLine();
    _builder.newLine();
    String _namespaceEnder = this._joynrCppGeneratorExtensions.getNamespaceEnder(serviceInterface);
    _builder.append(_namespaceEnder, "");
    _builder.newLineIfNotEmpty();
    return _builder;
  }
}