#
# JsonReader.ClassFactory mappings
#

# Primitives
char = Convertable
boolean = Convertable
byte = Convertable
short = Convertable
int = Convertable
long = Convertable
float = Convertable
double = Convertable

# Primitive Wrappers
java.lang.Character = Convertable
java.lang.Boolean = Convertable
java.lang.Byte = Convertable
java.lang.Short = Convertable
java.lang.Integer = Convertable
java.lang.Long = Convertable
java.lang.Float = Convertable
java.lang.Double = Convertable

# java.math
java.math.BigDecimal = Convertable
java.math.BigInteger = Convertable

# java.util
java.util.concurrent.atomic.AtomicBoolean = Convertable
java.util.concurrent.atomic.AtomicInteger = Convertable
java.util.concurrent.atomic.AtomicLong = Convertable
java.util.Currency = Convertable
java.util.Date = Convertable
java.util.Calendar = Convertable
java.util.GregorianCalendar = Convertable
java.util.Locale = Convertable
java.util.UUID = Convertable
java.util.TimeZone = Convertable

java.util.regex.Pattern = Convertable

# java.lang
java.lang.Class = Convertable
java.lang.String = Convertable
java.lang.StackTraceElement = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.StackTraceElementFactory
java.lang.StringBuffer = Convertable
java.lang.StringBuilder = Convertable
java.lang.Throwable = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.ThrowableFactory

# java.net
java.net.URL = Convertable
java.net.URI = Convertable

# java.nio
java.nio.ByteBuffer = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.ByteBufferFactory
java.nio.DirectByteBuffer = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.ByteBufferFactory
java.nio.MappedByteBuffer = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.ByteBufferFactory
java.nio.HeapByteBuffer = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.ByteBufferFactory

java.nio.CharBuffer = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CharBufferFactory
java.nio.HeapCharBuffer = io.pivotal.cfenv.shaded.com.cedarsoftware.io.factory.CharBufferFactory

# java.sql
java.sql.Date = Convertable
java.sql.Timestamp = Convertable

# java.time
java.time.Duration = Convertable
java.time.Instant = Convertable
java.time.LocalDate = Convertable
java.time.LocalDateTime = Convertable
java.time.LocalTime = Convertable
java.time.MonthDay = Convertable
java.time.OffsetDateTime = Convertable
java.time.OffsetTime = Convertable
java.time.Period = Convertable
java.time.Year = Convertable
java.time.YearMonth = Convertable
java.time.ZonedDateTime = Convertable
java.time.ZoneId = Convertable
java.time.ZoneOffset = Convertable
java.time.ZoneRegion = Convertable

# 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
sun.util.calendar.ZoneInfo = Convertable

[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