001package co.codewizards.cloudstore.ls.core.invoke;
002
003import static java.util.Objects.*;
004
005import java.io.Serializable;
006import java.util.HashMap;
007import java.util.Map;
008
009import co.codewizards.cloudstore.core.ls.NoObjectRef;
010
011public class ForceNonTransientContainer implements Serializable {
012        private static final long serialVersionUID = 1L;
013
014        private final Object transientFieldOwnerObject;
015
016        private final Map<String, Object> transientFieldName2Value;
017
018        public ForceNonTransientContainer(final Object transientFieldOwnerObject, Map<String, Object> transientFieldName2Value) {
019                this.transientFieldOwnerObject = requireNonNull(transientFieldOwnerObject, "transientFieldOwnerObject");
020                this.transientFieldName2Value = new NoObjectRefMap<String, Object>(requireNonNull(transientFieldName2Value, "transientFieldName2Value"));
021        }
022
023        public Object getTransientFieldOwnerObject() {
024                return transientFieldOwnerObject;
025        }
026
027        public Map<String, Object> getTransientFieldName2Value() {
028                return transientFieldName2Value;
029        }
030
031        @NoObjectRef(inheritToObjectGraphChildren = false)
032        private static final class NoObjectRefMap<K, V> extends HashMap<K, V> {
033                private static final long serialVersionUID = 1L;
034
035                public NoObjectRefMap(Map<? extends K, ? extends V> m) {
036                        super(m);
037                }
038        }
039}