private static String getTypeAdv()

in dbus-java-utils/src/main/java/org/freedesktop/dbus/utils/generator/TypeConverter.java [215:261]


    private static String getTypeAdv(String _dbusType, Set<String> _javaIncludes) throws DBusException {
    	
    	if (StringUtil.isBlank(_dbusType)) {
    		return null;
    	}
    	
        List<Type> dataType = new ArrayList<>();
        Marshalling.getJavaType(_dbusType, dataType, 1);

        if (dataType.get(0) instanceof DBusListType || dataType.get(0) instanceof DBusMapType) {
            ParameterizedType dBusListType = (ParameterizedType) dataType.get(0);
            Type[] actualTypeArguments = dBusListType.getActualTypeArguments();

            String retVal = dBusListType.getRawType().getTypeName();
            List<String> internalTypes = new ArrayList<>();
            
            if (actualTypeArguments.length > 0) {
                Map<String, List<String>> allAdvTypes = new LinkedHashMap<>();
                
                for (Type type : actualTypeArguments) {
                    Map<String, List<String>> typeAdv = getTypeAdv(type, null);
                    allAdvTypes.putAll(typeAdv);
                }

                for (Entry<String, List<String>> e : allAdvTypes.entrySet()) {
                    if (!e.getValue().isEmpty()) {
                        String actualArgTypeVal = e.getKey() + "<";
                        actualArgTypeVal += String.join(", ", e.getValue());
                        actualArgTypeVal += ">";
                        internalTypes.add(actualArgTypeVal);
                        _javaIncludes.addAll(e.getValue());
                    } else { 
                        internalTypes.add(e.getKey());
                    }
                }
            }
            
            // if key and value of map is of same type:
            if (dataType.get(0) instanceof DBusMapType && internalTypes.size() == 1) {
                internalTypes.add(internalTypes.get(0));
            }
            
            return retVal + "<" + String.join(", ", internalTypes) + ">";
        }
        
        return dataType.get(0).getTypeName();
    }