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}