From 18c19a61c24b7f13a97b6ac2931fb11bca854d4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kasper=20Overg=C3=A5rd=20Nielsen?= Date: Wed, 17 Apr 2024 08:10:17 +0200 Subject: [PATCH] Allow private fields on models --- .../lib/src/field_element_ex.dart | 2 +- packages/realm_generator/pubspec.yaml | 1 + .../test/good_test_data/private_fields.dart | 11 +++ .../good_test_data/private_fields.expected | 82 +++++++++++++++++++ .../good_test_data/private_fields.realm.dart | 5 ++ 5 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 packages/realm_generator/test/good_test_data/private_fields.dart create mode 100644 packages/realm_generator/test/good_test_data/private_fields.expected create mode 100644 packages/realm_generator/test/good_test_data/private_fields.realm.dart diff --git a/packages/realm_generator/lib/src/field_element_ex.dart b/packages/realm_generator/lib/src/field_element_ex.dart index 85305b644..80ad5a800 100644 --- a/packages/realm_generator/lib/src/field_element_ex.dart +++ b/packages/realm_generator/lib/src/field_element_ex.dart @@ -69,7 +69,7 @@ extension FieldElementEx on FieldElement { return null; } - if (ignoredInfo != null || isPrivate) { + if (ignoredInfo != null) { // skip ignored and private fields return null; } diff --git a/packages/realm_generator/pubspec.yaml b/packages/realm_generator/pubspec.yaml index 72eb7acc0..5e03654a5 100644 --- a/packages/realm_generator/pubspec.yaml +++ b/packages/realm_generator/pubspec.yaml @@ -20,6 +20,7 @@ dependencies: realm_common: ^2.0.0 source_gen: ^1.1.0 source_span: ^1.8.0 + collection: ^1.18.0 dev_dependencies: build_runner: ^2.1.0 diff --git a/packages/realm_generator/test/good_test_data/private_fields.dart b/packages/realm_generator/test/good_test_data/private_fields.dart new file mode 100644 index 000000000..17e80800e --- /dev/null +++ b/packages/realm_generator/test/good_test_data/private_fields.dart @@ -0,0 +1,11 @@ +// ignore_for_file: unused_element, prefer_final_fields, unused_field + +import 'package:realm_common/realm_common.dart'; + +part 'private_fields.realm.dart'; + +@RealmModel() +class _WithPrivateFields { + late String _plain; + int _withDefault = 0; +} diff --git a/packages/realm_generator/test/good_test_data/private_fields.expected b/packages/realm_generator/test/good_test_data/private_fields.expected new file mode 100644 index 000000000..721813d27 --- /dev/null +++ b/packages/realm_generator/test/good_test_data/private_fields.expected @@ -0,0 +1,82 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'private_fields.dart'; + +// ************************************************************************** +// RealmObjectGenerator +// ************************************************************************** + +// ignore_for_file: type=lint +class WithPrivateFields extends _WithPrivateFields + with RealmEntity, RealmObjectBase, RealmObject { + static var _defaultsSet = false; + + WithPrivateFields( + String _plain, { + int _withDefault = 0, + }) { + if (!_defaultsSet) { + _defaultsSet = RealmObjectBase.setDefaults({ + '_withDefault': 0, + }); + } + RealmObjectBase.set(this, '_plain', _plain); + RealmObjectBase.set(this, '_withDefault', _withDefault); + } + + WithPrivateFields._(); + + @override + String get _plain => RealmObjectBase.get(this, '_plain') as String; + @override + set _plain(String value) => RealmObjectBase.set(this, '_plain', value); + + @override + int get _withDefault => RealmObjectBase.get(this, '_withDefault') as int; + @override + set _withDefault(int value) => + RealmObjectBase.set(this, '_withDefault', value); + + @override + Stream> get changes => + RealmObjectBase.getChanges(this); + + @override + WithPrivateFields freeze() => + RealmObjectBase.freezeObject(this); + + EJsonValue toEJson() { + return { + '_plain': _plain.toEJson(), + '_withDefault': _withDefault.toEJson(), + }; + } + + static EJsonValue _toEJson(WithPrivateFields value) => value.toEJson(); + static WithPrivateFields _fromEJson(EJsonValue ejson) { + return switch (ejson) { + { + '_plain': EJsonValue _plain, + '_withDefault': EJsonValue _withDefault, + } => + WithPrivateFields( + fromEJson(_plain), + _withDefault: fromEJson(_withDefault), + ), + _ => raiseInvalidEJson(ejson), + }; + } + + static final schema = () { + RealmObjectBase.registerFactory(WithPrivateFields._); + register(_toEJson, _fromEJson); + return SchemaObject( + ObjectType.realmObject, WithPrivateFields, 'WithPrivateFields', [ + SchemaProperty('_plain', RealmPropertyType.string), + SchemaProperty('_withDefault', RealmPropertyType.int), + ]); + }(); + + @override + SchemaObject get objectSchema => RealmObjectBase.getSchema(this) ?? schema; +} diff --git a/packages/realm_generator/test/good_test_data/private_fields.realm.dart b/packages/realm_generator/test/good_test_data/private_fields.realm.dart new file mode 100644 index 000000000..502678a0f --- /dev/null +++ b/packages/realm_generator/test/good_test_data/private_fields.realm.dart @@ -0,0 +1,5 @@ +// 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 'private_fields.dart';