summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-08-28 19:18:53 +0100
committerMichael Williamson <mike@zwobble.org>2026-08-28 19:18:53 +0100
commitdab3e3e24b485e732c9419620557c5f83ff7984e (patch)
treec98cf454bd5966b8451d2c73b971aaf5b1511ccc /src/main/java
parentaf0f173fcc0bf84316e188a0e6d4da4dfe11b021 (diff)
Pass supplier for each type param in arbitrary generic native func
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/analysis/ArbitraryValueAnalysis.java19
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java9
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()
);
});
}