From 0bdd6af308ee66169a1e0235f4f73459d1bb9ae4 Mon Sep 17 00:00:00 2001 From: Desislava Stefanova Date: Thu, 10 Feb 2022 20:57:48 +0200 Subject: [PATCH 01/14] Samples updated not to require final for properties and primary keys --- example/bin/myapp.dart | 2 +- example/bin/myapp.g.dart | 13 ++----------- flutter/realm_flutter/example/lib/main.dart | 2 +- flutter/realm_flutter/example/lib/main.g.dart | 13 ++----------- test/realm_test.dart | 18 ++++++++---------- test/realm_test.g.dart | 16 ++++++++-------- 6 files changed, 22 insertions(+), 42 deletions(-) diff --git a/example/bin/myapp.dart b/example/bin/myapp.dart index f168a892d5..f94abc093b 100644 --- a/example/bin/myapp.dart +++ b/example/bin/myapp.dart @@ -4,7 +4,7 @@ part 'myapp.g.dart'; @RealmModel() class _Car { - late final String make; + late String make; String? model; int? kilometers = 500; _Person? owner; diff --git a/example/bin/myapp.g.dart b/example/bin/myapp.g.dart index 20c7f74cc1..d6e9cbb961 100644 --- a/example/bin/myapp.g.dart +++ b/example/bin/myapp.g.dart @@ -20,7 +20,7 @@ class Car extends _Car with RealmObject { 'kilometers': 500, }); } - RealmObject.set(this, 'make', make); + this.make = make; this.model = model; this.kilometers = kilometers; this.owner = owner; @@ -31,7 +31,7 @@ class Car extends _Car with RealmObject { @override String get make => RealmObject.get(this, 'make') as String; @override - set make(String value) => throw RealmUnsupportedSetError(); + set make(String value) => RealmObject.set(this, 'make', value); @override String? get model => RealmObject.get(this, 'model') as String?; @@ -68,7 +68,6 @@ class Person extends _Person with RealmObject { Person( String name, { int age = 1, - Iterable cars = const [], }) { if (!_defaultsSet) { _defaultsSet = RealmObject.setDefaults({ @@ -77,7 +76,6 @@ class Person extends _Person with RealmObject { } this.name = name; this.age = age; - RealmObject.set>(this, 'cars', cars.toList()); } Person._(); @@ -92,11 +90,6 @@ class Person extends _Person with RealmObject { @override set age(int value) => RealmObject.set(this, 'age', value); - @override - List get cars => RealmObject.get(this, 'cars') as List; - @override - set cars(covariant List value) => throw RealmUnsupportedSetError(); - static SchemaObject get schema => _schema ??= _initSchema(); static SchemaObject? _schema; static SchemaObject _initSchema() { @@ -104,8 +97,6 @@ class Person extends _Person with RealmObject { return const SchemaObject(Person, [ SchemaProperty('name', RealmPropertyType.string), SchemaProperty('age', RealmPropertyType.int), - SchemaProperty('cars', RealmPropertyType.object, - linkTarget: 'Car', collectionType: RealmCollectionType.list), ]); } } diff --git a/flutter/realm_flutter/example/lib/main.dart b/flutter/realm_flutter/example/lib/main.dart index 5f5e50471a..f1def99d31 100644 --- a/flutter/realm_flutter/example/lib/main.dart +++ b/flutter/realm_flutter/example/lib/main.dart @@ -26,7 +26,7 @@ part 'main.g.dart'; @RealmModel() class _Car { - late final String make; + late String make; String? model; int? kilometers = 500; _Person? owner; diff --git a/flutter/realm_flutter/example/lib/main.g.dart b/flutter/realm_flutter/example/lib/main.g.dart index 087a5860cb..d0ff0f01c9 100644 --- a/flutter/realm_flutter/example/lib/main.g.dart +++ b/flutter/realm_flutter/example/lib/main.g.dart @@ -20,7 +20,7 @@ class Car extends _Car with RealmObject { 'kilometers': 500, }); } - RealmObject.set(this, 'make', make); + this.make = make; this.model = model; this.kilometers = kilometers; this.owner = owner; @@ -31,7 +31,7 @@ class Car extends _Car with RealmObject { @override String get make => RealmObject.get(this, 'make') as String; @override - set make(String value) => throw RealmUnsupportedSetError(); + set make(String value) => RealmObject.set(this, 'make', value); @override String? get model => RealmObject.get(this, 'model') as String?; @@ -68,7 +68,6 @@ class Person extends _Person with RealmObject { Person( String name, { int age = 1, - Iterable cars = const [], }) { if (!_defaultsSet) { _defaultsSet = RealmObject.setDefaults({ @@ -77,7 +76,6 @@ class Person extends _Person with RealmObject { } this.name = name; this.age = age; - RealmObject.set>(this, 'cars', cars.toList()); } Person._(); @@ -92,11 +90,6 @@ class Person extends _Person with RealmObject { @override set age(int value) => RealmObject.set(this, 'age', value); - @override - List get cars => RealmObject.get(this, 'cars') as List; - @override - set cars(covariant List value) => throw RealmUnsupportedSetError(); - static SchemaObject get schema => _schema ??= _initSchema(); static SchemaObject? _schema; static SchemaObject _initSchema() { @@ -104,8 +97,6 @@ class Person extends _Person with RealmObject { return const SchemaObject(Person, [ SchemaProperty('name', RealmPropertyType.string), SchemaProperty('age', RealmPropertyType.int), - SchemaProperty('cars', RealmPropertyType.object, - linkTarget: 'Car', collectionType: RealmCollectionType.list), ]); } } diff --git a/test/realm_test.dart b/test/realm_test.dart index ac94bbcb9e..274a95303d 100644 --- a/test/realm_test.dart +++ b/test/realm_test.dart @@ -31,7 +31,7 @@ part 'realm_test.g.dart'; @RealmModel() class _Car { @PrimaryKey() - late final String make; + late String make; } @RealmModel() @@ -42,7 +42,7 @@ class _Person { @RealmModel() class _Dog { @PrimaryKey() - late final String name; + late String name; late int? age; @@ -59,7 +59,7 @@ class _Team { @RealmModel() class _Student { @PrimaryKey() - late final int number; + late int number; late String? name; late int? yearOfBirth; late _School? school; @@ -68,7 +68,7 @@ class _Student { @RealmModel() class _School { @PrimaryKey() - late final String name; + late String name; late String? city; final List<_Student> students = []; late _School? branchOfSchool; @@ -389,7 +389,7 @@ Future main([List? args]) async { realm.close(); }); - test('RealmObject set property', () { + test('RealmObject set Primary key property', () { var config = Configuration([Car.schema]); var realm = Realm(config); @@ -400,11 +400,9 @@ Future main([List? args]) async { expect(car.make, equals('Tesla')); - expect(() { - realm.write(() { - car.make = "Audi"; // setting late final is a runtime error :-/ - }); - }, throws()); + realm.write(() { + car.make = "Audi"; + }); realm.close(); }); diff --git a/test/realm_test.g.dart b/test/realm_test.g.dart index c2d8bc6be1..a149c3796c 100644 --- a/test/realm_test.g.dart +++ b/test/realm_test.g.dart @@ -10,7 +10,7 @@ class Car extends _Car with RealmObject { Car( String make, ) { - RealmObject.set(this, 'make', make); + this.make = make; } Car._(); @@ -18,7 +18,7 @@ class Car extends _Car with RealmObject { @override String get make => RealmObject.get(this, 'make') as String; @override - set make(String value) => throw RealmUnsupportedSetError(); + set make(String value) => RealmObject.set(this, 'make', value); static SchemaObject get schema => _schema ??= _initSchema(); static SchemaObject? _schema; @@ -60,7 +60,7 @@ class Dog extends _Dog with RealmObject { int? age, Person? owner, }) { - RealmObject.set(this, 'name', name); + this.name = name; this.age = age; this.owner = owner; } @@ -70,7 +70,7 @@ class Dog extends _Dog with RealmObject { @override String get name => RealmObject.get(this, 'name') as String; @override - set name(String value) => throw RealmUnsupportedSetError(); + set name(String value) => RealmObject.set(this, 'name', value); @override int? get age => RealmObject.get(this, 'age') as int?; @@ -145,7 +145,7 @@ class Student extends _Student with RealmObject { int? yearOfBirth, School? school, }) { - RealmObject.set(this, 'number', number); + this.number = number; this.name = name; this.yearOfBirth = yearOfBirth; this.school = school; @@ -156,7 +156,7 @@ class Student extends _Student with RealmObject { @override int get number => RealmObject.get(this, 'number') as int; @override - set number(int value) => throw RealmUnsupportedSetError(); + set number(int value) => RealmObject.set(this, 'number', value); @override String? get name => RealmObject.get(this, 'name') as String?; @@ -195,7 +195,7 @@ class School extends _School with RealmObject { Iterable students = const [], Iterable branches = const [], }) { - RealmObject.set(this, 'name', name); + this.name = name; this.city = city; this.branchOfSchool = branchOfSchool; RealmObject.set>(this, 'students', students.toList()); @@ -207,7 +207,7 @@ class School extends _School with RealmObject { @override String get name => RealmObject.get(this, 'name') as String; @override - set name(String value) => throw RealmUnsupportedSetError(); + set name(String value) => RealmObject.set(this, 'name', value); @override String? get city => RealmObject.get(this, 'city') as String?; From 1653865f636a9423a6b51784d02b16832240a9c3 Mon Sep 17 00:00:00 2001 From: blagoev Date: Fri, 11 Feb 2022 15:29:17 +0200 Subject: [PATCH 02/14] throw error on primary key set --- generator/lib/src/realm_field_info.dart | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/generator/lib/src/realm_field_info.dart b/generator/lib/src/realm_field_info.dart index 569bd7fb9d..0de1e26a4b 100644 --- a/generator/lib/src/realm_field_info.dart +++ b/generator/lib/src/realm_field_info.dart @@ -60,11 +60,13 @@ class RealmFieldInfo { Iterable toCode() sync* { yield '@override'; yield "$typeName get $name => RealmObject.get<$basicTypeName>(this, '$realmName') as $typeName;"; - if (!isFinal) { + bool generateSetter = !isFinal && !primaryKey; + if (generateSetter) { yield '@override'; yield "set $name(${typeName != typeModelName ? 'covariant ' : ''}$typeName value) => RealmObject.set(this, '$realmName', value);"; } else { - if (isLate) { // we still need to override setter on late final, but just throw error! + bool generateThrowError = isLate || primaryKey; + if (generateThrowError) { // we still need to override setter on late final, but just throw error! yield '@override'; yield "set $name(${typeName != typeModelName ? 'covariant ' : ''}$typeName value) => throw RealmUnsupportedSetError();"; } From 291f866a5b114f9d9ed8469c18dad5287bbd5a8d Mon Sep 17 00:00:00 2001 From: blagoev Date: Fri, 11 Feb 2022 16:00:05 +0200 Subject: [PATCH 03/14] relax final on collections fix tests --- .github/workflows/realm-generator.yml | 2 +- generator/lib/src/field_element_ex.dart | 9 --- generator/lib/src/realm_field_info.dart | 5 +- generator/test/generator_test.dart | 95 +++++++------------------ generator/test/good_test.dart | 2 +- 5 files changed, 32 insertions(+), 81 deletions(-) diff --git a/.github/workflows/realm-generator.yml b/.github/workflows/realm-generator.yml index d4ee0db2ba..01d1f099a0 100644 --- a/.github/workflows/realm-generator.yml +++ b/.github/workflows/realm-generator.yml @@ -19,7 +19,7 @@ jobs: strategy: matrix: - os: [ubuntu-latest, macos-latest] # windows is not tested ue to bug in how error messages are rendered + os: [ubuntu-latest, macos-latest] # windows is not tested due to bug in how error messages are rendered channel: [stable, beta] defaults: diff --git a/generator/lib/src/field_element_ex.dart b/generator/lib/src/field_element_ex.dart index 4d70d24b04..b7ff809667 100644 --- a/generator/lib/src/field_element_ex.dart +++ b/generator/lib/src/field_element_ex.dart @@ -185,15 +185,6 @@ extension FieldElementEx on FieldElement { } else { // Validate collections if (type.isRealmCollection) { - if (!isFinal) { - throw RealmInvalidGenerationSourceError( - 'Realm collection field must be final', - primarySpan: span, - primaryLabel: 'is not final', - todo: "Add a final keyword to the definition of '$displayName'", - element: this, - ); - } if (type.isNullable) { throw RealmInvalidGenerationSourceError( 'Realm collections cannot be nullable', diff --git a/generator/lib/src/realm_field_info.dart b/generator/lib/src/realm_field_info.dart index 0de1e26a4b..0d26a36ad0 100644 --- a/generator/lib/src/realm_field_info.dart +++ b/generator/lib/src/realm_field_info.dart @@ -41,6 +41,7 @@ class RealmFieldInfo { DartType get type => fieldElement.type; bool get isFinal => fieldElement.isFinal; + bool get isRealmCollection => fieldElement.type.isRealmCollection; bool get isLate => fieldElement.isLate; bool get hasDefaultValue => fieldElement.hasInitializer; bool get optional => type.isNullable; @@ -60,12 +61,12 @@ class RealmFieldInfo { Iterable toCode() sync* { yield '@override'; yield "$typeName get $name => RealmObject.get<$basicTypeName>(this, '$realmName') as $typeName;"; - bool generateSetter = !isFinal && !primaryKey; + bool generateSetter = !isFinal && !primaryKey && !isRealmCollection; if (generateSetter) { yield '@override'; yield "set $name(${typeName != typeModelName ? 'covariant ' : ''}$typeName value) => RealmObject.set(this, '$realmName', value);"; } else { - bool generateThrowError = isLate || primaryKey; + bool generateThrowError = isLate || primaryKey || isRealmCollection; if (generateThrowError) { // we still need to override setter on late final, but just throw error! yield '@override'; yield "set $name(${typeName != typeModelName ? 'covariant ' : ''}$typeName value) => throw RealmUnsupportedSetError();"; diff --git a/generator/test/generator_test.dart b/generator/test/generator_test.dart index a8cd2c6484..29c5a96595 100644 --- a/generator/test/generator_test.dart +++ b/generator/test/generator_test.dart @@ -78,7 +78,7 @@ class _Foo { @RealmModel() class _Bar { @PrimaryKey() - late final String id; + late String id; late bool aBool, another; var data = Uint8List(16); // late RealmAny any; // not supported yet @@ -91,9 +91,9 @@ class _Bar { // late Uuid uuid; // not supported yet @Ignored() var theMeaningOfEverything = 42; - final list = [0]; // list of ints with default value - // late final Set set; // not supported yet - // final map = {}; // not supported yet + list = [0]; // list of ints with default value + // late Set set; // not supported yet + // map = {}; // not supported yet @Indexed() String? anOptionalString; @@ -241,7 +241,7 @@ part 'test.g.dart'; class _Questionable { @PrimaryKey() @Indexed() - late final int primartKeysAreAlwaysIndexed; + late int primartKeysAreAlwaysIndexed; }''' }, reader: await PackageAssetReader.currentIsolate(), @@ -261,7 +261,7 @@ class _Questionable { ' ╷\n' '7 │ @PrimaryKey()\n' '8 │ @Indexed()\n' - '9 │ late final int primartKeysAreAlwaysIndexed;\n' + '9 │ late int primartKeysAreAlwaysIndexed;\n' ' │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n' ' ╵\n' 'Remove either the @Indexed or @PrimaryKey annotation from \'primartKeysAreAlwaysIndexed\'.\n' @@ -361,15 +361,15 @@ part 'test.g.dart'; @RealmModel() class _Bad { @PrimaryKey() - late final int first; + late int first; @PrimaryKey() - late final String second; + late String second; - late final String another; + late String another; @PrimaryKey() - late final String third; + late String third; } ''' }, @@ -386,15 +386,15 @@ class _Bad { '6 │ class _Bad {\n' ' │ ━━━━ in realm model for \'Bad\'\n' '7 │ @PrimaryKey()\n' - '8 │ late final int first;\n' + '8 │ late int first;\n' ' │ ━━━━━ \n' '... │\n' '10 │ @PrimaryKey()\n' - '11 │ late final String second;\n' + '11 │ late String second;\n' ' │ ^^^^^^ second primary key\n' '... │\n' '15 │ @PrimaryKey()\n' - '16 │ late final String third;\n' + '16 │ late String third;\n' ' │ ━━━━━ \n' ' ╵\n' 'Avoid duplicated @PrimaryKey() on fields \'first\', \'second\', \'third\'\n' @@ -531,7 +531,7 @@ class _Bad { @PrimaryKey() @MapTo('key') @PrimaryKey() - late final int id; + late int id; } ''' }, @@ -552,7 +552,7 @@ class _Bad { '... │\n' '9 │ @PrimaryKey()\n' ' │ ^^^^^^^^^^^^^ duplicated annotation\n' - '10 │ late final int id;\n' + '10 │ late int id;\n' ' ╵\n' 'Remove all duplicated @PrimaryKey() annotations.\n' '', @@ -575,7 +575,7 @@ class Base {} @RealmModel() class _Bad extends Base { @PrimaryKey() - late final int id; + late int id; } ''' }, @@ -609,7 +609,7 @@ part 'test.g.dart'; @RealmModel() class _Bad { @PrimaryKey() - late final int id; + late int id; _Bad(this.id); } @@ -637,47 +637,6 @@ class _Bad { ); }); - test('non-final list', () async { - await expectLater( - () async => await testBuilder( - generateRealmObjects(), - { - 'pkg|lib/src/test.dart': r''' -import 'package:realm_common/realm_common.dart'; - -part 'test.g.dart'; - -@RealmModel() -class _Bad { - @PrimaryKey() - late final int id; - - List wrong; -} -''' - }, - reader: await PackageAssetReader.currentIsolate(), - ), - throwsA(isA().having( - (e) => e.format(), - 'format()', - 'Realm collection field must be final\n' - '\n' - 'in: package:pkg/src/test.dart:10:13\n' - ' ╷\n' - '5 │ @RealmModel()\n' - '6 │ class _Bad { \n' - ' │ ━━━━ in realm model for \'Bad\'\n' - '... │\n' - '10 │ List wrong;\n' - ' │ ^^^^^ is not final\n' - ' ╵\n' - 'Add a final keyword to the definition of \'wrong\'\n' - '', - )), - ); - }); - test('nullable list', () async { await expectLater( () async => await testBuilder( @@ -691,9 +650,9 @@ part 'test.g.dart'; @RealmModel() class _Bad { @PrimaryKey() - late final int id; + late int id; - final List? wrong; + List? wrong; } ''' }, @@ -710,7 +669,7 @@ class _Bad { '6 │ class _Bad { \n' ' │ ━━━━ in realm model for \'Bad\'\n' '... │\n' - '10 │ final List? wrong;\n' + '10 │ List? wrong;\n' ' │ ^^^^^^^^^^ is nullable\n' ' ╵', )), @@ -733,10 +692,10 @@ class _Other {} @RealmModel() class _Bad { @PrimaryKey() - late final int id; + late int id; - final List okay; - final List<_Other?> wrong; + late List okay; + late List<_Other?> wrong; } ''' }, @@ -753,7 +712,7 @@ class _Bad { '9 │ class _Bad { \n' ' │ ━━━━ in realm model for \'Bad\'\n' '... │\n' - '14 │ final List<_Other?> wrong;\n' + '14 │ late List<_Other?> wrong;\n' ' │ ^^^^^^^^^^^^^ which has a nullable realm object element type\n' ' ╵\n' 'Ensure element type is non-nullable\n' @@ -778,7 +737,7 @@ class _Other {} @RealmModel() class _Bad { @PrimaryKey() - late final int id; + late int id; late _Other wrong; } @@ -945,7 +904,7 @@ part 'test.g.dart'; @MapTo('Bad') class _Foo { @PrimaryKey() - late final bool bad; + late bool bad; } ''' }, @@ -963,7 +922,7 @@ class _Foo { '7 │ class _Foo {\n' ' │ ━━━━ in realm model for \'Bad\'\n' '8 │ @PrimaryKey()\n' - '9 │ late final bool bad;\n' + '9 │ late bool bad;\n' ' │ ^^^^ bool is not an indexable type\n' ' ╵\n' 'Change the type of \'bad\', or remove the @PrimaryKey() annotation\n' diff --git a/generator/test/good_test.dart b/generator/test/good_test.dart index db307fac95..2b746418b8 100644 --- a/generator/test/good_test.dart +++ b/generator/test/good_test.dart @@ -70,7 +70,7 @@ part 'test.g.dart'; @RealmModel() class _Person { @PrimaryKey() - late final String name; + late String name; }''', }, outputs: { From 78fff517219de41cdfe4df8619e601517f918272 Mon Sep 17 00:00:00 2001 From: blagoev Date: Fri, 11 Feb 2022 17:16:45 +0200 Subject: [PATCH 04/14] fix setters in generated constructor to use RealmObject.set directly --- .github/workflows/realm-generator.yml | 2 +- generator/lib/src/realm_model_info.dart | 5 +---- generator/test/good_test.dart | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/realm-generator.yml b/.github/workflows/realm-generator.yml index 01d1f099a0..cb2d20ada9 100644 --- a/.github/workflows/realm-generator.yml +++ b/.github/workflows/realm-generator.yml @@ -14,7 +14,7 @@ on: - .github/workflows/realm-generator.yml jobs: - Generator_CI: + CI: runs-on: ${{ matrix.os }} strategy: diff --git a/generator/lib/src/realm_model_info.dart b/generator/lib/src/realm_model_info.dart index b2cd7ba574..76e6817f5d 100644 --- a/generator/lib/src/realm_model_info.dart +++ b/generator/lib/src/realm_model_info.dart @@ -65,10 +65,7 @@ class RealmModelInfo { } yield* allExceptCollections.map((f) { - if (f.isFinal) { - return "RealmObject.set(this, '${f.name}', ${f.name});"; // since no setter will be created! - } - return 'this.${f.name} = ${f.name};'; // defer to generated setter + return "RealmObject.set(this, '${f.name}', ${f.name});"; }); yield* collections.map((c) { diff --git a/generator/test/good_test.dart b/generator/test/good_test.dart index 2b746418b8..c24869160b 100644 --- a/generator/test/good_test.dart +++ b/generator/test/good_test.dart @@ -118,7 +118,7 @@ part 'test.g.dart'; @RealmModel() class _Person { - late final List<_Person> children; + late List<_Person> children; }''', }, outputs: { From d839bf7314c7095fe8c24affe937495a856fc008 Mon Sep 17 00:00:00 2001 From: blagoev Date: Fri, 11 Feb 2022 17:49:42 +0200 Subject: [PATCH 05/14] fix generator tests --- generator/test/generator_test.dart | 30 +++++++++++++++--------------- generator/test/good_test.dart | 6 +++--- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/generator/test/generator_test.dart b/generator/test/generator_test.dart index 29c5a96595..6b1882f852 100644 --- a/generator/test/generator_test.dart +++ b/generator/test/generator_test.dart @@ -33,7 +33,7 @@ class _Foo { ' \'x\': 0,\n' ' });\n' ' }\n' - ' this.x = x;\n' + ' RealmObject.set(this, \'x\', x);\n' ' }\n' '\n' ' Foo._();\n' @@ -91,9 +91,9 @@ class _Bar { // late Uuid uuid; // not supported yet @Ignored() var theMeaningOfEverything = 42; - list = [0]; // list of ints with default value + var list = [0]; // list of ints with default value // late Set set; // not supported yet - // map = {}; // not supported yet + // late map = {}; // not supported yet @Indexed() String? anOptionalString; @@ -257,12 +257,12 @@ class _Questionable { sb.toString(), '[INFO] testBuilder: Indexed is implied for a primary key\n' '\n' - 'in: package:pkg/src/test.dart:9:18\n' + 'in: package:pkg/src/test.dart:9:12\n' ' ╷\n' '7 │ @PrimaryKey()\n' '8 │ @Indexed()\n' '9 │ late int primartKeysAreAlwaysIndexed;\n' - ' │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n' + ' │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n' ' ╵\n' 'Remove either the @Indexed or @PrimaryKey annotation from \'primartKeysAreAlwaysIndexed\'.\n' '\n' @@ -380,22 +380,22 @@ class _Bad { 'format()', 'Duplicate primary keys\n' '\n' - 'in: package:pkg/src/test.dart:11:21\n' + 'in: package:pkg/src/test.dart:11:15\n' ' ╷\n' '5 │ @RealmModel()\n' '6 │ class _Bad {\n' ' │ ━━━━ in realm model for \'Bad\'\n' '7 │ @PrimaryKey()\n' '8 │ late int first;\n' - ' │ ━━━━━ \n' + ' │ ━━━━━ \n' '... │\n' '10 │ @PrimaryKey()\n' '11 │ late String second;\n' - ' │ ^^^^^^ second primary key\n' + ' │ ^^^^^^ second primary key\n' '... │\n' '15 │ @PrimaryKey()\n' '16 │ late String third;\n' - ' │ ━━━━━ \n' + ' │ ━━━━━ \n' ' ╵\n' 'Avoid duplicated @PrimaryKey() on fields \'first\', \'second\', \'third\'\n' '', @@ -663,14 +663,14 @@ class _Bad { 'format()', 'Realm collections cannot be nullable\n' '\n' - 'in: package:pkg/src/test.dart:10:9\n' + 'in: package:pkg/src/test.dart:10:3\n' ' ╷\n' '5 │ @RealmModel()\n' '6 │ class _Bad { \n' ' │ ━━━━ in realm model for \'Bad\'\n' '... │\n' '10 │ List? wrong;\n' - ' │ ^^^^^^^^^^ is nullable\n' + ' │ ^^^^^^^^^^ is nullable\n' ' ╵', )), ); @@ -706,14 +706,14 @@ class _Bad { 'format()', 'Nullable realm objects are not allowed in collections\n' '\n' - 'in: package:pkg/src/test.dart:14:9\n' + 'in: package:pkg/src/test.dart:14:8\n' ' ╷\n' '8 │ @RealmModel()\n' '9 │ class _Bad { \n' ' │ ━━━━ in realm model for \'Bad\'\n' '... │\n' '14 │ late List<_Other?> wrong;\n' - ' │ ^^^^^^^^^^^^^ which has a nullable realm object element type\n' + ' │ ^^^^^^^^^^^^^ which has a nullable realm object element type\n' ' ╵\n' 'Ensure element type is non-nullable\n' '', @@ -915,7 +915,7 @@ class _Foo { 'format()', 'Realm only support indexes on String, int, and bool fields\n' '\n' - 'in: package:pkg/src/test.dart:9:14\n' + 'in: package:pkg/src/test.dart:9:8\n' ' ╷\n' '5 │ @RealmModel()\n' '6 │ @MapTo(\'Bad\')\n' @@ -923,7 +923,7 @@ class _Foo { ' │ ━━━━ in realm model for \'Bad\'\n' '8 │ @PrimaryKey()\n' '9 │ late bool bad;\n' - ' │ ^^^^ bool is not an indexable type\n' + ' │ ^^^^ bool is not an indexable type\n' ' ╵\n' 'Change the type of \'bad\', or remove the @PrimaryKey() annotation\n' '', diff --git a/generator/test/good_test.dart b/generator/test/good_test.dart index c24869160b..354604cc42 100644 --- a/generator/test/good_test.dart +++ b/generator/test/good_test.dart @@ -33,7 +33,7 @@ class _Person { ' \'age\': 47,\n' ' });\n' ' }\n' - ' this.age = age;\n' + ' RealmObject.set(this, \'age\', age);\n' ' }\n' '\n' ' Person._();\n' @@ -181,7 +181,7 @@ class _Person { ' Person({\n' ' Person? spouse,\n' ' }) {\n' - ' this.spouse = spouse;\n' + ' RealmObject.set(this, \'spouse\', spouse);\n' ' }\n' '\n' ' Person._();\n' @@ -231,7 +231,7 @@ class _Person { ' Person(\n' ' String name,\n' ' ) {\n' - ' this.name = name;\n' + ' RealmObject.set(this, \'name\', name);\n' ' }\n' '\n' ' Person._();\n' From 01ea15f1188349a639a49779b81618195908ca98 Mon Sep 17 00:00:00 2001 From: blagoev Date: Fri, 11 Feb 2022 17:54:09 +0200 Subject: [PATCH 06/14] remove comment --- generator/lib/src/realm_field_info.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generator/lib/src/realm_field_info.dart b/generator/lib/src/realm_field_info.dart index 0d26a36ad0..06c48fd9a6 100644 --- a/generator/lib/src/realm_field_info.dart +++ b/generator/lib/src/realm_field_info.dart @@ -67,7 +67,7 @@ class RealmFieldInfo { yield "set $name(${typeName != typeModelName ? 'covariant ' : ''}$typeName value) => RealmObject.set(this, '$realmName', value);"; } else { bool generateThrowError = isLate || primaryKey || isRealmCollection; - if (generateThrowError) { // we still need to override setter on late final, but just throw error! + if (generateThrowError) { yield '@override'; yield "set $name(${typeName != typeModelName ? 'covariant ' : ''}$typeName value) => throw RealmUnsupportedSetError();"; } From 679f1e7f28de8f1adbe6b6ea64589fdde0d22ec7 Mon Sep 17 00:00:00 2001 From: blagoev Date: Fri, 11 Feb 2022 18:17:12 +0200 Subject: [PATCH 07/14] run realm_dart tests on generator change. test only on Linux --- .github/workflows/realm-dart-linux.yml | 8 ++------ .github/workflows/realm-generator.yml | 27 ++++++++++++++++++-------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/.github/workflows/realm-dart-linux.yml b/.github/workflows/realm-dart-linux.yml index 66d975bc41..2eb2b41caa 100644 --- a/.github/workflows/realm-dart-linux.yml +++ b/.github/workflows/realm-dart-linux.yml @@ -21,7 +21,7 @@ on: jobs: CI: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest env: REALM_CI: true @@ -37,14 +37,10 @@ jobs: - name: Build Realm Dart for Linux run: ./scripts/build-linux.sh - # Note: This workflow uses the latest stable version of the Dart SDK. - # You can specify other versions if desired, see documentation here: - # https://github.com/dart-lang/setup-dart/blob/main/README.md - # - uses: dart-lang/setup-dart@v1 - name : Setup Dart SDK uses: dart-lang/setup-dart@main with: - sdk: beta + sdk: stable - name: Install dependencies run: dart pub get diff --git a/.github/workflows/realm-generator.yml b/.github/workflows/realm-generator.yml index cb2d20ada9..10919538e4 100644 --- a/.github/workflows/realm-generator.yml +++ b/.github/workflows/realm-generator.yml @@ -15,12 +15,9 @@ on: jobs: CI: - runs-on: ${{ matrix.os }} - - strategy: - matrix: - os: [ubuntu-latest, macos-latest] # windows is not tested due to bug in how error messages are rendered - channel: [stable, beta] + runs-on: ubuntu-latest + env: + REALM_CI: true defaults: run: @@ -33,13 +30,27 @@ jobs: - name : Setup Dart SDK uses: dart-lang/setup-dart@main with: - sdk: ${{ matrix.channel }} + sdk: stable - name: Install dependencies run: dart pub get - name: Run generator tests - run: dart test --reporter expanded --coverage ./coverage/ + run: dart test --reporter expanded --coverage ./coverage/ --test-randomize-ordering-seed random + + - name: Run generator in realm-dart repo + run: | + find . -name "*.g.dart" -delete + dart run build_runner build --delete-conflicting-outputs + + - name: Setup Ninja + uses: seanmiddleditch/gha-setup-ninja@master + + - name: Build Realm Dart for Linux + run: ./scripts/build-linux.sh + + - name: Run realm_dart tests + run: dart test -r expanded --test-randomize-ordering-seed random - name: Generate generator coverage report run: | From 72e221d8c72a7de6047e324df788170adbc28906 Mon Sep 17 00:00:00 2001 From: blagoev Date: Fri, 11 Feb 2022 18:22:41 +0200 Subject: [PATCH 08/14] fix working directory --- .github/workflows/realm-generator.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/realm-generator.yml b/.github/workflows/realm-generator.yml index 10919538e4..d15953b784 100644 --- a/.github/workflows/realm-generator.yml +++ b/.github/workflows/realm-generator.yml @@ -19,10 +19,6 @@ jobs: env: REALM_CI: true - defaults: - run: - working-directory: ./generator/ - steps: - name: Checkout uses: actions/checkout@v2 @@ -32,11 +28,13 @@ jobs: with: sdk: stable - - name: Install dependencies + - name: Install generator dependencies run: dart pub get + working-directory: ./generator/ - name: Run generator tests run: dart test --reporter expanded --coverage ./coverage/ --test-randomize-ordering-seed random + working-directory: ./generator/ - name: Run generator in realm-dart repo run: | @@ -49,6 +47,9 @@ jobs: - name: Build Realm Dart for Linux run: ./scripts/build-linux.sh + - name: Install realm_dart dependencies + run: dart pub get + - name: Run realm_dart tests run: dart test -r expanded --test-randomize-ordering-seed random @@ -61,6 +62,7 @@ jobs: --lcov \ --packages .packages \ --report-on lib + working-directory: ./generator/ - name: Publish Generator Coverage id: publish-generator-coverage @@ -70,7 +72,9 @@ jobs: flag-name: realm_generator path-to-lcov: ./coverage/lcov.info continue-on-error: true + working-directory: ./generator/ - name: Output Coveralls response if: ${{ success() }} run: echo ${{ steps.publish-generator-coverage.outputs.coveralls-api-result }} + working-directory: ./generator/ From 7b968b848a8cb05480cdd9cc5261e320afdd8dbb Mon Sep 17 00:00:00 2001 From: blagoev Date: Fri, 11 Feb 2022 18:25:03 +0200 Subject: [PATCH 09/14] fix workflow --- .github/workflows/realm-generator.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/realm-generator.yml b/.github/workflows/realm-generator.yml index d15953b784..26f9ddf675 100644 --- a/.github/workflows/realm-generator.yml +++ b/.github/workflows/realm-generator.yml @@ -36,6 +36,9 @@ jobs: run: dart test --reporter expanded --coverage ./coverage/ --test-randomize-ordering-seed random working-directory: ./generator/ + - name: Install realm_dart dependencies + run: dart pub get + - name: Run generator in realm-dart repo run: | find . -name "*.g.dart" -delete @@ -47,9 +50,6 @@ jobs: - name: Build Realm Dart for Linux run: ./scripts/build-linux.sh - - name: Install realm_dart dependencies - run: dart pub get - - name: Run realm_dart tests run: dart test -r expanded --test-randomize-ordering-seed random From 0a1e753dcf7dbc7269eeac7c54a30085643d212f Mon Sep 17 00:00:00 2001 From: blagoev Date: Fri, 11 Feb 2022 18:28:10 +0200 Subject: [PATCH 10/14] fix coverage file path --- .github/workflows/realm-generator.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/realm-generator.yml b/.github/workflows/realm-generator.yml index 26f9ddf675..5568d06537 100644 --- a/.github/workflows/realm-generator.yml +++ b/.github/workflows/realm-generator.yml @@ -70,9 +70,8 @@ jobs: with: github-token: ${{ secrets.GITHUB_TOKEN }} flag-name: realm_generator - path-to-lcov: ./coverage/lcov.info + path-to-lcov: ./generator/coverage/lcov.info continue-on-error: true - working-directory: ./generator/ - name: Output Coveralls response if: ${{ success() }} From c4289f02b49fd7567e2d08f418587231ff280ee6 Mon Sep 17 00:00:00 2001 From: blagoev Date: Fri, 11 Feb 2022 18:31:05 +0200 Subject: [PATCH 11/14] get submodule --- .github/workflows/realm-generator.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/realm-generator.yml b/.github/workflows/realm-generator.yml index 5568d06537..a1f5f32f01 100644 --- a/.github/workflows/realm-generator.yml +++ b/.github/workflows/realm-generator.yml @@ -22,6 +22,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 + with: + submodules: 'recursive' - name : Setup Dart SDK uses: dart-lang/setup-dart@main From d374d8157c510110dfa6eebfaf671ce389b55d03 Mon Sep 17 00:00:00 2001 From: Desislava Stefanova Date: Thu, 10 Feb 2022 20:57:48 +0200 Subject: [PATCH 12/14] Samples updated not to require final for properties and primary keys --- example/bin/myapp.dart | 2 +- example/bin/myapp.g.dart | 13 ++----------- flutter/realm_flutter/example/lib/main.dart | 2 +- flutter/realm_flutter/example/lib/main.g.dart | 13 ++----------- test/realm_test.dart | 18 ++++++++---------- test/realm_test.g.dart | 16 ++++++++-------- 6 files changed, 22 insertions(+), 42 deletions(-) diff --git a/example/bin/myapp.dart b/example/bin/myapp.dart index f168a892d5..f94abc093b 100644 --- a/example/bin/myapp.dart +++ b/example/bin/myapp.dart @@ -4,7 +4,7 @@ part 'myapp.g.dart'; @RealmModel() class _Car { - late final String make; + late String make; String? model; int? kilometers = 500; _Person? owner; diff --git a/example/bin/myapp.g.dart b/example/bin/myapp.g.dart index 20c7f74cc1..d6e9cbb961 100644 --- a/example/bin/myapp.g.dart +++ b/example/bin/myapp.g.dart @@ -20,7 +20,7 @@ class Car extends _Car with RealmObject { 'kilometers': 500, }); } - RealmObject.set(this, 'make', make); + this.make = make; this.model = model; this.kilometers = kilometers; this.owner = owner; @@ -31,7 +31,7 @@ class Car extends _Car with RealmObject { @override String get make => RealmObject.get(this, 'make') as String; @override - set make(String value) => throw RealmUnsupportedSetError(); + set make(String value) => RealmObject.set(this, 'make', value); @override String? get model => RealmObject.get(this, 'model') as String?; @@ -68,7 +68,6 @@ class Person extends _Person with RealmObject { Person( String name, { int age = 1, - Iterable cars = const [], }) { if (!_defaultsSet) { _defaultsSet = RealmObject.setDefaults({ @@ -77,7 +76,6 @@ class Person extends _Person with RealmObject { } this.name = name; this.age = age; - RealmObject.set>(this, 'cars', cars.toList()); } Person._(); @@ -92,11 +90,6 @@ class Person extends _Person with RealmObject { @override set age(int value) => RealmObject.set(this, 'age', value); - @override - List get cars => RealmObject.get(this, 'cars') as List; - @override - set cars(covariant List value) => throw RealmUnsupportedSetError(); - static SchemaObject get schema => _schema ??= _initSchema(); static SchemaObject? _schema; static SchemaObject _initSchema() { @@ -104,8 +97,6 @@ class Person extends _Person with RealmObject { return const SchemaObject(Person, [ SchemaProperty('name', RealmPropertyType.string), SchemaProperty('age', RealmPropertyType.int), - SchemaProperty('cars', RealmPropertyType.object, - linkTarget: 'Car', collectionType: RealmCollectionType.list), ]); } } diff --git a/flutter/realm_flutter/example/lib/main.dart b/flutter/realm_flutter/example/lib/main.dart index 5f5e50471a..f1def99d31 100644 --- a/flutter/realm_flutter/example/lib/main.dart +++ b/flutter/realm_flutter/example/lib/main.dart @@ -26,7 +26,7 @@ part 'main.g.dart'; @RealmModel() class _Car { - late final String make; + late String make; String? model; int? kilometers = 500; _Person? owner; diff --git a/flutter/realm_flutter/example/lib/main.g.dart b/flutter/realm_flutter/example/lib/main.g.dart index 087a5860cb..d0ff0f01c9 100644 --- a/flutter/realm_flutter/example/lib/main.g.dart +++ b/flutter/realm_flutter/example/lib/main.g.dart @@ -20,7 +20,7 @@ class Car extends _Car with RealmObject { 'kilometers': 500, }); } - RealmObject.set(this, 'make', make); + this.make = make; this.model = model; this.kilometers = kilometers; this.owner = owner; @@ -31,7 +31,7 @@ class Car extends _Car with RealmObject { @override String get make => RealmObject.get(this, 'make') as String; @override - set make(String value) => throw RealmUnsupportedSetError(); + set make(String value) => RealmObject.set(this, 'make', value); @override String? get model => RealmObject.get(this, 'model') as String?; @@ -68,7 +68,6 @@ class Person extends _Person with RealmObject { Person( String name, { int age = 1, - Iterable cars = const [], }) { if (!_defaultsSet) { _defaultsSet = RealmObject.setDefaults({ @@ -77,7 +76,6 @@ class Person extends _Person with RealmObject { } this.name = name; this.age = age; - RealmObject.set>(this, 'cars', cars.toList()); } Person._(); @@ -92,11 +90,6 @@ class Person extends _Person with RealmObject { @override set age(int value) => RealmObject.set(this, 'age', value); - @override - List get cars => RealmObject.get(this, 'cars') as List; - @override - set cars(covariant List value) => throw RealmUnsupportedSetError(); - static SchemaObject get schema => _schema ??= _initSchema(); static SchemaObject? _schema; static SchemaObject _initSchema() { @@ -104,8 +97,6 @@ class Person extends _Person with RealmObject { return const SchemaObject(Person, [ SchemaProperty('name', RealmPropertyType.string), SchemaProperty('age', RealmPropertyType.int), - SchemaProperty('cars', RealmPropertyType.object, - linkTarget: 'Car', collectionType: RealmCollectionType.list), ]); } } diff --git a/test/realm_test.dart b/test/realm_test.dart index ac94bbcb9e..274a95303d 100644 --- a/test/realm_test.dart +++ b/test/realm_test.dart @@ -31,7 +31,7 @@ part 'realm_test.g.dart'; @RealmModel() class _Car { @PrimaryKey() - late final String make; + late String make; } @RealmModel() @@ -42,7 +42,7 @@ class _Person { @RealmModel() class _Dog { @PrimaryKey() - late final String name; + late String name; late int? age; @@ -59,7 +59,7 @@ class _Team { @RealmModel() class _Student { @PrimaryKey() - late final int number; + late int number; late String? name; late int? yearOfBirth; late _School? school; @@ -68,7 +68,7 @@ class _Student { @RealmModel() class _School { @PrimaryKey() - late final String name; + late String name; late String? city; final List<_Student> students = []; late _School? branchOfSchool; @@ -389,7 +389,7 @@ Future main([List? args]) async { realm.close(); }); - test('RealmObject set property', () { + test('RealmObject set Primary key property', () { var config = Configuration([Car.schema]); var realm = Realm(config); @@ -400,11 +400,9 @@ Future main([List? args]) async { expect(car.make, equals('Tesla')); - expect(() { - realm.write(() { - car.make = "Audi"; // setting late final is a runtime error :-/ - }); - }, throws()); + realm.write(() { + car.make = "Audi"; + }); realm.close(); }); diff --git a/test/realm_test.g.dart b/test/realm_test.g.dart index c2d8bc6be1..a149c3796c 100644 --- a/test/realm_test.g.dart +++ b/test/realm_test.g.dart @@ -10,7 +10,7 @@ class Car extends _Car with RealmObject { Car( String make, ) { - RealmObject.set(this, 'make', make); + this.make = make; } Car._(); @@ -18,7 +18,7 @@ class Car extends _Car with RealmObject { @override String get make => RealmObject.get(this, 'make') as String; @override - set make(String value) => throw RealmUnsupportedSetError(); + set make(String value) => RealmObject.set(this, 'make', value); static SchemaObject get schema => _schema ??= _initSchema(); static SchemaObject? _schema; @@ -60,7 +60,7 @@ class Dog extends _Dog with RealmObject { int? age, Person? owner, }) { - RealmObject.set(this, 'name', name); + this.name = name; this.age = age; this.owner = owner; } @@ -70,7 +70,7 @@ class Dog extends _Dog with RealmObject { @override String get name => RealmObject.get(this, 'name') as String; @override - set name(String value) => throw RealmUnsupportedSetError(); + set name(String value) => RealmObject.set(this, 'name', value); @override int? get age => RealmObject.get(this, 'age') as int?; @@ -145,7 +145,7 @@ class Student extends _Student with RealmObject { int? yearOfBirth, School? school, }) { - RealmObject.set(this, 'number', number); + this.number = number; this.name = name; this.yearOfBirth = yearOfBirth; this.school = school; @@ -156,7 +156,7 @@ class Student extends _Student with RealmObject { @override int get number => RealmObject.get(this, 'number') as int; @override - set number(int value) => throw RealmUnsupportedSetError(); + set number(int value) => RealmObject.set(this, 'number', value); @override String? get name => RealmObject.get(this, 'name') as String?; @@ -195,7 +195,7 @@ class School extends _School with RealmObject { Iterable students = const [], Iterable branches = const [], }) { - RealmObject.set(this, 'name', name); + this.name = name; this.city = city; this.branchOfSchool = branchOfSchool; RealmObject.set>(this, 'students', students.toList()); @@ -207,7 +207,7 @@ class School extends _School with RealmObject { @override String get name => RealmObject.get(this, 'name') as String; @override - set name(String value) => throw RealmUnsupportedSetError(); + set name(String value) => RealmObject.set(this, 'name', value); @override String? get city => RealmObject.get(this, 'city') as String?; From 8c240e43b05bee6712223a5588ff8e65d4e02ac6 Mon Sep 17 00:00:00 2001 From: Desislava Stefanova Date: Sat, 12 Feb 2022 00:48:45 +0200 Subject: [PATCH 13/14] Regenerated samples after fix "throwing error on primary key set" --- example/bin/myapp.g.dart | 12 +++--- flutter/realm_flutter/example/lib/main.g.dart | 12 +++--- test/realm_test.dart | 18 +++++---- test/realm_test.g.dart | 37 ++++++++++--------- 4 files changed, 42 insertions(+), 37 deletions(-) diff --git a/example/bin/myapp.g.dart b/example/bin/myapp.g.dart index d6e9cbb961..edfc7f3f1f 100644 --- a/example/bin/myapp.g.dart +++ b/example/bin/myapp.g.dart @@ -20,10 +20,10 @@ class Car extends _Car with RealmObject { 'kilometers': 500, }); } - this.make = make; - this.model = model; - this.kilometers = kilometers; - this.owner = owner; + RealmObject.set(this, 'make', make); + RealmObject.set(this, 'model', model); + RealmObject.set(this, 'kilometers', kilometers); + RealmObject.set(this, 'owner', owner); } Car._(); @@ -74,8 +74,8 @@ class Person extends _Person with RealmObject { 'age': 1, }); } - this.name = name; - this.age = age; + RealmObject.set(this, 'name', name); + RealmObject.set(this, 'age', age); } Person._(); diff --git a/flutter/realm_flutter/example/lib/main.g.dart b/flutter/realm_flutter/example/lib/main.g.dart index d0ff0f01c9..aabd078e7a 100644 --- a/flutter/realm_flutter/example/lib/main.g.dart +++ b/flutter/realm_flutter/example/lib/main.g.dart @@ -20,10 +20,10 @@ class Car extends _Car with RealmObject { 'kilometers': 500, }); } - this.make = make; - this.model = model; - this.kilometers = kilometers; - this.owner = owner; + RealmObject.set(this, 'make', make); + RealmObject.set(this, 'model', model); + RealmObject.set(this, 'kilometers', kilometers); + RealmObject.set(this, 'owner', owner); } Car._(); @@ -74,8 +74,8 @@ class Person extends _Person with RealmObject { 'age': 1, }); } - this.name = name; - this.age = age; + RealmObject.set(this, 'name', name); + RealmObject.set(this, 'age', age); } Person._(); diff --git a/test/realm_test.dart b/test/realm_test.dart index 274a95303d..f9b3902715 100644 --- a/test/realm_test.dart +++ b/test/realm_test.dart @@ -52,8 +52,8 @@ class _Dog { @RealmModel() class _Team { late String name; - late final List<_Person> players; - late final List scores; + late List<_Person> players; + late List scores; } @RealmModel() @@ -70,9 +70,9 @@ class _School { @PrimaryKey() late String name; late String? city; - final List<_Student> students = []; + List<_Student> students = []; late _School? branchOfSchool; - late final List<_School> branches; + late List<_School> branches; } String? testName; @@ -389,7 +389,7 @@ Future main([List? args]) async { realm.close(); }); - test('RealmObject set Primary key property', () { + test('RealmObject set property', () { var config = Configuration([Car.schema]); var realm = Realm(config); @@ -400,9 +400,11 @@ Future main([List? args]) async { expect(car.make, equals('Tesla')); - realm.write(() { - car.make = "Audi"; - }); + expect(() { + realm.write(() { + car.make = "Audi"; // setting primary key is a runtime error :-/ + }); + }, throws()); realm.close(); }); diff --git a/test/realm_test.g.dart b/test/realm_test.g.dart index a149c3796c..8e2b486afd 100644 --- a/test/realm_test.g.dart +++ b/test/realm_test.g.dart @@ -10,7 +10,7 @@ class Car extends _Car with RealmObject { Car( String make, ) { - this.make = make; + RealmObject.set(this, 'make', make); } Car._(); @@ -18,7 +18,7 @@ class Car extends _Car with RealmObject { @override String get make => RealmObject.get(this, 'make') as String; @override - set make(String value) => RealmObject.set(this, 'make', value); + set make(String value) => throw RealmUnsupportedSetError(); static SchemaObject get schema => _schema ??= _initSchema(); static SchemaObject? _schema; @@ -34,7 +34,7 @@ class Person extends _Person with RealmObject { Person( String name, ) { - this.name = name; + RealmObject.set(this, 'name', name); } Person._(); @@ -60,9 +60,9 @@ class Dog extends _Dog with RealmObject { int? age, Person? owner, }) { - this.name = name; - this.age = age; - this.owner = owner; + RealmObject.set(this, 'name', name); + RealmObject.set(this, 'age', age); + RealmObject.set(this, 'owner', owner); } Dog._(); @@ -70,7 +70,7 @@ class Dog extends _Dog with RealmObject { @override String get name => RealmObject.get(this, 'name') as String; @override - set name(String value) => RealmObject.set(this, 'name', value); + set name(String value) => throw RealmUnsupportedSetError(); @override int? get age => RealmObject.get(this, 'age') as int?; @@ -101,7 +101,7 @@ class Team extends _Team with RealmObject { Iterable players = const [], Iterable scores = const [], }) { - this.name = name; + RealmObject.set(this, 'name', name); RealmObject.set>(this, 'players', players.toList()); RealmObject.set>(this, 'scores', scores.toList()); } @@ -145,10 +145,10 @@ class Student extends _Student with RealmObject { int? yearOfBirth, School? school, }) { - this.number = number; - this.name = name; - this.yearOfBirth = yearOfBirth; - this.school = school; + RealmObject.set(this, 'number', number); + RealmObject.set(this, 'name', name); + RealmObject.set(this, 'yearOfBirth', yearOfBirth); + RealmObject.set(this, 'school', school); } Student._(); @@ -156,7 +156,7 @@ class Student extends _Student with RealmObject { @override int get number => RealmObject.get(this, 'number') as int; @override - set number(int value) => RealmObject.set(this, 'number', value); + set number(int value) => throw RealmUnsupportedSetError(); @override String? get name => RealmObject.get(this, 'name') as String?; @@ -195,9 +195,9 @@ class School extends _School with RealmObject { Iterable students = const [], Iterable branches = const [], }) { - this.name = name; - this.city = city; - this.branchOfSchool = branchOfSchool; + RealmObject.set(this, 'name', name); + RealmObject.set(this, 'city', city); + RealmObject.set(this, 'branchOfSchool', branchOfSchool); RealmObject.set>(this, 'students', students.toList()); RealmObject.set>(this, 'branches', branches.toList()); } @@ -207,7 +207,7 @@ class School extends _School with RealmObject { @override String get name => RealmObject.get(this, 'name') as String; @override - set name(String value) => RealmObject.set(this, 'name', value); + set name(String value) => throw RealmUnsupportedSetError(); @override String? get city => RealmObject.get(this, 'city') as String?; @@ -217,6 +217,9 @@ class School extends _School with RealmObject { @override List get students => RealmObject.get(this, 'students') as List; + @override + set students(covariant List value) => + throw RealmUnsupportedSetError(); @override School? get branchOfSchool => From 89b0725f6f6a77988774f34048d177c07e1851db Mon Sep 17 00:00:00 2001 From: Desislava Stefanova <95419820+desistefanova@users.noreply.github.com> Date: Mon, 14 Feb 2022 15:03:18 +0200 Subject: [PATCH 14/14] Update test/realm_test.dart Co-authored-by: blagoev --- test/realm_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/realm_test.dart b/test/realm_test.dart index f9b3902715..f3d4308882 100644 --- a/test/realm_test.dart +++ b/test/realm_test.dart @@ -402,7 +402,7 @@ Future main([List? args]) async { expect(() { realm.write(() { - car.make = "Audi"; // setting primary key is a runtime error :-/ + car.make = "Audi"; }); }, throws());