diff --git a/Strata/DDM/Integration/Java/Gen.lean b/Strata/DDM/Integration/Java/Gen.lean index 890c556cf2..48b0b14384 100644 --- a/Strata/DDM/Integration/Java/Gen.lean +++ b/Strata/DDM/Integration/Java/Gen.lean @@ -35,7 +35,7 @@ structure types at compile time and generates Java source code consisting of: ## Container types -`List α` → `java.util.List`, `Option α` → nullable `T` +`List α` → `java.util.List`, `Option α` → `java.util.Optional` -/ namespace Strata.Java @@ -242,7 +242,7 @@ private meta def javaTypeForInfo : FieldTypeInfo → String | .leaf name => (leafJavaType name).getD "java.lang.Object" | .compound name => escapeJavaName (toPascalCase (name.getString!)) | .list elem => s!"java.util.List<{javaBoxedTypeForInfo elem}>" - | .option elem => javaBoxedTypeForInfo elem + | .option elem => s!"java.util.Optional<{javaBoxedTypeForInfo elem}>" where javaBoxedTypeForInfo : FieldTypeInfo → String | .leaf ``Nat | .leaf ``Int => "Long" @@ -263,8 +263,8 @@ private meta partial def serializeExprForInfo (ti : FieldTypeInfo) (accessor : S -- This branch is used for inner elements of containers (e.g., Option (List T)). s!"{accessor}.toIon(ion)" | .option elem => - let inner := serializeExprForInfo elem accessor - s!"({accessor} != null ? {inner} : ion.newNull())" + let inner := serializeExprForInfo elem s!"{accessor}.get()" + s!"({accessor}.isPresent() ? {inner} : ion.newNull())" private meta def serializeExprFor (f : FieldInfo) (accessor : String) : String := serializeExprForInfo f.typeInfo accessor