#
# 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 = com.cedarsoftware.io.factory.StackTraceElementFactory
java.lang.StringBuffer = Convertable
java.lang.StringBuilder = Convertable
java.lang.Throwable = com.cedarsoftware.io.factory.ThrowableFactory

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

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

java.nio.CharBuffer = com.cedarsoftware.io.factory.CharBufferFactory
java.nio.HeapCharBuffer = 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 = com.cedarsoftware.io.factory.CollectionFactory
java.util.List = com.cedarsoftware.io.factory.CollectionFactory
java.util.Set = com.cedarsoftware.io.factory.CollectionFactory
java.util.SortedSet = com.cedarsoftware.io.factory.CollectionFactory
java.util.NavigableSet = com.cedarsoftware.io.factory.CollectionFactory
java.util.Deque = com.cedarsoftware.io.factory.CollectionFactory
java.util.Queue = com.cedarsoftware.io.factory.CollectionFactory
java.util.Map = com.cedarsoftware.io.factory.MapFactory
java.util.SortedMap = com.cedarsoftware.io.factory.MapFactory
java.util.NavigableMap = com.cedarsoftware.io.factory.MapFactory
sun.util.calendar.ZoneInfo = Convertable

[C = 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 = com.cedarsoftware.io.factory.SingletonFactory
java.util.Collections$SingletonSet = com.cedarsoftware.io.factory.SingletonFactory
java.util.Collections$SingletonMap = com.cedarsoftware.io.factory.SingletonFactory

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

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

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

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

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

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

java.util.EnumSet = com.cedarsoftware.io.factory.EnumSetFactory

# CompactMap
com.cedarsoftware.util.CompactMap = com.cedarsoftware.io.factory.CompactMapFactory