diff options
Diffstat (limited to 'src/main')
3 files changed, 46 insertions, 2 deletions
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 baed6d4..bcb2778 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 @@ -114,8 +114,12 @@ public class JavaWriter implements AutoCloseable { this.writer.write("}"); } - private void writeClassBodyDeclaration(JavaClassBodyDeclaration bodyDeclaration) throws IOException { + void writeClassBodyDeclaration(JavaClassBodyDeclaration bodyDeclaration) throws IOException { switch (bodyDeclaration) { + case JavaConstructorDeclaration constructorDeclaration -> { + writeConstructorDeclaration(constructorDeclaration); + } + case JavaMethodDeclaration methodDeclaration -> { writeMethodDeclaration(methodDeclaration); } @@ -126,6 +130,35 @@ public class JavaWriter implements AutoCloseable { } } + void writeConstructorDeclaration(JavaConstructorDeclaration constructor) throws IOException { + writeVisibility(constructor.visibility()); + this.writer.write(" "); + this.writer.write(constructor.typeName()); + this.writer.write("("); + + writeWithSeparator( + constructor.params(), + param -> { + writeTypeRef(param.type()); + writer.write(" "); + writer.write(param.name()); + }, + () -> writer.write(", ") + ); + + this.writer.write(")"); + + this.writer.write(" {"); + this.writer.indent(); + if (!constructor.body().isEmpty()) { + this.writer.newLine(); + writeBlock(constructor.body()); + } + this.writer.dedent(); + this.writer.newLine(); + this.writer.write("}"); + } + private void writeCustomArea(JavaCustomArea customArea) throws IOException { var customAreaName = new StringWriter(); writeTypeRef(customArea.type(), customAreaName::write); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassBodyDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassBodyDeclaration.java index ee2a3a7..3bee614 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassBodyDeclaration.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassBodyDeclaration.java @@ -1,4 +1,4 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; -public sealed interface JavaClassBodyDeclaration permits JavaMethodDeclaration, JavaTypeDeclaration { +public sealed interface JavaClassBodyDeclaration permits JavaConstructorDeclaration, JavaMethodDeclaration, JavaTypeDeclaration { } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaConstructorDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaConstructorDeclaration.java new file mode 100644 index 0000000..a6799f8 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaConstructorDeclaration.java @@ -0,0 +1,11 @@ +package org.zwobble.hobgoblin.compiler.output.lang.java.ast; + +import java.util.List; + +public record JavaConstructorDeclaration( + String typeName, + JavaVisibility visibility, + List<JavaParam> params, + JavaBlock body +) implements JavaClassBodyDeclaration { +} |
