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();
}