public static int getJavaType()

in dbus-java/src/main/java/org/freedesktop/dbus/Marshalling.java [324:421]


    public static int getJavaType(String _dbusType, List<Type> _resultValue, int _limit) throws DBusException {
        if (null == _dbusType || "".equals(_dbusType) || 0 == _limit) {
            return 0;
        }

        try {
            int idx = 0;
            for (; idx < _dbusType.length() && (-1 == _limit || _limit > _resultValue.size()); idx++) {
                switch (_dbusType.charAt(idx)) {
                case Message.ArgumentType.STRUCT1:
                    int structIdx = idx + 1;
                    for (int structLen = 1; structLen > 0; structIdx++) {
                        if (Message.ArgumentType.STRUCT2 == _dbusType.charAt(structIdx)) {
                            structLen--;
                        } else if (Message.ArgumentType.STRUCT1 == _dbusType.charAt(structIdx)) {
                            structLen++;
                        }
                    }

                    List<Type> contained = new ArrayList<>();
                    int javaType = getJavaType(_dbusType.substring(idx + 1, structIdx - 1), contained, -1);
                    _resultValue.add(new DBusStructType(contained.toArray(new Type[0])));
                    idx = structIdx - 1; //-1 because j already points to the next signature char
                    break;
                case Message.ArgumentType.ARRAY:
                    if (Message.ArgumentType.DICT_ENTRY1 == _dbusType.charAt(idx + 1)) {
                        contained = new ArrayList<>();
                        javaType = getJavaType(_dbusType.substring(idx + 2), contained, 2);
                        _resultValue.add(new DBusMapType(contained.get(0), contained.get(1)));
                        idx += (javaType + 2);
                    } else {
                        contained = new ArrayList<>();
                        javaType = getJavaType(_dbusType.substring(idx + 1), contained, 1);
                        _resultValue.add(new DBusListType(contained.get(0)));
                        idx += javaType;
                    }
                    break;
                case Message.ArgumentType.VARIANT:
                    _resultValue.add(Variant.class);
                    break;
                case Message.ArgumentType.BOOLEAN:
                    _resultValue.add(Boolean.class);
                    break;
                case Message.ArgumentType.INT16:
                    _resultValue.add(Short.class);
                    break;
                case Message.ArgumentType.BYTE:
                    _resultValue.add(Byte.class);
                    break;
                case Message.ArgumentType.OBJECT_PATH:
                    _resultValue.add(DBusPath.class);
                    break;
                case Message.ArgumentType.UINT16:
                    _resultValue.add(UInt16.class);
                    break;
                case Message.ArgumentType.INT32:
                    _resultValue.add(Integer.class);
                    break;
                case Message.ArgumentType.UINT32:
                    _resultValue.add(UInt32.class);
                    break;
                case Message.ArgumentType.INT64:
                    _resultValue.add(Long.class);
                    break;
                case Message.ArgumentType.UINT64:
                    _resultValue.add(UInt64.class);
                    break;
                case Message.ArgumentType.DOUBLE:
                    _resultValue.add(Double.class);
                    break;
                case Message.ArgumentType.FLOAT:
                    _resultValue.add(Float.class);
                    break;
                case Message.ArgumentType.STRING:
                    _resultValue.add(CharSequence.class);
                    break;
                case Message.ArgumentType.FILEDESCRIPTOR:
                    _resultValue.add(FileDescriptor.class);
                    break;
                case Message.ArgumentType.SIGNATURE:
                    _resultValue.add(Type[].class);
                    break;
                case Message.ArgumentType.DICT_ENTRY1:
                    _resultValue.add(Map.Entry.class);
                    contained = new ArrayList<>();
                    javaType = getJavaType(_dbusType.substring(idx + 1), contained, 2);
                    idx += javaType + 1;
                    break;
                default:
                    throw new DBusException(String.format("Failed to parse DBus type signature: %s (%s).", _dbusType, _dbusType.charAt(idx)));
                }
            }
            return idx;
        } catch (IndexOutOfBoundsException _ex) {
            LOGGER.debug("Failed to parse DBus type signature.", _ex);
            throw new DBusException("Failed to parse DBus type signature: " + _dbusType);
        }
    }