From 9fdcd3dfd15b25fa88b23f90541479e39e042e67 Mon Sep 17 00:00:00 2001 From: JFronny Date: Thu, 29 Jun 2023 15:40:45 +0200 Subject: [PATCH] Make DObject.get null-safe --- .../io/gitlab/jfronny/muscript/data/dynamic/DObject.java | 6 ++++-- .../io/gitlab/jfronny/muscript/data/dynamic/Dynamic.java | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/muscript/src/main/java/io/gitlab/jfronny/muscript/data/dynamic/DObject.java b/muscript/src/main/java/io/gitlab/jfronny/muscript/data/dynamic/DObject.java index d3ccfe9..10686ba 100644 --- a/muscript/src/main/java/io/gitlab/jfronny/muscript/data/dynamic/DObject.java +++ b/muscript/src/main/java/io/gitlab/jfronny/muscript/data/dynamic/DObject.java @@ -3,13 +3,15 @@ package io.gitlab.jfronny.muscript.data.dynamic; import io.gitlab.jfronny.muscript.ast.DynamicExpr; import io.gitlab.jfronny.muscript.ast.dynamic.ObjectLiteral; import io.gitlab.jfronny.muscript.compiler.CodeLocation; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Map; import java.util.stream.Collectors; public non-sealed interface DObject extends Dynamic>> { - default Dynamic get(String key) { - return getValue().get(key); + default @NotNull Dynamic get(String key) { + return Dynamic.fromNullable(getValue().get(key)); } default boolean has(String key) { diff --git a/muscript/src/main/java/io/gitlab/jfronny/muscript/data/dynamic/Dynamic.java b/muscript/src/main/java/io/gitlab/jfronny/muscript/data/dynamic/Dynamic.java index 2b29cbf..085a443 100644 --- a/muscript/src/main/java/io/gitlab/jfronny/muscript/data/dynamic/Dynamic.java +++ b/muscript/src/main/java/io/gitlab/jfronny/muscript/data/dynamic/Dynamic.java @@ -7,6 +7,8 @@ import io.gitlab.jfronny.muscript.ast.Expr; import io.gitlab.jfronny.muscript.compiler.ExprWriter; import io.gitlab.jfronny.muscript.compiler.Parser; import io.gitlab.jfronny.muscript.data.dynamic.additional.*; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.IOException; @@ -40,6 +42,10 @@ public sealed interface Dynamic permits DBool, DNumber, DString, DObject, DLi return dynamic == null || dynamic instanceof DNull; } + static @NotNull Dynamic fromNullable(@Nullable Dynamic dynamic) { + return dynamic == null ? new DNull() : dynamic; + } + default void serialize(ExprWriter writer) throws IOException { toExpr().decompile(writer); }