diff --git a/src/main/jastadd/backend/Generation.jadd b/src/main/jastadd/backend/Generation.jadd index 81e2dabe41761ef3e1b3058adb2809be90f6ac1d..abce6a07b80fb96313de4760511c5339e9da92a0 100644 --- a/src/main/jastadd/backend/Generation.jadd +++ b/src/main/jastadd/backend/Generation.jadd @@ -141,16 +141,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 7add42fa7e3d3f7c71cb35b5a34c8c5d05b83628..fd40385d9e8879dd188362f6a0acd802652f511e 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(); diff --git a/src/main/resources/MqttUpdater.jadd b/src/main/resources/MqttUpdater.jadd index 394735cc78595ad0ebe15b5ab1fa6e73ef435b13..df1dc10054722b249c10637781bc896eebdaf37f 100644 --- a/src/main/resources/MqttUpdater.jadd +++ b/src/main/resources/MqttUpdater.jadd @@ -231,8 +231,16 @@ public class MqttUpdater { } public void publish(String topic, byte[] bytes) { + publish(topic, bytes, false); + } + + public void publish(String topic, byte[] bytes, boolean retain) { + publish(topic, bytes, this.qos, retain); + } + + public void publish(String topic, byte[] bytes, org.fusesource.mqtt.client.QoS qos, boolean retain) { connection.getDispatchQueue().execute(() -> { - connection.publish(topic, bytes, qos, false, new org.fusesource.mqtt.client.Callback<Void>() { + connection.publish(topic, bytes, qos, retain, new org.fusesource.mqtt.client.Callback<Void>() { @Override public void onSuccess(Void value) { logger.debug("Published some bytes to {}", topic);