private void generateFieldsAndMethods()

in johnzon-maven-plugin/src/main/java/org/apache/johnzon/maven/plugin/ExampleToModelMojo.java [146:224]


    private void generateFieldsAndMethods(final StringWriter writer, final JsonObject object, final String prefix,
                                          final Collection<String> imports) throws IOException {
        final Map<String, JsonObject> nestedTypes = new TreeMap<>();
        {
            final Iterator<Map.Entry<String, JsonValue>> iterator = object.entrySet().iterator();
            if (!object.isEmpty()) {
                writer.write("\n");
            }
            while (iterator.hasNext()) {
                final Map.Entry<String, JsonValue> entry = iterator.next();
                final String key = entry.getKey();
                final String fieldName = toJavaFieldName(key);
                final boolean hasNext = iterator.hasNext();
                switch (entry.getValue().getValueType()) {
                    case ARRAY:
                        imports.add("java.util.List");
                        handleArray(writer, prefix, nestedTypes, entry.getValue(), key, fieldName, 1, imports, !hasNext);
                        break;
                    case OBJECT:
                        final String type = toJavaName(fieldName);
                        nestedTypes.put(type, JsonObject.class.cast(entry.getValue()));
                        fieldGetSetMethods(writer, key, fieldName, type, prefix, 0, imports, !hasNext);
                        break;
                    case TRUE:
                    case FALSE:
                        fieldGetSetMethods(writer, key, fieldName, "Boolean", prefix, 0, imports, !hasNext);
                        break;
                    case NUMBER:
                        fieldGetSetMethods(writer, key, fieldName, "Double", prefix, 0, imports, !hasNext);
                        break;
                    case STRING:
                        fieldGetSetMethods(writer, key, fieldName, "String", prefix, 0, imports, !hasNext);
                        break;
                    case NULL:
                    default:
                        if (ignoreNull) {
                            if (useRecord && writer.getBuffer().length() > 0) {
                                writer.getBuffer().setLength(writer.getBuffer().length() - 2);
                                writer.write("\n");
                            }
                        } else {
                            throw new UnsupportedOperationException("Unsupported " + entry.getValue() + ".");
                        }
                }
                if (hasNext) {
                    writer.write("\n");
                } else if (useRecord) {
                    writer.write(") {\n");
                }
            }
        }

        if (object.isEmpty()) {
            if (useRecord) {
                writer.write(") {\n");
            } else {
                writer.write("\n");
            }
        }

        if (!object.isEmpty() && !nestedTypes.isEmpty()) {
            writer.write("\n");
        }

        final Iterator<Map.Entry<String, JsonObject>> entries = nestedTypes.entrySet().iterator();
        while (entries.hasNext()) {
            final Map.Entry<String, JsonObject> entry = entries.next();
            if (useRecord) {
                writer.write(prefix + "public static record " + entry.getKey() + "(");
            } else {
                writer.write(prefix + "public static class " + entry.getKey() + " {");
            }
            generateFieldsAndMethods(writer, entry.getValue(), "    " + prefix, imports);
            writer.write(prefix + "}\n");
            if (entries.hasNext()) {
                writer.write("\n");
            }
        }
    }