summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-04 23:25:10 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-04 23:25:10 +0100
commitd252f4ed1cc41ff39a81a930c264fe6cbf9e4508 (patch)
treecded4f030d21075c49b4dcdcee98fa11c140f7bc /src/main
parent42e002e600dab7ddfe1181dc1c2b331eda9557d7 (diff)
Add throws to Java method declarations
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java5
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java10
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java9
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaMethodDeclaration.java62
5 files changed, 73 insertions, 15 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
index 69e8e94..a2db183 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
@@ -108,6 +108,7 @@ public class JavaPreciselyMatchersGenerator implements Generator {
JavaMethodKind.STATIC,
javaMatcherTypeRef,
List.of(),
+ List.of(),
new JavaBlock(List.of(
new JavaReturn(new JavaNewExpression(
javaMatcherTypeRef,
@@ -147,6 +148,7 @@ public class JavaPreciselyMatchersGenerator implements Generator {
JavaMethodKind.INSTANCE,
MATCH_RESULT_REF,
List.of(new JavaParam(JavaTypeRef.OBJECT, JavaIdentifier.of("actual"))),
+ List.of(),
new JavaBlock(List.of(
new JavaReturn(
new JavaMethodCall(
@@ -163,6 +165,7 @@ public class JavaPreciselyMatchersGenerator implements Generator {
JavaMethodKind.INSTANCE,
TEXT_TREE_REF,
List.of(),
+ List.of(),
new JavaBlock(List.of(
new JavaReturn(
new JavaMethodCall(
@@ -179,6 +182,7 @@ public class JavaPreciselyMatchersGenerator implements Generator {
JavaMethodKind.INSTANCE,
genericMatcherRef(JavaTypeRef.OBJECT),
List.of(),
+ List.of(),
new JavaBlock(List.of(
new JavaReturn(new JavaStaticMethodCall(
MATCHERS_REF,
@@ -206,6 +210,7 @@ public class JavaPreciselyMatchersGenerator implements Generator {
List.of(
new JavaParam(genericMatcherRef(JavaTypeArg.superType(javaFieldTypeRef)), javaFieldName)
),
+ List.of(),
new JavaBlock(List.of(
new JavaLocalVariableDeclaration(
submatchersIdentifier,
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
index 2649e7c..5f91c1f 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
@@ -129,6 +129,7 @@ public class JavaTransient0Generator implements Generator {
outputStreamName
)
),
+ List.of(),
new JavaBlock(List.of())
),
new JavaMethodDeclaration(
@@ -142,6 +143,7 @@ public class JavaTransient0Generator implements Generator {
inputStreamName
)
),
+ List.of(),
new JavaBlock(List.of(
new JavaReturn(new JavaNullLiteral())
))
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
index 1aa88b2..aa194e8 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
@@ -159,6 +159,7 @@ public class JavaTypesGenerator implements Generator {
JavaMethodKind.STATIC,
builderJavaTypeRef,
List.of(),
+ List.of(),
new JavaBlock(List.of(
new JavaReturn(new JavaNewExpression(
builderJavaTypeRef,
@@ -191,6 +192,7 @@ public class JavaTypesGenerator implements Generator {
JavaMethodKind.INSTANCE,
generateTypeRef(structDefinition.type(), context),
List.of(),
+ List.of(),
new JavaBlock(List.of(
new JavaReturn(new JavaNewExpression(
generateTypeRef(structDefinition.type(), context),
@@ -232,6 +234,7 @@ public class JavaTypesGenerator implements Generator {
List.of(
new JavaParam(generateTypeRef(field.type(), context), javaFieldName)
),
+ List.of(),
new JavaBlock(List.of(
new JavaReturn(new JavaNewExpression(
builderJavaTypeRef,
@@ -251,6 +254,7 @@ public class JavaTypesGenerator implements Generator {
List.of(
new JavaParam(fieldBuilderTypeRef.get(), javaFieldName)
),
+ List.of(),
new JavaBlock(List.of(
new JavaReturn(new JavaNewExpression(
builderJavaTypeRef,
@@ -288,6 +292,7 @@ public class JavaTypesGenerator implements Generator {
List.of(
new JavaParam(javaElementType, javaElementName)
),
+ List.of(),
new JavaBlock(List.of(
new JavaLocalVariableDeclaration(
javaFieldName,
@@ -319,6 +324,7 @@ public class JavaTypesGenerator implements Generator {
List.of(
new JavaParam(elementBuilderTypeRef.get(), javaElementName)
),
+ List.of(),
new JavaBlock(List.of(
new JavaLocalVariableDeclaration(
javaFieldName,
@@ -356,6 +362,7 @@ public class JavaTypesGenerator implements Generator {
List.of(
new JavaParam(javaElementType, javaFieldName)
),
+ List.of(),
new JavaBlock(List.of(
new JavaReturn(new JavaNewExpression(
builderJavaTypeRef,
@@ -385,6 +392,7 @@ public class JavaTypesGenerator implements Generator {
List.of(
new JavaParam(elementBuilderTypeRef.get(), javaFieldName)
),
+ List.of(),
new JavaBlock(List.of(
new JavaReturn(new JavaNewExpression(
builderJavaTypeRef,
@@ -422,6 +430,7 @@ public class JavaTypesGenerator implements Generator {
JavaMethodKind.INSTANCE,
generateTypeRef(field.type().value(), context),
List.of(),
+ List.of(),
Optional.empty()
));
}
@@ -453,6 +462,7 @@ public class JavaTypesGenerator implements Generator {
JavaMethodKind.INSTANCE,
generateTypeRef(sumDefinition.type(), context),
List.of(),
+ List.of(),
Optional.empty()
)
),
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 393447c..253b469 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
@@ -485,6 +485,15 @@ public class JavaWriter implements AutoCloseable {
this.writer.write(")");
+ if (!method.throws_().isEmpty()) {
+ this.writer.write(" throws ");
+ writeWithSeparator(
+ method.throws_(),
+ exceptionType -> writeTypeRef(exceptionType),
+ () -> this.writer.write(", ")
+ );
+ }
+
if (method.body().isEmpty()) {
this.writer.write(";");
} else {
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 b3f7057..fff2413 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
@@ -5,62 +5,75 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast;
// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration imports
// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration imports
-public record JavaMethodDeclaration(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier name, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaVisibility visibility, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodKind kind, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef returnType, java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaParam> params, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlock> body) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaClassBodyDeclaration {
+import java.util.List;
+import java.util.Optional;
+
+public record JavaMethodDeclaration(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier name, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaVisibility visibility, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodKind kind, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef returnType, java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaParam> params, java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef> throws_, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlock> body) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaClassBodyDeclaration {
public static org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder arbitrary() {
- return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaVisibility.PUBLIC, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodKind.STATIC, org.zwobble.hobgoblin.compiler.output.lang.java.ast.HobgoblinNativeAst.arbitraryJavaTypeRef(), java.util.List.of(), java.util.Optional.empty());
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaVisibility.PUBLIC, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodKind.STATIC, org.zwobble.hobgoblin.compiler.output.lang.java.ast.HobgoblinNativeAst.arbitraryJavaTypeRef(), java.util.List.of(), java.util.List.of(), java.util.Optional.empty());
}
- public record Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier name, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaVisibility visibility, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodKind kind, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef returnType, java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaParam> params, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlock> body) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaClassBodyDeclaration.Builder {
+ public record Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier name, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaVisibility visibility, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodKind kind, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef returnType, java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaParam> params, java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef> throws_, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlock> body) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaClassBodyDeclaration.Builder {
public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration build() {
- return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration(name, visibility, kind, returnType, params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration(name, visibility, kind, returnType, params, throws_, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder withName(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier name) {
- return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, throws_, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder withName(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier.Builder name) {
- return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name.build(), visibility, kind, returnType, params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name.build(), visibility, kind, returnType, params, throws_, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder withVisibility(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaVisibility visibility) {
- return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, throws_, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder withKind(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodKind kind) {
- return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, throws_, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder withReturnType(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef returnType) {
- return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, throws_, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder withParams(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaParam> params) {
- return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, throws_, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder addParam(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaParam param) {
var params = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaParam>(this.params);
params.add(param);
- return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, throws_, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder addParam(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaParam.Builder param) {
var params = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaParam>(this.params);
params.add(param.build());
- return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, throws_, body);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder withThrows(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef> throws_) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, throws_, body);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder addThrow(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef throw_) {
+ var throws_ = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef>(this.throws_);
+ throws_.add(throw_);
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, throws_, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder withBody(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlock> body) {
- return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, throws_, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder withBody(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlock body) {
- return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, java.util.Optional.of(body));
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, throws_, java.util.Optional.of(body));
}
public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder withBody(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlock.Builder body) {
- return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, java.util.Optional.of(body.build()));
+ return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder(name, visibility, kind, returnType, params, throws_, java.util.Optional.of(body.build()));
}
// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration.Builder body
@@ -68,12 +81,30 @@ public record JavaMethodDeclaration(org.zwobble.hobgoblin.compiler.output.lang.j
}
// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodDeclaration body
+ public static Builder builder(
+ JavaIdentifier name,
+ JavaVisibility visibility,
+ JavaMethodKind kind,
+ JavaTypeRef returnType
+ ) {
+ return new Builder(
+ name,
+ visibility,
+ kind,
+ returnType,
+ List.of(),
+ List.of(),
+ Optional.empty()
+ );
+ }
+
public JavaMethodDeclaration(
JavaIdentifier name,
JavaVisibility visibility,
JavaMethodKind kind,
JavaTypeRef returnType,
java.util.List<JavaParam> params,
+ java.util.List<JavaTypeRef> throws_,
JavaBlock body
) {
this(
@@ -82,6 +113,7 @@ public record JavaMethodDeclaration(org.zwobble.hobgoblin.compiler.output.lang.j
kind,
returnType,
params,
+ throws_,
java.util.Optional.of(body)
);
}