/* * The MIT License (MIT) * * Copyright (c) 2016. Diorite (by Bartłomiej Mazur (aka GotoFinal)) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ package org.diorite.config.serialization.snakeyaml; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Collection; import java.util.Deque; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import java.util.Queue; import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; import java.util.TreeMap; import java.util.TreeSet; import java.util.concurrent.BlockingDeque; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentNavigableMap; import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.LinkedBlockingQueue; import java.util.function.IntFunction; import org.yaml.snakeyaml.error.YAMLException; import org.diorite.commons.reflections.ConstructorInvoker; import org.diorite.commons.reflections.DioriteReflectionUtils; import it.unimi.dsi.fastutil.booleans.BooleanArrayList; import it.unimi.dsi.fastutil.booleans.BooleanBigArrayBigList; import it.unimi.dsi.fastutil.booleans.BooleanBigList; import it.unimi.dsi.fastutil.booleans.BooleanCollection; import it.unimi.dsi.fastutil.booleans.BooleanList; import it.unimi.dsi.fastutil.booleans.BooleanOpenHashSet; import it.unimi.dsi.fastutil.booleans.BooleanSet; import it.unimi.dsi.fastutil.booleans.BooleanStack; import it.unimi.dsi.fastutil.bytes.Byte2BooleanAVLTreeMap; import it.unimi.dsi.fastutil.bytes.Byte2BooleanLinkedOpenHashMap; import it.unimi.dsi.fastutil.bytes.Byte2BooleanMap; import it.unimi.dsi.fastutil.bytes.Byte2BooleanSortedMap; import it.unimi.dsi.fastutil.bytes.Byte2ByteAVLTreeMap; import it.unimi.dsi.fastutil.bytes.Byte2ByteLinkedOpenHashMap; import it.unimi.dsi.fastutil.bytes.Byte2ByteMap; import it.unimi.dsi.fastutil.bytes.Byte2ByteSortedMap; import it.unimi.dsi.fastutil.bytes.Byte2CharAVLTreeMap; import it.unimi.dsi.fastutil.bytes.Byte2CharLinkedOpenHashMap; import it.unimi.dsi.fastutil.bytes.Byte2CharMap; import it.unimi.dsi.fastutil.bytes.Byte2CharSortedMap; import it.unimi.dsi.fastutil.bytes.Byte2DoubleAVLTreeMap; import it.unimi.dsi.fastutil.bytes.Byte2DoubleLinkedOpenHashMap; import it.unimi.dsi.fastutil.bytes.Byte2DoubleMap; import it.unimi.dsi.fastutil.bytes.Byte2DoubleSortedMap; import it.unimi.dsi.fastutil.bytes.Byte2FloatAVLTreeMap; import it.unimi.dsi.fastutil.bytes.Byte2FloatLinkedOpenHashMap; import it.unimi.dsi.fastutil.bytes.Byte2FloatMap; import it.unimi.dsi.fastutil.bytes.Byte2FloatSortedMap; import it.unimi.dsi.fastutil.bytes.Byte2IntAVLTreeMap; import it.unimi.dsi.fastutil.bytes.Byte2IntLinkedOpenHashMap; import it.unimi.dsi.fastutil.bytes.Byte2IntMap; import it.unimi.dsi.fastutil.bytes.Byte2IntSortedMap; import it.unimi.dsi.fastutil.bytes.Byte2LongAVLTreeMap; import it.unimi.dsi.fastutil.bytes.Byte2LongLinkedOpenHashMap; import it.unimi.dsi.fastutil.bytes.Byte2LongMap; import it.unimi.dsi.fastutil.bytes.Byte2LongSortedMap; import it.unimi.dsi.fastutil.bytes.Byte2ObjectAVLTreeMap; import it.unimi.dsi.fastutil.bytes.Byte2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.bytes.Byte2ObjectMap; import it.unimi.dsi.fastutil.bytes.Byte2ObjectSortedMap; import it.unimi.dsi.fastutil.bytes.Byte2ShortAVLTreeMap; import it.unimi.dsi.fastutil.bytes.Byte2ShortLinkedOpenHashMap; import it.unimi.dsi.fastutil.bytes.Byte2ShortMap; import it.unimi.dsi.fastutil.bytes.Byte2ShortSortedMap; import it.unimi.dsi.fastutil.bytes.ByteAVLTreeSet; import it.unimi.dsi.fastutil.bytes.ByteArrayList; import it.unimi.dsi.fastutil.bytes.ByteBigArrayBigList; import it.unimi.dsi.fastutil.bytes.ByteBigList; import it.unimi.dsi.fastutil.bytes.ByteCollection; import it.unimi.dsi.fastutil.bytes.ByteLinkedOpenHashSet; import it.unimi.dsi.fastutil.bytes.ByteList; import it.unimi.dsi.fastutil.bytes.ByteSet; import it.unimi.dsi.fastutil.bytes.ByteSortedSet; import it.unimi.dsi.fastutil.bytes.ByteStack; import it.unimi.dsi.fastutil.chars.Char2BooleanAVLTreeMap; import it.unimi.dsi.fastutil.chars.Char2BooleanLinkedOpenHashMap; import it.unimi.dsi.fastutil.chars.Char2BooleanMap; import it.unimi.dsi.fastutil.chars.Char2BooleanSortedMap; import it.unimi.dsi.fastutil.chars.Char2ByteAVLTreeMap; import it.unimi.dsi.fastutil.chars.Char2ByteLinkedOpenHashMap; import it.unimi.dsi.fastutil.chars.Char2ByteMap; import it.unimi.dsi.fastutil.chars.Char2ByteSortedMap; import it.unimi.dsi.fastutil.chars.Char2CharAVLTreeMap; import it.unimi.dsi.fastutil.chars.Char2CharLinkedOpenHashMap; import it.unimi.dsi.fastutil.chars.Char2CharMap; import it.unimi.dsi.fastutil.chars.Char2CharSortedMap; import it.unimi.dsi.fastutil.chars.Char2DoubleAVLTreeMap; import it.unimi.dsi.fastutil.chars.Char2DoubleLinkedOpenHashMap; import it.unimi.dsi.fastutil.chars.Char2DoubleMap; import it.unimi.dsi.fastutil.chars.Char2DoubleSortedMap; import it.unimi.dsi.fastutil.chars.Char2FloatAVLTreeMap; import it.unimi.dsi.fastutil.chars.Char2FloatLinkedOpenHashMap; import it.unimi.dsi.fastutil.chars.Char2FloatMap; import it.unimi.dsi.fastutil.chars.Char2FloatSortedMap; import it.unimi.dsi.fastutil.chars.Char2IntAVLTreeMap; import it.unimi.dsi.fastutil.chars.Char2IntLinkedOpenHashMap; import it.unimi.dsi.fastutil.chars.Char2IntMap; import it.unimi.dsi.fastutil.chars.Char2IntSortedMap; import it.unimi.dsi.fastutil.chars.Char2LongAVLTreeMap; import it.unimi.dsi.fastutil.chars.Char2LongLinkedOpenHashMap; import it.unimi.dsi.fastutil.chars.Char2LongMap; import it.unimi.dsi.fastutil.chars.Char2LongSortedMap; import it.unimi.dsi.fastutil.chars.Char2ObjectAVLTreeMap; import it.unimi.dsi.fastutil.chars.Char2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.chars.Char2ObjectMap; import it.unimi.dsi.fastutil.chars.Char2ObjectSortedMap; import it.unimi.dsi.fastutil.chars.Char2ShortAVLTreeMap; import it.unimi.dsi.fastutil.chars.Char2ShortLinkedOpenHashMap; import it.unimi.dsi.fastutil.chars.Char2ShortMap; import it.unimi.dsi.fastutil.chars.Char2ShortSortedMap; import it.unimi.dsi.fastutil.chars.CharAVLTreeSet; import it.unimi.dsi.fastutil.chars.CharArrayList; import it.unimi.dsi.fastutil.chars.CharBigArrayBigList; import it.unimi.dsi.fastutil.chars.CharBigList; import it.unimi.dsi.fastutil.chars.CharCollection; import it.unimi.dsi.fastutil.chars.CharLinkedOpenHashSet; import it.unimi.dsi.fastutil.chars.CharList; import it.unimi.dsi.fastutil.chars.CharSet; import it.unimi.dsi.fastutil.chars.CharSortedSet; import it.unimi.dsi.fastutil.chars.CharStack; import it.unimi.dsi.fastutil.doubles.Double2BooleanAVLTreeMap; import it.unimi.dsi.fastutil.doubles.Double2BooleanLinkedOpenHashMap; import it.unimi.dsi.fastutil.doubles.Double2BooleanMap; import it.unimi.dsi.fastutil.doubles.Double2BooleanSortedMap; import it.unimi.dsi.fastutil.doubles.Double2ByteAVLTreeMap; import it.unimi.dsi.fastutil.doubles.Double2ByteLinkedOpenHashMap; import it.unimi.dsi.fastutil.doubles.Double2ByteMap; import it.unimi.dsi.fastutil.doubles.Double2ByteSortedMap; import it.unimi.dsi.fastutil.doubles.Double2CharAVLTreeMap; import it.unimi.dsi.fastutil.doubles.Double2CharLinkedOpenHashMap; import it.unimi.dsi.fastutil.doubles.Double2CharMap; import it.unimi.dsi.fastutil.doubles.Double2CharSortedMap; import it.unimi.dsi.fastutil.doubles.Double2DoubleAVLTreeMap; import it.unimi.dsi.fastutil.doubles.Double2DoubleLinkedOpenHashMap; import it.unimi.dsi.fastutil.doubles.Double2DoubleMap; import it.unimi.dsi.fastutil.doubles.Double2DoubleSortedMap; import it.unimi.dsi.fastutil.doubles.Double2FloatAVLTreeMap; import it.unimi.dsi.fastutil.doubles.Double2FloatLinkedOpenHashMap; import it.unimi.dsi.fastutil.doubles.Double2FloatMap; import it.unimi.dsi.fastutil.doubles.Double2FloatSortedMap; import it.unimi.dsi.fastutil.doubles.Double2IntAVLTreeMap; import it.unimi.dsi.fastutil.doubles.Double2IntLinkedOpenHashMap; import it.unimi.dsi.fastutil.doubles.Double2IntMap; import it.unimi.dsi.fastutil.doubles.Double2IntSortedMap; import it.unimi.dsi.fastutil.doubles.Double2LongAVLTreeMap; import it.unimi.dsi.fastutil.doubles.Double2LongLinkedOpenHashMap; import it.unimi.dsi.fastutil.doubles.Double2LongMap; import it.unimi.dsi.fastutil.doubles.Double2LongSortedMap; import it.unimi.dsi.fastutil.doubles.Double2ObjectAVLTreeMap; import it.unimi.dsi.fastutil.doubles.Double2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.doubles.Double2ObjectMap; import it.unimi.dsi.fastutil.doubles.Double2ObjectSortedMap; import it.unimi.dsi.fastutil.doubles.Double2ShortAVLTreeMap; import it.unimi.dsi.fastutil.doubles.Double2ShortLinkedOpenHashMap; import it.unimi.dsi.fastutil.doubles.Double2ShortMap; import it.unimi.dsi.fastutil.doubles.Double2ShortSortedMap; import it.unimi.dsi.fastutil.doubles.DoubleAVLTreeSet; import it.unimi.dsi.fastutil.doubles.DoubleArrayList; import it.unimi.dsi.fastutil.doubles.DoubleBigArrayBigList; import it.unimi.dsi.fastutil.doubles.DoubleBigList; import it.unimi.dsi.fastutil.doubles.DoubleCollection; import it.unimi.dsi.fastutil.doubles.DoubleLinkedOpenHashSet; import it.unimi.dsi.fastutil.doubles.DoubleList; import it.unimi.dsi.fastutil.doubles.DoubleSet; import it.unimi.dsi.fastutil.doubles.DoubleSortedSet; import it.unimi.dsi.fastutil.doubles.DoubleStack; import it.unimi.dsi.fastutil.floats.Float2BooleanAVLTreeMap; import it.unimi.dsi.fastutil.floats.Float2BooleanLinkedOpenHashMap; import it.unimi.dsi.fastutil.floats.Float2BooleanMap; import it.unimi.dsi.fastutil.floats.Float2BooleanSortedMap; import it.unimi.dsi.fastutil.floats.Float2ByteAVLTreeMap; import it.unimi.dsi.fastutil.floats.Float2ByteLinkedOpenHashMap; import it.unimi.dsi.fastutil.floats.Float2ByteMap; import it.unimi.dsi.fastutil.floats.Float2ByteSortedMap; import it.unimi.dsi.fastutil.floats.Float2CharAVLTreeMap; import it.unimi.dsi.fastutil.floats.Float2CharLinkedOpenHashMap; import it.unimi.dsi.fastutil.floats.Float2CharMap; import it.unimi.dsi.fastutil.floats.Float2CharSortedMap; import it.unimi.dsi.fastutil.floats.Float2DoubleAVLTreeMap; import it.unimi.dsi.fastutil.floats.Float2DoubleLinkedOpenHashMap; import it.unimi.dsi.fastutil.floats.Float2DoubleMap; import it.unimi.dsi.fastutil.floats.Float2DoubleSortedMap; import it.unimi.dsi.fastutil.floats.Float2FloatAVLTreeMap; import it.unimi.dsi.fastutil.floats.Float2FloatLinkedOpenHashMap; import it.unimi.dsi.fastutil.floats.Float2FloatMap; import it.unimi.dsi.fastutil.floats.Float2FloatSortedMap; import it.unimi.dsi.fastutil.floats.Float2IntAVLTreeMap; import it.unimi.dsi.fastutil.floats.Float2IntLinkedOpenHashMap; import it.unimi.dsi.fastutil.floats.Float2IntMap; import it.unimi.dsi.fastutil.floats.Float2IntSortedMap; import it.unimi.dsi.fastutil.floats.Float2LongAVLTreeMap; import it.unimi.dsi.fastutil.floats.Float2LongLinkedOpenHashMap; import it.unimi.dsi.fastutil.floats.Float2LongMap; import it.unimi.dsi.fastutil.floats.Float2LongSortedMap; import it.unimi.dsi.fastutil.floats.Float2ObjectAVLTreeMap; import it.unimi.dsi.fastutil.floats.Float2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.floats.Float2ObjectMap; import it.unimi.dsi.fastutil.floats.Float2ObjectSortedMap; import it.unimi.dsi.fastutil.floats.Float2ShortAVLTreeMap; import it.unimi.dsi.fastutil.floats.Float2ShortLinkedOpenHashMap; import it.unimi.dsi.fastutil.floats.Float2ShortMap; import it.unimi.dsi.fastutil.floats.Float2ShortSortedMap; import it.unimi.dsi.fastutil.floats.FloatAVLTreeSet; import it.unimi.dsi.fastutil.floats.FloatArrayList; import it.unimi.dsi.fastutil.floats.FloatBigArrayBigList; import it.unimi.dsi.fastutil.floats.FloatBigList; import it.unimi.dsi.fastutil.floats.FloatCollection; import it.unimi.dsi.fastutil.floats.FloatLinkedOpenHashSet; import it.unimi.dsi.fastutil.floats.FloatList; import it.unimi.dsi.fastutil.floats.FloatSet; import it.unimi.dsi.fastutil.floats.FloatSortedSet; import it.unimi.dsi.fastutil.floats.FloatStack; import it.unimi.dsi.fastutil.ints.Int2BooleanAVLTreeMap; import it.unimi.dsi.fastutil.ints.Int2BooleanLinkedOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2BooleanMap; import it.unimi.dsi.fastutil.ints.Int2BooleanSortedMap; import it.unimi.dsi.fastutil.ints.Int2ByteAVLTreeMap; import it.unimi.dsi.fastutil.ints.Int2ByteLinkedOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ByteMap; import it.unimi.dsi.fastutil.ints.Int2ByteSortedMap; import it.unimi.dsi.fastutil.ints.Int2CharAVLTreeMap; import it.unimi.dsi.fastutil.ints.Int2CharLinkedOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2CharMap; import it.unimi.dsi.fastutil.ints.Int2CharSortedMap; import it.unimi.dsi.fastutil.ints.Int2DoubleAVLTreeMap; import it.unimi.dsi.fastutil.ints.Int2DoubleLinkedOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2DoubleMap; import it.unimi.dsi.fastutil.ints.Int2DoubleSortedMap; import it.unimi.dsi.fastutil.ints.Int2FloatAVLTreeMap; import it.unimi.dsi.fastutil.ints.Int2FloatLinkedOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2FloatMap; import it.unimi.dsi.fastutil.ints.Int2FloatSortedMap; import it.unimi.dsi.fastutil.ints.Int2IntAVLTreeMap; import it.unimi.dsi.fastutil.ints.Int2IntLinkedOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2IntMap; import it.unimi.dsi.fastutil.ints.Int2IntSortedMap; import it.unimi.dsi.fastutil.ints.Int2LongAVLTreeMap; import it.unimi.dsi.fastutil.ints.Int2LongLinkedOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2LongMap; import it.unimi.dsi.fastutil.ints.Int2LongSortedMap; import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap; import it.unimi.dsi.fastutil.ints.Int2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectSortedMap; import it.unimi.dsi.fastutil.ints.Int2ShortAVLTreeMap; import it.unimi.dsi.fastutil.ints.Int2ShortLinkedOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ShortMap; import it.unimi.dsi.fastutil.ints.Int2ShortSortedMap; import it.unimi.dsi.fastutil.ints.IntAVLTreeSet; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntBigArrayBigList; import it.unimi.dsi.fastutil.ints.IntBigList; import it.unimi.dsi.fastutil.ints.IntCollection; import it.unimi.dsi.fastutil.ints.IntLinkedOpenHashSet; import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.ints.IntSortedSet; import it.unimi.dsi.fastutil.ints.IntStack; import it.unimi.dsi.fastutil.longs.Long2BooleanAVLTreeMap; import it.unimi.dsi.fastutil.longs.Long2BooleanLinkedOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2BooleanMap; import it.unimi.dsi.fastutil.longs.Long2BooleanSortedMap; import it.unimi.dsi.fastutil.longs.Long2ByteAVLTreeMap; import it.unimi.dsi.fastutil.longs.Long2ByteLinkedOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2ByteMap; import it.unimi.dsi.fastutil.longs.Long2ByteSortedMap; import it.unimi.dsi.fastutil.longs.Long2CharAVLTreeMap; import it.unimi.dsi.fastutil.longs.Long2CharLinkedOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2CharMap; import it.unimi.dsi.fastutil.longs.Long2CharSortedMap; import it.unimi.dsi.fastutil.longs.Long2DoubleAVLTreeMap; import it.unimi.dsi.fastutil.longs.Long2DoubleLinkedOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2DoubleMap; import it.unimi.dsi.fastutil.longs.Long2DoubleSortedMap; import it.unimi.dsi.fastutil.longs.Long2FloatAVLTreeMap; import it.unimi.dsi.fastutil.longs.Long2FloatLinkedOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2FloatMap; import it.unimi.dsi.fastutil.longs.Long2FloatSortedMap; import it.unimi.dsi.fastutil.longs.Long2IntAVLTreeMap; import it.unimi.dsi.fastutil.longs.Long2IntLinkedOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2IntMap; import it.unimi.dsi.fastutil.longs.Long2IntSortedMap; import it.unimi.dsi.fastutil.longs.Long2LongAVLTreeMap; import it.unimi.dsi.fastutil.longs.Long2LongLinkedOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2LongMap; import it.unimi.dsi.fastutil.longs.Long2LongSortedMap; import it.unimi.dsi.fastutil.longs.Long2ObjectAVLTreeMap; import it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectSortedMap; import it.unimi.dsi.fastutil.longs.Long2ShortAVLTreeMap; import it.unimi.dsi.fastutil.longs.Long2ShortLinkedOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2ShortMap; import it.unimi.dsi.fastutil.longs.Long2ShortSortedMap; import it.unimi.dsi.fastutil.longs.LongAVLTreeSet; import it.unimi.dsi.fastutil.longs.LongArrayList; import it.unimi.dsi.fastutil.longs.LongBigArrayBigList; import it.unimi.dsi.fastutil.longs.LongBigList; import it.unimi.dsi.fastutil.longs.LongCollection; import it.unimi.dsi.fastutil.longs.LongLinkedOpenHashSet; import it.unimi.dsi.fastutil.longs.LongList; import it.unimi.dsi.fastutil.longs.LongSet; import it.unimi.dsi.fastutil.longs.LongSortedSet; import it.unimi.dsi.fastutil.longs.LongStack; import it.unimi.dsi.fastutil.objects.Object2BooleanAVLTreeMap; import it.unimi.dsi.fastutil.objects.Object2BooleanLinkedOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2BooleanMap; import it.unimi.dsi.fastutil.objects.Object2BooleanSortedMap; import it.unimi.dsi.fastutil.objects.Object2ByteAVLTreeMap; import it.unimi.dsi.fastutil.objects.Object2ByteLinkedOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ByteMap; import it.unimi.dsi.fastutil.objects.Object2ByteSortedMap; import it.unimi.dsi.fastutil.objects.Object2CharAVLTreeMap; import it.unimi.dsi.fastutil.objects.Object2CharLinkedOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2CharMap; import it.unimi.dsi.fastutil.objects.Object2CharSortedMap; import it.unimi.dsi.fastutil.objects.Object2DoubleAVLTreeMap; import it.unimi.dsi.fastutil.objects.Object2DoubleLinkedOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2DoubleMap; import it.unimi.dsi.fastutil.objects.Object2DoubleSortedMap; import it.unimi.dsi.fastutil.objects.Object2FloatAVLTreeMap; import it.unimi.dsi.fastutil.objects.Object2FloatLinkedOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2FloatMap; import it.unimi.dsi.fastutil.objects.Object2FloatSortedMap; import it.unimi.dsi.fastutil.objects.Object2IntAVLTreeMap; import it.unimi.dsi.fastutil.objects.Object2IntLinkedOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntSortedMap; import it.unimi.dsi.fastutil.objects.Object2LongAVLTreeMap; import it.unimi.dsi.fastutil.objects.Object2LongLinkedOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2LongMap; import it.unimi.dsi.fastutil.objects.Object2LongSortedMap; import it.unimi.dsi.fastutil.objects.Object2ObjectAVLTreeMap; import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectSortedMap; import it.unimi.dsi.fastutil.objects.Object2ShortAVLTreeMap; import it.unimi.dsi.fastutil.objects.Object2ShortLinkedOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ShortMap; import it.unimi.dsi.fastutil.objects.Object2ShortSortedMap; import it.unimi.dsi.fastutil.objects.ObjectAVLTreeSet; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet; import it.unimi.dsi.fastutil.shorts.Short2BooleanAVLTreeMap; import it.unimi.dsi.fastutil.shorts.Short2BooleanLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2BooleanMap; import it.unimi.dsi.fastutil.shorts.Short2BooleanSortedMap; import it.unimi.dsi.fastutil.shorts.Short2ByteAVLTreeMap; import it.unimi.dsi.fastutil.shorts.Short2ByteLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ByteMap; import it.unimi.dsi.fastutil.shorts.Short2ByteSortedMap; import it.unimi.dsi.fastutil.shorts.Short2CharAVLTreeMap; import it.unimi.dsi.fastutil.shorts.Short2CharLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2CharMap; import it.unimi.dsi.fastutil.shorts.Short2CharSortedMap; import it.unimi.dsi.fastutil.shorts.Short2DoubleAVLTreeMap; import it.unimi.dsi.fastutil.shorts.Short2DoubleLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2DoubleMap; import it.unimi.dsi.fastutil.shorts.Short2DoubleSortedMap; import it.unimi.dsi.fastutil.shorts.Short2FloatAVLTreeMap; import it.unimi.dsi.fastutil.shorts.Short2FloatLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2FloatMap; import it.unimi.dsi.fastutil.shorts.Short2FloatSortedMap; import it.unimi.dsi.fastutil.shorts.Short2IntAVLTreeMap; import it.unimi.dsi.fastutil.shorts.Short2IntLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2IntMap; import it.unimi.dsi.fastutil.shorts.Short2IntSortedMap; import it.unimi.dsi.fastutil.shorts.Short2LongAVLTreeMap; import it.unimi.dsi.fastutil.shorts.Short2LongLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2LongMap; import it.unimi.dsi.fastutil.shorts.Short2LongSortedMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectAVLTreeMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectSortedMap; import it.unimi.dsi.fastutil.shorts.Short2ShortAVLTreeMap; import it.unimi.dsi.fastutil.shorts.Short2ShortLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ShortMap; import it.unimi.dsi.fastutil.shorts.Short2ShortSortedMap; import it.unimi.dsi.fastutil.shorts.ShortAVLTreeSet; import it.unimi.dsi.fastutil.shorts.ShortArrayList; import it.unimi.dsi.fastutil.shorts.ShortBigArrayBigList; import it.unimi.dsi.fastutil.shorts.ShortBigList; import it.unimi.dsi.fastutil.shorts.ShortCollection; import it.unimi.dsi.fastutil.shorts.ShortLinkedOpenHashSet; import it.unimi.dsi.fastutil.shorts.ShortList; import it.unimi.dsi.fastutil.shorts.ShortSet; import it.unimi.dsi.fastutil.shorts.ShortSortedSet; import it.unimi.dsi.fastutil.shorts.ShortStack; public final class YamlCollectionCreator { private static final Map<Class<?>, IntFunction<?>> collectionCreators = new ConcurrentHashMap<>(20); private YamlCollectionCreator() { } static { JavaCollections.putAllCollections(collectionCreators); Class<?> aClass = DioriteReflectionUtils.tryGetCanonicalClass("it.unimi.dsi.fastutil.Maps"); if (aClass != null) { FastUtilsCollections.putAllCollections(collectionCreators); } } @SuppressWarnings("unchecked") private static <T> T create(Map<Class<?>, IntFunction<?>> map, Class<T> clazz, int size) { IntFunction<?> intFunction = map.get(clazz); if (intFunction != null) { return (T) intFunction.apply(size); } if ((! Modifier.isAbstract(clazz.getModifiers())) && (Map.class.isAssignableFrom(clazz) || Collection.class.isAssignableFrom(clazz))) { ConstructorInvoker<T> constructor = DioriteReflectionUtils.getConstructor(clazz, false); if (constructor != null) { constructor.ensureAccessible(); //noinspection Convert2MethodRef Java 9 conpiler bug: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8171993 // FIXME IntFunction<T> creator = arguments -> constructor.invokeWith(arguments); map.put(clazz, creator); return creator.apply(size); } } for (Entry<Class<?>, IntFunction<?>> entry : map.entrySet()) { if (clazz.isAssignableFrom(entry.getKey())) { IntFunction<?> function = entry.getValue(); map.put(clazz, function); return (T) function.apply(size); } } throw new YAMLException("Can't create collection: " + clazz); } @SuppressWarnings("unchecked") public static <T> T createCollection(Class<?> clazz, int size) { return create(collectionCreators, (Class<T>) clazz, size); } public static <T> void addCollection(Class<T> type, IntFunction<T> func) { collectionCreators.put(type, func); } private static <T> void safePut(Map<Class<?>, IntFunction<?>> map, Class<T> type, IntFunction<T> func) { map.put(type, func); } static final class JavaCollections { private JavaCollections() { } static void putAllCollections(Map<Class<?>, IntFunction<?>> map) { safePut(map, ArrayList.class, ArrayList::new); safePut(map, HashSet.class, LinkedHashSet::new); safePut(map, Properties.class, x -> new Properties()); safePut(map, Hashtable.class, Hashtable::new); safePut(map, Collection.class, ArrayList::new); safePut(map, Set.class, LinkedHashSet::new); safePut(map, List.class, ArrayList::new); safePut(map, SortedSet.class, x -> new TreeSet<>()); safePut(map, Queue.class, x -> new ConcurrentLinkedQueue<>()); safePut(map, Deque.class, x -> new ConcurrentLinkedDeque<>()); safePut(map, BlockingQueue.class, x -> new LinkedBlockingQueue<>()); safePut(map, BlockingDeque.class, x -> new LinkedBlockingDeque<>()); safePut(map, HashMap.class, LinkedHashMap::new); safePut(map, LinkedHashMap.class, LinkedHashMap::new); safePut(map, ConcurrentHashMap.class, ConcurrentHashMap::new); safePut(map, Map.class, LinkedHashMap::new); safePut(map, ConcurrentMap.class, x -> new ConcurrentSkipListMap<>()); safePut(map, ConcurrentNavigableMap.class, x -> new ConcurrentSkipListMap<>()); safePut(map, SortedMap.class, i -> new TreeMap<>()); } } static final class FastUtilsCollections { private FastUtilsCollections() { } static void putAllCollections(Map<Class<?>, IntFunction<?>> map) { safePut(map, Collection.class, ObjectArrayList::new); { safePut(map, BooleanCollection.class, BooleanArrayList::new); safePut(map, ByteCollection.class, ByteArrayList::new); safePut(map, CharCollection.class, CharArrayList::new); safePut(map, ShortCollection.class, ShortArrayList::new); safePut(map, IntCollection.class, IntArrayList::new); safePut(map, LongCollection.class, LongArrayList::new); safePut(map, FloatCollection.class, FloatArrayList::new); safePut(map, DoubleCollection.class, DoubleArrayList::new); safePut(map, BooleanStack.class, BooleanArrayList::new); safePut(map, ByteStack.class, ByteArrayList::new); safePut(map, CharStack.class, CharArrayList::new); safePut(map, ShortStack.class, ShortArrayList::new); safePut(map, IntStack.class, IntArrayList::new); safePut(map, LongStack.class, LongArrayList::new); safePut(map, FloatStack.class, FloatArrayList::new); safePut(map, DoubleStack.class, DoubleArrayList::new); } safePut(map, Set.class, ObjectLinkedOpenHashSet::new); { safePut(map, BooleanSet.class, BooleanOpenHashSet::new); safePut(map, ByteSet.class, ByteLinkedOpenHashSet::new); safePut(map, CharSet.class, CharLinkedOpenHashSet::new); safePut(map, ShortSet.class, ShortLinkedOpenHashSet::new); safePut(map, IntSet.class, IntLinkedOpenHashSet::new); safePut(map, LongSet.class, LongLinkedOpenHashSet::new); safePut(map, FloatSet.class, FloatLinkedOpenHashSet::new); safePut(map, DoubleSet.class, DoubleLinkedOpenHashSet::new); } safePut(map, List.class, ObjectArrayList::new); { safePut(map, BooleanList.class, BooleanArrayList::new); safePut(map, ByteList.class, ByteArrayList::new); safePut(map, CharList.class, CharArrayList::new); safePut(map, ShortList.class, ShortArrayList::new); safePut(map, IntList.class, IntArrayList::new); safePut(map, LongList.class, LongArrayList::new); safePut(map, FloatList.class, FloatArrayList::new); safePut(map, DoubleList.class, DoubleArrayList::new); safePut(map, BooleanBigList.class, BooleanBigArrayBigList::new); safePut(map, ByteBigList.class, ByteBigArrayBigList::new); safePut(map, CharBigList.class, CharBigArrayBigList::new); safePut(map, ShortBigList.class, ShortBigArrayBigList::new); safePut(map, IntBigList.class, IntBigArrayBigList::new); safePut(map, LongBigList.class, LongBigArrayBigList::new); safePut(map, FloatBigList.class, FloatBigArrayBigList::new); safePut(map, DoubleBigList.class, DoubleBigArrayBigList::new); } safePut(map, SortedSet.class, x -> new ObjectAVLTreeSet<>()); { safePut(map, ByteSortedSet.class, x -> new ByteAVLTreeSet()); safePut(map, CharSortedSet.class, x -> new CharAVLTreeSet()); safePut(map, ShortSortedSet.class, x -> new ShortAVLTreeSet()); safePut(map, IntSortedSet.class, x -> new IntAVLTreeSet()); safePut(map, LongSortedSet.class, x -> new LongAVLTreeSet()); safePut(map, FloatSortedSet.class, x -> new FloatAVLTreeSet()); safePut(map, DoubleSortedSet.class, x -> new DoubleAVLTreeSet()); } safePut(map, HashMap.class, LinkedHashMap::new); safePut(map, LinkedHashMap.class, LinkedHashMap::new); safePut(map, ConcurrentHashMap.class, ConcurrentHashMap::new); safePut(map, Map.class, Object2ObjectLinkedOpenHashMap::new); { safePut(map, Object2ObjectMap.class, Object2ObjectLinkedOpenHashMap::new); safePut(map, Object2BooleanMap.class, Object2BooleanLinkedOpenHashMap::new); safePut(map, Object2ByteMap.class, Object2ByteLinkedOpenHashMap::new); safePut(map, Object2CharMap.class, Object2CharLinkedOpenHashMap::new); safePut(map, Object2ShortMap.class, Object2ShortLinkedOpenHashMap::new); safePut(map, Object2IntMap.class, Object2IntLinkedOpenHashMap::new); safePut(map, Object2LongMap.class, Object2LongLinkedOpenHashMap::new); safePut(map, Object2FloatMap.class, Object2FloatLinkedOpenHashMap::new); safePut(map, Object2DoubleMap.class, Object2DoubleLinkedOpenHashMap::new); safePut(map, Byte2ObjectMap.class, Byte2ObjectLinkedOpenHashMap::new); safePut(map, Byte2BooleanMap.class, Byte2BooleanLinkedOpenHashMap::new); safePut(map, Byte2ByteMap.class, Byte2ByteLinkedOpenHashMap::new); safePut(map, Byte2CharMap.class, Byte2CharLinkedOpenHashMap::new); safePut(map, Byte2ShortMap.class, Byte2ShortLinkedOpenHashMap::new); safePut(map, Byte2IntMap.class, Byte2IntLinkedOpenHashMap::new); safePut(map, Byte2LongMap.class, Byte2LongLinkedOpenHashMap::new); safePut(map, Byte2FloatMap.class, Byte2FloatLinkedOpenHashMap::new); safePut(map, Byte2DoubleMap.class, Byte2DoubleLinkedOpenHashMap::new); safePut(map, Char2ObjectMap.class, Char2ObjectLinkedOpenHashMap::new); safePut(map, Char2BooleanMap.class, Char2BooleanLinkedOpenHashMap::new); safePut(map, Char2ByteMap.class, Char2ByteLinkedOpenHashMap::new); safePut(map, Char2CharMap.class, Char2CharLinkedOpenHashMap::new); safePut(map, Char2ShortMap.class, Char2ShortLinkedOpenHashMap::new); safePut(map, Char2IntMap.class, Char2IntLinkedOpenHashMap::new); safePut(map, Char2LongMap.class, Char2LongLinkedOpenHashMap::new); safePut(map, Char2FloatMap.class, Char2FloatLinkedOpenHashMap::new); safePut(map, Char2DoubleMap.class, Char2DoubleLinkedOpenHashMap::new); safePut(map, Short2ObjectMap.class, Short2ObjectLinkedOpenHashMap::new); safePut(map, Short2BooleanMap.class, Short2BooleanLinkedOpenHashMap::new); safePut(map, Short2ByteMap.class, Short2ByteLinkedOpenHashMap::new); safePut(map, Short2CharMap.class, Short2CharLinkedOpenHashMap::new); safePut(map, Short2ShortMap.class, Short2ShortLinkedOpenHashMap::new); safePut(map, Short2IntMap.class, Short2IntLinkedOpenHashMap::new); safePut(map, Short2LongMap.class, Short2LongLinkedOpenHashMap::new); safePut(map, Short2FloatMap.class, Short2FloatLinkedOpenHashMap::new); safePut(map, Short2DoubleMap.class, Short2DoubleLinkedOpenHashMap::new); safePut(map, Int2ObjectMap.class, Int2ObjectLinkedOpenHashMap::new); safePut(map, Int2BooleanMap.class, Int2BooleanLinkedOpenHashMap::new); safePut(map, Int2ByteMap.class, Int2ByteLinkedOpenHashMap::new); safePut(map, Int2CharMap.class, Int2CharLinkedOpenHashMap::new); safePut(map, Int2ShortMap.class, Int2ShortLinkedOpenHashMap::new); safePut(map, Int2IntMap.class, Int2IntLinkedOpenHashMap::new); safePut(map, Int2LongMap.class, Int2LongLinkedOpenHashMap::new); safePut(map, Int2FloatMap.class, Int2FloatLinkedOpenHashMap::new); safePut(map, Int2DoubleMap.class, Int2DoubleLinkedOpenHashMap::new); safePut(map, Long2ObjectMap.class, Long2ObjectLinkedOpenHashMap::new); safePut(map, Long2BooleanMap.class, Long2BooleanLinkedOpenHashMap::new); safePut(map, Long2ByteMap.class, Long2ByteLinkedOpenHashMap::new); safePut(map, Long2CharMap.class, Long2CharLinkedOpenHashMap::new); safePut(map, Long2ShortMap.class, Long2ShortLinkedOpenHashMap::new); safePut(map, Long2IntMap.class, Long2IntLinkedOpenHashMap::new); safePut(map, Long2LongMap.class, Long2LongLinkedOpenHashMap::new); safePut(map, Long2FloatMap.class, Long2FloatLinkedOpenHashMap::new); safePut(map, Long2DoubleMap.class, Long2DoubleLinkedOpenHashMap::new); safePut(map, Float2ObjectMap.class, Float2ObjectLinkedOpenHashMap::new); safePut(map, Float2BooleanMap.class, Float2BooleanLinkedOpenHashMap::new); safePut(map, Float2ByteMap.class, Float2ByteLinkedOpenHashMap::new); safePut(map, Float2CharMap.class, Float2CharLinkedOpenHashMap::new); safePut(map, Float2ShortMap.class, Float2ShortLinkedOpenHashMap::new); safePut(map, Float2IntMap.class, Float2IntLinkedOpenHashMap::new); safePut(map, Float2LongMap.class, Float2LongLinkedOpenHashMap::new); safePut(map, Float2FloatMap.class, Float2FloatLinkedOpenHashMap::new); safePut(map, Float2DoubleMap.class, Float2DoubleLinkedOpenHashMap::new); safePut(map, Double2ObjectMap.class, Double2ObjectLinkedOpenHashMap::new); safePut(map, Double2BooleanMap.class, Double2BooleanLinkedOpenHashMap::new); safePut(map, Double2ByteMap.class, Double2ByteLinkedOpenHashMap::new); safePut(map, Double2CharMap.class, Double2CharLinkedOpenHashMap::new); safePut(map, Double2ShortMap.class, Double2ShortLinkedOpenHashMap::new); safePut(map, Double2IntMap.class, Double2IntLinkedOpenHashMap::new); safePut(map, Double2LongMap.class, Double2LongLinkedOpenHashMap::new); safePut(map, Double2FloatMap.class, Double2FloatLinkedOpenHashMap::new); safePut(map, Double2DoubleMap.class, Double2DoubleLinkedOpenHashMap::new); } safePut(map, ConcurrentMap.class, x -> new ConcurrentSkipListMap<>()); safePut(map, ConcurrentNavigableMap.class, x -> new ConcurrentSkipListMap<>()); safePut(map, SortedMap.class, i -> new Object2ObjectAVLTreeMap<>()); { safePut(map, Object2ObjectSortedMap.class, x -> new Object2ObjectAVLTreeMap<>()); safePut(map, Object2BooleanSortedMap.class, x -> new Object2BooleanAVLTreeMap<>()); safePut(map, Object2ByteSortedMap.class, x -> new Object2ByteAVLTreeMap<>()); safePut(map, Object2CharSortedMap.class, x -> new Object2CharAVLTreeMap<>()); safePut(map, Object2ShortSortedMap.class, x -> new Object2ShortAVLTreeMap<>()); safePut(map, Object2IntSortedMap.class, x -> new Object2IntAVLTreeMap<>()); safePut(map, Object2LongSortedMap.class, x -> new Object2LongAVLTreeMap<>()); safePut(map, Object2FloatSortedMap.class, x -> new Object2FloatAVLTreeMap<>()); safePut(map, Object2DoubleSortedMap.class, x -> new Object2DoubleAVLTreeMap<>()); safePut(map, Byte2ObjectSortedMap.class, x -> new Byte2ObjectAVLTreeMap<>()); safePut(map, Byte2BooleanSortedMap.class, x -> new Byte2BooleanAVLTreeMap()); safePut(map, Byte2ByteSortedMap.class, x -> new Byte2ByteAVLTreeMap()); safePut(map, Byte2CharSortedMap.class, x -> new Byte2CharAVLTreeMap()); safePut(map, Byte2ShortSortedMap.class, x -> new Byte2ShortAVLTreeMap()); safePut(map, Byte2IntSortedMap.class, x -> new Byte2IntAVLTreeMap()); safePut(map, Byte2LongSortedMap.class, x -> new Byte2LongAVLTreeMap()); safePut(map, Byte2FloatSortedMap.class, x -> new Byte2FloatAVLTreeMap()); safePut(map, Byte2DoubleSortedMap.class, x -> new Byte2DoubleAVLTreeMap()); safePut(map, Char2ObjectSortedMap.class, x -> new Char2ObjectAVLTreeMap<>()); safePut(map, Char2BooleanSortedMap.class, x -> new Char2BooleanAVLTreeMap()); safePut(map, Char2ByteSortedMap.class, x -> new Char2ByteAVLTreeMap()); safePut(map, Char2CharSortedMap.class, x -> new Char2CharAVLTreeMap()); safePut(map, Char2ShortSortedMap.class, x -> new Char2ShortAVLTreeMap()); safePut(map, Char2IntSortedMap.class, x -> new Char2IntAVLTreeMap()); safePut(map, Char2LongSortedMap.class, x -> new Char2LongAVLTreeMap()); safePut(map, Char2FloatSortedMap.class, x -> new Char2FloatAVLTreeMap()); safePut(map, Char2DoubleSortedMap.class, x -> new Char2DoubleAVLTreeMap()); safePut(map, Short2ObjectSortedMap.class, x -> new Short2ObjectAVLTreeMap<>()); safePut(map, Short2BooleanSortedMap.class, x -> new Short2BooleanAVLTreeMap()); safePut(map, Short2ByteSortedMap.class, x -> new Short2ByteAVLTreeMap()); safePut(map, Short2CharSortedMap.class, x -> new Short2CharAVLTreeMap()); safePut(map, Short2ShortSortedMap.class, x -> new Short2ShortAVLTreeMap()); safePut(map, Short2IntSortedMap.class, x -> new Short2IntAVLTreeMap()); safePut(map, Short2LongSortedMap.class, x -> new Short2LongAVLTreeMap()); safePut(map, Short2FloatSortedMap.class, x -> new Short2FloatAVLTreeMap()); safePut(map, Short2DoubleSortedMap.class, x -> new Short2DoubleAVLTreeMap()); safePut(map, Int2ObjectSortedMap.class, x -> new Int2ObjectAVLTreeMap<>()); safePut(map, Int2BooleanSortedMap.class, x -> new Int2BooleanAVLTreeMap()); safePut(map, Int2ByteSortedMap.class, x -> new Int2ByteAVLTreeMap()); safePut(map, Int2CharSortedMap.class, x -> new Int2CharAVLTreeMap()); safePut(map, Int2ShortSortedMap.class, x -> new Int2ShortAVLTreeMap()); safePut(map, Int2IntSortedMap.class, x -> new Int2IntAVLTreeMap()); safePut(map, Int2LongSortedMap.class, x -> new Int2LongAVLTreeMap()); safePut(map, Int2FloatSortedMap.class, x -> new Int2FloatAVLTreeMap()); safePut(map, Int2DoubleSortedMap.class, x -> new Int2DoubleAVLTreeMap()); safePut(map, Long2ObjectSortedMap.class, x -> new Long2ObjectAVLTreeMap<>()); safePut(map, Long2BooleanSortedMap.class, x -> new Long2BooleanAVLTreeMap()); safePut(map, Long2ByteSortedMap.class, x -> new Long2ByteAVLTreeMap()); safePut(map, Long2CharSortedMap.class, x -> new Long2CharAVLTreeMap()); safePut(map, Long2ShortSortedMap.class, x -> new Long2ShortAVLTreeMap()); safePut(map, Long2IntSortedMap.class, x -> new Long2IntAVLTreeMap()); safePut(map, Long2LongSortedMap.class, x -> new Long2LongAVLTreeMap()); safePut(map, Long2FloatSortedMap.class, x -> new Long2FloatAVLTreeMap()); safePut(map, Long2DoubleSortedMap.class, x -> new Long2DoubleAVLTreeMap()); safePut(map, Float2ObjectSortedMap.class, x -> new Float2ObjectAVLTreeMap<>()); safePut(map, Float2BooleanSortedMap.class, x -> new Float2BooleanAVLTreeMap()); safePut(map, Float2ByteSortedMap.class, x -> new Float2ByteAVLTreeMap()); safePut(map, Float2CharSortedMap.class, x -> new Float2CharAVLTreeMap()); safePut(map, Float2ShortSortedMap.class, x -> new Float2ShortAVLTreeMap()); safePut(map, Float2IntSortedMap.class, x -> new Float2IntAVLTreeMap()); safePut(map, Float2LongSortedMap.class, x -> new Float2LongAVLTreeMap()); safePut(map, Float2FloatSortedMap.class, x -> new Float2FloatAVLTreeMap()); safePut(map, Float2DoubleSortedMap.class, x -> new Float2DoubleAVLTreeMap()); safePut(map, Double2ObjectSortedMap.class, x -> new Double2ObjectAVLTreeMap<>()); safePut(map, Double2BooleanSortedMap.class, x -> new Double2BooleanAVLTreeMap()); safePut(map, Double2ByteSortedMap.class, x -> new Double2ByteAVLTreeMap()); safePut(map, Double2CharSortedMap.class, x -> new Double2CharAVLTreeMap()); safePut(map, Double2ShortSortedMap.class, x -> new Double2ShortAVLTreeMap()); safePut(map, Double2IntSortedMap.class, x -> new Double2IntAVLTreeMap()); safePut(map, Double2LongSortedMap.class, x -> new Double2LongAVLTreeMap()); safePut(map, Double2FloatSortedMap.class, x -> new Double2FloatAVLTreeMap()); safePut(map, Double2DoubleSortedMap.class, x -> new Double2DoubleAVLTreeMap()); } } } }