From b609430f468d1a8dce431ba2049e6bf9e31ae3d4 Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Wed, 5 May 2021 18:18:37 +0200 Subject: [PATCH] Handle OptComponents. - see #23 --- ragconnect.base/src/main/jastadd/Navigation.jrag | 5 +++++ .../src/main/jastadd/intermediate/Generation.jadd | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/ragconnect.base/src/main/jastadd/Navigation.jrag b/ragconnect.base/src/main/jastadd/Navigation.jrag index 5bddf79..217f564 100644 --- a/ragconnect.base/src/main/jastadd/Navigation.jrag +++ b/ragconnect.base/src/main/jastadd/Navigation.jrag @@ -96,4 +96,9 @@ aspect Navigation { // --- rootTypeComponents --- syn JastAddList<MTypeComponent> MHandler.rootTypeComponents() = mragconnect().getRootTypeComponents(); + + // === for preprocessor === + // --- isOptComponent --- + syn boolean TypeComponent.isOptComponent() = false; + eq OptComponent.isOptComponent() = true; } diff --git a/ragconnect.base/src/main/jastadd/intermediate/Generation.jadd b/ragconnect.base/src/main/jastadd/intermediate/Generation.jadd index 444f021..67891ff 100644 --- a/ragconnect.base/src/main/jastadd/intermediate/Generation.jadd +++ b/ragconnect.base/src/main/jastadd/intermediate/Generation.jadd @@ -62,12 +62,17 @@ aspect AttributesForMustache { syn String MEndpointDefinition.lastDefinitionToType() = lastDefinition().toType(); syn String MEndpointDefinition.lastResult() = lastDefinition().outputVarName(); syn String MEndpointDefinition.condition() { + // TODO probably, this has to be structured in a better way if (lastDefinition().mappingDef().getToType().isArray()) { return "java.util.Arrays.equals(" + preemptiveExpectedValue() + ", " + lastResult() + ")"; } if (endpointDef().isTokenEndpointDefinition() && token().isPrimitiveType() && lastDefinition().mappingDef().getToType().isPrimitiveType()) { return preemptiveExpectedValue() + " == " + lastResult(); } + if (endpointDef().isTypeEndpointDefinition() && type().isOptComponent()) { + // use "hasX()" instead of "getX() != null" for optionals + return "has" + typeName() + "()" + " && " + preemptiveExpectedValue() + ".equals(" + lastResult() + ")"; + } if (lastDefinition().mappingDef().getToType().isPrimitiveType() || lastDefinition().mappingDef().isDefaultMappingDefinition()) { return preemptiveExpectedValue() + " != null && " + preemptiveExpectedValue() + ".equals(" + lastResult() + ")"; } -- GitLab