Skip to content

Commit 4dae5b4

Browse files
committed
add support for additional colons after TypeDeclarations with correct pretty-printing
1 parent 2495c71 commit 4dae5b4

File tree

2 files changed

+200
-6
lines changed

2 files changed

+200
-6
lines changed

javaDSL/src/main/grammars/de/monticore/java/JavaDSL.mc4

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,12 @@ scope(shadowing) ClassDeclaration extends TypeDeclaration
168168
= JavaModifier* "class" Name TypeParameters?
169169
("extends" superClass:MCType)?
170170
("implements" implementedInterface:(MCType || ",")+)?
171-
ClassBody
171+
ClassBody ";"*
172172
;
173173

174174
// TODO Replace with MCJavaBlock? -> with CoCos?
175175
ClassBody
176-
= "{" ClassBodyDeclaration* "}" ";"*
176+
= "{" ClassBodyDeclaration* "}"
177177
;
178178

179179
/*
@@ -186,7 +186,7 @@ ClassBody
186186
scope(shadowing) RecordDeclaration extends TypeDeclaration
187187
= JavaModifier* "record" Name TypeParameters? RecordHeader
188188
("implements" implementedInterface:(MCType || ",")+)?
189-
RecordBody
189+
RecordBody ";"*
190190
;
191191

192192
// TODO: "record" is a contextual keyword, but setting it to nokeyword creates conflicts with MethodDeclaration
@@ -207,7 +207,7 @@ astrule RecordComponent =
207207

208208
// TODO Replace with MCJavaBlock? -> with CoCos?
209209
RecordBody
210-
= "{" (ClassBodyDeclaration | CompactConstructorDeclaration)* "}" ";"*
210+
= "{" (ClassBodyDeclaration | CompactConstructorDeclaration)* "}"
211211
;
212212

213213
CompactConstructorDeclaration
@@ -218,12 +218,12 @@ CompactConstructorDeclaration
218218
scope(shadowing) InterfaceDeclaration extends TypeDeclaration
219219
= JavaModifier* "interface" Name TypeParameters?
220220
("extends" extendedInterface:(MCType || ",")+)?
221-
InterfaceBody
221+
InterfaceBody ";"*
222222
;
223223

224224
// TODO Replace with MCJavaBlock? -> with CoCos?
225225
InterfaceBody
226-
= "{" InterfaceBodyDeclaration* "}" ";"*
226+
= "{" InterfaceBodyDeclaration* "}"
227227
;
228228

229229
// TODO: Remove scope duplicate when monticore#4726 is fixed
Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
package de.monticore.java.javadsl._prettyprint;
2+
3+
import de.monticore.prettyprint.IndentPrinter;
4+
import de.monticore.statements.mccommonstatements._ast.ASTJavaModifier;
5+
6+
import java.util.stream.Collectors;
7+
8+
public class JavaDSLPrettyPrinter extends JavaDSLPrettyPrinterTOP {
9+
10+
public JavaDSLPrettyPrinter(IndentPrinter printer, boolean printComments) {
11+
super(printer, printComments);
12+
}
13+
14+
public void handle(de.monticore.java.javadsl._ast.ASTClassDeclaration node) {
15+
if (this.isPrintComments()) {
16+
de.monticore.prettyprint.CommentPrettyPrinter.printPreComments(node, getPrinter());
17+
}
18+
java.util.Iterator<de.monticore.types.mcbasictypes._ast.ASTMCType> iter_implementedInterface =
19+
node.getImplementedInterfaceList().iterator();
20+
21+
node.getJavaModifierList().forEach(n -> n.accept(getTraverser()));
22+
23+
getPrinter().print("class ");
24+
25+
getPrinter().print(node.getName() + " ");
26+
27+
if (node.isPresentTypeParameters()) {
28+
node.getTypeParameters().accept(getTraverser());
29+
}
30+
31+
if (node.isPresentSuperClass()) {
32+
getPrinter().print("extends ");
33+
node.getSuperClass().accept(getTraverser());
34+
}
35+
36+
if (iter_implementedInterface.hasNext()) {
37+
getPrinter().print("implements ");
38+
if (iter_implementedInterface.hasNext()) {
39+
iter_implementedInterface.next().accept(getTraverser());
40+
while (iter_implementedInterface.hasNext()) {
41+
getPrinter().stripTrailing();
42+
getPrinter().print(",");
43+
iter_implementedInterface.next().accept(getTraverser());
44+
}
45+
}
46+
}
47+
node.getClassBody().accept(getTraverser());
48+
49+
getPrinter().stripTrailing();
50+
51+
if (this.isPrintComments()) {
52+
de.monticore.prettyprint.CommentPrettyPrinter.printPostComments(node, getPrinter());
53+
}
54+
}
55+
56+
public void handle(de.monticore.java.javadsl._ast.ASTRecordDeclaration node) {
57+
if (this.isPrintComments()) {
58+
de.monticore.prettyprint.CommentPrettyPrinter.printPreComments(node, getPrinter());
59+
}
60+
java.util.Iterator<de.monticore.types.mcbasictypes._ast.ASTMCType> iter_implementedInterface =
61+
node.getImplementedInterfaceList().iterator();
62+
63+
node.getMCModifierList().stream().map(m -> (ASTJavaModifier) m).collect(Collectors.toList()).forEach(n -> n.accept(getTraverser()));
64+
65+
getPrinter().print("record ");
66+
67+
getPrinter().print(node.getName() + " ");
68+
69+
if (node.isPresentTypeParameters()) {
70+
node.getTypeParameters().accept(getTraverser());
71+
}
72+
73+
node.getRecordHeader().accept(getTraverser());
74+
75+
if (iter_implementedInterface.hasNext()) {
76+
getPrinter().print("implements ");
77+
if (iter_implementedInterface.hasNext()) {
78+
iter_implementedInterface.next().accept(getTraverser());
79+
while (iter_implementedInterface.hasNext()) {
80+
getPrinter().stripTrailing();
81+
getPrinter().print(",");
82+
83+
iter_implementedInterface.next().accept(getTraverser());
84+
}
85+
}
86+
}
87+
88+
node.getRecordBody().accept(getTraverser());
89+
90+
getPrinter().stripTrailing();
91+
92+
if (this.isPrintComments()) {
93+
de.monticore.prettyprint.CommentPrettyPrinter.printPostComments(node, getPrinter());
94+
}
95+
}
96+
97+
public void handle(de.monticore.java.javadsl._ast.ASTInterfaceDeclaration node) {
98+
if (this.isPrintComments()) {
99+
de.monticore.prettyprint.CommentPrettyPrinter.printPreComments(node, getPrinter());
100+
}
101+
java.util.Iterator<de.monticore.types.mcbasictypes._ast.ASTMCType> iter_extendedInterface =
102+
node.getExtendedInterfaceList().iterator();
103+
104+
node.getJavaModifierList().forEach(n -> n.accept(getTraverser()));
105+
106+
getPrinter().print("interface ");
107+
108+
getPrinter().print(node.getName() + " ");
109+
110+
if (node.isPresentTypeParameters()) {
111+
node.getTypeParameters().accept(getTraverser());
112+
}
113+
114+
if (iter_extendedInterface.hasNext()) {
115+
getPrinter().print("extends ");
116+
if (iter_extendedInterface.hasNext()) {
117+
iter_extendedInterface.next().accept(getTraverser());
118+
while (iter_extendedInterface.hasNext()) {
119+
getPrinter().stripTrailing();
120+
getPrinter().print(",");
121+
122+
iter_extendedInterface.next().accept(getTraverser());
123+
}
124+
}
125+
}
126+
127+
node.getInterfaceBody().accept(getTraverser());
128+
129+
getPrinter().stripTrailing();
130+
131+
if (this.isPrintComments()) {
132+
de.monticore.prettyprint.CommentPrettyPrinter.printPostComments(node, getPrinter());
133+
}
134+
135+
}
136+
137+
public void handle(de.monticore.java.javadsl._ast.ASTEnumDeclaration node) {
138+
if (this.isPrintComments()) {
139+
de.monticore.prettyprint.CommentPrettyPrinter.printPreComments(node, getPrinter());
140+
}
141+
java.util.Iterator<de.monticore.java.javadsl._ast.ASTEnumConstantDeclaration>
142+
iter_enumConstantDeclaration = node.getEnumConstantDeclarationList().iterator();
143+
java.util.Iterator<de.monticore.types.mcbasictypes._ast.ASTMCType> iter_implementedInterface =
144+
node.getImplementedInterfaceList().iterator();
145+
146+
node.getJavaModifierList().forEach(n -> n.accept(getTraverser()));
147+
148+
getPrinter().print("enum ");
149+
150+
getPrinter().print(node.getName() + " ");
151+
152+
if (iter_implementedInterface.hasNext()) {
153+
getPrinter().print("implements ");
154+
155+
if (iter_implementedInterface.hasNext()) {
156+
iter_implementedInterface.next().accept(getTraverser());
157+
while (iter_implementedInterface.hasNext()) {
158+
getPrinter().stripTrailing();
159+
getPrinter().print(",");
160+
161+
iter_implementedInterface.next().accept(getTraverser());
162+
}
163+
}
164+
}
165+
getPrinter().println("{ ");
166+
getPrinter().indent();
167+
if (iter_enumConstantDeclaration.hasNext()) {
168+
iter_enumConstantDeclaration.next().accept(getTraverser());
169+
while (iter_enumConstantDeclaration.hasNext()) {
170+
getPrinter().stripTrailing();
171+
getPrinter().print(",");
172+
173+
iter_enumConstantDeclaration.next().accept(getTraverser());
174+
}
175+
}
176+
177+
getPrinter().stripTrailing();
178+
getPrinter().print(",");
179+
180+
if (node.isPresentEnumBody()) {
181+
node.getEnumBody().accept(getTraverser());
182+
}
183+
184+
getPrinter().unindent();
185+
getPrinter().println();
186+
getPrinter().println("} ");
187+
188+
getPrinter().stripTrailing();
189+
190+
if (this.isPrintComments()) {
191+
de.monticore.prettyprint.CommentPrettyPrinter.printPostComments(node, getPrinter());
192+
}
193+
}
194+
}

0 commit comments

Comments
 (0)