#
# ClassFactory mappings
#

# java.lang
java.lang.StackTraceElement = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.StackTraceElementFactory
java.lang.Throwable = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.ThrowableFactory

# java.util - Map.Entry implementations
java.util.AbstractMap$SimpleEntry = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.SimpleEntryFactory
java.util.AbstractMap$SimpleImmutableEntry = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.SimpleEntryFactory

# java.util.concurrent.locks - Lock implementations
java.util.concurrent.locks.ReentrantLock = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.ReentrantLockFactory
java.util.concurrent.locks.ReentrantReadWriteLock = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.ReentrantReadWriteLockFactory

# java.util.concurrent - Synchronizers
java.util.concurrent.Semaphore = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.SemaphoreFactory
java.util.concurrent.CountDownLatch = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CountDownLatchFactory

# java.util - Optional
java.util.Optional = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.OptionalFactory

# java.util - BitSet
java.util.BitSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.BitSetFactory

# java.util.concurrent.atomic
java.util.concurrent.atomic.AtomicIntegerArray = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.AtomicIntegerArrayFactory
java.util.concurrent.atomic.AtomicLongArray = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.AtomicLongArrayFactory

# interface instantiates to...
java.util.Collection = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CollectionFactory
java.util.List = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CollectionFactory
java.util.Set = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CollectionFactory
java.util.SortedSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CollectionFactory
java.util.NavigableSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CollectionFactory
java.util.Deque = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CollectionFactory
java.util.Queue = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CollectionFactory
java.util.Map = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.MapFactory
java.util.SortedMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.MapFactory
java.util.NavigableMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.MapFactory

