From ae55e6e9f177ac8505298abc0839d82d90dddb38 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 29 May 2026 17:08:55 +0100 Subject: Support Java method without body --- .../compiler/output/lang/java/JavaWriter.java | 20 ++++++++++++-------- .../output/lang/java/ast/JavaMethodDeclaration.java | 18 +++++++++++++++++- 2 files changed, 29 insertions(+), 9 deletions(-) (limited to 'src/main/java/org/zwobble') 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 677b1a6..7dbcdfc 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 @@ -229,17 +229,21 @@ public class JavaWriter implements AutoCloseable { () -> writer.write(", ") ); - this.writer.write(") {"); - this.writer.indent(); + this.writer.write(")"); - if (!method.body().isEmpty()) { + if (method.body().isEmpty()) { + this.writer.write(";"); + } else { + this.writer.write(" {"); + this.writer.indent(); + if (!method.body().get().isEmpty()) { + this.writer.newLine(); + writeBlock(method.body().get()); + } + this.writer.dedent(); this.writer.newLine(); - writeBlock(method.body()); + this.writer.write("}"); } - - this.writer.dedent(); - this.writer.newLine(); - this.writer.write("}"); } private void writeNewExpression(JavaNewExpression newExpression) throws IOException { diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaMethodDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaMethodDeclaration.java index f38625f..454b41f 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaMethodDeclaration.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaMethodDeclaration.java @@ -1,12 +1,28 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; import java.util.List; +import java.util.Optional; public record JavaMethodDeclaration( String name, JavaMethodKind kind, JavaTypeRef returnType, List params, - JavaBlock body + Optional body ) implements JavaClassBodyDeclaration { + public JavaMethodDeclaration( + String name, + JavaMethodKind kind, + JavaTypeRef returnType, + List params, + JavaBlock body + ) { + this( + name, + kind, + returnType, + params, + Optional.of(body) + ); + } } -- cgit v1.2.3