From 2fbd578b771d158083c4b1aa5390be0916cb7870 Mon Sep 17 00:00:00 2001 From: aNNiMON Date: Mon, 27 Nov 2023 19:14:01 +0200 Subject: [PATCH] Preserve the order of Map elements by default --- .../src/main/java/com/annimon/ownlang/parser/Parser.java | 2 +- .../ownlang/parser/optimization/OptimizationVisitor.java | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/ownlang-parser/src/main/java/com/annimon/ownlang/parser/Parser.java b/ownlang-parser/src/main/java/com/annimon/ownlang/parser/Parser.java index cf8522f..271c3ee 100644 --- a/ownlang-parser/src/main/java/com/annimon/ownlang/parser/Parser.java +++ b/ownlang-parser/src/main/java/com/annimon/ownlang/parser/Parser.java @@ -388,7 +388,7 @@ public final class Parser { private Node map() { // {key1 : value1, key2 : value2, ...} consume(TokenType.LBRACE); - final Map elements = new HashMap<>(); + final Map elements = new LinkedHashMap<>(); while (!match(TokenType.RBRACE)) { final Node key = primary(); consume(TokenType.COLON); diff --git a/ownlang-parser/src/main/java/com/annimon/ownlang/parser/optimization/OptimizationVisitor.java b/ownlang-parser/src/main/java/com/annimon/ownlang/parser/optimization/OptimizationVisitor.java index 0f15305..29a90d3 100644 --- a/ownlang-parser/src/main/java/com/annimon/ownlang/parser/optimization/OptimizationVisitor.java +++ b/ownlang-parser/src/main/java/com/annimon/ownlang/parser/optimization/OptimizationVisitor.java @@ -5,10 +5,7 @@ import com.annimon.ownlang.lib.UserDefinedFunction; import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.parser.ast.*; import static com.annimon.ownlang.parser.visitors.VisitorUtils.isValue; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public abstract class OptimizationVisitor implements ResultVisitor { @@ -264,7 +261,7 @@ public abstract class OptimizationVisitor implements ResultVisitor { @Override public Node visit(MapExpression s, T t) { - final Map elements = new HashMap<>(s.elements.size()); + final Map elements = new LinkedHashMap<>(s.elements.size()); boolean changed = false; for (Map.Entry entry : s.elements.entrySet()) { final Node key = entry.getKey().accept(this, t);