[C = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CharacterPrimArrayFactory
[Z = ArrayFactory
[B = ArrayFactory
[S = ArrayFactory
[I = ArrayFactory
[J = ArrayFactory
[F = ArrayFactory
[D = ArrayFactory

[Ljava.lang.Character; = ArrayFactory
[Ljava.lang.Boolean; = ArrayFactory
[Ljava.lang.Byte; = ArrayFactory
[Ljava.lang.Short; = ArrayFactory
[Ljava.lang.Integer; = ArrayFactory
[Ljava.lang.Long; = ArrayFactory
[Ljava.lang.Float; = ArrayFactory
[Ljava.lang.Double; = ArrayFactory

[Ljava.lang.Class; = ArrayFactory
[Ljava.lang.String; = ArrayFactory
[Ljava.sql.Date; = ArrayFactory
[Ljava.sql.Timestamp; = ArrayFactory
[Ljava.time.LocalDate; = ArrayFactory
[Ljava.math.BigDecimal; = ArrayFactory
[Ljava.math.BigInteger; = ArrayFactory

[Ljava.util.Calendar; = ArrayFactory
[Ljava.util.Currency; = ArrayFactory
[Ljava.util.Date; = ArrayFactory
[Ljava.util.Locale; = ArrayFactory
[Ljava.util.regex.Pattern; = ArrayFactory
[Ljava.util.concurrent.atomic.AtomicBoolean; = ArrayFactory
[Ljava.util.concurrent.atomic.AtomicInteger; = ArrayFactory
[Ljava.util.concurrent.atomic.AtomicLong; = ArrayFactory

[Ljava.time.Duration; = ArrayFactory
[Ljava.time.Instant; = ArrayFactory
[Ljava.time.Duration; = ArrayFactory
[Ljava.time.Instant; = ArrayFactory
[Ljava.time.LocalDate; = ArrayFactory
[Ljava.time.LocalDateTime; = ArrayFactory
[Ljava.time.LocalTime; = ArrayFactory
[Ljava.time.MonthDay; = ArrayFactory
[Ljava.time.OffsetDateTime; = ArrayFactory
[Ljava.time.OffsetTime; = ArrayFactory
[Ljava.time.Period; = ArrayFactory
[Ljava.time.Year; = ArrayFactory
[Ljava.time.YearMonth; = ArrayFactory
[Ljava.time.ZonedDateTime; = ArrayFactory
[Ljava.time.ZoneId; = ArrayFactory
[Ljava.time.ZoneOffset; = ArrayFactory
[Ljava.time.ZoneRegion; = ArrayFactory

# Use factory classes to re-create "singleton" Collections classes as they are not easily instantiated
java.util.Collections$SingletonList = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.SingletonFactory
java.util.Collections$SingletonSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.SingletonFactory
java.util.Collections$SingletonMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.SingletonFactory

# Use factory classes to re-create "empty" Collections classes as they are not easily instantiated
java.util.Collections$EmptyEnumeration = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.EmptyFactory
java.util.Collections$EmptyIterator = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.EmptyFactory
java.util.Collections$EmptyListIterator = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.EmptyFactory
java.util.Collections$EmptyList = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.EmptyFactory
java.util.Collections$EmptySet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.EmptyFactory
java.util.Collections$UnmodifiableNavigableSet$EmptyNavigableSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.EmptyFactory
java.util.Collections$EmptyMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.EmptyFactory
java.util.Collections$UnmodifiableNavigableMap$EmptyNavigableMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.EmptyFactory

# Use factory classes to re-create "unmodifiable" Collections classes
java.util.Collections$UnmodifiableCollection = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory
java.util.Collections$UnmodifiableList = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory
java.util.Collections$UnmodifiableRandomAccessList = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory
java.util.Collections$UnmodifiableSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory
java.util.Collections$UnmodifiableSortedSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory
java.util.Collections$UnmodifiableNavigableSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory
java.util.Collections$UnmodifiableMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory
java.util.Collections$UnmodifiableSortedMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory
java.util.Collections$UnmodifiableNavigableMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory

# Use SynchronizedFactory to instantiate "synchronized" Collections classes
java.util.Collections$SynchronizedCollection = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.SynchronizedFactory
java.util.Collections$SynchronizedList = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.SynchronizedFactory
java.util.Collections$SynchronizedRandomAccessList = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.SynchronizedFactory
java.util.Collections$SynchronizedSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.SynchronizedFactory
java.util.Collections$SynchronizedSortedSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.SynchronizedFactory
java.util.Collections$SynchronizedNavigableSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.SynchronizedFactory
java.util.Collections$SynchronizedMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.SynchronizedFactory
java.util.Collections$SynchronizedSortedMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.SynchronizedFactory
java.util.Collections$SynchronizedNavigableMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.SynchronizedFactory

# Use CheckedFactory to instantiate "checked" Collections classes
java.util.Collections$CheckedCollection = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CheckedFactory
java.util.Collections$CheckedList = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CheckedFactory
java.util.Collections$CheckedRandomAccessList = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CheckedFactory
java.util.Collections$CheckedSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CheckedFactory
java.util.Collections$CheckedSortedSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CheckedFactory
java.util.Collections$CheckedNavigableSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CheckedFactory
java.util.Collections$CheckedMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CheckedFactory
java.util.Collections$CheckedSortedMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CheckedFactory
java.util.Collections$CheckedNavigableMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CheckedFactory

io.pivotal.cfenv.shaded.com.cedarsoftware.io.util.SealableList = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory
io.pivotal.cfenv.shaded.com.cedarsoftware.io.util.SealableSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory
io.pivotal.cfenv.shaded.com.cedarsoftware.io.util.SealableNavigableSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory
io.pivotal.cfenv.shaded.com.cedarsoftware.io.util.SealableMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory
io.pivotal.cfenv.shaded.com.cedarsoftware.io.util.SealableNavigableMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory

# List.of() and Set.of() support
java.util.ImmutableCollections$ListN = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory
java.util.ImmutableCollections$List12 = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory
java.util.ImmutableCollections$SetN = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory
java.util.ImmutableCollections$Set12 = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.UnmodifiableFactory

java.util.EnumSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.EnumSetFactory

# CompactMap
com.cedarsoftware.util.CompactMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CompactMapFactory

# CompactSet
com.cedarsoftware.util.CompactSet = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CompactSetFactory

# MultiKeyMap
com.cedarsoftware.util.MultiKeyMap = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.MultiKeyMapFactory