private void appendMembers(@Nonnull Printer out) {
		out.appendLine("{");
		if (!classInfo.getFields().isEmpty()) {
			Printer fieldPrinter = new Printer();
			fieldPrinter.setIndent("    ");
			if (classInfo.hasEnumModifier()) {
				appendEnumFieldMembers(fieldPrinter);
			} else {
				appendFieldMembers(fieldPrinter);
			}
			out.appendMultiLine(fieldPrinter.toString());
			out.appendLine("");
		}
		if (!classInfo.getMethods().isEmpty()) {
			Printer methodPrinter = new Printer();
			methodPrinter.setIndent("    ");

			// Some method types we'll want to handle a bit differently.
			// Split them up:
			//  - Regular methods
			//  - The static initializer
			//  - Constructors
			List<MethodMember> methods = new ArrayList<>(classInfo.getMethods());
			MethodMember staticInitializer = classInfo.getDeclaredMethod("<clinit>", "()V");
			List<MethodMember> constructors = classInfo.methodStream()
					.filter(m -> m.getName().equals("<init>"))
					.toList();
			methods.remove(staticInitializer);
			methods.removeAll(constructors);

			// We'll place the static initializer first regardless of where its defined order-wise.
			if (staticInitializer != null) {
				appendStaticInitializer(methodPrinter, staticInitializer);
				methodPrinter.newLine();
			}

			// Then the constructors.
			for (MethodMember constructor : constructors) {
				appendConstructor(methodPrinter, constructor);
				methodPrinter.newLine();
			}

			// Then the rest of the methods, in whatever order they're defined in.
			for (MethodMember method : methods) {
				appendMethod(methodPrinter, method);
				methodPrinter.newLine();
			}

			// Append them all to the output.
			out.appendMultiLine(methodPrinter.toString());
		}
		out.appendLine("}");
	}
Appends the class body (members).

@param out
		Printer to write to.
recaf-core/src/main/java/software/coley/recaf/services/decompile/fallback/print/ClassPrinter.java