summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java13
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassDeclaration.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeDeclaration.java2
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java16
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",