diff options
Diffstat (limited to 'src/main/java')
2 files changed, 24 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/analysis/ArbitraryValueAnalysis.java b/src/main/java/org/zwobble/hobgoblin/compiler/analysis/ArbitraryValueAnalysis.java index 650e753..6664538 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/analysis/ArbitraryValueAnalysis.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/analysis/ArbitraryValueAnalysis.java @@ -15,9 +15,15 @@ public class ArbitraryValueAnalysis { public sealed interface ArbitraryValue { void collectTypeParams(Set<TypeParam> typeParams); - record NativeFunctionCall(SimpleNativeType type) implements ArbitraryValue { + record NativeFunctionCall( + SimpleNativeType type, + List<ArbitraryValue> args + ) implements ArbitraryValue { @Override public void collectTypeParams(Set<TypeParam> typeParams) { + for (var arg : args) { + arg.collectTypeParams(typeParams); + } } } @@ -79,7 +85,14 @@ public class ArbitraryValueAnalysis { yield new ArbitraryValue.Shared(arbitraryValue(constructedNativeType.args().getFirst(), typesInfo)); } - yield new ArbitraryValue.NativeFunctionCall(constructedNativeType.constructor().genericType()); + var args = constructedNativeType.args().stream() + .map(argType -> arbitraryValue(argType, typesInfo)) + .toList(); + + yield new ArbitraryValue.NativeFunctionCall( + constructedNativeType.constructor().genericType(), + args + ); } case ConstructedStructType constructedStructType -> { @@ -106,7 +119,7 @@ public class ArbitraryValueAnalysis { new ArbitraryValue.EnumVariantValue(enumType, typesInfo.enumVariants(enumType).getFirst()); case SimpleNativeType simpleNativeType -> - new ArbitraryValue.NativeFunctionCall(simpleNativeType); + new ArbitraryValue.NativeFunctionCall(simpleNativeType, List.of()); case SimpleStructType simpleStructType -> new ArbitraryValue.SimpleStructBuilder(simpleStructType); 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 3143905..814fe4b 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 @@ -692,7 +692,14 @@ public class JavaTypesGenerator implements Generator { JavaTypeRef.topLevel(javaPackageName, javaClassName), List.of(), generateFieldName("arbitrary" + simpleNativeType.name()), - List.of() + nativeFunctionCall.args().stream() + .<JavaExpression>map(arg -> new JavaLambdaExpression( + List.of(), + new JavaBlock(List.of( + new JavaReturn(abstractArbitraryValueToJava(arg, context)) + )) + )) + .toList() ); }); } |
