in dbus-java-utils/src/main/java/org/freedesktop/dbus/utils/generator/InterfaceCodeGenerator.java [188:247]
private List<ClassBuilderInfo> extractSignals(Element _signalElement, ClassBuilderInfo _clzBldr) throws IOException, DBusException {
List<ClassBuilderInfo> additionalClasses = new ArrayList<>();
if (!_signalElement.hasChildNodes()) { // signal without any input/output?!
logger.warn("Signal without any input/output arguments. These are not supported yet, please open a ticket at github!");
return additionalClasses;
}
String className = _signalElement.getAttribute("name");
if (className.contains(".")) {
className = className.substring(className.lastIndexOf("."));
}
ClassBuilderInfo innerClass = new ClassBuilderInfo();
innerClass.setClassType(ClassType.CLASS);
innerClass.setExtendClass(DBusSignal.class.getName());
innerClass.getImports().add(DBusSignal.class.getName());
innerClass.getImports().add(DBusException.class.getName());
innerClass.setClassName(className);
_clzBldr.getInnerClasses().add(innerClass);
List<Element> signalArgs = XmlUtil.convertToElementList(XmlUtil.applyXpathExpressionToDocument("arg", _signalElement));
Map<String, String> args = new LinkedHashMap<>();
int unknownArgCnt = 0;
for (Element argElm : signalArgs) {
String argType = TypeConverter.getJavaTypeFromDBusType(argElm.getAttribute("type"), _clzBldr.getImports());
String argName = StringUtil.snakeToCamelCase(argElm.getAttribute("name"));
if (StringUtil.isBlank(argName)) {
argName = "arg" + unknownArgCnt;
unknownArgCnt++;
}
args.put(argName, TypeConverter.getProperJavaClass(argType, _clzBldr.getImports()));
}
for (Entry<String, String> argEntry : args.entrySet()) {
innerClass.getMembers().add(new ClassMember(argEntry.getKey(), argEntry.getValue(), true));
}
ClassConstructor classConstructor = new ClassBuilderInfo.ClassConstructor();
Map<String, String> argsMap = new LinkedHashMap<>();
for (Entry<String, String> e : args.entrySet()) {
argsMap.put("_" + e.getKey(), e.getValue());
}
classConstructor.getArguments().putAll(argsMap);
classConstructor.getThrowArguments().add(DBusException.class.getSimpleName());
classConstructor.getSuperArguments().put("_path", "String");
classConstructor.getSuperArguments().put("_interfaceName", "String");
innerClass.getConstructors().add(classConstructor);
return additionalClasses;
}