From 72b5eccfe399f53ce5c705e6293cd77e0f30d9f6 Mon Sep 17 00:00:00 2001
From: rschoene <rene.schoene@tu-dresden.de>
Date: Fri, 19 Jun 2020 17:57:29 +0200
Subject: [PATCH] Fixed issue #22

- Added TestUtils.waitForMqtt
---
 src/main/jastadd/backend/Generation.jadd | 25 +++++++++++++++---------
 src/main/jastadd/backend/Mappings.jrag   |  6 ++++++
 2 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/src/main/jastadd/backend/Generation.jadd b/src/main/jastadd/backend/Generation.jadd
index e698e40..1b6dfff 100644
--- a/src/main/jastadd/backend/Generation.jadd
+++ b/src/main/jastadd/backend/Generation.jadd
@@ -146,16 +146,23 @@ aspect AspectGeneration {
     sb.append(ind(indent + 1)).append(preemptiveReturnStatement()).append("\n");
     sb.append(ind(indent)).append("}\n");
     if (!getAlwaysApply()) {
-      sb.append(ind(indent)).append("if (").append(preemptiveExpectedValue());
-      if (getToken().isPrimitiveType()) {
-        sb.append(" == ").append(inputVariableName);
-      } else if (effectiveMappings().get(effectiveMappings().size() - 1).isDefaultMappingDefinition()) {
-        sb.append(" != null && ").append(preemptiveExpectedValue()).append(".equals(")
-          .append(inputVariableName).append(")");
+      MappingDefinition lastMapping = effectiveMappings().get(effectiveMappings().size() - 1);
+      sb.append(ind(indent)).append("if (");
+      if (lastMapping.getToType().isArray()) {
+        sb.append("java.util.Arrays.equals(").append(preemptiveExpectedValue())
+          .append(", ").append(inputVariableName).append(")");
       } else {
-        sb.append(" != null ? ").append(preemptiveExpectedValue()).append(".equals(")
-          .append(inputVariableName).append(")").append(" : ")
-          .append(inputVariableName).append(" == null");
+        sb.append(preemptiveExpectedValue());
+        if (getToken().isPrimitiveType() && lastMapping.getToType().isPrimitiveType()) {
+          sb.append(" == ").append(inputVariableName);
+        } else if (lastMapping.isDefaultMappingDefinition()) {
+          sb.append(" != null && ").append(preemptiveExpectedValue()).append(".equals(")
+            .append(inputVariableName).append(")");
+        } else {
+          sb.append(" != null ? ").append(preemptiveExpectedValue()).append(".equals(")
+            .append(inputVariableName).append(")").append(" : ")
+            .append(inputVariableName).append(" == null");
+        }
       }
       sb.append(") { ").append(preemptiveReturnStatement()).append(" }\n");
     }
diff --git a/src/main/jastadd/backend/Mappings.jrag b/src/main/jastadd/backend/Mappings.jrag
index 7add42f..fd40385 100644
--- a/src/main/jastadd/backend/Mappings.jrag
+++ b/src/main/jastadd/backend/Mappings.jrag
@@ -151,6 +151,12 @@ aspect Mappings {
       default: return false;
     }
   }
+  syn boolean MappingDefinitionType.isPrimitiveType() = false;
+  eq JavaMappingDefinitionType.isPrimitiveType() = getType().isPrimitiveType();
+
+  // --- isArray ---
+  syn boolean MappingDefinitionType.isArray() = false;
+  eq JavaArrayMappingDefinitionType.isArray() = true;
 
   // --- suitableDefaultMapping ---
   syn DefaultMappingDefinition UpdateDefinition.suitableDefaultMapping();
-- 
GitLab