diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-05-03 11:27:08 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-05-03 11:27:08 +0100 |
| commit | dda4d7559276300877655c1e8c783ae8ef0cc793 (patch) | |
| tree | 1c4ffb01102877afd0df777a281fcda999254f2d | |
| parent | 19d9169d58ce2f2581073fd0af6e6439604f591c (diff) | |
Support writing empty Java class declarations
4 files changed, 34 insertions, 1 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 59de6b7..0b56fa6 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 @@ -29,6 +29,10 @@ public class JavaWriter implements AutoCloseable { void writeTypeDeclaration(JavaTypeDeclaration typeDeclaration) throws IOException { switch (typeDeclaration) { + case JavaClassDeclaration classDeclaration -> { + writeClassDeclaration(classDeclaration); + } + case JavaInterfaceDeclaration interfaceDeclaration -> { writeInterfaceDeclaration(interfaceDeclaration); } @@ -39,6 +43,15 @@ public class JavaWriter implements AutoCloseable { } } + private void writeClassDeclaration(JavaClassDeclaration classDeclaration) throws IOException { + this.writer.write("public class "); + this.writer.write(classDeclaration.name()); + this.writer.write(" {"); + this.writer.newLine(); + this.writer.write("}"); + this.writer.newLine(); + } + private void writeInterfaceDeclaration(JavaInterfaceDeclaration interfaceDeclaration) throws IOException { this.writer.write("public sealed interface "); this.writer.write(interfaceDeclaration.name()); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassDeclaration.java new file mode 100644 index 0000000..6ca6a26 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassDeclaration.java @@ -0,0 +1,4 @@ +package org.zwobble.hobgoblin.compiler.output.lang.java.ast; + +public record JavaClassDeclaration(String name) implements JavaTypeDeclaration { +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeDeclaration.java index 5cf5161..da6481e 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeDeclaration.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeDeclaration.java @@ -1,5 +1,5 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; -public sealed interface JavaTypeDeclaration permits JavaInterfaceDeclaration, JavaRecordDeclaration { +public sealed interface JavaTypeDeclaration permits JavaClassDeclaration, JavaInterfaceDeclaration, JavaRecordDeclaration { String name(); } 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 0a614f4..13c2c00 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 @@ -2,6 +2,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.java; import org.junit.jupiter.api.Test; import org.zwobble.hobgoblin.compiler.output.CodeWriter; +import org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaClassDeclaration; import org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaInterfaceDeclaration; import org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef; @@ -14,6 +15,21 @@ import static org.zwobble.precisely.Matchers.equalTo; public class JavaWriterTests { @Test + public void emptyClassDeclaration() throws IOException { + var java = new JavaClassDeclaration( + "Rectangle" + ); + + var string = write(writer -> writer.writeTypeDeclaration(java)); + + assertThat(string, equalTo(""" + public class Rectangle { + } + """ + )); + } + + @Test public void emptyInterfaceDeclaration() throws IOException { var java = new JavaInterfaceDeclaration( "Shape", |
