diff options
Diffstat (limited to 'src')
4 files changed, 53 insertions, 0 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 0c4b8b8..8f6bd48 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 @@ -142,6 +142,7 @@ public class JavaTypesGenerator implements Generator { sumDefinition.variants().stream() .map(variant -> generateTypeRef(variant.type(), context)) .toList(), + List.of(), JavaCustomArea.type(generateTypeRef(sumDefinition.type(), context), "body"), sumDefinition.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 3e1a266..3cf58ce 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 @@ -171,6 +171,13 @@ public class JavaWriter implements AutoCloseable { this.writer.write("{"); this.writer.indent(); + + for (var bodyDeclaration: interfaceDeclaration.body()) { + writer.newLine(); + writeClassBodyDeclaration(bodyDeclaration); + writer.newLine(); + } + this.writer.newLine(); this.writeCustomArea(interfaceDeclaration.customArea()); this.writer.dedent(); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaInterfaceDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaInterfaceDeclaration.java index c1c0fc5..d0bd0a1 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaInterfaceDeclaration.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaInterfaceDeclaration.java @@ -7,6 +7,7 @@ import java.util.List; public record JavaInterfaceDeclaration( String name, List<JavaTypeRef> permitsTypes, + List<JavaClassBodyDeclaration> body, JavaCustomArea customArea, 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 2006b50..a53b20f 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 @@ -98,6 +98,7 @@ public class JavaWriterTests { var java = new JavaInterfaceDeclaration( "Shape", List.of(), + List.of(), new JavaCustomArea(JavaTypeRef.topLevel(List.of(), "Shape"), "body"), DocComment.EMPTY ); @@ -120,6 +121,7 @@ public class JavaWriterTests { JavaTypeRef.topLevel(List.of("abc", "def"), "One"), JavaTypeRef.topLevel(List.of("abc", "def"), "Two") ), + List.of(), new JavaCustomArea(JavaTypeRef.topLevel(List.of(), "Shape"), "body"), DocComment.EMPTY ); @@ -139,6 +141,7 @@ public class JavaWriterTests { var java = new JavaInterfaceDeclaration( "Shape", List.of(), + List.of(), new JavaCustomArea(JavaTypeRef.topLevel(List.of(), "Shape"), "body"), new DocComment("A 2D shape.") ); @@ -155,6 +158,47 @@ public class JavaWriterTests { } @Test + public void interfaceDeclarationWithBody() throws IOException { + var java = new JavaInterfaceDeclaration( + "Shape", + List.of(), + List.of( + new JavaMethodDeclaration( + "a", + JavaMethodKind.STATIC, + JavaTypeRef.VOID, + List.of(), + JavaBlock.EMPTY + ), + new JavaMethodDeclaration( + "b", + JavaMethodKind.STATIC, + JavaTypeRef.VOID, + List.of(), + JavaBlock.EMPTY + ) + ), + new JavaCustomArea(JavaTypeRef.topLevel(List.of(), "Shape"), "body"), + DocComment.EMPTY + ); + + var string = write(writer -> writer.writeTypeDeclaration(java)); + + assertThat(string, equalTo(""" + public sealed interface Shape { + public static void a() { + } + + public static void b() { + } + + // Custom area start: Shape body + // Custom area end: Shape body + }""" + )); + } + + @Test public void emptyRecordDeclaration() throws IOException { var java = new JavaRecordDeclaration( "Point", |
