From ba9805f92fe8b5a5a91f72cd200100485c3056c1 Mon Sep 17 00:00:00 2001 From: Leonid Primolenniy Date: Thu, 26 Oct 2017 17:41:16 +0300 Subject: [PATCH] default children container --- .../java/jetbrains/jetpad/mapper/Mapper.java | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/mapper/src/main/java/jetbrains/jetpad/mapper/Mapper.java b/mapper/src/main/java/jetbrains/jetpad/mapper/Mapper.java index 55be50c6..580c0eff 100755 --- a/mapper/src/main/java/jetbrains/jetpad/mapper/Mapper.java +++ b/mapper/src/main/java/jetbrains/jetpad/mapper/Mapper.java @@ -17,6 +17,7 @@ import com.google.common.collect.Iterators; import jetbrains.jetpad.base.ThrowableHandlers; +import jetbrains.jetpad.model.collections.ObservableCollection; import jetbrains.jetpad.model.collections.list.ObservableArrayList; import jetbrains.jetpad.model.collections.list.ObservableList; import jetbrains.jetpad.model.collections.set.ObservableHashSet; @@ -74,6 +75,7 @@ public abstract class Mapper { private Object[] myParts = EMPTY_PARTS; private Mapper myParent; + private ObservableCollection> childrenContainer = createChildSet(); /** * Construct a mapper with SourceT source and TargetT target @@ -334,7 +336,15 @@ protected int toNext(int index) { return new ChildProperty<>(); } - private void addChild(Mapper child) { + public void addChild(Mapper mapper) { + childrenContainer.add(mapper); + } + + public void removeChild(Mapper mapper) { + childrenContainer.remove(mapper); + } + + private void addChildInternal(Mapper child) { if (myState != State.ATTACHING_SYNCHRONIZERS && myState != State.ATTACHING_CHILDREN && myState != State.ATTACHED) { throw new IllegalStateException("State = " + myState); } @@ -345,7 +355,7 @@ private void addChild(Mapper child) { } } - private void removeChild(Mapper child) { + private void removeChildInternal(Mapper child) { child.detach(); child.myParent = null; } @@ -376,12 +386,12 @@ public void set(MapperT value) { MapperT oldValue = get(); if (oldValue != null) { checkCanRemove(oldValue); - removeChild(oldValue); + removeChildInternal(oldValue); } super.set(value); if (value != null) { checkCanAdd(value); - addChild(value); + addChildInternal(value); } } @@ -422,20 +432,20 @@ protected void beforeItemAdded(int index, MapperT item) { if (isEmpty()) { addPart(this); } - addChild(item); + addChildInternal(item); super.beforeItemAdded(index, item); } @Override protected void beforeItemSet(int index, MapperT oldItem, MapperT newItem) { - removeChild(oldItem); - addChild(newItem); + removeChildInternal(oldItem); + addChildInternal(newItem); super.beforeItemSet(index, oldItem, newItem); } @Override protected void beforeItemRemoved(int index, MapperT item) { - removeChild(item); + removeChildInternal(item); super.beforeItemRemoved(index, item); } @@ -469,13 +479,13 @@ protected void beforeItemAdded(MapperT item) { if (isEmpty()) { addPart(this); } - addChild(item); + addChildInternal(item); super.beforeItemAdded(item); } @Override protected void beforeItemRemoved(MapperT item) { - removeChild(item); + removeChildInternal(item); super.beforeItemRemoved(item); }