@@ -82,6 +82,17 @@ public RealmDictionary(Map<String, V> map) {
8282 super (getStrategy (valueClass , baseRealm , osMap ));
8383 }
8484
85+ /**
86+ * Constructor used by {@code DynamicRealmObject}s.
87+ *
88+ * @param baseRealm
89+ * @param osMap
90+ * @param className
91+ */
92+ RealmDictionary (BaseRealm baseRealm , OsMap osMap , String className ) {
93+ super (getStrategy (className , baseRealm , osMap ));
94+ }
95+
8596 // ------------------------------------------
8697 // Private stuff
8798 // ------------------------------------------
@@ -118,7 +129,6 @@ private static <V> ManagedMapStrategy<String, V> getStrategy(Class<V> valueClass
118129 return new ManagedMapStrategy <>(manager );
119130 }
120131
121- @ SuppressFBWarnings (value = "UPM_UNCALLED_PRIVATE_METHOD" , justification = "This function would be used on dynamic realms, not yet implemented" )
122132 private static <V > ManagedMapStrategy <String , V > getStrategy (String valueClass ,
123133 BaseRealm baseRealm ,
124134 OsMap osMap ) {
@@ -175,44 +185,41 @@ private static <V> DictionaryManager<V> getManager(Class<V> valueClass,
175185 private static <V > DictionaryManager <V > getManager (String valueClass ,
176186 BaseRealm baseRealm ,
177187 OsMap osMap ) {
178- TypeSelectorForMap <String , V > typeSelectorForMap = new DynamicSelectorForMap <>(baseRealm , osMap , valueClass );
179188
180189 MapValueOperator <String , ?> mapValueOperator ;
181190
182191 if (valueClass .equals (RealmAny .class .getCanonicalName ())) {
183- mapValueOperator = new RealmAnyValueOperator <>(baseRealm , osMap , ( TypeSelectorForMap < String , RealmAny >) typeSelectorForMap );
192+ mapValueOperator = new RealmAnyValueOperator <>(baseRealm , osMap , new SelectorForMap <>( baseRealm , osMap , String . class , RealmAny . class ) );
184193 } else if (valueClass .equals (Long .class .getCanonicalName ())) {
185- mapValueOperator = new GenericPrimitiveValueOperator <>(Long .class , baseRealm , osMap , ( TypeSelectorForMap < String , Long >) typeSelectorForMap , RealmMapEntrySet .IteratorType .LONG );
194+ mapValueOperator = new GenericPrimitiveValueOperator <>(Long .class , baseRealm , osMap , new SelectorForMap <>( baseRealm , osMap , String . class , Long . class ) , RealmMapEntrySet .IteratorType .LONG );
186195 } else if (valueClass .equals (Float .class .getCanonicalName ())) {
187- mapValueOperator = new GenericPrimitiveValueOperator <>(Float .class , baseRealm , osMap , ( TypeSelectorForMap < String , Float >) typeSelectorForMap , RealmMapEntrySet .IteratorType .FLOAT );
196+ mapValueOperator = new GenericPrimitiveValueOperator <>(Float .class , baseRealm , osMap , new SelectorForMap <>( baseRealm , osMap , String . class , Float . class ) , RealmMapEntrySet .IteratorType .FLOAT );
188197 } else if (valueClass .equals (Double .class .getCanonicalName ())) {
189- mapValueOperator = new GenericPrimitiveValueOperator <>(Double .class , baseRealm , osMap , ( TypeSelectorForMap < String , Double >) typeSelectorForMap , RealmMapEntrySet .IteratorType .DOUBLE );
198+ mapValueOperator = new GenericPrimitiveValueOperator <>(Double .class , baseRealm , osMap , new SelectorForMap <>( baseRealm , osMap , String . class , Double . class ) , RealmMapEntrySet .IteratorType .DOUBLE );
190199 } else if (valueClass .equals (String .class .getCanonicalName ())) {
191- mapValueOperator = new GenericPrimitiveValueOperator <>(String .class , baseRealm , osMap , ( TypeSelectorForMap < String , String >) typeSelectorForMap , RealmMapEntrySet .IteratorType .STRING );
200+ mapValueOperator = new GenericPrimitiveValueOperator <>(String .class , baseRealm , osMap , new SelectorForMap <>( baseRealm , osMap , String . class , String . class ) , RealmMapEntrySet .IteratorType .STRING );
192201 } else if (valueClass .equals (Boolean .class .getCanonicalName ())) {
193- mapValueOperator = new GenericPrimitiveValueOperator <>(Boolean .class , baseRealm , osMap , ( TypeSelectorForMap < String , Boolean >) typeSelectorForMap , RealmMapEntrySet .IteratorType .BOOLEAN );
202+ mapValueOperator = new GenericPrimitiveValueOperator <>(Boolean .class , baseRealm , osMap , new SelectorForMap <>( baseRealm , osMap , String . class , Boolean . class ) , RealmMapEntrySet .IteratorType .BOOLEAN );
194203 } else if (valueClass .equals (Date .class .getCanonicalName ())) {
195- mapValueOperator = new GenericPrimitiveValueOperator <>(Date .class , baseRealm , osMap , ( TypeSelectorForMap < String , Date >) typeSelectorForMap , RealmMapEntrySet .IteratorType .DATE );
204+ mapValueOperator = new GenericPrimitiveValueOperator <>(Date .class , baseRealm , osMap , new SelectorForMap <>( baseRealm , osMap , String . class , Date . class ) , RealmMapEntrySet .IteratorType .DATE );
196205 } else if (valueClass .equals (Decimal128 .class .getCanonicalName ())) {
197- mapValueOperator = new GenericPrimitiveValueOperator <>(Decimal128 .class , baseRealm , osMap , ( TypeSelectorForMap < String , Decimal128 >) typeSelectorForMap , RealmMapEntrySet .IteratorType .DECIMAL128 );
206+ mapValueOperator = new GenericPrimitiveValueOperator <>(Decimal128 .class , baseRealm , osMap , new SelectorForMap <>( baseRealm , osMap , String . class , Decimal128 . class ) , RealmMapEntrySet .IteratorType .DECIMAL128 );
198207 } else if (valueClass .equals (Integer .class .getCanonicalName ())) {
199- mapValueOperator = new IntegerValueOperator <>(baseRealm , osMap , ( TypeSelectorForMap < String , Integer >) typeSelectorForMap );
208+ mapValueOperator = new IntegerValueOperator <>(baseRealm , osMap , new SelectorForMap <>( baseRealm , osMap , String . class , Integer . class ) );
200209 } else if (valueClass .equals (Short .class .getCanonicalName ())) {
201- mapValueOperator = new ShortValueOperator <>(baseRealm , osMap , ( TypeSelectorForMap < String , Short >) typeSelectorForMap );
210+ mapValueOperator = new ShortValueOperator <>(baseRealm , osMap , new SelectorForMap <>( baseRealm , osMap , String . class , Short . class ) );
202211 } else if (valueClass .equals (Byte .class .getCanonicalName ())) {
203- mapValueOperator = new ByteValueOperator <>(baseRealm , osMap , ( TypeSelectorForMap < String , Byte >) typeSelectorForMap );
212+ mapValueOperator = new ByteValueOperator <>(baseRealm , osMap , new SelectorForMap <>( baseRealm , osMap , String . class , Byte . class ) );
204213 } else if (valueClass .equals (byte [].class .getCanonicalName ())) {
205- mapValueOperator = new GenericPrimitiveValueOperator <>(( Class < V >) byte [].class , baseRealm , osMap , typeSelectorForMap , RealmMapEntrySet .IteratorType .BINARY , (EqualsHelper <String , V >) new BinaryEquals <String >());
214+ mapValueOperator = new GenericPrimitiveValueOperator <>(byte [].class , baseRealm , osMap , new SelectorForMap <>( baseRealm , osMap , String . class , byte []. class ), RealmMapEntrySet .IteratorType .BINARY , (EqualsHelper <String , byte [] >) new BinaryEquals <String >());
206215 } else if (valueClass .equals (ObjectId .class .getCanonicalName ())) {
207- mapValueOperator = new GenericPrimitiveValueOperator <>(ObjectId .class , baseRealm , osMap , ( TypeSelectorForMap < String , ObjectId >) typeSelectorForMap , RealmMapEntrySet .IteratorType .OBJECT_ID );
216+ mapValueOperator = new GenericPrimitiveValueOperator <>(ObjectId .class , baseRealm , osMap , new SelectorForMap <>( baseRealm , osMap , String . class , ObjectId . class ) , RealmMapEntrySet .IteratorType .OBJECT_ID );
208217 } else if (valueClass .equals (UUID .class .getCanonicalName ())) {
209- mapValueOperator = new GenericPrimitiveValueOperator <>(UUID .class , baseRealm , osMap , ( TypeSelectorForMap < String , UUID >) typeSelectorForMap , RealmMapEntrySet .IteratorType .UUID );
218+ mapValueOperator = new GenericPrimitiveValueOperator <>(UUID .class , baseRealm , osMap , new SelectorForMap <>( baseRealm , osMap , String . class , UUID . class ) , RealmMapEntrySet .IteratorType .UUID );
210219 } else {
211- throw new IllegalArgumentException ( "Only Maps of RealmAny or one of the types that can be boxed inside RealmAny can be used." );
220+ mapValueOperator = new RealmModelValueOperator <>( baseRealm , osMap , new DynamicSelectorForMap <>( baseRealm , osMap , valueClass ) );
212221 }
213222
214- return new DictionaryManager <>(baseRealm ,
215- (MapValueOperator <String , V >) mapValueOperator ,
216- typeSelectorForMap );
223+ return new DictionaryManager <>(baseRealm , (MapValueOperator <String , V >) mapValueOperator , (TypeSelectorForMap <String , V >) mapValueOperator .typeSelectorForMap );
217224 }
218225}
0 commit comments