From 36a11cc4637ab14718ddf73921a1c0658c9056d0 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 17 May 2026 10:14:51 +0100 Subject: Add params to Java method node --- .../hobgoblin/compiler/output/lang/java/JavaWriter.java | 16 ++++++++++++++-- .../output/lang/java/ast/JavaMethodDeclaration.java | 5 ++++- .../compiler/output/lang/java/ast/JavaParam.java | 7 +++++++ .../compiler/output/lang/java/ast/JavaTypeRef.java | 2 ++ 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaParam.java (limited to 'src/main/java/org') 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 9d74d7d..1a5fe29 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 @@ -83,12 +83,24 @@ public class JavaWriter implements AutoCloseable { } } - private void writeMethodDeclaration(JavaMethodDeclaration method) throws IOException { + void writeMethodDeclaration(JavaMethodDeclaration method) throws IOException { this.writer.write("public "); writeTypeRef(method.returnType()); this.writer.write(" "); this.writer.write(method.name()); - this.writer.write("() {"); + this.writer.write("("); + + writeWithSeparator( + method.params(), + param -> { + writeTypeRef(param.type()); + writer.write(" "); + writer.write(param.name()); + }, + () -> writer.write(", ") + ); + + this.writer.write(") {"); this.writer.newLine(); this.writer.write("}"); } 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 84179f6..fb29f5c 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,7 +1,10 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; +import java.util.List; + public record JavaMethodDeclaration( String name, - JavaTypeRef returnType + JavaTypeRef returnType, + List params ) implements JavaClassBodyDeclaration { } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaParam.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaParam.java new file mode 100644 index 0000000..49a7f5f --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaParam.java @@ -0,0 +1,7 @@ +package org.zwobble.hobgoblin.compiler.output.lang.java.ast; + +public record JavaParam( + JavaTypeRef type, + String name +) { +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java index 3654acc..9020791 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java @@ -3,5 +3,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; import java.util.List; public record JavaTypeRef(List packageName, String name, List args) { + public static final JavaTypeRef INT = new JavaTypeRef(List.of(), "int", List.of()); + public static final JavaTypeRef LONG = new JavaTypeRef(List.of(), "long", List.of()); public static final JavaTypeRef VOID = new JavaTypeRef(List.of(), "void", List.of()); } -- cgit v1.2.3