private List createClassFileContent()

in dbus-java-utils/src/main/java/org/freedesktop/dbus/utils/generator/ClassBuilderInfo.java [190:349]


    private List<String> createClassFileContent(boolean _staticClass, Set<String> _otherImports) {
        List<String> content = new ArrayList<>();

        String classIndent = _staticClass ? "    " : "";
        String memberIndent = _staticClass ? "        " : "    ";

        Set<String> allImports = new TreeSet<>();
        allImports.addAll(getImports());
        if (_otherImports != null) {
            allImports.addAll(_otherImports);
        }
        
        if (!_staticClass) {
            content.add("package " + getPackageName() + ";");
            content.add("");
            content.add("/**");
            content.add(" * Auto-generated class.");
            content.add(" */");

        } else {
            content.add("");
        }

        if (getDbusPackageName() != null) {
            allImports.add(DBusInterfaceName.class.getName());
            content.add(classIndent + "@" + DBusInterfaceName.class.getSimpleName() + "(\"" + getDbusPackageName() + "\")");
        }
        
        String bgn = classIndent + "public " + (_staticClass ? "static " : "") + (getClassType() == ClassType.INTERFACE ? "interface" : "class");
        bgn += " " + getClassName();
        if (getExtendClass() != null) {
            if (!getExtendClass().startsWith("java.lang.")) {
                getImports().add(getExtendClass()); // add class import if extends-argument is not a java.lang. class
                allImports.add(getExtendClass());
            }

            bgn += " extends " + getClassName(getExtendClass());
        }
        if (!getImplementedInterfaces().isEmpty()) {
            bgn += " implements " + getImplementedInterfaces().stream().map(e -> getClassName(e)).collect(Collectors.joining(", "));
            // add classes import if implements-arguments are not a java.lang. classes
            getImports().addAll(getImplementedInterfaces().stream().filter(s -> !s.startsWith("java.lang.")).collect(Collectors.toList()));
        }

        bgn += " {";

        content.add(bgn);
        if (_staticClass) {
            content.add("");
        }

        // add member fields
        for (ClassMember member : members) {
            if (!member.getAnnotations().isEmpty()) {
                content.addAll(member.getAnnotations().stream().map(l -> memberIndent + l).collect(Collectors.toList()));
            }
            String memberType = TypeConverter.getProperJavaClass(member.getType(), allImports);
            if (!member.getGenerics().isEmpty()) {
                memberType += "<" + member.getGenerics().stream().map(c -> TypeConverter.getProperJavaClass(c, allImports)).collect(Collectors.joining(" ,")) + ">";
            }
            content.add(memberIndent + "private " + (member.isFinalMember() ? "final " : "") + memberType + " "
                    + member.getName() + ";");
        
        }

        if (!getConstructors().isEmpty()) {
            content.add("");
            for (ClassConstructor constructor : getConstructors()) {
                String outerIndent = _staticClass ? "        " : "    ";
                String cstr = outerIndent + getClassName() + "(";
                if (!constructor.getSuperArguments().isEmpty()) {
                    cstr += constructor.getSuperArguments().entrySet().stream().map(e -> e.getValue() + " " + e.getKey()).collect(Collectors.joining(", "));
                    if (!constructor.getArguments().isEmpty()) {
                        cstr += ", ";
                    }
                }
                if (!constructor.getArguments().isEmpty()) {
                    cstr += constructor.getArguments().entrySet().stream().map(e -> e.getValue() + " " + e.getKey()).collect(Collectors.joining(", "));
                }
                
                if (constructor.getThrowArguments().isEmpty()) {
                    cstr += ") {";
                } else {
                    cstr += ") throws " + String.join(", ", constructor.getThrowArguments()) + " {";
                }
                
                content.add(cstr);
                
                String innerIndent = _staticClass ? "            " : "        ";
                
                if (!constructor.getSuperArguments().isEmpty()) {
                    content.add(innerIndent + "super(" + String.join(", ", constructor.getSuperArguments().keySet()) + ");");
                }
                if (!constructor.getArguments().isEmpty()) {
                    for (Entry<String, String> e : constructor.getArguments().entrySet()) {
                        content.add(innerIndent + "this." + e.getKey().replaceFirst("^_(.+)", "$1") + " = " + e.getKey() + ";");
                    }
                }

                content.add(outerIndent + "}");
            }
        }

        content.add("");

        // add getter and setter
        for (ClassMember member : members) {
            String memberType = TypeConverter.getProperJavaClass(member.getType(), allImports);

            if (!member.getGenerics().isEmpty()) {
                memberType += "<" + member.getGenerics().stream().map(c -> TypeConverter.getProperJavaClass(c, allImports)).collect(Collectors.joining(" ,")) + ">";
            }

            String getterSetterName = StringUtil.snakeToCamelCase(StringUtil.upperCaseFirstChar(member.getName()));
            if (!member.isFinalMember()) {
                content.add(memberIndent + "public void set" + getterSetterName + "("
                        + memberType + " arg) {");
                content.add(memberIndent + "    " + member.getName() + " = arg;");
                content.add(memberIndent +"}");
            }
            content.add("");
            content.add(memberIndent + "public " + memberType + " get" + getterSetterName + "() {");
            content.add(memberIndent + "    return " + member.getName() + ";");
            content.add(memberIndent + "}");
        }

        content.add("");

        for (ClassMethod mth : getMethods()) {
        	
        	if (!mth.getAnnotations().isEmpty()) {
        		content.addAll(mth.getAnnotations().stream().map(a -> memberIndent + a).collect(Collectors.toList()));
        	}
        	
            String clzMth = memberIndent + "public " + (mth.getReturnType() == null ? "void " : TypeConverter.getProperJavaClass(mth.getReturnType(), allImports) + " ");
            clzMth += mth.getName() + "(";
            if (!mth.getArguments().isEmpty()) {
                clzMth += mth.getArguments().entrySet().stream().map(e -> e.getValue() + " " + e.getKey())
                        .collect(Collectors.joining(", "));
            }
            clzMth += ");";
            content.add(clzMth);
        }
        content.add("");

        for (ClassBuilderInfo inner : getInnerClasses()) {
            content.addAll(inner.createClassFileContent(true, allImports));
            allImports.addAll(inner.getImports()); // collect additional imports which may have been added by inner class
        }
        
        content.add(classIndent + "}");

        // write imports to resulting content if this is not a inner class
        if (!_staticClass) {
            content.add(2,"");
            content.addAll(2, allImports.stream().filter(l -> !l.startsWith("java.lang.")).map(l -> "import " + l + ";").collect(Collectors.toList()));
        }

        return content;
    }