private List extractSignals()

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