1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.api.dom.kotlin.render;
17
18 import java.util.ArrayList;
19 import java.util.Iterator;
20 import java.util.List;
21 import java.util.stream.Collectors;
22
23 import org.mybatis.generator.api.dom.java.render.RenderingUtilities;
24 import org.mybatis.generator.api.dom.kotlin.KotlinNamedItem;
25 import org.mybatis.generator.api.dom.kotlin.KotlinProperty;
26 import org.mybatis.generator.api.dom.kotlin.KotlinType;
27 import org.mybatis.generator.internal.util.CustomCollectors;
28
29 public class KotlinTypeRenderer {
30
31 public List<String> render(KotlinType kotlinType) {
32 KotlinNamedItemRenderer renderer = new KotlinNamedItemRenderer();
33
34 List<String> answer = new ArrayList<>(kotlinType.getAnnotations());
35
36 String renderedModifiers = KotlinRenderingUtilities.renderModifiers(kotlinType.getModifiers())
37 + kotlinType.getType().getValue();
38
39 String renderedModifiersAndName;
40 if (kotlinType.getType() == KotlinType.Type.COMPANION_OBJECT && kotlinType.getName().equals(KotlinType.DEFAULT_COMPANION_OBJECT_NAME)) {
41 renderedModifiersAndName = renderedModifiers;
42 } else {
43 renderedModifiersAndName = renderedModifiers + " " + kotlinType.getName();
44 }
45
46 String renderedSuperTypes = kotlinType.getSuperTypes().stream()
47 .sorted()
48 .collect(CustomCollectors.joining(", ", " : ", ""));
49
50 if (kotlinType.getNamedItems().isEmpty()) {
51 if (kotlinType.getConstructorProperties().isEmpty()) {
52 answer.add(renderedModifiersAndName + renderedSuperTypes);
53 } else {
54 answer.add(renderedModifiersAndName + "(");
55 answer.addAll(renderConstructorItems(kotlinType));
56 answer.add(")" + renderedSuperTypes);
57 }
58 } else {
59 if (kotlinType.getConstructorProperties().isEmpty()) {
60 answer.add(renderedModifiersAndName + renderedSuperTypes + " {");
61 } else {
62 answer.add(renderedModifiersAndName + "(");
63 answer.addAll(renderConstructorItems(kotlinType));
64 answer.add(")" + renderedSuperTypes + " {");
65 }
66 }
67
68 for (KotlinNamedItem namedItem : kotlinType.getNamedItems()) {
69 answer.addAll(renderer.render(namedItem).stream().map(KotlinRenderingUtilities::kotlinIndent)
70 .collect(Collectors.toList()));
71 answer.add("");
72 }
73
74 answer = RenderingUtilities.removeLastEmptyLine(answer);
75
76 if (!kotlinType.getNamedItems().isEmpty()) {
77 answer.add("}");
78 }
79
80 return answer;
81 }
82
83 private List<String> renderConstructorItems(KotlinType kotlinType) {
84 List<String> lines = new ArrayList<>();
85 KotlinPropertyRenderer renderer = new KotlinPropertyRenderer();
86
87 Iterator<KotlinProperty> iter = kotlinType.getConstructorProperties().iterator();
88 while (iter.hasNext()) {
89 lines.addAll(renderer.render(iter.next()).stream().map(KotlinRenderingUtilities::kotlinIndent)
90 .collect(Collectors.toList()));
91 if (iter.hasNext()) {
92 lines.set(lines.size() - 1,
93 lines.get(lines.size() - 1) + ",");
94 }
95 }
96
97 return lines;
98 }
99 }