From d37d389700a3def554c4edbd39dfb9ee9f812a0c Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Fri, 15 Mar 2019 17:09:48 +0100 Subject: [PATCH] add more checks during serialization --- src/main/jastadd/Analysis.jrag | 9 +++++++++ src/main/jastadd/Backend.jadd | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/main/jastadd/Analysis.jrag b/src/main/jastadd/Analysis.jrag index 48f1e58..941256e 100644 --- a/src/main/jastadd/Analysis.jrag +++ b/src/main/jastadd/Analysis.jrag @@ -118,6 +118,15 @@ aspect ComponentAnalysis { // TODO return true; } + + syn boolean Component.isList() = false; + eq ListComponent.isList() = true; + + syn boolean Component.isOpt() = false; + eq OptComponent.isOpt() = true; + + syn boolean Component.isNullable() = false; + eq TokenComponent.isNullable() = !"float double int short long char byte boolean".contains(getTypeUse().getID()); } aspect InstanceSupplier { diff --git a/src/main/jastadd/Backend.jadd b/src/main/jastadd/Backend.jadd index 528e453..b4d174d 100644 --- a/src/main/jastadd/Backend.jadd +++ b/src/main/jastadd/Backend.jadd @@ -1051,10 +1051,20 @@ aspect Serializer { sb.append(ind(4) + "g.writeObjectFieldStart(fieldName);\n"); sb.append(ind(3) + "}\n"); sb.append(ind(3) + "g.writeStringField(\"" + jsonTypeKey + "\", \"" + getID() + "\");\n"); + sb.append(ind(3) + "if (__uid() == null) throw new SerializationException(\"The unique identifier of " + getID() + " is missing.\");\n"); sb.append(ind(3) + "g.writeStringField(\"id\", __uid());\n"); if (componentsTransitive().size() > 0) { sb.append(ind(3) + "g.writeObjectFieldStart(\"children\");\n"); for (Component child : componentsTransitive()) { + if (child.isNullable()) { + String componentAccessor = child.getID(); + if (child.isList()) { + componentAccessor += "List"; + } else if (child.isOpt()) { + componentAccessor += "Opt"; + } + sb.append(ind(3) + "if (get" + componentAccessor + "() == null) throw new SerializationException(\"The component " + child.getID() + " of " + getID() + " is missing.\");\n"); + } child.serialize(sb, 3); } sb.append(ind(3) + "g.writeEndObject(); // children\n"); -- GitLab