diff --git a/src/main/jastadd/backend/Generation.jadd b/src/main/jastadd/backend/Generation.jadd index e698e405ee6d392d2405b15fe0869432b9b18a59..1b6dfff3386d079e75163c4725681a87904f6786 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 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();