diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-05-17 10:08:19 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-05-17 10:08:19 +0100 |
| commit | 679f041d110605e7797795cd42ae6914193b9d88 (patch) | |
| tree | 54c877ad414740863fea302ae3aa3d5dc2f6a0f5 /src | |
| parent | 23985cff89b03270d429aedd1a7b5ccb0ec66073 (diff) | |
Add body to Java record node
Diffstat (limited to 'src')
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()); |
