From cf359a2adfb72b7ac668830d2cf7054a6bbf3128 Mon Sep 17 00:00:00 2001 From: Tyler Gregg Date: Fri, 15 Sep 2023 14:37:45 -0700 Subject: [PATCH] Fixes a bug in that prevented the correct IonContext from being copied via IonStruct.cloneAndRemove and IonStruct.cloneAndRetain. --- src/com/amazon/ion/impl/lite/IonStructLite.java | 1 + test/com/amazon/ion/StructTest.java | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/src/com/amazon/ion/impl/lite/IonStructLite.java b/src/com/amazon/ion/impl/lite/IonStructLite.java index 509460336f..c05feef334 100644 --- a/src/com/amazon/ion/impl/lite/IonStructLite.java +++ b/src/com/amazon/ion/impl/lite/IonStructLite.java @@ -318,6 +318,7 @@ private IonStruct doClone(boolean keep, String... fieldNames) // This ensures that we don't copy an unknown field name. clonedChild._fieldName = value.getFieldName(); clonedChild._elementid(clone._child_count); + clonedChild._context = clone; if (!clone._isSymbolIdPresent() && clonedChild._isSymbolIdPresent()) { clone.cascadeSIDPresentToContextRoot(); diff --git a/test/com/amazon/ion/StructTest.java b/test/com/amazon/ion/StructTest.java index 88861772ae..eab5bb1708 100644 --- a/test/com/amazon/ion/StructTest.java +++ b/test/com/amazon/ion/StructTest.java @@ -748,6 +748,15 @@ public void testRemoveAfterClone() assertNull(s2.get("b")); } + @Test + public void testRemoveAfterCloneAndRemove() { + IonStruct struct1 = (IonStruct) system().singleValue("{a:1,b:2}"); + IonStruct struct2 = struct1.cloneAndRemove("a"); + + assertNotNull(struct2.remove("b")); + assertFalse(struct2.containsKey("b")); + } + @Test public void testPutOfClone() {