From 8714f743d6123a94b123290761358fcc599db8bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kasper=20Overg=C3=A5rd=20Nielsen?= Date: Thu, 7 Mar 2024 14:19:59 +0100 Subject: [PATCH] RDART-960 Fix generated _fromEJson on Realm models (#1543) * Fix bug wrt. argument to Process.start * Remove redundant argument. Handled by cmake preset * Fix issue with ejson serialization skipping collections This is done by restoring sanity to allSettable, required, and nonRequired fields. This also fixes an unnecessary reordering of nonRequired fields, where collections was always at the back, and ordered list, set, then map. This commit also fixes a blemish regarding initializers. Since field initializers become ctor parameter initializers they need to be constant. For now we only allow literals. * Fix good tests * Add extra error test for const initializers * Update realm_dart after realm_generator fix * Fix dynamic tests regression --- .../realm_dart/test/backlinks_test.realm.dart | 6 +- .../realm_dart/test/dynamic_realm_test.dart | 7 +- .../test/geospatial_test.realm.dart | 5 +- .../realm_dart/test/realm_map_test.realm.dart | 21 +++ .../realm_dart/test/realm_object_test.dart | 16 +-- .../realm_dart/test/realm_set_test.realm.dart | 18 +++ .../test/realm_value_test.realm.dart | 9 +- packages/realm_dart/test/results_test.dart | 6 +- packages/realm_dart/test/test.dart | 3 +- packages/realm_dart/test/test.realm.dart | 123 +++++++++++++----- packages/realm_dart/tool/build.dart | 12 +- .../lib/src/field_element_ex.dart | 17 ++- .../lib/src/realm_field_info.dart | 2 +- .../lib/src/realm_model_info.dart | 46 +++---- .../error_test_data/const_initializer.dart | 10 ++ .../const_initializer.expected | 11 ++ .../const_initializer.realm.dart | 4 + .../test/good_test_data/all_types.dart | 4 +- .../test/good_test_data/all_types.expected | 29 +++-- .../another_mapto.expected_multi | 1 + .../good_test_data/asymmetric_object.expected | 7 +- .../test/good_test_data/binary_type.dart | 1 - .../test/good_test_data/binary_type.expected | 15 --- .../embedded_annotations.expected | 1 + .../good_test_data/embedded_objects.expected | 6 +- .../list_initialization.expected | 13 +- .../test/good_test_data/map.expected | 14 +- .../test/good_test_data/mapto.expected | 1 + .../test/good_test_data/realm_set.expected | 16 +++ 29 files changed, 298 insertions(+), 126 deletions(-) create mode 100644 packages/realm_generator/test/error_test_data/const_initializer.dart create mode 100644 packages/realm_generator/test/error_test_data/const_initializer.expected create mode 100644 packages/realm_generator/test/error_test_data/const_initializer.realm.dart diff --git a/packages/realm_dart/test/backlinks_test.realm.dart b/packages/realm_dart/test/backlinks_test.realm.dart index 523961454..67866f2a2 100644 --- a/packages/realm_dart/test/backlinks_test.realm.dart +++ b/packages/realm_dart/test/backlinks_test.realm.dart @@ -13,8 +13,8 @@ class Source extends _Source with RealmEntity, RealmObjectBase, RealmObject { Source({ String name = 'source', Target? oneTarget, - Target? dynamicTarget, Iterable manyTargets = const [], + Target? dynamicTarget, Iterable dynamicManyTargets = const [], }) { if (!_defaultsSet) { @@ -24,9 +24,9 @@ class Source extends _Source with RealmEntity, RealmObjectBase, RealmObject { } RealmObjectBase.set(this, 'name', name); RealmObjectBase.set(this, 'et mål', oneTarget); - RealmObjectBase.set(this, 'dynamisk mål', dynamicTarget); RealmObjectBase.set>( this, 'manyTargets', RealmList(manyTargets)); + RealmObjectBase.set(this, 'dynamisk mål', dynamicTarget); RealmObjectBase.set>( this, 'dynamicManyTargets', RealmList(dynamicManyTargets)); } @@ -97,7 +97,9 @@ class Source extends _Source with RealmEntity, RealmObjectBase, RealmObject { Source( name: fromEJson(name), oneTarget: fromEJson(oneTarget), + manyTargets: fromEJson(manyTargets), dynamicTarget: fromEJson(dynamicTarget), + dynamicManyTargets: fromEJson(dynamicManyTargets), ), _ => raiseInvalidEJson(ejson), }; diff --git a/packages/realm_dart/test/dynamic_realm_test.dart b/packages/realm_dart/test/dynamic_realm_test.dart index 9086fcbd6..b9f4fc769 100644 --- a/packages/realm_dart/test/dynamic_realm_test.dart +++ b/packages/realm_dart/test/dynamic_realm_test.dart @@ -3,6 +3,9 @@ // ignore_for_file: avoid_relative_lib_imports +import 'dart:ffi'; +import 'dart:typed_data'; + import 'package:test/test.dart' hide test, throws; import 'package:realm_dart/realm.dart'; @@ -72,7 +75,7 @@ void main() { final objectId = ObjectId(); final uuid = Uuid.v4(); - AllTypes _getPopulatedAllTypes() => AllTypes('abc', true, date, -123.456, objectId, uuid, -987, Decimal128.fromDouble(42), + AllTypes _getPopulatedAllTypes() => AllTypes('abc', true, date, -123.456, objectId, uuid, -987, Decimal128.fromDouble(42), Uint8List.fromList([1, 2, 3]), nullableStringProp: 'def', nullableBoolProp: true, nullableDateProp: date, @@ -82,7 +85,7 @@ void main() { nullableIntProp: 123, nullableDecimalProp: Decimal128.fromDouble(4242)); - AllTypes _getEmptyAllTypes() => AllTypes('', false, DateTime(0).toUtc(), 0, objectId, uuid, 0, Decimal128.zero); + AllTypes _getEmptyAllTypes() => AllTypes('', false, DateTime(0).toUtc(), 0, objectId, uuid, 0, Decimal128.zero, Uint8List(16)); AllCollections _getPopulatedAllCollections() => AllCollections( stringList: ['abc', 'def'], diff --git a/packages/realm_dart/test/geospatial_test.realm.dart b/packages/realm_dart/test/geospatial_test.realm.dart index d893ca96a..d5427ceb9 100644 --- a/packages/realm_dart/test/geospatial_test.realm.dart +++ b/packages/realm_dart/test/geospatial_test.realm.dart @@ -60,6 +60,7 @@ class Location extends _Location } => Location( type: fromEJson(type), + coordinates: fromEJson(coordinates), ), _ => raiseInvalidEJson(ejson), }; @@ -178,7 +179,9 @@ class LocationList extends _LocationList { 'locations': EJsonValue locations, } => - LocationList(), + LocationList( + locations: fromEJson(locations), + ), _ => raiseInvalidEJson(ejson), }; } diff --git a/packages/realm_dart/test/realm_map_test.realm.dart b/packages/realm_dart/test/realm_map_test.realm.dart index de72a8226..1467abc05 100644 --- a/packages/realm_dart/test/realm_map_test.realm.dart +++ b/packages/realm_dart/test/realm_map_test.realm.dart @@ -412,6 +412,27 @@ class TestRealmMaps extends _TestRealmMaps } => TestRealmMaps( fromEJson(key), + boolMap: fromEJson(boolMap), + intMap: fromEJson(intMap), + stringMap: fromEJson(stringMap), + doubleMap: fromEJson(doubleMap), + dateTimeMap: fromEJson(dateTimeMap), + objectIdMap: fromEJson(objectIdMap), + uuidMap: fromEJson(uuidMap), + binaryMap: fromEJson(binaryMap), + decimalMap: fromEJson(decimalMap), + nullableBoolMap: fromEJson(nullableBoolMap), + nullableIntMap: fromEJson(nullableIntMap), + nullableStringMap: fromEJson(nullableStringMap), + nullableDoubleMap: fromEJson(nullableDoubleMap), + nullableDateTimeMap: fromEJson(nullableDateTimeMap), + nullableObjectIdMap: fromEJson(nullableObjectIdMap), + nullableUuidMap: fromEJson(nullableUuidMap), + nullableBinaryMap: fromEJson(nullableBinaryMap), + nullableDecimalMap: fromEJson(nullableDecimalMap), + objectsMap: fromEJson(objectsMap), + embeddedMap: fromEJson(embeddedMap), + mixedMap: fromEJson(mixedMap), ), _ => raiseInvalidEJson(ejson), }; diff --git a/packages/realm_dart/test/realm_object_test.dart b/packages/realm_dart/test/realm_object_test.dart index 14e624327..b0ee63789 100644 --- a/packages/realm_dart/test/realm_object_test.dart +++ b/packages/realm_dart/test/realm_object_test.dart @@ -423,7 +423,7 @@ void main() { final config = Configuration.local([AllTypes.schema]); final realm = getRealm(config); final obj = realm.write(() { - return realm.add(AllTypes('', false, date, 0, ObjectId(), Uuid.v4(), 0, Decimal128.one)); + return realm.add(AllTypes('', false, date, 0, ObjectId(), Uuid.v4(), 0, Decimal128.one, Uint8List(16))); }); final json = obj.toJson(); @@ -462,7 +462,7 @@ void main() { expect(date.isUtc, isFalse); final obj = realm.write(() { - return realm.add(AllTypes('', false, date, 0, ObjectId(), Uuid.v4(), 0, Decimal128.one)); + return realm.add(AllTypes('', false, date, 0, ObjectId(), Uuid.v4(), 0, Decimal128.one, Uint8List(16))); }); final json = obj.toJson(); @@ -479,8 +479,8 @@ void main() { final date = DateTime.now(); realm.write(() { - realm.add(AllTypes('abc', false, date, 0, ObjectId(), Uuid.v4(), 0, Decimal128.one)); - realm.add(AllTypes('cde', false, DateTime.now().add(Duration(seconds: 1)), 0, ObjectId(), Uuid.v4(), 0, Decimal128.one)); + realm.add(AllTypes('abc', false, date, 0, ObjectId(), Uuid.v4(), 0, Decimal128.one, Uint8List(16))); + realm.add(AllTypes('cde', false, DateTime.now().add(Duration(seconds: 1)), 0, ObjectId(), Uuid.v4(), 0, Decimal128.one, Uint8List(16))); }); var results = realm.all().query('dateProp = \$0', [date]); @@ -497,9 +497,9 @@ void main() { final date3 = date1.subtract(Duration(microseconds: 1)); realm.write(() { - realm.add(AllTypes('1', false, date1, 0, ObjectId(), Uuid.v4(), 0, Decimal128.one)); - realm.add(AllTypes('2', false, date2, 0, ObjectId(), Uuid.v4(), 0, Decimal128.one)); - realm.add(AllTypes('3', false, date3, 0, ObjectId(), Uuid.v4(), 0, Decimal128.one)); + realm.add(AllTypes('1', false, date1, 0, ObjectId(), Uuid.v4(), 0, Decimal128.one, Uint8List(16))); + realm.add(AllTypes('2', false, date2, 0, ObjectId(), Uuid.v4(), 0, Decimal128.one, Uint8List(16))); + realm.add(AllTypes('3', false, date3, 0, ObjectId(), Uuid.v4(), 0, Decimal128.one, Uint8List(16))); }); final lessThan1 = realm.all().query('dateProp < \$0', [date1]); @@ -524,7 +524,7 @@ void main() { var uuid = Uuid.v4(); final object = realm.write(() { - return realm.add(AllTypes('cde', false, date, 0.1, objectId, uuid, 4, Decimal128.ten, binaryProp: Uint8List.fromList([1, 2]), nullableBinaryProp: null)); + return realm.add(AllTypes('cde', false, date, 0.1, objectId, uuid, 4, Decimal128.ten, Uint8List.fromList([1, 2]), nullableBinaryProp: null)); }); expect(object.stringProp, 'cde'); diff --git a/packages/realm_dart/test/realm_set_test.realm.dart b/packages/realm_dart/test/realm_set_test.realm.dart index 09bb778e6..6f9c2f276 100644 --- a/packages/realm_dart/test/realm_set_test.realm.dart +++ b/packages/realm_dart/test/realm_set_test.realm.dart @@ -322,6 +322,24 @@ class TestRealmSets extends _TestRealmSets } => TestRealmSets( fromEJson(key), + boolSet: fromEJson(boolSet), + intSet: fromEJson(intSet), + stringSet: fromEJson(stringSet), + doubleSet: fromEJson(doubleSet), + dateTimeSet: fromEJson(dateTimeSet), + objectIdSet: fromEJson(objectIdSet), + uuidSet: fromEJson(uuidSet), + mixedSet: fromEJson(mixedSet), + objectsSet: fromEJson(objectsSet), + binarySet: fromEJson(binarySet), + nullableBoolSet: fromEJson(nullableBoolSet), + nullableIntSet: fromEJson(nullableIntSet), + nullableStringSet: fromEJson(nullableStringSet), + nullableDoubleSet: fromEJson(nullableDoubleSet), + nullableDateTimeSet: fromEJson(nullableDateTimeSet), + nullableObjectIdSet: fromEJson(nullableObjectIdSet), + nullableUuidSet: fromEJson(nullableUuidSet), + nullableBinarySet: fromEJson(nullableBinarySet), ), _ => raiseInvalidEJson(ejson), }; diff --git a/packages/realm_dart/test/realm_value_test.realm.dart b/packages/realm_dart/test/realm_value_test.realm.dart index 0a011da86..251d68277 100644 --- a/packages/realm_dart/test/realm_value_test.realm.dart +++ b/packages/realm_dart/test/realm_value_test.realm.dart @@ -69,16 +69,16 @@ class AnythingGoes extends _AnythingGoes AnythingGoes({ RealmValue oneAny = const RealmValue.nullValue(), Iterable manyAny = const [], - Set setOfAny = const {}, Map dictOfAny = const {}, + Set setOfAny = const {}, }) { RealmObjectBase.set(this, 'oneAny', oneAny); RealmObjectBase.set>( this, 'manyAny', RealmList(manyAny)); - RealmObjectBase.set>( - this, 'setOfAny', RealmSet(setOfAny)); RealmObjectBase.set>( this, 'dictOfAny', RealmMap(dictOfAny)); + RealmObjectBase.set>( + this, 'setOfAny', RealmSet(setOfAny)); } AnythingGoes._(); @@ -138,6 +138,9 @@ class AnythingGoes extends _AnythingGoes } => AnythingGoes( oneAny: fromEJson(oneAny), + manyAny: fromEJson(manyAny), + dictOfAny: fromEJson(dictOfAny), + setOfAny: fromEJson(setOfAny), ), _ => raiseInvalidEJson(ejson), }; diff --git a/packages/realm_dart/test/results_test.dart b/packages/realm_dart/test/results_test.dart index ab69c67c5..a22f883e1 100644 --- a/packages/realm_dart/test/results_test.dart +++ b/packages/realm_dart/test/results_test.dart @@ -791,9 +791,9 @@ void main() { final config = Configuration.local([AllTypes.schema]); Realm realm = getRealm(config); realm.write(() => realm.addAll([ - AllTypes(text_1, false, DateTime.now(), 1.1, id_1, uid_1, 1, Decimal128.one, binaryProp: Uint8List.fromList([1, 2])), - AllTypes('text2', true, date_1, 2.2, id_2, uid_2, 2, Decimal128.ten), - AllTypes('text3', true, date_2, 3.3, ObjectId(), Uuid.v4(), 3, Decimal128.infinity, binaryProp: Uint8List.fromList([3, 4])), + AllTypes(text_1, false, DateTime.now(), 1.1, id_1, uid_1, 1, Decimal128.one, Uint8List.fromList([1, 2])), + AllTypes('text2', true, date_1, 2.2, id_2, uid_2, 2, Decimal128.ten, Uint8List(16)), + AllTypes('text3', true, date_2, 3.3, ObjectId(), Uuid.v4(), 3, Decimal128.infinity, Uint8List.fromList([3, 4])), ])); void queryWithListArg(String propName, Object? argument, {int expected = 0}) { diff --git a/packages/realm_dart/test/test.dart b/packages/realm_dart/test/test.dart index 3c3e71641..11877de1d 100644 --- a/packages/realm_dart/test/test.dart +++ b/packages/realm_dart/test/test.dart @@ -109,7 +109,6 @@ class _Schedule { @RealmModel() class _Foo { late Uint8List requiredBinaryProp; - var defaultValueBinaryProp = Uint8List(8); late Uint8List? nullableBinaryProp; } @@ -123,7 +122,7 @@ class _AllTypes { late Uuid uuidProp; late int intProp; late Decimal128 decimalProp; - var binaryProp = Uint8List(16); + late Uint8List binaryProp; late String? nullableStringProp; late bool? nullableBoolProp; diff --git a/packages/realm_dart/test/test.realm.dart b/packages/realm_dart/test/test.realm.dart index 1a9c2cfa6..628dd54d6 100644 --- a/packages/realm_dart/test/test.realm.dart +++ b/packages/realm_dart/test/test.realm.dart @@ -236,6 +236,8 @@ class Team extends _Team with RealmEntity, RealmObjectBase, RealmObject { } => Team( fromEJson(name), + players: fromEJson(players), + scores: fromEJson(scores), ), _ => raiseInvalidEJson(ejson), }; @@ -343,15 +345,15 @@ class School extends _School with RealmEntity, RealmObjectBase, RealmObject { School( String name, { String? city, - School? branchOfSchool, Iterable students = const [], + School? branchOfSchool, Iterable branches = const [], }) { RealmObjectBase.set(this, 'name', name); RealmObjectBase.set(this, 'city', city); - RealmObjectBase.set(this, 'branchOfSchool', branchOfSchool); RealmObjectBase.set>( this, 'students', RealmList(students)); + RealmObjectBase.set(this, 'branchOfSchool', branchOfSchool); RealmObjectBase.set>( this, 'branches', RealmList(branches)); } @@ -419,7 +421,9 @@ class School extends _School with RealmEntity, RealmObjectBase, RealmObject { School( fromEJson(name), city: fromEJson(city), + students: fromEJson(students), branchOfSchool: fromEJson(branchOfSchool), + branches: fromEJson(branches), ), _ => raiseInvalidEJson(ejson), }; @@ -492,6 +496,7 @@ class RemappedClass extends $RemappedClass } => RemappedClass( fromEJson(remappedProperty), + listProperty: fromEJson(listProperty), ), _ => raiseInvalidEJson(ejson), }; @@ -673,6 +678,7 @@ class Schedule extends _Schedule } => Schedule( fromEJson(id), + tasks: fromEJson(tasks), ), _ => raiseInvalidEJson(ejson), }; @@ -693,12 +699,9 @@ class Schedule extends _Schedule class Foo extends _Foo with RealmEntity, RealmObjectBase, RealmObject { Foo( Uint8List requiredBinaryProp, { - Uint8List? defaultValueBinaryProp, Uint8List? nullableBinaryProp, }) { RealmObjectBase.set(this, 'requiredBinaryProp', requiredBinaryProp); - RealmObjectBase.set( - this, 'defaultValueBinaryProp', defaultValueBinaryProp ?? Uint8List(8)); RealmObjectBase.set(this, 'nullableBinaryProp', nullableBinaryProp); } @@ -711,14 +714,6 @@ class Foo extends _Foo with RealmEntity, RealmObjectBase, RealmObject { set requiredBinaryProp(Uint8List value) => RealmObjectBase.set(this, 'requiredBinaryProp', value); - @override - Uint8List get defaultValueBinaryProp => - RealmObjectBase.get(this, 'defaultValueBinaryProp') - as Uint8List; - @override - set defaultValueBinaryProp(Uint8List value) => - RealmObjectBase.set(this, 'defaultValueBinaryProp', value); - @override Uint8List? get nullableBinaryProp => RealmObjectBase.get(this, 'nullableBinaryProp') as Uint8List?; @@ -736,7 +731,6 @@ class Foo extends _Foo with RealmEntity, RealmObjectBase, RealmObject { EJsonValue toEJson() { return { 'requiredBinaryProp': requiredBinaryProp.toEJson(), - 'defaultValueBinaryProp': defaultValueBinaryProp.toEJson(), 'nullableBinaryProp': nullableBinaryProp.toEJson(), }; } @@ -746,12 +740,10 @@ class Foo extends _Foo with RealmEntity, RealmObjectBase, RealmObject { return switch (ejson) { { 'requiredBinaryProp': EJsonValue requiredBinaryProp, - 'defaultValueBinaryProp': EJsonValue defaultValueBinaryProp, 'nullableBinaryProp': EJsonValue nullableBinaryProp, } => Foo( fromEJson(requiredBinaryProp), - defaultValueBinaryProp: fromEJson(defaultValueBinaryProp), nullableBinaryProp: fromEJson(nullableBinaryProp), ), _ => raiseInvalidEJson(ejson), @@ -763,7 +755,6 @@ class Foo extends _Foo with RealmEntity, RealmObjectBase, RealmObject { register(_toEJson, _fromEJson); return const SchemaObject(ObjectType.realmObject, Foo, 'Foo', [ SchemaProperty('requiredBinaryProp', RealmPropertyType.binary), - SchemaProperty('defaultValueBinaryProp', RealmPropertyType.binary), SchemaProperty('nullableBinaryProp', RealmPropertyType.binary, optional: true), ]); @@ -780,8 +771,8 @@ class AllTypes extends _AllTypes ObjectId objectIdProp, Uuid uuidProp, int intProp, - Decimal128 decimalProp, { - Uint8List? binaryProp, + Decimal128 decimalProp, + Uint8List binaryProp, { String? nullableStringProp, bool? nullableBoolProp, DateTime? nullableDateProp, @@ -800,7 +791,7 @@ class AllTypes extends _AllTypes RealmObjectBase.set(this, 'uuidProp', uuidProp); RealmObjectBase.set(this, 'intProp', intProp); RealmObjectBase.set(this, 'decimalProp', decimalProp); - RealmObjectBase.set(this, 'binaryProp', binaryProp ?? Uint8List(16)); + RealmObjectBase.set(this, 'binaryProp', binaryProp); RealmObjectBase.set(this, 'nullableStringProp', nullableStringProp); RealmObjectBase.set(this, 'nullableBoolProp', nullableBoolProp); RealmObjectBase.set(this, 'nullableDateProp', nullableDateProp); @@ -996,7 +987,7 @@ class AllTypes extends _AllTypes fromEJson(uuidProp), fromEJson(intProp), fromEJson(decimalProp), - binaryProp: fromEJson(binaryProp), + fromEJson(binaryProp), nullableStringProp: fromEJson(nullableStringProp), nullableBoolProp: fromEJson(nullableBoolProp), nullableDateProp: fromEJson(nullableDateProp), @@ -1129,6 +1120,9 @@ class LinksClass extends _LinksClass LinksClass( fromEJson(id), link: fromEJson(link), + list: fromEJson(list), + linksSet: fromEJson(linksSet), + map: fromEJson(map), ), _ => raiseInvalidEJson(ejson), }; @@ -1770,7 +1764,56 @@ class AllCollections extends _AllCollections 'nullableIntMap': EJsonValue nullableIntMap, 'nullableDecimalMap': EJsonValue nullableDecimalMap, } => - AllCollections(), + AllCollections( + stringList: fromEJson(stringList), + boolList: fromEJson(boolList), + dateList: fromEJson(dateList), + doubleList: fromEJson(doubleList), + objectIdList: fromEJson(objectIdList), + uuidList: fromEJson(uuidList), + intList: fromEJson(intList), + decimalList: fromEJson(decimalList), + nullableStringList: fromEJson(nullableStringList), + nullableBoolList: fromEJson(nullableBoolList), + nullableDateList: fromEJson(nullableDateList), + nullableDoubleList: fromEJson(nullableDoubleList), + nullableObjectIdList: fromEJson(nullableObjectIdList), + nullableUuidList: fromEJson(nullableUuidList), + nullableIntList: fromEJson(nullableIntList), + nullableDecimalList: fromEJson(nullableDecimalList), + stringSet: fromEJson(stringSet), + boolSet: fromEJson(boolSet), + dateSet: fromEJson(dateSet), + doubleSet: fromEJson(doubleSet), + objectIdSet: fromEJson(objectIdSet), + uuidSet: fromEJson(uuidSet), + intSet: fromEJson(intSet), + decimalSet: fromEJson(decimalSet), + nullableStringSet: fromEJson(nullableStringSet), + nullableBoolSet: fromEJson(nullableBoolSet), + nullableDateSet: fromEJson(nullableDateSet), + nullableDoubleSet: fromEJson(nullableDoubleSet), + nullableObjectIdSet: fromEJson(nullableObjectIdSet), + nullableUuidSet: fromEJson(nullableUuidSet), + nullableIntSet: fromEJson(nullableIntSet), + nullableDecimalSet: fromEJson(nullableDecimalSet), + stringMap: fromEJson(stringMap), + boolMap: fromEJson(boolMap), + dateMap: fromEJson(dateMap), + doubleMap: fromEJson(doubleMap), + objectIdMap: fromEJson(objectIdMap), + uuidMap: fromEJson(uuidMap), + intMap: fromEJson(intMap), + decimalMap: fromEJson(decimalMap), + nullableStringMap: fromEJson(nullableStringMap), + nullableBoolMap: fromEJson(nullableBoolMap), + nullableDateMap: fromEJson(nullableDateMap), + nullableDoubleMap: fromEJson(nullableDoubleMap), + nullableObjectIdMap: fromEJson(nullableObjectIdMap), + nullableUuidMap: fromEJson(nullableUuidMap), + nullableIntMap: fromEJson(nullableIntMap), + nullableDecimalMap: fromEJson(nullableDecimalMap), + ), _ => raiseInvalidEJson(ejson), }; } @@ -2153,14 +2196,14 @@ class Party extends _Party with RealmEntity, RealmObjectBase, RealmObject { Party( int year, { Friend? host, - Party? previous, Iterable guests = const [], + Party? previous, }) { RealmObjectBase.set(this, 'host', host); RealmObjectBase.set(this, 'year', year); - RealmObjectBase.set(this, 'previous', previous); RealmObjectBase.set>( this, 'guests', RealmList(guests)); + RealmObjectBase.set(this, 'previous', previous); } Party._(); @@ -2216,6 +2259,7 @@ class Party extends _Party with RealmEntity, RealmObjectBase, RealmObject { Party( fromEJson(year), host: fromEJson(host), + guests: fromEJson(guests), previous: fromEJson(previous), ), _ => raiseInvalidEJson(ejson), @@ -2313,6 +2357,7 @@ class Friend extends _Friend with RealmEntity, RealmObjectBase, RealmObject { fromEJson(name), age: fromEJson(age), bestFriend: fromEJson(bestFriend), + friends: fromEJson(friends), ), _ => raiseInvalidEJson(ejson), }; @@ -2453,6 +2498,7 @@ class Player extends _Player with RealmEntity, RealmObjectBase, RealmObject { Player( fromEJson(name), game: fromEJson(game), + scoresByRound: fromEJson(scoresByRound), ), _ => raiseInvalidEJson(ejson), }; @@ -2507,7 +2553,9 @@ class Game extends _Game with RealmEntity, RealmObjectBase, RealmObject { { 'winnerByRound': EJsonValue winnerByRound, } => - Game(), + Game( + winnerByRound: fromEJson(winnerByRound), + ), _ => raiseInvalidEJson(ejson), }; } @@ -2828,6 +2876,14 @@ class AllTypesEmbedded extends _AllTypesEmbedded nullableUuidProp: fromEJson(nullableUuidProp), nullableIntProp: fromEJson(nullableIntProp), nullableDecimalProp: fromEJson(nullableDecimalProp), + strings: fromEJson(strings), + bools: fromEJson(bools), + dates: fromEJson(dates), + doubles: fromEJson(doubles), + objectIds: fromEJson(objectIds), + uuids: fromEJson(uuids), + ints: fromEJson(ints), + decimals: fromEJson(decimals), ), _ => raiseInvalidEJson(ejson), }; @@ -2887,16 +2943,16 @@ class ObjectWithEmbedded extends _ObjectWithEmbedded String id, { Uuid? differentiator, AllTypesEmbedded? singleObject, - RecursiveEmbedded1? recursiveObject, Iterable list = const [], + RecursiveEmbedded1? recursiveObject, Iterable recursiveList = const [], }) { RealmObjectBase.set(this, '_id', id); RealmObjectBase.set(this, 'differentiator', differentiator); RealmObjectBase.set(this, 'singleObject', singleObject); - RealmObjectBase.set(this, 'recursiveObject', recursiveObject); RealmObjectBase.set>( this, 'list', RealmList(list)); + RealmObjectBase.set(this, 'recursiveObject', recursiveObject); RealmObjectBase.set>( this, 'recursiveList', RealmList(recursiveList)); } @@ -2981,7 +3037,9 @@ class ObjectWithEmbedded extends _ObjectWithEmbedded fromEJson(id), differentiator: fromEJson(differentiator), singleObject: fromEJson(singleObject), + list: fromEJson(list), recursiveObject: fromEJson(recursiveObject), + recursiveList: fromEJson(recursiveList), ), _ => raiseInvalidEJson(ejson), }; @@ -3014,14 +3072,14 @@ class RecursiveEmbedded1 extends _RecursiveEmbedded1 RecursiveEmbedded1( String value, { RecursiveEmbedded2? child, - ObjectWithEmbedded? realmObject, Iterable children = const [], + ObjectWithEmbedded? realmObject, }) { RealmObjectBase.set(this, 'value', value); RealmObjectBase.set(this, 'child', child); - RealmObjectBase.set(this, 'realmObject', realmObject); RealmObjectBase.set>( this, 'children', RealmList(children)); + RealmObjectBase.set(this, 'realmObject', realmObject); } RecursiveEmbedded1._(); @@ -3084,6 +3142,7 @@ class RecursiveEmbedded1 extends _RecursiveEmbedded1 RecursiveEmbedded1( fromEJson(value), child: fromEJson(child), + children: fromEJson(children), realmObject: fromEJson(realmObject), ), _ => raiseInvalidEJson(ejson), @@ -3112,14 +3171,14 @@ class RecursiveEmbedded2 extends _RecursiveEmbedded2 RecursiveEmbedded2( String value, { RecursiveEmbedded3? child, - ObjectWithEmbedded? realmObject, Iterable children = const [], + ObjectWithEmbedded? realmObject, }) { RealmObjectBase.set(this, 'value', value); RealmObjectBase.set(this, 'child', child); - RealmObjectBase.set(this, 'realmObject', realmObject); RealmObjectBase.set>( this, 'children', RealmList(children)); + RealmObjectBase.set(this, 'realmObject', realmObject); } RecursiveEmbedded2._(); @@ -3182,6 +3241,7 @@ class RecursiveEmbedded2 extends _RecursiveEmbedded2 RecursiveEmbedded2( fromEJson(value), child: fromEJson(child), + children: fromEJson(children), realmObject: fromEJson(realmObject), ), _ => raiseInvalidEJson(ejson), @@ -3385,6 +3445,7 @@ class Asymmetric extends _Asymmetric Asymmetric( fromEJson(id), symmetric: fromEJson(symmetric), + embeddedObjects: fromEJson(embeddedObjects), ), _ => raiseInvalidEJson(ejson), }; diff --git a/packages/realm_dart/tool/build.dart b/packages/realm_dart/tool/build.dart index 85b890c1d..bb10c7175 100644 --- a/packages/realm_dart/tool/build.dart +++ b/packages/realm_dart/tool/build.dart @@ -159,10 +159,11 @@ class _BuildNativeCommand extends _BaseCommand { Future runProc(List args, {required Logger logger, String? message}) async { final p = await io.Process.start(args.first, args.skip(1).toList()); Progress? progress; + message ??= args.join(' '); if (verbose) { + logger.info(message); await Future.wait([io.stdout.addStream(p.stdout), io.stderr.addStream(p.stderr)]); } else { - message ??= args.join(' '); final width = io.stdout.hasTerminal ? io.stdout.terminalColumns - 12 : 80; message = message.padRight(width).substring(0, width); progress = logger.progress(message); @@ -207,12 +208,16 @@ class _BuildNativeCommand extends _BaseCommand { exitCode ??= await runProc(['cmake', '--preset=ios'], logger: logger); exitCode ??= await runProc(['cmake', '--build', '--preset=ios-${sdk.cmakeName}', '--config=${buildMode.cmakeName}'], logger: logger); } + final output = io.Directory('./binary/ios/realm_dart.xcframework'); + if (await output.exists()) { + await output.delete(recursive: true); + } exitCode ??= await runProc( [ 'xcodebuild', '-create-xcframework', - for (final s in iosSdks) '-framework ./binary/ios/${buildMode.cmakeName}-${s.name.toLowerCase()}/realm_dart.framework', - '-output ./binary/ios/realm_dart.xcframework', + for (final s in iosSdks) ...['-framework', './binary/ios/${buildMode.cmakeName}-${s.name.toLowerCase()}/realm_dart.framework'], + ...['-output', output.path], ], logger: logger, ); @@ -230,7 +235,6 @@ class _BuildNativeCommand extends _BaseCommand { '--build', '--preset=$preset', '--config=${buildMode.cmakeName}', - if (target.os == OS.macOS) '-- -destination "generic/platform=macOS', if (target.os == OS.android) '--target=strip', ], logger: logger, diff --git a/packages/realm_generator/lib/src/field_element_ex.dart b/packages/realm_generator/lib/src/field_element_ex.dart index f44947e96..d7f001262 100644 --- a/packages/realm_generator/lib/src/field_element_ex.dart +++ b/packages/realm_generator/lib/src/field_element_ex.dart @@ -322,11 +322,11 @@ extension FieldElementEx on FieldElement { ); } - final intiExpression = initializerExpression; - if (intiExpression != null) { + final initExpression = initializerExpression; + if (initExpression != null) { throw RealmInvalidGenerationSourceError( 'Realm object references should not have default values', - primarySpan: initializerExpressionSpan(file, intiExpression), + primarySpan: initializerExpressionSpan(file, initExpression), primaryLabel: ' Remove the default value', todo: 'Remove the default value for field "$displayName"', element: this, @@ -346,6 +346,17 @@ extension FieldElementEx on FieldElement { } } + final initExpression = initializerExpression; + if (initExpression != null && initExpression is! Literal) { + throw RealmInvalidGenerationSourceError( + 'Field initializers must be constant', + primarySpan: initializerExpressionSpan(file, initExpression), + primaryLabel: 'Must be const', + todo: 'Ensure the default value for field "$displayName" is const', + element: this, + ); + } + return RealmFieldInfo( fieldElement: this, indexType: indexType, diff --git a/packages/realm_generator/lib/src/realm_field_info.dart b/packages/realm_generator/lib/src/realm_field_info.dart index 68c7202a6..2ad0ae4e6 100644 --- a/packages/realm_generator/lib/src/realm_field_info.dart +++ b/packages/realm_generator/lib/src/realm_field_info.dart @@ -32,7 +32,7 @@ class RealmFieldInfo { bool get isLate => fieldElement.isLate; bool get hasDefaultValue => fieldElement.hasInitializer; bool get optional => type.basicType.isNullable || realmType == RealmPropertyType.mixed; - bool get isRequired => !(hasDefaultValue || optional); + bool get isRequired => !(hasDefaultValue || optional || isRealmCollection); bool get isRealmBacklink => realmType == RealmPropertyType.linkingObjects; bool get isMixed => realmType == RealmPropertyType.mixed; bool get isComputed => isRealmBacklink; // only computed, so far diff --git a/packages/realm_generator/lib/src/realm_model_info.dart b/packages/realm_generator/lib/src/realm_model_info.dart index 0866c2d5f..2c49d9269 100644 --- a/packages/realm_generator/lib/src/realm_model_info.dart +++ b/packages/realm_generator/lib/src/realm_model_info.dart @@ -7,6 +7,10 @@ import 'dart_type_ex.dart'; import 'field_element_ex.dart'; import 'realm_field_info.dart'; +extension on Iterable { + Iterable except(bool Function(T) test) => where((e) => !test(e)); +} + class RealmModelInfo { final String name; final String modelName; @@ -19,36 +23,32 @@ class RealmModelInfo { Iterable toCode() sync* { yield 'class $name extends $modelName with RealmEntity, RealmObjectBase, ${baseType.className} {'; { - final allSettable = fields.where((f) => !f.type.isRealmCollection && !f.isRealmBacklink).toList(); + final allSettable = fields.where((f) => !f.isComputed).toList(); - final fieldsWithDefaultValue = allSettable.where((f) => f.hasDefaultValue && !f.type.isUint8List).toList(); - final shouldEmitDefaultsSet = fieldsWithDefaultValue.isNotEmpty; + final fieldsWithRealmDefaults = allSettable.where((f) => f.hasDefaultValue && !f.isRealmCollection).toList(); + final shouldEmitDefaultsSet = fieldsWithRealmDefaults.isNotEmpty; if (shouldEmitDefaultsSet) { yield 'static var _defaultsSet = false;'; yield ''; } - final required = allSettable.where((f) => f.isRequired || f.isPrimaryKey); - final notRequired = allSettable.where((f) => !f.isRequired && !f.isPrimaryKey); - final lists = fields.where((f) => f.isDartCoreList).toList(); - final sets = fields.where((f) => f.isDartCoreSet).toList(); - final maps = fields.where((f) => f.isDartCoreMap).toList(); + bool requiredCondition(RealmFieldInfo f) => f.isRequired || f.isPrimaryKey; + final required = allSettable.where(requiredCondition); + final notRequired = allSettable.except(requiredCondition); // Constructor yield '$name('; { yield* required.map((f) => '${f.mappedTypeName} ${f.name},'); - if (notRequired.isNotEmpty || lists.isNotEmpty || sets.isNotEmpty || maps.isNotEmpty) { + if (notRequired.isNotEmpty) { yield '{'; yield* notRequired.map((f) { - if (f.type.isUint8List && f.hasDefaultValue) { - return '${f.mappedTypeName}? ${f.name},'; + if (f.isRealmCollection) { + final collectionPrefix = f.type.isDartCoreList ? 'Iterable<' : f.type.isDartCoreSet ? 'Set<' : 'Map ${f.name}${f.initializer},'; } return '${f.mappedTypeName} ${f.name}${f.initializer},'; }); - yield* lists.map((c) => 'Iterable<${c.type.basicMappedName}> ${c.name}${c.initializer},'); - yield* sets.map((c) => 'Set<${c.type.basicMappedName}> ${c.name}${c.initializer},'); - yield* maps.map((c) => 'Map ${c.name}${c.initializer},'); yield '}'; } @@ -57,7 +57,7 @@ class RealmModelInfo { if (shouldEmitDefaultsSet) { yield 'if (!_defaultsSet) {'; yield ' _defaultsSet = RealmObjectBase.setDefaults<$name>({'; - yield* fieldsWithDefaultValue.map((f) => "'${f.realmName}': ${f.fieldElement.initializerExpression},"); + yield* fieldsWithRealmDefaults.map((f) => "'${f.realmName}': ${f.fieldElement.initializerExpression},"); yield ' });'; yield '}'; } @@ -66,21 +66,11 @@ class RealmModelInfo { if (f.type.isUint8List && f.hasDefaultValue) { return "RealmObjectBase.set(this, '${f.realmName}', ${f.name} ?? ${f.fieldElement.initializerExpression});"; } - + if (f.isRealmCollection) { + return "RealmObjectBase.set<${f.mappedTypeName}>(this, '${f.realmName}', ${f.mappedTypeName}(${f.name}));"; + } return "RealmObjectBase.set(this, '${f.realmName}', ${f.name});"; }); - - yield* lists.map((c) { - return "RealmObjectBase.set<${c.mappedTypeName}>(this, '${c.realmName}', ${c.mappedTypeName}(${c.name}));"; - }); - - yield* sets.map((c) { - return "RealmObjectBase.set<${c.mappedTypeName}>(this, '${c.realmName}', ${c.mappedTypeName}(${c.name}));"; - }); - - yield* maps.map((c) { - return "RealmObjectBase.set<${c.mappedTypeName}>(this, '${c.realmName}', ${c.mappedTypeName}(${c.name}));"; - }); } yield '}'; yield ''; diff --git a/packages/realm_generator/test/error_test_data/const_initializer.dart b/packages/realm_generator/test/error_test_data/const_initializer.dart new file mode 100644 index 000000000..10417f43f --- /dev/null +++ b/packages/realm_generator/test/error_test_data/const_initializer.dart @@ -0,0 +1,10 @@ +import 'dart:math'; + +import 'package:realm_common/realm_common.dart'; + +part 'const_initializer.realm.dart'; + +@RealmModel() +class _Bad { + var id = Random().nextInt(1000); +} diff --git a/packages/realm_generator/test/error_test_data/const_initializer.expected b/packages/realm_generator/test/error_test_data/const_initializer.expected new file mode 100644 index 000000000..8d5ed869a --- /dev/null +++ b/packages/realm_generator/test/error_test_data/const_initializer.expected @@ -0,0 +1,11 @@ +Field initializers must be constant + +in: asset:pkg/test/error_test_data/const_initializer.dart:9:12 + ╷ +7 │ @RealmModel() +8 │ class _Bad { + │ ━━━━ in realm model for 'Bad' +9 │ var id = Random().nextInt(1000); + │ ^^^^^^^^^^^^^^^^^^^^^^ Must be const + ╵ +Ensure the default value for field "id" is const \ No newline at end of file diff --git a/packages/realm_generator/test/error_test_data/const_initializer.realm.dart b/packages/realm_generator/test/error_test_data/const_initializer.realm.dart new file mode 100644 index 000000000..f52e5e45a --- /dev/null +++ b/packages/realm_generator/test/error_test_data/const_initializer.realm.dart @@ -0,0 +1,4 @@ +// MOCK FILE! This file exists to ensure the parent file is valid Dart. +// The parent will be used as input to the realm_generator in a test, and the +// output compared to the .expected file. +part of 'const_initializer.dart'; diff --git a/packages/realm_generator/test/good_test_data/all_types.dart b/packages/realm_generator/test/good_test_data/all_types.dart index 2c65be60c..daac19992 100644 --- a/packages/realm_generator/test/good_test_data/all_types.dart +++ b/packages/realm_generator/test/good_test_data/all_types.dart @@ -18,10 +18,10 @@ class _Bar { late String name; @Indexed() late bool aBool, another; // both are indexed! - var data = Uint8List(16); + late Uint8List data; @MapTo('tidspunkt') @Indexed() - var timestamp = DateTime.now(); + late DateTime timestamp; var aDouble = 0.0; // late Decimal128 decimal; // not supported yet _Foo? foo; diff --git a/packages/realm_generator/test/good_test_data/all_types.expected b/packages/realm_generator/test/good_test_data/all_types.expected index bdd5e45c0..2007bc68f 100644 --- a/packages/realm_generator/test/good_test_data/all_types.expected +++ b/packages/realm_generator/test/good_test_data/all_types.expected @@ -83,43 +83,42 @@ class Bar extends _Bar with RealmEntity, RealmObjectBase, RealmObject { String name, bool aBool, bool another, + Uint8List data, + DateTime timestamp, ObjectId objectId, Uuid uuid, Decimal128 decimal, { - Uint8List? data, - DateTime timestamp = DateTime.now(), double aDouble = 0.0, Foo? foo, - String? anOptionalString, - RealmValue any = const RealmValue.nullValue(), Iterable list = const [], - Iterable manyAny = const [], Set set = const {}, Map map = const {}, + String? anOptionalString, + RealmValue any = const RealmValue.nullValue(), + Iterable manyAny = const [], }) { if (!_defaultsSet) { _defaultsSet = RealmObjectBase.setDefaults({ - 'tidspunkt': DateTime.now(), 'aDouble': 0.0, }); } RealmObjectBase.set(this, 'name', name); RealmObjectBase.set(this, 'aBool', aBool); RealmObjectBase.set(this, 'another', another); - RealmObjectBase.set(this, 'data', data ?? Uint8List(16)); + RealmObjectBase.set(this, 'data', data); RealmObjectBase.set(this, 'tidspunkt', timestamp); RealmObjectBase.set(this, 'aDouble', aDouble); RealmObjectBase.set(this, 'foo', foo); RealmObjectBase.set(this, 'objectId', objectId); RealmObjectBase.set(this, 'uuid', uuid); + RealmObjectBase.set>(this, 'list', RealmList(list)); + RealmObjectBase.set>(this, 'set', RealmSet(set)); + RealmObjectBase.set>(this, 'map', RealmMap(map)); RealmObjectBase.set(this, 'anOptionalString', anOptionalString); RealmObjectBase.set(this, 'any', any); - RealmObjectBase.set(this, 'decimal', decimal); - RealmObjectBase.set>(this, 'list', RealmList(list)); RealmObjectBase.set>( this, 'manyAny', RealmList(manyAny)); - RealmObjectBase.set>(this, 'set', RealmSet(set)); - RealmObjectBase.set>(this, 'map', RealmMap(map)); + RealmObjectBase.set(this, 'decimal', decimal); } Bar._(); @@ -284,15 +283,19 @@ class Bar extends _Bar with RealmEntity, RealmObjectBase, RealmObject { fromEJson(name), fromEJson(aBool), fromEJson(another), + fromEJson(data), + fromEJson(timestamp), fromEJson(objectId), fromEJson(uuid), fromEJson(decimal), - data: fromEJson(data), - timestamp: fromEJson(timestamp), aDouble: fromEJson(aDouble), foo: fromEJson(foo), + list: fromEJson(list), + set: fromEJson(set), + map: fromEJson(map), anOptionalString: fromEJson(anOptionalString), any: fromEJson(any), + manyAny: fromEJson(manyAny), ), _ => raiseInvalidEJson(ejson), }; diff --git a/packages/realm_generator/test/good_test_data/another_mapto.expected_multi b/packages/realm_generator/test/good_test_data/another_mapto.expected_multi index 0379a2c6a..56a02c4fe 100644 --- a/packages/realm_generator/test/good_test_data/another_mapto.expected_multi +++ b/packages/realm_generator/test/good_test_data/another_mapto.expected_multi @@ -57,6 +57,7 @@ class MappedToo extends _MappedToo } => MappedToo( singleLink: fromEJson(singleLink), + listLink: fromEJson(listLink), ), _ => raiseInvalidEJson(ejson), }; diff --git a/packages/realm_generator/test/good_test_data/asymmetric_object.expected b/packages/realm_generator/test/good_test_data/asymmetric_object.expected index e6830bb76..fb44a52f3 100644 --- a/packages/realm_generator/test/good_test_data/asymmetric_object.expected +++ b/packages/realm_generator/test/good_test_data/asymmetric_object.expected @@ -11,15 +11,15 @@ class Asymmetric extends _Asymmetric with RealmEntity, RealmObjectBase, RealmObject { Asymmetric( ObjectId id, { + Iterable children = const [], Embedded? father, Embedded? mother, - Iterable children = const [], }) { RealmObjectBase.set(this, '_id', id); - RealmObjectBase.set(this, 'father', father); - RealmObjectBase.set(this, 'mother', mother); RealmObjectBase.set>( this, 'children', RealmList(children)); + RealmObjectBase.set(this, 'father', father); + RealmObjectBase.set(this, 'mother', mother); } Asymmetric._(); @@ -77,6 +77,7 @@ class Asymmetric extends _Asymmetric } => Asymmetric( fromEJson(id), + children: fromEJson(children), father: fromEJson(father), mother: fromEJson(mother), ), diff --git a/packages/realm_generator/test/good_test_data/binary_type.dart b/packages/realm_generator/test/good_test_data/binary_type.dart index 0eb0aeb31..b3da88386 100644 --- a/packages/realm_generator/test/good_test_data/binary_type.dart +++ b/packages/realm_generator/test/good_test_data/binary_type.dart @@ -7,6 +7,5 @@ part 'binary_type.realm.dart'; @RealmModel() class _Foo { late Uint8List requiredBinaryProp; - var defaultValueBinaryProp = Uint8List(8); late Uint8List? nullableBinaryProp; } diff --git a/packages/realm_generator/test/good_test_data/binary_type.expected b/packages/realm_generator/test/good_test_data/binary_type.expected index 12818f4f7..bec9648ee 100644 --- a/packages/realm_generator/test/good_test_data/binary_type.expected +++ b/packages/realm_generator/test/good_test_data/binary_type.expected @@ -10,12 +10,9 @@ part of 'binary_type.dart'; class Foo extends _Foo with RealmEntity, RealmObjectBase, RealmObject { Foo( Uint8List requiredBinaryProp, { - Uint8List? defaultValueBinaryProp, Uint8List? nullableBinaryProp, }) { RealmObjectBase.set(this, 'requiredBinaryProp', requiredBinaryProp); - RealmObjectBase.set( - this, 'defaultValueBinaryProp', defaultValueBinaryProp ?? Uint8List(8)); RealmObjectBase.set(this, 'nullableBinaryProp', nullableBinaryProp); } @@ -28,14 +25,6 @@ class Foo extends _Foo with RealmEntity, RealmObjectBase, RealmObject { set requiredBinaryProp(Uint8List value) => RealmObjectBase.set(this, 'requiredBinaryProp', value); - @override - Uint8List get defaultValueBinaryProp => - RealmObjectBase.get(this, 'defaultValueBinaryProp') - as Uint8List; - @override - set defaultValueBinaryProp(Uint8List value) => - RealmObjectBase.set(this, 'defaultValueBinaryProp', value); - @override Uint8List? get nullableBinaryProp => RealmObjectBase.get(this, 'nullableBinaryProp') as Uint8List?; @@ -53,7 +42,6 @@ class Foo extends _Foo with RealmEntity, RealmObjectBase, RealmObject { EJsonValue toEJson() { return { 'requiredBinaryProp': requiredBinaryProp.toEJson(), - 'defaultValueBinaryProp': defaultValueBinaryProp.toEJson(), 'nullableBinaryProp': nullableBinaryProp.toEJson(), }; } @@ -63,12 +51,10 @@ class Foo extends _Foo with RealmEntity, RealmObjectBase, RealmObject { return switch (ejson) { { 'requiredBinaryProp': EJsonValue requiredBinaryProp, - 'defaultValueBinaryProp': EJsonValue defaultValueBinaryProp, 'nullableBinaryProp': EJsonValue nullableBinaryProp, } => Foo( fromEJson(requiredBinaryProp), - defaultValueBinaryProp: fromEJson(defaultValueBinaryProp), nullableBinaryProp: fromEJson(nullableBinaryProp), ), _ => raiseInvalidEJson(ejson), @@ -80,7 +66,6 @@ class Foo extends _Foo with RealmEntity, RealmObjectBase, RealmObject { register(_toEJson, _fromEJson); return const SchemaObject(ObjectType.realmObject, Foo, 'Foo', [ SchemaProperty('requiredBinaryProp', RealmPropertyType.binary), - SchemaProperty('defaultValueBinaryProp', RealmPropertyType.binary), SchemaProperty('nullableBinaryProp', RealmPropertyType.binary, optional: true), ]); diff --git a/packages/realm_generator/test/good_test_data/embedded_annotations.expected b/packages/realm_generator/test/good_test_data/embedded_annotations.expected index 0c2bf60ff..4a1efee3f 100644 --- a/packages/realm_generator/test/good_test_data/embedded_annotations.expected +++ b/packages/realm_generator/test/good_test_data/embedded_annotations.expected @@ -56,6 +56,7 @@ class Parent extends _Parent with RealmEntity, RealmObjectBase, RealmObject { } => Parent( child: fromEJson(child), + children: fromEJson(children), ), _ => raiseInvalidEJson(ejson), }; diff --git a/packages/realm_generator/test/good_test_data/embedded_objects.expected b/packages/realm_generator/test/good_test_data/embedded_objects.expected index fee06000e..a70ce0e1f 100644 --- a/packages/realm_generator/test/good_test_data/embedded_objects.expected +++ b/packages/realm_generator/test/good_test_data/embedded_objects.expected @@ -55,6 +55,7 @@ class Parent extends _Parent with RealmEntity, RealmObjectBase, RealmObject { } => Parent( child: fromEJson(child), + children: fromEJson(children), ), _ => raiseInvalidEJson(ejson), }; @@ -76,14 +77,14 @@ class Child1 extends _Child1 with RealmEntity, RealmObjectBase, EmbeddedObject { Child1( String value, { Child2? child, - Parent? linkToParent, Iterable children = const [], + Parent? linkToParent, }) { RealmObjectBase.set(this, 'value', value); RealmObjectBase.set(this, 'child', child); - RealmObjectBase.set(this, 'linkToParent', linkToParent); RealmObjectBase.set>( this, 'children', RealmList(children)); + RealmObjectBase.set(this, 'linkToParent', linkToParent); } Child1._(); @@ -141,6 +142,7 @@ class Child1 extends _Child1 with RealmEntity, RealmObjectBase, EmbeddedObject { Child1( fromEJson(value), child: fromEJson(child), + children: fromEJson(children), linkToParent: fromEJson(linkToParent), ), _ => raiseInvalidEJson(ejson), diff --git a/packages/realm_generator/test/good_test_data/list_initialization.expected b/packages/realm_generator/test/good_test_data/list_initialization.expected index 9edcfccee..5430a4e2b 100644 --- a/packages/realm_generator/test/good_test_data/list_initialization.expected +++ b/packages/realm_generator/test/good_test_data/list_initialization.expected @@ -149,7 +149,18 @@ class Person extends _Person with RealmEntity, RealmObjectBase, RealmObject { 'initMapWithType': EJsonValue initMapWithType, 'initMapConst': EJsonValue initMapConst, } => - Person(), + Person( + children: fromEJson(children), + initList: fromEJson(initList), + initListWithType: fromEJson(initListWithType), + initListConst: fromEJson(initListConst), + initSet: fromEJson(initSet), + initSetWithType: fromEJson(initSetWithType), + initSetConst: fromEJson(initSetConst), + initMap: fromEJson(initMap), + initMapWithType: fromEJson(initMapWithType), + initMapConst: fromEJson(initMapConst), + ), _ => raiseInvalidEJson(ejson), }; } diff --git a/packages/realm_generator/test/good_test_data/map.expected b/packages/realm_generator/test/good_test_data/map.expected index ee0bebbe1..90fcd3436 100644 --- a/packages/realm_generator/test/good_test_data/map.expected +++ b/packages/realm_generator/test/good_test_data/map.expected @@ -158,7 +158,19 @@ class LotsOfMaps extends _LotsOfMaps 'binary': EJsonValue binary, 'uuids': EJsonValue uuids, } => - LotsOfMaps(), + LotsOfMaps( + persons: fromEJson(persons), + bools: fromEJson(bools), + dateTimes: fromEJson(dateTimes), + decimals: fromEJson(decimals), + doubles: fromEJson(doubles), + ints: fromEJson(ints), + objectIds: fromEJson(objectIds), + any: fromEJson(any), + strings: fromEJson(strings), + binary: fromEJson(binary), + uuids: fromEJson(uuids), + ), _ => raiseInvalidEJson(ejson), }; } diff --git a/packages/realm_generator/test/good_test_data/mapto.expected b/packages/realm_generator/test/good_test_data/mapto.expected index fa9998f32..3007bb42a 100644 --- a/packages/realm_generator/test/good_test_data/mapto.expected +++ b/packages/realm_generator/test/good_test_data/mapto.expected @@ -77,6 +77,7 @@ class Original extends $Original Original( primitiveProperty: fromEJson(primitiveProperty), objectProperty: fromEJson(objectProperty), + listProperty: fromEJson(listProperty), ), _ => raiseInvalidEJson(ejson), }; diff --git a/packages/realm_generator/test/good_test_data/realm_set.expected b/packages/realm_generator/test/good_test_data/realm_set.expected index f387b3bb5..86406c542 100644 --- a/packages/realm_generator/test/good_test_data/realm_set.expected +++ b/packages/realm_generator/test/good_test_data/realm_set.expected @@ -287,6 +287,22 @@ class RealmSets extends _RealmSets } => RealmSets( fromEJson(key), + boolSet: fromEJson(boolSet), + nullableBoolSet: fromEJson(nullableBoolSet), + intSet: fromEJson(intSet), + nullableintSet: fromEJson(nullableintSet), + stringSet: fromEJson(stringSet), + nullablestringSet: fromEJson(nullablestringSet), + doubleSet: fromEJson(doubleSet), + nullabledoubleSet: fromEJson(nullabledoubleSet), + dateTimeSet: fromEJson(dateTimeSet), + nullabledateTimeSet: fromEJson(nullabledateTimeSet), + objectIdSet: fromEJson(objectIdSet), + nullableobjectIdSet: fromEJson(nullableobjectIdSet), + uuidSet: fromEJson(uuidSet), + nullableuuidSet: fromEJson(nullableuuidSet), + realmValueSet: fromEJson(realmValueSet), + realmObjectsSet: fromEJson(realmObjectsSet), ), _ => raiseInvalidEJson(ejson), };