diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-10 17:32:05 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-10 17:32:05 +0100 |
| commit | 29dba03d9b65f3c1b9bd235ec5a7f41631fab2be (patch) | |
| tree | 41271f837e0fb15eaec973d4f3bb199c483a14e0 /src/main | |
| parent | f912662eda850f1c28096dbc8ae2fa269723208b (diff) | |
Add type args to static method calls in Java AST
Diffstat (limited to 'src/main')
6 files changed, 53 insertions, 12 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java index e1be9e6..4a2d6f1 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java @@ -89,8 +89,8 @@ public record JavaGeneratorConfig( Map.entry(NativeTypes.INT_32, JavaNativeTypeConfig.primitive(JavaTypeRef.INT, JavaTypeRef.INT_BOXED, new JavaIntegerLiteral(0))), Map.entry(NativeTypes.INT_64, JavaNativeTypeConfig.primitive(JavaTypeRef.LONG, JavaTypeRef.LONG_BOXED, new JavaIntegerLiteral(0))), Map.entry(NativeTypes.STRING, JavaNativeTypeConfig.of(JavaTypeRef.STRING, new JavaStringLiteral(""))), - Map.entry(NativeTypes.LIST_INNER, JavaNativeTypeConfig.of(JavaTypeRef.LIST, new JavaStaticMethodCall(JavaTypeRef.LIST, JavaIdentifier.of("of"), List.of()))), - Map.entry(NativeTypes.OPTION_INNER, JavaNativeTypeConfig.of(JavaTypeRef.OPTIONAL, new JavaStaticMethodCall(JavaTypeRef.OPTIONAL, JavaIdentifier.of("empty"), List.of()))) + Map.entry(NativeTypes.LIST_INNER, JavaNativeTypeConfig.of(JavaTypeRef.LIST, new JavaStaticMethodCall(JavaTypeRef.LIST, List.of(), JavaIdentifier.of("of"), List.of()))), + Map.entry(NativeTypes.OPTION_INNER, JavaNativeTypeConfig.of(JavaTypeRef.OPTIONAL, new JavaStaticMethodCall(JavaTypeRef.OPTIONAL, List.of(), JavaIdentifier.of("empty"), List.of()))) ); public Optional<JavaNativeTypeConfig> nativeTypeConfig(SimpleNativeType type) { 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 10b85f4..760e01e 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 @@ -110,7 +110,7 @@ public class JavaPreciselyMatchersGenerator implements Generator { new JavaReturn(new JavaNewExpression( javaMatcherTypeRef, List.of( - new JavaStaticMethodCall(JavaTypeRef.LIST, JavaIdentifier.of("of"), List.of()) + new JavaStaticMethodCall(JavaTypeRef.LIST, List.of(), JavaIdentifier.of("of"), List.of()) ) )) )) @@ -188,6 +188,7 @@ public class JavaPreciselyMatchersGenerator implements Generator { new JavaBlock(List.of( new JavaReturn(new JavaStaticMethodCall( MATCHERS_REF, + List.of(), JavaIdentifier.of("instanceOf"), List.of( new JavaClassLiteral(javaStructTypeRef), @@ -227,6 +228,7 @@ public class JavaPreciselyMatchersGenerator implements Generator { JavaIdentifier.of("add"), List.of(new JavaStaticMethodCall( MATCHERS_REF, + List.of(), JavaIdentifier.of("has"), List.of( new JavaStringLiteral(field.name()), 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 4f4f0b9..6d3177d 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 @@ -132,11 +132,13 @@ public class JavaTransient0Generator implements Generator { generateHashCode(List.of( new JavaStaticMethodCall( JavaTypeRef.LONG_BOXED, + List.of(), JavaIdentifier.of("hashCode"), List.of(new JavaFieldAccess(JavaRef.THIS, typeId)) ), new JavaStaticMethodCall( JavaTypeRef.SYSTEM, + List.of(), JavaIdentifier.of("identityHashCode"), List.of(new JavaFieldAccess(JavaRef.THIS, value)) ) @@ -629,6 +631,7 @@ public class JavaTransient0Generator implements Generator { enumValues, Optional.of(new JavaStaticMethodCall( enumJavaTypeRef, + List.of(), JavaIdentifier.of("values"), List.of() )) @@ -943,6 +946,7 @@ public class JavaTransient0Generator implements Generator { return new JavaExpressionStatement( new JavaStaticMethodCall( generateTransient0TypeRef(typeNamespaceName), + List.of(), encodeMethodName(type), Lists.concat(List.of( List.of( @@ -1068,6 +1072,7 @@ public class JavaTransient0Generator implements Generator { target, Optional.of(new JavaStaticMethodCall( generateTransient0TypeRef(typeNamespaceName), + List.of(), decodeMethodName(type), Lists.concat(List.of( List.of( @@ -1237,6 +1242,7 @@ public class JavaTransient0Generator implements Generator { new JavaRef(target), new JavaStaticMethodCall( JavaTypeRef.OPTIONAL, + List.of(), JavaIdentifier.of("of"), List.of(new JavaRef(element)) ) @@ -1251,6 +1257,7 @@ public class JavaTransient0Generator implements Generator { new JavaRef(target), new JavaStaticMethodCall( JavaTypeRef.OPTIONAL, + List.of(), JavaIdentifier.of("empty"), List.of() ) 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 4f4f648..93047d3 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 @@ -489,6 +489,7 @@ public class JavaTypesGenerator implements Generator { if (argComponent.name().equals(javaFieldName)) { return new JavaStaticMethodCall( JavaTypeRef.OPTIONAL, + List.of(), JavaIdentifier.of("of"), List.of(new JavaRef(javaFieldName)) ); @@ -520,6 +521,7 @@ public class JavaTypesGenerator implements Generator { if (argComponent.name().equals(javaFieldName)) { return new JavaStaticMethodCall( JavaTypeRef.OPTIONAL, + List.of(), JavaIdentifier.of("of"), List.of(new JavaMethodCall(new JavaRef(javaFieldName), BUILD_METHOD_NAME, List.of())) ); @@ -653,6 +655,7 @@ public class JavaTypesGenerator implements Generator { yield new JavaMethodCall( new JavaStaticMethodCall( generateTypeRef(constructedType.constructor().genericType(), context), + List.of(), ARBITRARY_METHOD_NAME, constructedType.args().stream() .<JavaExpression>map(typeArg -> new JavaLambdaExpression( @@ -683,6 +686,7 @@ public class JavaTypesGenerator implements Generator { var javaClassName = generateTypeName("HobgoblinNative" + lowerCamelCaseToUpperCamelCase(javaPackageName.parts().getLast().value())); return new JavaStaticMethodCall( JavaTypeRef.topLevel(javaPackageName, javaClassName), + List.of(), generateFieldName("arbitrary" + simpleNativeType.name()), List.of() ); @@ -691,7 +695,12 @@ public class JavaTypesGenerator implements Generator { case SimpleStructType structType -> { yield new JavaMethodCall( - new JavaStaticMethodCall(generateTypeRef(structType, context), ARBITRARY_METHOD_NAME, List.of()), + new JavaStaticMethodCall( + generateTypeRef(structType, context), + List.of(), + ARBITRARY_METHOD_NAME, + List.of() + ), BUILD_METHOD_NAME, List.of() ); 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 74c7a2b..29bb762 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 @@ -953,6 +953,17 @@ public class JavaWriter implements AutoCloseable { private void writeStaticMethodCall(JavaStaticMethodCall call) throws IOException { this.writeTypeRef(call.type()); this.writer.write("."); + + if (!call.typeArgs().isEmpty()) { + this.writer.write("<"); + writeWithSeparator( + call.typeArgs(), + this::writeTypeRef, + () -> this.writer.write(", ") + ); + this.writer.write(">"); + } + this.writeIdentifier(call.methodName()); this.writer.write("("); writeWithSeparator( diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaStaticMethodCall.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaStaticMethodCall.java index 222e1d8..677aec8 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaStaticMethodCall.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaStaticMethodCall.java @@ -7,48 +7,60 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; public record JavaStaticMethodCall( org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef type, + java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef> typeArgs, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier methodName, java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression> args ) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression { public static org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder arbitrary() { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.HobgoblinNativeAst.arbitraryJavaTypeRef(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier.arbitrary().build(), java.util.List.of()); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.HobgoblinNativeAst.arbitraryJavaTypeRef(), java.util.List.of(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier.arbitrary().build(), java.util.List.of()); } public record Builder( org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef type, + java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef> typeArgs, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier methodName, java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression> args ) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression.Builder { public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall build() { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall(type, methodName, args); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall(type, typeArgs, methodName, args); } public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder withType(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef type) { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(type, methodName, args); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(type, typeArgs, methodName, args); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder withTypeArgs(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef> typeArgs) { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(type, typeArgs, methodName, args); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder addTypeArg(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef typeArg) { + var typeArgs = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef>(this.typeArgs); + typeArgs.add(typeArg); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(type, typeArgs, methodName, args); } public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder withMethodName(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier methodName) { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(type, methodName, args); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(type, typeArgs, methodName, args); } public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder withMethodName(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier.Builder methodName) { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(type, methodName.build(), args); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(type, typeArgs, methodName.build(), args); } public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder withArgs(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression> args) { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(type, methodName, args); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(type, typeArgs, methodName, args); } public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder addArg(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression arg) { var args = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression>(this.args); args.add(arg); - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(type, methodName, args); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(type, typeArgs, methodName, args); } public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder addArg(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression.Builder arg) { var args = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression>(this.args); args.add(arg.build()); - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(type, methodName, args); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder(type, typeArgs, methodName, args); } // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall.Builder body |
