summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-05-17 10:08:19 +0100
committerMichael Williamson <mike@zwobble.org>2026-05-17 10:08:19 +0100
commit679f041d110605e7797795cd42ae6914193b9d88 (patch)
tree54c877ad414740863fea302ae3aa3d5dc2f6a0f5 /src
parent23985cff89b03270d429aedd1a7b5ccb0ec66073 (diff)
Add body to Java record node
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java1
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java13
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaRecordDeclaration.java1
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java34
4 files changed, 48 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
index 062fc9b..1798ad3 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
@@ -95,6 +95,7 @@ public class JavaTypesGenerator implements Generator {
))
.toList(),
javaClassToImplementsType.getOrDefault(structDefinition.name(), List.of()),
+ List.of(),
structDefinition.docComment()
)
);
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java
index adf231d..9d74d7d 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java
@@ -145,8 +145,19 @@ public class JavaWriter implements AutoCloseable {
}
this.writer.write("{");
- this.writer.newLine();
+ this.writer.indent();
+
+ writeWithSeparator(
+ recordDeclaration.body(),
+ bodyDeclaration -> {
+ writer.newLine();
+ writeClassBodyDeclaration(bodyDeclaration);
+ },
+ () -> writer.newLine()
+ );
+ this.writer.dedent();
+ this.writer.newLine();
this.writer.write("}");
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaRecordDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaRecordDeclaration.java
index 4d7e033..0805a46 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaRecordDeclaration.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaRecordDeclaration.java
@@ -8,6 +8,7 @@ public record JavaRecordDeclaration(
String name,
List<JavaRecordComponent> components,
List<JavaTypeRef> implementsTypes,
+ List<JavaClassBodyDeclaration> body,
DocComment docComment
) implements JavaTypeDeclaration {
}
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java
index a6f7e45..0d36bcb 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java
@@ -134,6 +134,7 @@ public class JavaWriterTests {
"Point",
List.of(),
List.of(),
+ List.of(),
DocComment.EMPTY
);
@@ -151,6 +152,7 @@ public class JavaWriterTests {
"Point",
List.of(),
List.of(),
+ List.of(),
new DocComment("A 2D point.")
);
@@ -164,6 +166,38 @@ public class JavaWriterTests {
}
@Test
+ public void recordDeclarationWithMethods() throws IOException {
+ var java = new JavaRecordDeclaration(
+ "Rectangle",
+ List.of(),
+ List.of(),
+ List.of(
+ new JavaMethodDeclaration(
+ "a",
+ JavaTypeRef.VOID
+ ),
+ new JavaMethodDeclaration(
+ "b",
+ JavaTypeRef.VOID
+ )
+ ),
+ DocComment.EMPTY
+ );
+
+ var string = write(writer -> writer.writeTypeDeclaration(java));
+
+ assertThat(string, equalTo("""
+ public record Rectangle() {
+ public void a() {
+ }
+
+ public void b() {
+ }
+ }"""
+ ));
+ }
+
+ @Test
public void typeRefWithoutArgsHasNoAngleBrackets() throws IOException {
var java = new JavaTypeRef(List.of("abc", "def"), "One", List.of());